Engineering story · Helix

Interruptions that only people can make

Echo sounded like a person to the detector; the rules were set so a person always wins the floor, the agent's own voice never does, the first word of an interruption is heard, and a false stop re-speaks instead of going quiet

Full-duplex Rust voice engineLocal room and Teams callsMeasured, not guessed
While the agent is speaking · who can stop it
YOUA person, speakingtakes the floor at once; the first word is kept
ECHOThe agent's own voice, coming backinert, like room noise
AIAnother AI voicerefused while the floor is held; heard at the next pause
  • 18attack cases in an adversarial review before anyone heard the feature
  • 1device period of audio, at most, left after a flush
  • 0 sof dead air after a false stop: the answer is spoken again

A voice assistant that cannot be interrupted is a lecture. One that can be interrupted by its own echo is worse, because it stops mid-sentence for nobody. The voice engine runs full duplex, listening while it speaks, and the design problem is to make a person's interruption instant and everything else inert.

What stops the agent

While the agent is listening, it starts a turn the moment speech begins. While it is speaking, it is harder to stop: an interruption has to be sustained speech with a confidence the detector measures, because residual echo and room noise come back as brief, low-confidence bursts and a person does not. The threshold was set from measurement: in real sessions the agent's own echo scored well below the floor and real interruptions well above it, after a phantom interruption had killed an answer mid-sentence.

The agent's own voice can never take the floor from a person.

When an interruption is confirmed, everything stale is cancelled at once, at every stage of the path.

ReasoningStream dropped at the connection
SynthesisCancelled inside its own request
Speaker queueQueued audio plays as silence
Teams callBridge drops audio queued on the Windows side
Output level on the real device, across a flush
BeforeloudAfterzero

Hearing the first word

Under the agent's own speech, the detector is slower to notice a person starting, which clips the first word of whatever they said. So an interrupting sentence gets a longer listening window than a normal turn, because its first words sit on echo and the recogniser needs the whole phrase as context. That change removed the "inaudible" fragments the recogniser had been returning for interruptions.

What the recogniser receives for an interruption
Before · from detection
After · widened pre-roll, longer window
the moment the detector notices a person starting, late under the agent's own speech

When the interruption was not real

A confirmed interruption that killed an answer before any audio played, followed by a silent room, is treated as a phantom.

False stop
Agent
Real interruption
Agent
Person
Agent
the answer is kept as the room heard it

Several voices in one room

The same discipline governs rooms with several AI voices. A specialist whose work finishes while someone else is speaking queues a line and is heard at the next pause, in arrival order, never by cutting in. A spoken hand-off from the facilitator to a named specialist is the dispatch itself, and names are matched with the ways a recogniser mishears them. An adversarial review found, before anyone heard the feature, that a specialist's error could kill the whole meeting and that a hand-back could not be interrupted, and both now have their own tests.

What this demonstrates

I treat interruption as a measured property rather than a feature flag: cancellation that reaches every stage including the far end of a cloud call, and recovery for the case where the detector was wrong.

The behaviour and the measurement rules were mine; AI coding agents, a mix of frontier and open-source models, implemented them under my governance system.