Skip to content
Period 9 / 11

Failure 06: The Handoff That Loses Everything

Before you start

Prerequisite: Lesson 07 — state as source of truth, and the discipline of never letting the LLM speak a number it invented. This lesson assumes you already treat state as something the application owns, not something the model narrates. After this lesson, you can: explain why a SIP transfer that connects the audio can still destroy a call, design a typed handoff envelope that rides alongside the transfer, and gate the transfer itself so an empty envelope can never fire.

Eight minutes, undone in one question

A call spends eight minutes building trust:

The agent does its job

Authenticates the caller, pulls the order, hears the complaint, decides escalation is the right call, and fires a transfer to a human.

The SIP leg connects

SIP (Session Initiation Protocol, the audio protocol that carries the call itself) connects cleanly. By every dashboard that measures "did the transfer succeed," it worked.

The human picks up cold

"Thanks for calling. Can I get your name and order number?"

The caller hangs up

Eight minutes of trust, gone in one redundant question.

SIP carries the voice, not the call

The bug here isn't in the transfer mechanism. The transfer mechanism did exactly what it was built to do. SIP carries the voice channel from the agent's leg of the call to the human's leg of the call. That's the whole job description.

What SIP carriesWhat it drops on the floor
The audio channelAuthentication
The order number
Tool results the agent already pulled
The sentiment of an angry caller
Eight minutes of accumulated context

None of the dropped items ride along. They vanish at the transfer boundary, and the receiving human opens the only channel they have: the audio, plus whatever caller ID gives them. So they ask the caller to re-supply everything the caller already gave the agent, minutes ago, on a call that person believed was going somewhere.

The failure isn't that the transfer didn't work. It's the assumption that carrying audio is the same as carrying context. It isn't. A "successful" cold transfer routinely destroys the exact trust the call spent eight minutes building: the customer isn't just repeating information, they're being told the last eight minutes didn't count.

This is the same shape as lesson 05, pointed at a different boundary

If that framing sounds familiar, it should. Lesson 05 was about a voice agent being at least three concurrent systems — the voice channel, the dialogue loop, tool-call execution — that can each hold a different view of what's happening, and the fix there was cooperative cancellation: an explicit shared signal, checked at safe points, instead of assuming every part of the system already agrees.

This is the same failure family, at the handoff instead of the interrupt. The agent and the receiving human are two systems that need to share one view of the call, and SIP alone doesn't give them one. The fix follows the same logic lesson 05 already established: don't hope the pieces stay in sync, carry the sync explicitly.

The fix: a typed handoff envelope, gated like lesson 06's wrap-up

The pattern is a typed handoff envelope that rides alongside the SIP leg, a second, parallel channel carrying exactly what SIP drops: auth status, intent, tool results, sentiment, a summary of the call. The human doesn't reconstruct the call from a cold caller ID. They read the envelope and open warm.

The gate is what makes this a fix, not a feature request

An envelope that's merely available isn't the fix; an envelope that's optional gets skipped under load exactly when it matters most. The gate is the same shape lesson 06 already named for call-ending: agentic by default, with a deterministic hard gate the LLM doesn't get a vote on. Here, the gate sits on the transfer action itself. No validated envelope, no transfer. The framework enforces it; the model doesn't get to decide the envelope was close enough.

That's the whole pattern: two parallel channels instead of one, and a gate that refuses to let the audio-only path fire alone.

One transfer, two channels — and a gate on the one that's optional today

What it sounds like on the other end

The same human agent, receiving two transfers of the same call, is the cleanest way to see the difference. Cold, with no envelope: the human has only caller ID, so the opener is "Can I get your name and order number?" and the caller, who already gave that information once, is now angrier for repeating it. With a populated envelope: the human opens "Hi Mike, I see the duplicate charge on A4821, let me fix it." Same human. Same training. The only variable is whether the state made the trip.

A reference demo built for this course runs both transfers back to back on the same agent: a cold one, forcing "start me over," and one with a populated envelope, opening warm and specific. It also shows the gate doing its job — an unauthenticated, empty envelope simply cannot transfer.

Quick check — A SIP transfer connects successfully and the dashboard shows 'transfer: success.' Why might the call still have failed the customer?

The takeaway

You're measuring the wrong layer

A transfer that connects the audio isn't a transfer that preserved the call. If your system treats "the SIP leg connected" as success, you're measuring the wrong layer. Carry the state deliberately, gate the transfer on it being complete, and the eight minutes the caller spent building trust survive the handoff instead of evaporating at it.

Continue to Lesson 09

Six failures, six fixes — but shipping voice in 2026 also means knowing the law that governs it and catching regressions before a caller does. Lesson 09 covers compliance and voice-specific evaluation.

Have a question about this lesson?

Reply here and it goes straight to Rod. Same as replying to one of his emails.