Tune when your voice agent listens, talks, and yields the floor. Turn detection makes a call feel natural. The agent stops the instant the caller starts to talk (barge-in). The agent replies the instant the caller finishes (end-of-utterance). If the tuning is wrong, the call feels broken: the agent talks over people, or it stays silent for awkward seconds while it waits for “real” silence. You control this with two settings: a detection mode per agent, and a small set of tuning parameters. Pick a mode. Set the timings. The interrupt signal is then wired end-to-end for you.

The two detection modes

silero is the default because most pipelines are cascaded (for example, Deepgram → Anthropic → ElevenLabs) and need a local trigger. The runtime auto-promotes to server_vad only when the agent’s entry node is REALTIME AND the operator did not supply an explicit type.

Configure turn detection per agent

Put a TurnDetection block in your agent config:
For a realtime entry node, omit the whole block. The runtime then defaults to server_vad:
The runtime always honors an override. If you want gateway-side detection with a realtime entry node, set type: silero explicitly.

Tune when the agent replies

These are the timings that you will change most often. Start with the defaults. Lower them for faster replies. Raise them for callers who pause to think.

Know where barge-in actually works

This is an honest scorecard. Where it says “no”, the agent will continue to talk over the user. Treat this as a known limitation, not a configuration error.

Agent LLM/ASR/TTS providers

WebRTC / streaming vendor adapters

For vendors, the AI’s TTS continues to stream. ClutchCall silences the playback locally, but the AI is unaware. For latency-sensitive UX, prefer SIP/RTP or Browser. After the adapter work lands, Twilio/Vapi will also be good options.

Common gotchas

  • Realtime entry node + explicit type: silero: this works, but you do VAD twice. The OpenAI server-side VAD still fires. It can produce speech_started events that the runtime ignores. Pick one mode.
  • silence_threshold_ms too low (< 300): end-of-utterance fires on inter-word pauses. The agent interrupts the user mid-sentence.
  • Cascaded pipeline with server_vad: only the realtime model can produce server-VAD events. A Deepgram → Anthropic → ElevenLabs pipeline with server_vad will never emit a turn boundary. This is a misconfiguration. Use silero instead.
  • HTTP LLM “barge” feels delayed: Anthropic/Gemini/OpenAI HTTP run to completion server-side. ClutchCall silences the audio playback, but the server still bills you for the full response. For tight barge-in budgets, use a Realtime model.

How it works

Barge-in feels instant because the interrupt travels one control path end to end. You configure the mode. The plumbing is already wired. When local VAD trips, this chain fires:
The same chain fires on source: server_vad when the AI provider reports that the user spoke first (e.g. OpenAI Realtime’s input_audio_buffer.speech_started). Both sources land in the same handler. Node code is thus detection-mode-agnostic.

Where to dig further

  • get_page rpc/audio-frames — wire format for the PCM/PCMU stream that feeds the gateway VAD.
  • get_page rpc/method-idsBarge method ID for operator-initiated interrupts.
  • get_page admin/agent-dags — full TurnDetection schema in the agent config.