Agent-to-agent (A2A) dispatch is when an agent reaches outside its own boundary to ask a completely different agent for help — potentially one owned by another organisation. The target runs independently, and only the final artifact returns to the caller.
Three hard rules
Delegation only. A cross-agent hop can only ever be a delegation target, never a transfer target. "Becoming" another organisation's agent has no coherent meaning. Attempting a cross-agent transfer produces route_forbidden.
Fail-closed and non-interactive. A2A hops run in the background with no human watching, so any tool requiring approval is automatically denied. The remote agent operates fully autonomously or not at all. Design the remote side accordingly — see fail-closed.
Bounded depth. Chains are strictly limited, in three separate ways.
The three bounds
| Bound | Behaviour | Termination reason |
|---|---|---|
| Hop-depth ceiling | Chain deeper than the limit is stopped | max_agent_hops_exceeded |
| Cycle detection | Chain looping back to an agent already in it is stopped | agent_cycle_detected |
| Nested budget decay | Each level runs with less step budget than the one above | max_steps_exceeded |
Budget decay is the subtle one. Even a chain that stays within the legal hop depth cannot multiply total work indefinitely, because each nested call gets a smaller allowance. An agent that completes comfortably when called directly may run out of room three hops deep.
What the runtime does and does not own
The runtime governs hop limits, cycle logic, and permission posture. Network delivery, cross-organisation authentication, and idempotency retries are the host platform's transport concerns. A remote_dispatch_failed termination means the transport layer gave up after retrying — not that the remote agent rejected the work.