agent-config.yml. You drop in the credentials. The ClutchCall Agent Runtime then opens a streaming session with each vendor on the caller’s shard. You write no code. The runtime assembles the pipeline from config.
Do you prefer a single low-latency duplex model? See BYO speech-to-speech. That path sets
pipeline_mode: realtime and hands the whole turn to one provider (OpenAI Realtime, Gemini Live, and others). A cascade gives you more control and lets you swap each stage. Speech-to-speech gives you the lowest turn latency.Set the pipeline
1
Choose your three providers
Pick one id from each table below. A bare cascade falls back to the defaults:
deepgram for ASR, openai for LLM, and elevenlabs for TTS. Thus you can start and override only the stage you care about.2
Add credentials
Each provider reads a per-tenant key. The runtime resolves the key at call setup (see Credentials). Set the keys for the providers you selected. The runtime refuses to start an agent that has no usable provider key.
3
Write agent-config.yml
Set
pipeline_mode: cascaded and the per-stage provider/model/voice fields. The full example is below.4
Save and place a test call
The control plane hydrates the config into the runtime. No rebuild is necessary. Place a call. Then watch the latency breakdown to see per-stage timing (ASR final, LLM first token, TTS first audio).
agent-config.yml
agent-config.yml
encoding=linear16. Some providers natively want 16/24 kHz; the runtime resamples for them.
ASR providers
Setasr_provider. You can also set asr_model; the runtime forwards it as the provider’s model hint.
More streaming ASR ids exist. They give Indic and regional coverage, and self-hosted transcription on a co-located model server. See Self-hosted inference. Deepgram is the recommended default for English telephony.
LLM providers
Setllm_provider and llm_model. Tool calling runs in the LLM stage. See Tool calling.
- OpenAI
- Anthropic
- Gemini
- Ollama (self-hosted)
TTS providers
Settts_provider. Put the provider’s voice id in tts_voice.
Streaming TTS providers emit audio as the LLM text arrives. This keeps first-audio low. Sometimes a provider cannot open a streaming session, for example because of a missing voice or a bad key. Then the runtime falls back to a one-shot synthesis for that turn, so the caller still hears a reply.
Credentials
Provider keys are per-tenant. Set them in the ClutchCall console atagent.clutchcall.dev. The control plane resolves the keys at call setup, seals them at rest, and injects them into the pipeline. The keys are never baked into agent-config.yml.
For single-tenant or local development, the runtime also reads keys from the environment as a fallback:
What runs around the cascade
- Turn detection. A cascade uses local, on-device VAD by default. The runtime owns endpointing and barge-in; it does not use a cloud provider’s server VAD. Tune the thresholds, the barge-in hold window, and the idle watchdog on the turn detection page.
- Language. The
languagehint prepends a hard directive to the system prompt. The model then answers in your market’s language and does not mirror the caller. - Session limits. Connect, idle, and max-session deadlines apply per stage. See Session lifecycle.
Backchannel suppression in a cascade is acoustic. It uses utterance duration plus a hold-and-confirm barge window. Short “mhm”/“ok” replies do not interrupt the agent. Lexical gating (“stop” vs “ok”) is not built. Plan around the acoustic behavior. See turn detection.
Next steps
Runtime configuration
This reference lists every knob: turn detection, budgets, guardrails, and codecs.
Speech-to-speech
Trade per-stage control for the lowest turn latency with a single duplex model.
Tool calling
Give the LLM stage HTTP, MCP, and client tools.
Latency breakdown
See per-stage ASR / LLM / TTS timing on a live call.

