Skip to content

Releases: google/adk-python

v2.9.1

Choose a tag to compare

@Jacksunwei Jacksunwei released this 15 Sep 18:03
e27681f

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

Choose a tag to compare

@GWeale GWeale released this 10 Sep 21:22

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: InMemorySessionService now raises SessionNotFoundError when 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 via raw_mcp_tool, is discarded during validation before ADK sees it. _meta is 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:/...
Read more

v1.39.1

Choose a tag to compare

@wukath wukath released this 27 Aug 21:56

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

Choose a tag to compare

@wukath wukath released this 26 Aug 23:25

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_status on 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_resource span (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...
Read more

v2.7.1

Choose a tag to compare

@GWeale GWeale released this 17 Aug 18:28
d71f1bf

Bug Fixes

  • deps: restore the OpenTelemetry 1.42.1 ceiling (8e6f361)
  • validate session initialization events (e2b8ace), closes #5290

v1.39.0

Choose a tag to compare

@wuliang229 wuliang229 released this 17 Aug 19:25

1.39.0 (2026-08-17)

Features

  • live: use RunConfig.session_resumption.handle when opening a live session (#6770) (090869b)
  • support audio_stream_end for realtime input (#6699) (5e3b997)

Bug Fixes

  • live: stop background tool tasks when a live agent run ends (#6769) (5fb5ff1)
  • validate session initialization events (v1) (#6771) (e7dba7a)

v2.7.0

Choose a tag to compare

@GWeale GWeale released this 13 Aug 22:18

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=True to inject_session_state and 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.adk does less work, and the request path avoids Pydantic round-trips and quadratic streaming accumulation in the LiteLLM adapter. (8806dc2, 9e1adde, 36fd2c8)

Breaking changes

  • pyarrow left the gcp extra: it lives in the new bigquery-analytics extra, which takes roughly 50 MB off pip install google-adk[gcp]. If you use BigQueryAgentAnalyticsPlugin, install google-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/...
Read more

v2.6.3

Choose a tag to compare

@wuliang229 wuliang229 released this 07 Aug 21:15
0b55dcf

Bug Fixes

  • gate --sandbox-launcher behind gcloud beta run deploy (8120292), closes #6511

v1.38.0

Choose a tag to compare

@wuliang229 wuliang229 released this 07 Aug 23:41

Features

  • live: forward safety_settings from generate_content_config to the Live API (#6641) (99c1aa3)

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)

v2.6.2

Choose a tag to compare

@wuliang229 wuliang229 released this 04 Aug 01:18
18e94c9

2.6.2 (2026-08-03)

Bug Fixes

  • cli: update gcloud command to use beta flag (9630559)