Releases: google/adk-python
Release list
v2.9.1
2.9.1 (2026-09-15)
Highlights
This release focuses on improving visibility into model reasoning steps when utilizing Claude's adaptive thinking capabilities.
- Claude Integration: Access the step-by-step reasoning process of Claude models by ensuring visible thoughts are requested during adaptive thinking tasks. (ba0d542)
Bug Fixes
- request visible thoughts for Claude adaptive thinking (ba0d542)
v2.9.0
Changelog
2.9.0 (2026-09-10)
Highlights
This release focuses on agent resilience and ecosystem integration by introducing automatic model failover, native voice support via LiveKit, and compatibility with MCP SDK 2.x.
- Models: Safeguard agent uptime by automatically failing over to backup models when the primary model encounters errors. (c300b8d)
- Integrations: Build rich voice and telephony agents using the newly added LiveKit runner. (f277d91)
- Workflows: Simplify graph workflow management by authoring and loading ADK 2.0 graphs directly from declarative YAML configurations. (2a9461b)
- MCP: Work with MCP SDK 2.x servers as well as 1.x. Installs continue to resolve 1.x by default; install 2.x deliberately to opt in. (856acf2)
Breaking changes
- Workflow node resumption: A node that failed now runs again when the workflow resumes, where before it replayed as though it had completed. Make node bodies idempotent: a node that performs an external side effect and then fails will perform that side effect again on every resume.
- GCS tool local paths: The GCS tools now read and write local files only inside the directory named by
local_file_root, and refuse local file access entirely when that setting is absent. Paths may be absolute or relative, and are judged by where they resolve. - In-memory sessions only:
InMemorySessionServicenow raisesSessionNotFoundErrorwhen an event is appended to a session it does not hold, instead of accepting the event and discarding it. The database-backed services already behaved this way, so this affects in-memory sessions alone.
Two further changes are marked breaking in the commit log but do not affect a
default installation. Nested workflow retry changes behavior only for a node
that already sets retry_config. The MCP SDK 2.x field handling applies only if
you install MCP 2.x deliberately, which this release does not resolve to.
All changes
⚠ BREAKING CHANGES
- retry a nested workflow when a node inside it fails
- confine GCS tool local file paths to a configured root
- rerun a failed node on resume instead of replaying it as complete
- raise SessionNotFoundError when appending to an unknown session
- mcp: under MCP SDK 2.x, fields a server sends that the SDK does not declare no longer reach the caller. 2.x closed its models, so an unknown key on a
CallToolResult, or on a tool declaration read viaraw_mcp_tool, is discarded during validation before ADK sees it._metais unaffected: it is a declared field and still arrives. Nothing in ADK can restore the others; a server that relies on vendor extensions should move them under_meta. On 1.x they still arrive as before.
Features
- add a2a_state_forwarding sample (1b28de4)
- add FallbackModel for automatic failover between models (c300b8d)
- add get_authenticated_url and get_signed_url to GcsArtifactService (10ac52b)
- add ignore_args option to tool trajectory evaluation (e2a213f)
- add transfer_reason to transfer_to_agent to prevent loops (22ab4d8)
- agent evaluations print detailed results when all tests pass (e1ae543), closes #3891
- generalize docker build and run for multicloud environments (0673f05)
- integrations: add LiveKit runner for voice and telephony (f277d91)
- load ADK 2.0 graph workflows from YAML configuration (2a9461b)
- mcp: support MCP SDK 2.x alongside 1.x (856acf2)
- support hyphenated column names in BigQuery tools (b736b0d)
- telemetry: add ability to track skill loads (0cd24c8)
- telemetry: add script execution instrumentation (0dbc37d)
- telemetry: export logs over OTLP to telemetry.googleapis.com (5e6df42)
- tools: support FunctionNode auto-inference in NodeTool (ea8609d)
Bug Fixes
- a2a: quote a fetched card description and drop relayed auth responses (7ee3ae9)
- a2a: require https for a non-loopback agent card URL (fe30ebb)
- a2a: stop a completed task delegation breaking later peer delegations (04be48b), closes #6831
- add optional OIDC verification for Pub/Sub and Eventarc triggers (73d9fe0)
- append the user's next turn when it joins a paused task (678d7e9)
- apply state_delta when resuming without a new_message (6de43b0), closes #6644
- artifacts: give concurrent gcs artifact saves distinct versions (0a12027)
- auth: declare that AuthHandler.generate_auth_uri can return None (e4c8994)
- balance callback lifecycle for hallucinated tool calls (f842a15), closes #4775
- bigquery: lazy-load Dataplex so BigQueryToolset imports without it (b65be01)
- callables: extract unified CallableSpec and resolve doc and unwrap edge cases (c506ddf)
- cancel the invocation when a sync run() generator is closed early (080d5e7)
- cli: explicitly set memory_service_uri='memory://' when --in_memory is passed (b0bb3dd)
- cli: make the decorators on API and dev server routes take effect (308cc32)
- cli: sync the Agent Engine class-method catalogue with its source (0043044)
- close a task-mode delegation when the remote agent finishes (4cd8aa4)
- coerce an integral float back to int for an int-typed tool parameter (adbee3c)
- coerce callable AgentInfo.instruction for app-info (ada8652), closes #6909
- default AgentCardBuilder capabilities to streaming=True (b018062), closes #6672
- defer local state/event mutation until Vertex append succeeds (903f37f), closes #6998
- end a live session when the client closes the request queue, instead of reconnecting or busy-waiting (07b1173)
- end tool callback chains on the first non-None result (895b6f2)
- environment: terminate the whole process tree when a local command times out (fa321f1)
- fail a workflow when a detached dynamic node errors or interrupts ([34e13df](https:/...
v1.39.1
1.39.1 (2026-08-27)
Bug Fixes
- a2a: Port event action allowlist, agent card description source and resume flattening to v1 (#6801) (1f898a6)
- artifacts: Port app-scoped file artifact storage and layout-derived payload paths to v1 (#6795) (0ae2bff)
- artifacts: Port artifact reference scoping and path-segment validation to v1 (#6794) (efc5bb8)
- cli: check the Host header on every local API server request (v1) (#6789) (15bf230)
- cli: Port deploy ignore-file handling to v1 (#6793) (8467bf0)
- close the residual gaps from the v1 backport review (#6890) (218061e)
- integrations: send api registry credentials only to google api endpoints (v1) (#6889) (1e9e117)
- mcp: Port config stdio opt-in and reserved tool name checks to v1 (#6796) (28b32b4)
- models: Port Gemini context cache fingerprint scoping to v1 (#6804) (f2f8456)
- plugins: sanitize BigQuery analytics rows and build GCS paths per call (v1) (#6808) (80e56de)
- Port A2A agent card RPC target origin validation to v1 (#6800) (ccb4812)
- Port agent loader and file path resolution fixes to v1 (#6788) (8bc927f)
- Port agent-config code-reference and config_path validation to v1 (#6790) (15ae713)
- Port branch-scoped auth responses and OAuth2 nonce forwarding to v1 (#6803) (5817d30)
- Port code executor container and pod isolation defaults to v1 (#6807) (1b4da44)
- Port credential and inline-data field exclusions in logs, reprs and spans to v1 (#6797) (7c2075c)
- Port eval identifier validation and persona template rendering to v1 (#6806) (0a4a5c6)
- Port migration unpickle allowlist and database URL redaction to v1 (#6791) (6deda28)
- Port session id validation, thread id scoping and Vertex RAG cleanup fixes to v1 (#6809) (3fec8c5)
- Port skill resource path and skill name validation fixes to v1 (#6805) (1353e8d)
- Port URL validation, client timeout and credential scoping fixes to v1 (#6802) (7b6547f)
- Route thread-pool and live-mode tool dispatch through run_async (v1) (#6799) (48c56c3)
- Scope custom eval metrics per registry and resolve their function path from the eval config (v1) (#6792) (9886410)
- sessions: accept a full session resource name again on v1 (#6888) (ef4f1e0)
- Validate user message parts and agent transfer targets (v1) (#6798) (d830355)
v2.8.0
2.8.0 (2026-08-25)
Features
- a2a: add native task mode support to RemoteA2aAgent (72f3ff5)
- add ADK_MAX_LLM_CALLS environment variable to configure max LLM calls limit (75679db)
- add create_data_agent tool to data_agent toolset (5cd38a0)
- add delete_data_agent tool to data_agent toolset (9b451fc)
- add location parameter to list_accessible_data_agents in data_agent toolset (393ec08)
- add Model Armor guardrail plugin (11efc3f)
- add nvidia nim integration sample (c6bba8d)
- add sample for skill state injection via adk_inject_state (9384127)
- add spreadsheet mime types to load_artifact_tool (370027a)
- add update_data_agent tool to data_agent toolset (92d00aa)
- allow configuring Vertex AI API version (ede87c2), closes #3246
- allow streaming tools to set response scheduling per yield (bf2efd7)
- antigravity: capture client-side tool outcomes for a function_response (4599a52)
- cli: Support Cloud Build worker pools for Agent Engine deploy (e577c30)
- eval: support custom metrics in AgentEvaluator (babb11c)
- guard against SQL injection vulnerabilities in BigQuery tools (d6290a0)
- live: Add VIDEO to the allowed modalities in the ADK API server (dd998a7)
- live: let a live streaming tool send messages to the user directly (98896eb)
- live: run before and after model callbacks in live mode (ef2d680)
- live: surface live
interaction_statuson LlmResponse and Event (b858904) - live: use RunConfig.session_resumption.handle when opening a live session (eac32c3)
- mcp: report MCP HTTP exchanges as OpenTelemetry log records (85a6fa1)
- parallelize LLM-as-judge evaluation using asyncio.gather() (0dbb88c)
- preserve field descriptions in set_model_response schema (a30858b), closes #6707
- record context cache state on the LLM call span (c0614d6)
- resolve auth for RemoteA2aAgent in AgentRegistry (d695494)
- support auth_scheme and auth_credential in RemoteA2aAgent (d42c634)
- support injecting custom LLM clients into Gemini and AnthropicLlm (a01d516), closes #5027
- support memory_id and allowed_topics in Vertex Memory Bank (bf73360)
- support opt-in session retention in MultimodalToolResultsPlugin (775c1bd), closes #6695
- support sub-agent escalation event in ParallelAgent (0fd681e), closes #5104
Telemetry
- telemetry: add per-invocation token spend metrics for invoke_agent (dc00db5)
- telemetry: add per-workflow inference and tool call counts (6e6c4a5)
- telemetry: add per-workflow token spend metrics (dd8797e)
- telemetry: Expand telemetry for
load_skill_resourcespan (6e0facf) - telemetry: honor RunConfig.telemetry at the runner's invocation span (00fc6eb)
Note: new experimental telemetry feature for token usage per agent invocation and per workflow, inference and tool call counts per workflow, and expanded load_skill attributes. Off by default, opt in with ADK_EXPERIMENTAL_TELEMETRY=true or RunConfig.telemetry.adk_experimental_telemetry_opt_in=True.
Bug Fixes
- a2a: keep file payloads out of the debug log line (ef158d3)
- agents: report which toolset an agent lost when one fails to load (66930e6)
- artifacts: Publish file artifact versions atomically (94475c9)
- auth: take the auth scheme from the request, not the client's response (8989aea)
- avoid O(n^2) deep event comparison during rehydration (b8dd086), closes #6657
- block yaml and ruamel deserialization in agent-config code references (924d802)
- cache read write token counts in LiteLLM and Anthropic models (d0b33a0), closes #5835
- check every function response, not just the first, when inferring which invocation to resume (5449314)
- cli: clean up pytest subprocesses on test-client disconnect (a84a4b5)
- cli: Preserve non-ASCII text in
adk test --rebuild, Web UI test saving, and CLI JSONL (dc735bd) - cli: report env var names instead of values when overriding env_vars (b0c599f)
- count tool call and response chars in compaction (66908e4)
- declare a2a-sdk[http-server] so the a2a extra can serve (65234e7)
- deduplicate events in InMemorySessionService.append_event (4d74774), closes #5723
- deliver parallel sub-agent failures to the caller (ece924c), closes #5455
- detect MCP tool errors under either field spelling (d18df2f)
- disable Windows glob expansion for CLI args (2638155), closes #6248
- emit Anthropic prompt cache breakpoints for ContextCacheConfig (811d379), closes #5395
- fence relayed agent output so it cannot pose as instructions ([9ffe8be](https://github.com/google/ad...
v2.7.1
v1.39.0
v2.7.0
2.7.0 (2026-08-13)
Highlights
A correctness release: most of the work went into what an agent sends to the model and what it gets back, alongside a long tail of fixes across tools, sessions, evaluation and the CLI.
- Models declare their own capabilities: an agent pairs an output schema with tools when the model actually supports it, instead of ADK inferring support from the model id. (2aff82c, dc5dbfa)
- Tools can return media: a tool's function response carries images and other media straight back to the model, on Gemini and on Anthropic, LiteLLM, Apigee and OCI alike. (df9d6de, 703cf43)
- Conversation history keeps what Gemini needs: thought signatures, server-side tool call parts, and every result of a parallel function call survive the round trip. (d4ed347, e908137, 93dff41)
- Jinja2 instruction templates: pass
use_jinja2=Truetoinject_session_stateand an instruction can use conditionals and loops over session state, with artifacts loaded through a{{ artifact("name") }}helper. Jinja2 stays an optional dependency and the regex engine remains the default. (4a00a34) - Faster startup and hot paths:
import google.adkdoes less work, and the request path avoids Pydantic round-trips and quadratic streaming accumulation in the LiteLLM adapter. (8806dc2, 9e1adde, 36fd2c8)
Breaking changes
pyarrowleft thegcpextra: it lives in the newbigquery-analyticsextra, which takes roughly 50 MB offpip install google-adk[gcp]. If you useBigQueryAgentAnalyticsPlugin, installgoogle-adk[bigquery-analytics]. (ac71709)
⚠ BREAKING CHANGES
- deps: move pyarrow out of the gcp extra
All 212 changes
Features
- accept a pre-configured client on the labs OpenAI model (461205c), closes #4180
- add express mode telemetry logging for ADK CLI onboarding (4ccc6be)
- add gen_ai.agent.name attribute to execute_tool spans (1a80962)
- add Jinja2 templating with use_jinja2 flag (4a00a34), closes #2942
- add option to save eval results to CSV (3bbc8ed), closes #2652
- add parent terminal grouping and TTL pruning to ADK CLI telemetry (2c6a7ff)
- agent: add native task mode support to root LlmAgent (dd0de52)
- Allow clients using the load_artifacts_tool to customize how attachment data is fed to the LLM (b66cba2)
- capture TTY connectivity in CLI environment telemetry (c12a025)
- cli: auto-discover test_config.json for single eval file in adk eval (0477e57), closes #4410
- enforce unit guide requirement for new Python files (942b38d)
- environment: Add support for executing skill scripts within an Environment (fa31b6c)
- evaluation: add optional eval set result persistence to AgentEvaluator (76027dd)
- eventarc: Support Context callables and correct OMIT behavior (a3bd111)
- Extend HTTP trace debugging to MCP Toolset operations (6d8045c)
- honor model-declared capabilities when pairing an output schema with tools (dc5dbfa)
- honor return_direct on Langchain tools wrapped by LangchainTool (c2249f3), closes #2157
- Introduce a capability reporting system for LLM models (2aff82c)
- labs/antigravity: allow mode='single_turn' AntigravityAgents to be sub-agents (6ed484d)
- let McpToolset reuse the MCP server's tool list (9cd5975)
- let tools return media in the function response (df9d6de)
- live: forward safety_settings from generate_content_config to the Live API (0a6d05d)
- plugins: add BigQuery Agent Analytics delivery and termination observability (04b8b72)
- Promote Data Agent tools to stable (fd33158)
- record implicit vs explicit context cache type in analytics (5072828)
- skills: support non-blocking skill loading in async runtimes (61ddc5f), closes #6057
- Stop using the obsolete Gemini 1.x / Gemini 2+ model-id check in ADK (745de0a)
- Stop using the obsolete Gemini 1.x / Gemini 2+ model-id check in ADK url context tool (eaab262)
- support audio_stream_end for realtime input (0f738a5)
- Support elicitation_callback in McpToolset (4824619)
- telemetry: add feature gate for experimental telemetry (75fb254)
- telemetry: Expand load_skill telemetry (bddbb3d)
- update skill model to include its origin (08bd589)
- warn when agent transfer runs without a context cache config (0cf10a5)
Bug Fixes
- a2a: adopt a directly supplied agent card's description (4f58306)
- a2a: flatten human-input responses on resume to avoid mixing them with text (aec7aa3)
- add .adk/ to the .gitignore generated by adk create (374aab3), closes #6647
- add 20MB file size validation to SaveFilesAsArtifactsPlugin (9827790), closes #3751
- Add regional and MREP endpoint routing for DataAgentToolset (20842eb)
- adk: share a single component-owner map between the triaging agents (1ad0543)
- allow injecting credentials into VertexAiMemoryBankService ([18903ca](https://github.com/...
v2.6.3
v1.38.0
Features
Bug Fixes
- avoid shell execution in ReadFileTool ranged reads and keep local environment file access in workspace (#6597) (c680728)
- deps: exclude nltk 3.10.1, which breaks venvs living inside the working directory (v1) (#6607) (f25bb90)
- eval: handle failed inference results without invocations (cherry-pick) (#6565) (4555273)
- live: transfer to the target agent regardless of function response order (#6608) (302885b)
- Port tool confirmation security and re-validation fixes to v1 (#6575) (4783364)