Voice handoff latency — should the triage bridge line be silent?

Analysis of 162 real triage→specialist transfers (2026-06-15 → 2026-07-28) · prompted by the HD Supply double-ask call · 2026-07-28
TL;DR — the data says: don't go silent, and don't let the LLM write the bridge either.

1 · The incident

Caller (a vendor rep) said "Leave a message." Triage improvised its handoff line as a question — "Sure — what's the message you'd like to leave?" — then transferred to the Unknown-Caller specialist, which opened by asking the same question: "Sure — what's the message you'd like to leave for the team?" The caller heard the same ask twice, 3 seconds apart.

The prescribed handoff line for that route was the content-free "Let me look into that for you." The failure was the LLM composing a bridge that did the specialist's job — a prompt rule was violated, because a prompt rule is the only thing enforcing it.

2 · Method

3 · Findings

F1 — Transfer spin-up is fast: median 2s, p90 4s

Time from the transfer tool firing to the specialist's first spoken word, across all 162 transfers:

The ~8s dead-air figure that motivated the 2026-07-20 silent→spoken flip does not reflect current platform behavior — 89% of transfers land within 3s.

F2 — The bridge is concurrent, not serial

Correlation between bridge-line length and specialist arrival time: r = −0.19 (≈ none). The specialist does not wait for the bridge audio to finish — the transfer spins up while the bridge plays. Median bridge-start → specialist-speech is 2–3s, which is roughly the bridge's own audio duration: the bridge ends and the specialist's voice begins. The bridge adds zero latency; it exists purely to fill the gap.

F3 — What silence would cost

If triage said nothing, the caller's wait after they stop talking = triage LLM deliberation (median 0.98s, p90 2.42s, n=165) + spin-up to specialist speech (median 2s, p90 4s):

Medianp90
Dead air per transfer, silent mode (est.)~3.0s~5–6s

The 6 transfers in the sample that happened to have no bridge line confirm the shape: 2–5s of silence from tool-fire to specialist speech. On a phone call, silence beyond ~2s reliably draws "hello…?" — at p90 the caller is 5+ seconds into dead air on a call they just started.

F4 — The defect is rare and has one specific shape

Of 162 transfers, exactly 1 bridge line leaked task content (a question) — the flagged call. The other 161 bridges were content-free and flowed cleanly into the specialist. The failure mode isn't "the bridge exists"; it's "the LLM composes the bridge, and one time in ~150 it freelances."

4 · What the caller hears — the four options

A · Fully silent handoff

Caller
"Leave a message."
☠ dead air ~3s (p90 ~6s)
Platform (hidden)
think
transfer spin-up
Specialist
"Sure — what's the message for the team?"

B · LLM-improvised bridge (status quo)

Caller
"Leave a message."
Triage bridge (LLM writes it)
usually fine · 0.6% freelances ⚠
Specialist
"Sure — what's the message for the team?"

C · Platform-fixed bridge (recommended)

Caller
"Leave a message."
Platform speaks fixed line
"One moment." (deterministic)
Specialist
"Sure — what's the message for the team?"

A and B/C have the same total time-to-specialist (F2: the bridge is concurrent). The only difference is whether the gap is silence or voice — and who authors the voice.

5 · Options scored

OptionBug surfaceConsistencyFuture-proofLatency felt
A · Fully silent none nothing to improvise uniform clean 3s med / 6s p90 dead air, every transfer
B · LLM bridge + prompt hardening (status quo) prompt-enforced improvisation is the observed failure varies per call LLM wording drifts prompt rewrite to ever change behavior zero bridge masks the gap
C · Per-destination silent/spoken case matrix grows with every specialist two experiences rewrite per change zero
D · Platform-fixed transfer_message structural zero LLM never authors the bridge identical phrase, every call one config field silent = set it empty zero same concurrency as today

Option D is exactly the "no case-based decisions" property you asked for: one rule, applied by the platform, not by a model following instructions. ElevenLabs' transfer_to_agent config already carries a per-transfer transfer_message field — we have it set to null on all 7 routes today, which is why the LLM is composing bridges at all.

6 · The plan

  1. Set transfer_message to one canonical content-free phrase on all 7 transfer rules in the triage agent config (source-of-truth: triage.config.json + the sync-specialist-transfers sync). Phrase candidates: "One moment." / "Sure — one second." — short, warm, never a question, never task content.
  2. Turn off LLM pre-tool speech for transfer_to_agent (pre_tool_speech: force → none) so the model can't ALSO speak — the fixed line replaces, not supplements, the improvised one.
  3. Simplify the triage prompt: delete the per-route handoff-line choreography (rules that today tell the LLM what to say on each branch — the collision surface). Triage classifies and fires; the platform talks. Net prompt shrinkage, not growth.
  4. Guard it: extend the transfer drift test to pin transfer_message non-null + pre_tool_speech: none on every route, so a config regression fails CI.
  5. Validate end-to-end: robocall gauntlet against the test property line (+18442853526) — message-taking route (the incident's), leasing route, maintenance route. Assert: exactly one bridge utterance, no double-ask, no dead air > 2s.
  6. Rollback: revert the config sync (snapshots are kept per-sync, 30-day artifacts) — one command, no model changes to unwind.

The future-proof trigger you asked about

When transfer spin-up gets fast enough that silence is imperceptible, going silent is clearing one config field — no prompt, no logic, no cases. Concrete trigger: when p90 (tool-fire → specialist speech) < 1.5s over a trailing-30-day window (today: 4s), set transfer_message empty and we're silent, uniformly. This analysis script becomes the recurring measurement.

Data: 300 most recent Clara-Triage ElevenLabs conversations (2026-06-15 → 2026-07-28) · 245 analyzed · 162 completed transfer_to_agent handoffs · timestamps at 1s resolution from per-turn transcript metadata; LLM TTFB from conversation_turn_metrics. Incident call: conv_4801kyms7z0fert96tzwspek99aa. Per-destination medians (tool-fire→speech): leasing n=113 · 2s, unknown_caller n=16 · 2s, maintenance_handyman n=15 · 2s, maintenance_tenant n=11 · 2s, turnover_intake n=5 · 3s, renewal_inbound n=1 · 2s, lease_and_billing n=1 · 1s.
PropFlow Docs