github google/adk-python v2.11.0

2 hours ago

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_signal to Runner, Workflow, and nodes to stop a run gracefully; /run_sse now 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 an LlmAgent does, 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.json per request and no longer writes runtime-config.json into the installed package. If you edited or read that file, set the logo with --logo-text and --logo-image-url and 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)

Don't miss a new adk-python release

NewReleases is sending notifications on new releases.