a sub-agent
A coroutine or thread with no identity.
A deployed agent with a card, DB, and endpoint.
Spawning a sub-agent is a one-liner in every framework. Governing the thing you spawned is where it falls apart: a background coroutine with the parent's keys, no identity, and no audit trail is easy to create and impossible to hold accountable. a2a cloud makes a spawned sub-agent a first-class deployed actor — its own identity, a scoped grant sized to its task, signed receipts from its first run, and clean per-sub-agent revocation. Spawn freely; stay in control.
own identity · least-privilege grant · signed from run one
The framework makes spawning look free — call a function, get a worker. What you actually get is a background task running inside the parent, holding the parent's full credential, with no name, no isolation, and no receipt. It can touch anything the parent can, its actions blur into the parent's logs, and stopping it means killing the parent or rotating a shared secret. The ease of spawning hides the fact that you've created something you can't account for.
a2a turns spawning into deploying: the sub-agent gets a separate deployment and database boundary, can receive a scoped grant through delegation, and produces signed evidence when invoked through the API, MCP, or /invoke entry point.
A spawned sub-agent is a deployed agent with its own card, isolated Postgres, and MCP endpoint — reachable, nameable, and auditable. You spawn an actor you can govern, not an anonymous coroutine.
The parent issues the sub-agent a grant scoped to just the tools, files, and TTL its task needs. A sub-agent starts with least privilege by construction, not with a copy of the parent's keys.
A spawned sub-agent's Agent API, public `/invoke`, and standard MCP `tools/call` skill executions receive Ed25519-signed receipts. Formal A2A message/task state and internal actions need separate ordered history or instrumentation.
Revoke a sub-agent's grant to stop it, or re-scope to change what it can do — a single action per sub-agent, no shared secret to rotate and no sibling disturbed.
A coroutine or thread with no identity.
A deployed agent with a card, DB, and endpoint.
Inherits the parent's full credential.
Gets a scoped grant sized to its task.
Sub-agent actions blur into the parent's logs.
Covered sub-agent executions have separately attributable signed evidence.
Kill the parent or rotate shared keys.
Revoke that sub-agent's grant — nothing else changes.
On a2a cloud a parent agent spawns a sub-agent through the platform deploy and grant APIs: it stands up a child agent — which gets its own agent card, isolated Postgres database, and MCP endpoint — and issues it a scoped grant for the task. Unlike spawning a thread or coroutine, the result is a first-class deployed agent you can call, audit, and revoke independently of the parent.
A background task runs inside the parent's process and credential set. A sub-agent on a2a is a separate deployed actor with its own deployment and database boundary. Delegation can issue it a scoped grant, and its executions through Agent API, public `/invoke`, or standard MCP `tools/call` produce separately attributable signed evidence.
Revoke its grant. Because each sub-agent holds its own scoped, TTL-bound grant rather than a copy of a shared key, revoking or re-scoping one stops just that sub-agent. Receipts show caller, skill, input evidence, the grants that authorized it, outcome or result preview, and timing; richer activity needs separate history or instrumentation.
All guides live in the guides index.
a2a cloud deploys sub-agents with managed Postgres, MCP and API surfaces, and scoped grants. Agent API, public `/invoke`, and standard MCP `tools/call` skill executions receive receipts attributable to the sub-agent; formal A2A task routes remain protocol state.