This week's framework changes share a theme: some failures look like success. A workflow finishes cleanly but has skipped work. A cancelled run keeps executing a tool. These are harder to catch than crashes because nothing reports an error.
ADK Python: a loop that stopped after one pass
A commit to Google's ADK Python on October 29, 2026 fixes a JoinNode inside a loop. If one of its predecessors sat outside the loop, such as a setup step that runs once, the join fired in the first iteration and cleared the arrivals of all its predecessors. In the next iteration it waited for the setup step to run again, which never happened. In the commit's words, the workflow "then finished without an error and without running the rest of the loop".
The fix clears only the arrivals of predecessors inside the loop. A join outside any loop behaves as before. The commit is candid about a remaining limit: reachability follows every edge, including routes never taken, so a join in an inner loop that can reach a setup step through an outer loop "still stops after the first iteration, as before". The JoinNode guide documents this.
llama.cpp 0.8.0: realtime audio on a local server
llama.cpp v0.8.0, released October 28, adds the LiquidAI LFM3 family, including audio and omni models that do speech recognition, text-to-speech and voice chat from one model. The server gains a /v1/realtime endpoint "implementing the OpenAI realtime protocol for conversation and transcription" and a POST /tts endpoint. The streaming audio API is marked experimental. One change can break scripts: the CLI now requires --model or -hf. The chat API also gains support for deferred tools and tool_reference content parts. Ollama v0.40.13, released the same day, brings LFM3, including its text-to-speech variants, to Linux and Windows.
Gemini CLI 0.67 preview: stopping means stopping
The Gemini CLI v0.67.0 preview, published October 27, includes fixes that "handle termination signals and prevent tool execution after cancellation in non-interactive mode" (#29849) and that stop continuation stream processing after a request is cancelled (#29868). For editor clients using the Agent Client Protocol, permission requests now include MCP server and tool metadata (#29910), so a user can see which server a tool comes from before approving it. Another fix scopes untrusted-flag checks to external output and remembers approved flags (#29833).
CrewAI 1.15.33
CrewAI 1.15.33, released October 29, adds crewai skill search and reports token usage for LiteLLM tool-call and structured-output calls. It also saves checkpoint callbacks that cannot be restored as null instead of breaking the restore.
What remains uncertain. The ADK fix is a commit on the main branch, not yet in a tagged release. The Gemini CLI fixes are in a preview. llama.cpp's realtime endpoint covers the OpenAI protocol as llama.cpp implements it, and compatibility with every client is not documented.
Analysis: The ADK bug is a useful test to copy. Build a loop with one setup step outside it, run three iterations, and assert that the step inside the loop ran three times. A workflow for Belgavi's Book Store that checks each returned book in a batch would have looked finished after the first book. A run that reports success is not evidence that all the work happened. Count the work, not the exit code.
Sources and evidence
- fix(workflow): keep JoinNode in a loop firing after the first iteration (google/adk-python, October 29)
- llama.cpp v0.8.0 release notes (GitHub, October 28)
- Ollama v0.40.13 release notes (GitHub, October 28)
- Gemini CLI v0.67.0-preview.0 release notes (GitHub, October 27)
- CrewAI 1.15.33 release notes (GitHub, October 29)
An October 29 ADK Python commit fixes a JoinNode in a loop that, when a predecessor sat outside the loop, stopped after one iteration and let the workflow finish without error; a documented limit remains. llama.cpp 0.8.0 (October 28) adds a /v1/realtime endpoint and POST /tts and now requires --model or -hf, and the Gemini CLI 0.67 preview stops tool execution after cancellation and adds MCP metadata to ACP permission requests.