2.11.0 (2026-10-01)
Highlights
This release adds graceful cancellation and tool confirmation to workflows, a tool for consulting another model mid-task, and a built-in SQLite memory service.
- Execution cancellation: Pass an
abort_signaltoRunner,Workflow, and nodes to stop a run gracefully;/run_ssenow cancels the run when the client disconnects. See the unit guide for more details. (ef5bbcf, 3d73603) - Tool confirmation in workflows: Tool nodes now pause for user approval via
RequestInput, the same way anLlmAgentdoes, instead of passing an error downstream. (ce132b9) - ModelConsultTool: Let an agent consult another model mid-task, capped by per-turn and per-session budgets. See the unit guide for more details. (84cc99a)
- SQLite memory service: Keep agent memory in a local SQLite database, selected with a
sqlite://memory service URI. (9625b06) - MCP SDK 2.x: Connect to MCP servers over the modern protocol through a new opt-in path. (e738c26)
Breaking changes
- Dev UI runtime config is served by the server: The web server now serves
/dev-ui/assets/config/runtime-config.jsonper request and no longer writesruntime-config.jsoninto the installed package. If you edited or read that file, set the logo with--logo-textand--logo-image-urland fetch the config from the server instead. (3722746)
All changes
⚠ BREAKING CHANGES
- serve the dev UI runtime config from the server instead of a file
Features
- add a sample preloading memory profiles into the instruction (fdf1b7f)
- add avatar configuration to server commands (e4c0d94), closes #5435
- add max llm calls to server commands (14f4154), closes #5434
- add optional abort_signal support to Runner, Workflow, and Nodes (ef5bbcf), closes #4796
- add pagination to list_accessible_data_agents in data_agent toolset (46d5a2d)
- add sqlite memory service (9625b06)
- add the model consult session context handover layer (b2da4c6)
- cli: wire abort_signal to /run_sse on client disconnect (3d73603)
- default Vertex project from GCP metadata (8d8bbd2)
- events: add internal metadata for ADK events (8e29f16)
- honor tool_thread_pool_config for sync tools outside live mode (c50ade3)
- let BigQuery tools run where CMEK is required (4d06641), closes #3931
- live: default to a pre-built avatar for VIDEO live sessions (d5c9b11)
- mark spans whose response came from a callback (9633ab9)
- mcp: add an opt-in modern-protocol connect path for MCP SDK 2.x (e738c26)
- plugins: add optional ToolCallIntegrityPlugin (b7efc4e)
- propagate grounding metadata from MCP _meta (0960104), closes #6081
- skip init.py for config-based adk create (d594b69), closes #6753
- synthesize abort event and function response on cancellation (da65851)
- telemetry: move skill telemetry span attributes out of experimental (e0f4c97)
- tools: add ModelConsultTool with turn and session budgets (84cc99a)
- tools: invoke advisor models without tools for model_consult (28c47b5)
- workflow: pause tool nodes for tool confirmation via RequestInput (ce132b9)
- workflow: propagate skip_summarization from node tools to tool response (5a0421c)
- workflow: run plugin tool callbacks around ToolNode calls (cfeece9)
Bug Fixes
- accept a client factory written against either httpx major (438c3eb)
- accept dotted registry ids in GCPSkillRegistry (cbbdec3), closes #7136
- antigravity: extract real execution output for built-in tool steps (3fd932d)
- artifacts: return None for negative versions in InMemoryArtifactService (6193957)
- cancel the in-flight tool call when the caller is cancelled (f0dd560)
- classify plugin output before persisting events (044a1ec), closes #7184
- detect a dead MCP session whose transport sits behind a dispatcher (8632980)
- drop stale replies to superseded tool updates (fdca5e7)
- drop unpairable trailing FRs in rearrange (643df96), closes #6751
- eval: skip content-less events when mapping Vertex multi-turn turns (fd2ca87)
- flows: detect thought-only and whitespace turns as empty content (dea8110)
- follow redirects when downloading skills in GcpSkillRegistry (fd14aec)
- install greenlet with the db extra and name it when missing (ffc2494)
- isolate and clean up single_turn LlmAgent node_input events (6f30039), closes #7227
- keep credential-request events out of the compaction prompt (b562ef4)
- keep default credentials out of pickled AgentRegistry toolsets (345a1a8)
- keep identical streamed function calls that have no model-provided id (46b22e4)
- live: only cache audio blobs in the live input realtime cache (b627a15)
- load validated MCP toolsets under adk web (f44d512), closes #6735
- look up padded session ids the same way create_session stores them (eef75de), closes #6941
- make conformance runs report replay and recording failures (5355c7c)
- only apply --avatar_config to live sessions requesting video (4d241bf)
- persist sibling tool results before a tool confirmation request (67d3e49), closes #6732
- plugins: let tools run as workflow nodes under ToolCallIntegrityPlugin (b057697)
- plugins: record content_formatter failure class in error_message (e5a24b6)
- preserve single-turn structured output (6b96ba1), closes #6089
- prevent improper merging of parallel streaming function calls (cacf92a)
- propagate url_prefix to FastAPI root_path (2daa303), closes #7070
- refresh the access token in the BigQuery MCP sample (9a33588), closes #7217
- reject RestApiTool path params with "." or ".." segments (6f3aabe), closes #7065
- render Jinja2 instructions in a sandbox and expose a read-only state mapping (0e19550)
- replay a parallel tool call that never ran when a sibling answered (7298e09), closes #7108
- report the events the SQLite migration actually migrated (31e5358), closes #7298
- resolve Agent Registry MCP bindings for the deployed agent at runtime (9115d61)
- resume a remote A2A agent when a human answers its relayed pause (caf2356), closes #6721
- run BigQuery tools off the event loop via BigQueryToolset async adapter (497b65b), closes #7160
- runner: collect and close toolsets from Workflow graph nodes in Runner.close() (6fbb22b)
- runners: safely skip non-BaseNode instances in _collect_toolset (018c41c)
- sessions: disable pool reset on return for StaticPool in DatabaseSessionService (74bb82b)
- sessions: let any colon-prefixed key bypass state_schema validation again (6e1ec09)
- stamp Redis sessions with the event timestamp (def458b), closes #7292
- stop live session teardown hanging and lazy-load the auth transport (41bebdc)
- stop RemoteA2aAgent failing on a2a-sdk 0.3.4 to 0.3.10 (5b079ee)
- stop update_time onupdate from overriding explicit writes (aec7c0a), closes #7276
- tools: apply the load_web_page SSRF checks on the proxy path (d7a7c3c)
- tools: package model_consult advisor prompt as a single user content block (ecb429c)
- tools: stop marking every NodeTool as long-running (0478224)
- tools: surface NodeTool failures to on_tool_error and return dict validation errors (b4c5272)
- treat inbound new_message in Runner.run_async as a user turn (15ec279)
- workflow: keep outputs of sibling nodes that finished in the same tick as a failing node (2c759e9)
- workflow: run ToolNode tools with the node context so deltas are emitted (cffc967)
Documentation
- add known issues for A2A workflow output schema and serialization (f7967c3)
- add unit guide for Node and
@node(3e59f4d) - document execution cancellation, node tool direct output, and span provenance (76af4b0)
- explain local lockfile needed by tox in adk-setup skill (96319fc)
- explain why live audio is not flushed on generation_complete (dcd5d76)
- fix to_a2a import so the task mode sample runs (e6bdb4d)
- runners: add developer guide for execution cancellation (4e48bb0)
- tools: add ModelConsultTool developer guide and sample agent (89ebdec)