Google ADK — Reference, Quarry, or Backend?
Google's Agent Development Kit (Apache-2.0, Python), cloned and deep-studied
2026-08-07 (~/forks/agentic-workflows/adk-python + adk-web, v2.6.2).
Verdict: joins the reference set, yields five adoptions for the roadmap — and is rejected as
an execution backend beside Claude/Codex, with one door deliberately left open.
1 · What it is
| license / language | Apache-2.0 · Python ≥3.10 · UI is Angular 21 |
| rigor | 160k source LOC, 284k test LOC, 9,095 test functions (1.8:1) — unusually disciplined |
| velocity | ~17 substantive commits/day; tracks new model releases within days |
| workflow model | code-first Python DAG (edges as tuple chains, routing dicts, loops as back-edges, JoinNode) |
| models | Gemini native · Anthropic/OpenAI adapters · LiteLLM for the rest — neutral in structure, Gemini-privileged in features |
2 · The reframing finding
ADK is mid-rewrite: its three canonical workflow agents (Sequential/Parallel/Loop) are
deprecated in favor of a new Workflow DAG engine — genuinely sophisticated
(deterministic replay, durable typed interrupts) but experimental, months old, with TODOs in
its resume path. And it has no serializable workflow format: graphs exist only as live
Python objects, serialization is display-only, and the "Agent Builder" canvas cannot draw an
edge. Neutron's NEP-0006 — a declarative, versioned, replayable JSON graph with a real
drag-and-wire editor and governance — is ahead on exactly that seam. That is the moat.
3 · Backend scorecard
| Dimension | State | Detail |
|---|---|---|
| process model | fits | durable Postgres sessions/events, optimistic concurrency, one typed event record across store/SSE |
| TS drivability | fits | FastAPI + OpenAPI, or A2A JSON-RPC — nothing Python-specific on the wire |
| auth / tenancy | absent | endpoints unauthenticated by design; user_id is an unverified path param |
| control plane | absent | no cancellation endpoint, no idempotency, bare SSE, approval-resume via undocumented function-call convention |
| durable pause | experimental | at-least-once, no lease against duplicate resumers — an approval gate needs external coordination |
| model parity | uneven | live/bidi, caching, portable thinking are Gemini-only; grounding tools hard-fail on other models |
| stack cost | real | a second language runtime for capabilities the existing engine seam covers |
4 · Adoptions (the quarry)
| ADK idea | Lands in neutron as | Epic |
|---|---|---|
JoinNode: ready when ALL inbound arms settle; input = {predecessor: output} | tier-1 join semantics — independent confirmation of the design | #463 |
| RequestInput: typed response schema on a human interrupt, resume matched by id | approval nodes with structured decision fields, validated on settle | #462 |
| per-node RetryConfig + timeout | node-level retry/timeout in NEP-0006 (today global constants) | #462 |
| node lifecycle INACTIVE·PENDING·RUNNING·WAITING·COMPLETED·FAILED·CANCELLED | run-overlay vocabulary once the frontier ships | #463 |
| adk-web: per-node run menu for loops · inline trace waterfall · state time-travel · prompt-drift flag | run-view upgrades | #463 |
Anti-lesson kept deliberately: adk-web's builder ships advertised features that do not exist (edge drawing, palette drag) — UI copy must never outrun the build.
5 · The A2A door
flowchart LR
subgraph neutron
E[engines: claude · codex · …]
C[capability registry]
end
C -->|A2A JSON-RPC · agent card| G[remote ADK agent]
to_a2a(agent) exposes any ADK agent at a well-known URL; a TypeScript client
drives it with plain fetch. If a Gemini-native agent is ever genuinely needed, it becomes one
capability-registry entry — zero engine change. Revisit the backend question only if: the
Workflow engine stabilizes out of experimental, ADK ships an authenticated server, or a
customer requires Gemini-native features neutron's engines cannot reach.