PD008 · neutron design brief · stage: accepted

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.

stage · accepted decided · reference + quarry: yes decided · backend: no (revisit triggers named) door · A2A — consume an ADK agent as a capability, never adopt the engine tracking · adoptions land via epic #462 · epic #463

1 · What it is

license / languageApache-2.0 · Python ≥3.10 · UI is Angular 21
rigor160k 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 modelcode-first Python DAG (edges as tuple chains, routing dicts, loops as back-edges, JoinNode)
modelsGemini 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

DimensionStateDetail
process modelfitsdurable Postgres sessions/events, optimistic concurrency, one typed event record across store/SSE
TS drivabilityfitsFastAPI + OpenAPI, or A2A JSON-RPC — nothing Python-specific on the wire
auth / tenancyabsentendpoints unauthenticated by design; user_id is an unverified path param
control planeabsentno cancellation endpoint, no idempotency, bare SSE, approval-resume via undocumented function-call convention
durable pauseexperimentalat-least-once, no lease against duplicate resumers — an approval gate needs external coordination
model parityunevenlive/bidi, caching, portable thinking are Gemini-only; grounding tools hard-fail on other models
stack costreala second language runtime for capabilities the existing engine seam covers

4 · Adoptions (the quarry)

ADK ideaLands in neutron asEpic
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 idapproval nodes with structured decision fields, validated on settle#462
per-node RetryConfig + timeoutnode-level retry/timeout in NEP-0006 (today global constants)#462
node lifecycle INACTIVE·PENDING·RUNNING·WAITING·COMPLETED·FAILED·CANCELLEDrun-overlay vocabulary once the frontier ships#463
adk-web: per-node run menu for loops · inline trace waterfall · state time-travel · prompt-drift flagrun-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.