AAI Agentic Handbook
Agents

Handoffs between agents

Mid levelReviewed Oct 2026In 2 interview questions

One agent transfers control of a conversation or task to another agent or a human, passing a structured briefing and swapping tools and permissions.

In plain English

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).

Analogy

A hospital shift change: the outgoing nurse briefs the incoming one, and anything left out of the briefing is effectively lost.

Common pitfall

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.

How it actually works

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.

What I'd ship on day one

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.

Worked example

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.

In the interview

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).

Customer
Triage agent
Runtime
Claims agent
1
Basement floodedCustomer → Triage agent
2
transfer_to_claims()Triage agent → Runtime
3
briefing + new toolsRuntime → Claims agent
4
Claim opened, crew 4pmClaims agent → Customer
Control, a structured briefing and a new permission set cross together.

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

WhenDo this
Specialists need different tools or permissionsSeparate agents with handoff tools; least privilege per agent.
Only the prompt differs, tools are the sameOne agent with routing to different instructions; no handoff.
The agent is stuck or the action is high-stakesHand 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

Time to scale up when…
  • Repeat-question rate after handoff > 10%
  • Handoff ping-pong (A→B→A) in > 1% of conversations
  • Human-escalation queue wait p95 above the SLA
What to monitor
  • 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

What users saw

Customers were asked for their policy number again after every transfer; CSAT for transferred chats was 18 points lower.

How it was caught

Conversation analytics flagged repeated slot requests after transfer_to_* calls.

Root cause

The handoff passed free-text summaries; the receiver's prompt required a policy_id field it couldn't reliably parse from prose.

Fix

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%.

Sources

  1. Handoffs — OpenAI Agents SDK, 2025docs
  2. Orchestrating Agents: Routines and Handoffs — OpenAI Cookbook, 2024blog
  3. Building effective agents — Anthropic (Schluntz & Zhang), 2024blog

Check yourself

Three questions. Every option is explained once you answer.

1ConceptHow are agent-to-agent handoffs usually implemented in SDKs like OpenAI's Agents SDK?
2ScenarioAfter transfer, customers are asked for their policy number again 34% of the time. What should you change?
3CalculationA 4k-token transcript vs a 250-token briefing is re-read on each of 8 receiver turns at $3/M. About how much does the transcript add per conversation?