Handoffs between agents
One agent transfers control of a conversation or task to another agent or a human, passing a structured briefing and swapping tools and permissions.
A handoff is when one AI agent passes a job to another that is better suited — like a general helpline transferring you to claims. The first agent decides "this is a claims question" and hands over the conversation with a summary.
Handoffs can also go to a person: the agent escalates to a human when it's stuck or the stakes are high (see Human in the loop).
A hospital shift change: the outgoing nurse briefs the incoming one, and anything left out of the briefing is effectively lost.
Forwarding the raw transcript by default. It bloats the receiver's context, carries any injected text across the boundary, and the customer still gets asked to repeat the key details.
Usually implemented as a tool. OpenAI's Swarm cookbook (2024) and its Agents SDK expose handoffs as tools named like transfer_to_<agent>; when the model calls one, the runtime swaps the active instructions and tool set. Underneath it is Tool use & function calling plus a routing table, often fronted by Intent classification & routing.
Design questions: what crosses the boundary (full history is faithful but noisy and expensive; a structured summary with identifiers is lean but lossy — SDKs offer input filters for this), whether control can return, how to stop ping-pong (cap handoffs per conversation at 2–3), and how permissions change — the receiver gets only its own tools (Least privilege), so the triage agent never holds payment tools. A human handoff needs a ticket-quality summary, the customer's verbatim ask, what was tried, and a resume path. Track handoff rate and post-handoff resolution as product metrics.
Handoff as a tool with a typed briefing (intent, entities, what was tried, customer's words); receiver gets its own instructions and tools only; max 2 agent-to-agent handoffs per conversation, then a human; human handoffs create a ticket with the briefing and a link to the trace.
Insurance customer support. Triage reads "my basement flooded last night, policy HO-55120" and calls transfer_to_claims(summary={type:"water damage", date:"2026-10-11", policy:"HO-55120", urgency:"mitigation needed"}). The claims agent, which alone holds open_fnol and dispatch_mitigation, opens the claim and books a crew without re-asking anything. Triage never had write tools; the briefing was 180 tokens instead of a 4k-token transcript.
Recommend handoffs when specialists need different tools or permissions, and describe the briefing schema explicitly. Say how you prevent loops and what the customer experiences.
The follow-up is usually "full transcript or summary?" Answer: structured summary plus key identifiers by default; full history only when the receiver must quote the customer verbatim (complaints, legal).
Numbers worth knowing
- Briefing size
- 150–400 tokensstructured summary vs 2–8k for a raw transcript
- Handoff cap
- 2–3 per conversationbeyond that, escalate to a human
How to decide
| When | Do this |
|---|---|
| Specialists need different tools or permissions | Separate agents with handoff tools; least privilege per agent. |
| Only the prompt differs, tools are the same | One agent with routing to different instructions; no handoff. |
| The agent is stuck or the action is high-stakes | Hand off to a human with a ticket-quality briefing. |
Cost maths
Per handoff: one triage call + receiver's first call with briefing. Forwarding a 4k-token transcript vs a 250-token briefing at $3 / M input (illustrative, Oct 2026) is $0.012 vs $0.00075 on the first receiver call, and the gap repeats every receiver turn: ×8 turns ≈ $0.09 vs $0.006 per conversation. At 500k conversations/month with 30% handoffs ≈ $13k vs $900.
Operating it
- Repeat-question rate after handoff > 10%
- Handoff ping-pong (A→B→A) in > 1% of conversations
- Human-escalation queue wait p95 above the SLA
- Handoff rate by intent (alert on +50% week over week)
- Repeat-question rate after handoff (alert > 10%)
- Post-handoff resolution rate (alert on −5 points)
- Ping-pong handoffs (alert > 1%)
When it goes wrong
Customers were asked for their policy number again after every transfer; CSAT for transferred chats was 18 points lower.
Conversation analytics flagged repeated slot requests after transfer_to_* calls.
The handoff passed free-text summaries; the receiver's prompt required a policy_id field it couldn't reliably parse from prose.
Typed briefing schema with required identifiers; the triage agent must fill it before the transfer tool is allowed; repeat-question rate fell from 34% to 3%.
Related terms
Sources
- Handoffs — OpenAI Agents SDK, 2025docs
- Orchestrating Agents: Routines and Handoffs — OpenAI Cookbook, 2024blog
- Building effective agents — Anthropic (Schluntz & Zhang), 2024blog
Check yourself
Three questions. Every option is explained once you answer.