Speech-to-speech vs. cascade
Not every agent should be speech-to-speech. A duplex model is the fastest and
most natural option. But a cascade (see
BYO ASR / LLM / TTS) gives you
independent control of each stage. You can swap the language model and keep
the voice. You can run a fine-tuned transcriber. You can mix vendors. Choose
duplex for latency and naturalness. Choose the cascade for control and model
choice.
Supported models
Configure a duplex agent
1
Set the entry node to REALTIME
A duplex agent has a single node. Set
entry_node: REALTIME. Give the
node a provider, a model, and a voice. There is no separate ASR or TTS
stage to configure.- OpenAI Realtime
- Gemini Live
- xAI Grok
- Self-hosted duplex
2
Supply per-tenant credentials
Each workspace supplies its own keys. The keys are stored per tenant and
never shared across workspaces. Set them in the agent console at
agent.clutchcall.dev, or through the control-plane API:3
Deploy and test
Save the agent. Point a number or trunk at the agent. Place a call. The
runtime opens the realtime session on the first inbound frame. If the
provider refuses the connection, the runtime logs the refusal. The call
then falls back to a silent passthrough and does not drop.
Turn-taking on a duplex model
For aREALTIME entry node, ClutchCall Voice defaults to server_vad.
The provider does its own endpointing and emits speech_started /
speech_stopped. The runtime wires these events to barge-in. Thus in-flight
audio is cut the instant the caller talks. You do not add a local turn
detector.
Some self-hosted duplex models have no server-side VAD. In that case, the
runtime owns the turn boundary with a local detector. It commits the input
buffer when the caller finishes. This also prevents backchannels (“ok”,
“mhm”) from waking the model. See
Turn Detection & Barge-In for the
knobs.
Greeting on inbound calls
Some carrier SBCs do not send you RTP until they hear yours. On an inbound call, the runtime asks the model to speak first, so the carrier’s media path opens. The model greets from yourinstructions. You can also pin an exact
opening line. This behavior is on by default for inbound direct-media calls.
No extra config is required.
Tools mid-conversation
The shipped realtime adapters advertise your tools in the session bootstrap. Thus the model can call HTTP and MCP tools during a spoken turn and speak the result. Configure the tools exactly as you would for a cascade. See Tool Calling.Session budgets
Every realtime session is bounded, so a stuck provider cannot run forever:- Connect timeout — the handshake gets 5 seconds. After that, the runtime gives up and falls back.
- Max session — the runtime closes a session at a 15-minute ceiling, even if the provider did not close it. Tune the lifetime, idle re-engage, and hangup budgets on Session Lifecycle.
Next steps
Cascade instead
Wire independent ASR, LLM, and TTS providers when you want per-stage
control.
Turn detection
Tune barge-in, endpointing, and backchannel handling.
Self-hosted inference
Serve your own duplex model on-prem with the inference control plane.
All runtime knobs
Find models, codecs, budgets, and guardrails in one reference.

