feat!: remove the built-in Handler agent - #92
Merged
Conversation
`uv tool install a2a-handler` has been failing on macOS. The cause is `litellm`, which stopped shipping macOS wheels: 1.92.0 added a Rust native extension (`litellm-rust/crates/python-bridge`), and every release since publishes manylinux and win_amd64 wheels only. macOS therefore falls back to building the sdist, which needs `rustc >= 1.94.1` and fails on anything older. Nothing we ran caught it. `uv.lock` pinned litellm 1.87.0, so CI and local dev stayed green while every published install was broken -- `uv tool install`, `uvx`, and `pip` all ignore the lockfile and resolve from wheel metadata, where `litellm>=1.0.0` was unbounded. litellm was only ever reachable through the built-in agent, via `google.adk.models.lite_llm.LiteLlm`. Rather than cap a dependency we do not otherwise need, this removes the built-in agent entirely. Handler is an A2A client; hosting an agent was never core to that, and the agent accounted for roughly a third of the dependency tree. Removed: - `src/a2a_handler/server/` -- the agent, its A2A app, card, Ollama probing, and its ADK doc tools - `handler server run agent` - the synthetic "Handler Agent" entry auto-injected into the global catalog - the TUI's auto-spawn/shutdown of that agent as a subprocess - the `google-adk` and `litellm` dependencies Unaffected: the CLI, TUI, MCP bridge, session and task handling, server configuration management, and `handler server run push`. Resolved dependencies drop from 104 to 73. Verified end to end by building the wheel and installing it with `uv tool install` against a clean cache with no lockfile, on macOS/CPython 3.14 -- the exact path that was failing. BREAKING CHANGE: `handler server run agent` is removed, along with the built-in "Handler Agent" entry in the TUI server picker. Connect to an external A2A server instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
alDuncanson
force-pushed
the
fix/remove-builtin-agent
branch
from
August 7, 2026 19:23
f5b0cbd to
8d6743e
Compare
alDuncanson
added a commit
that referenced
this pull request
Aug 15, 2026
Two leftovers from removing the built-in agent in #92. CONTRIBUTING still listed Ollama as an optional prerequisite "for running the server agent", which no longer exists. `local-servers.mdx` was rewritten to cover only the push notification receiver, but kept its "Run local A2A servers" heading. The webhook receiver is not an A2A server and it is no longer plural, so the heading now names what the page actually documents. The nav title is unchanged. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This was referenced Aug 19, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
uv tool install a2a-handlerhas been failing on macOS.handler updateanduv tool upgradefailed the same way, for the same reason.The cause
litellmstopped shipping macOS wheels. 1.92.0 added a Rust native extension (litellm-rust/crates/python-bridge), and every release since publishes manylinux and win_amd64 only:py3-none-any— installs everywhereWith no macOS wheel at any Python version, macOS falls back to building the sdist, which needs
rustc >= 1.94.1. Anything older dies incargoon theaws-*crates.Two things this is not: it isn't Python 3.14-specific (there is no mac wheel for 3.11–3.13 either), and it isn't the lockfile. But the lockfile is why we never saw it —
uv.lockpinned litellm 1.87.0, so CI and local dev stayed green while every published install was broken.uv tool install,uvx, andpipall ignore the lockfile and resolve from wheel metadata, wherelitellm>=1.0.0was unbounded. Linux users were unaffected throughout.Why remove the agent rather than cap the dependency
litellm was only ever reachable through the built-in agent, via
google.adk.models.lite_llm.LiteLlm. Nothing else in Handler imported it. Capping it would have pinned us to a July build of a package we do not otherwise need, to keep alive a feature that was never core: Handler is an A2A client, and hosting an agent sat well outside that. The agent also accounted for roughly a third of the dependency tree.What is gone
src/a2a_handler/server/— the agent, its A2A app, card builder, Ollama probing, and ADK doc toolshandler server run agenttui/server/tab.py)google-adkandlitellmdependenciesWhat is unaffected
The CLI, TUI, MCP bridge, session and task handling, server configuration management, and
handler server run push.a2a-sdk[http-server]stays — it is what providesstarlettefor the webhook server.Resolved dependencies drop 104 → 73.
Verification
Local: ruff,
ruff format,ty, and 415 tests pass. Snapshots differ only by the version string; TUI rendering is unchanged.Then the path that was actually broken — built the wheel and installed it with
uv tool installagainst a clean cache with no lockfile, on macOS/CPython 3.14. It installs with no Rust and no build step.Then end-to-end against a real remote A2A agent on GKE (A2A v1.0 JSONRPC):
card getmessage send --urlserver add/list/validate/removestatus: okmessage send --server--output jsonenvelope validtask get --task <id>session listhandler mcpstdiosend_message→ live agentBreaking change
handler server run agentis removed, along with the built-in "Handler Agent" entry in the TUI server picker. Connect to an external A2A server instead. Version bumped to 0.2.0 — a minor bump, since removing a public CLI command is breaking under pre-1.0 semver.Docs updated across
quickstart,guides/servers,guides/local-servers,guides/agent-docs-mcp,reference/cli, and CONTRIBUTING.Follow-ups, not in this PR
__version__; the snapshots still need--snapshot-updateeach bump.webhook.pyimportsstarlettedirectly but receives it viaa2a-sdk[http-server]; worth declaring outright.handler task getrequires--taskrather than accepting a positional id.mcplibrary version inserverInfo, not Handler's.🤖 Generated with Claude Code