What “batteries included” means here
Everything below is already built and runs in-process. You opt into the pieces you want. You override defaults where you need to.A ready pipeline
Speech-to-text, language model, and text-to-speech nodes come pre-wired as
a conversation graph. You can also use a single speech-to-speech node. You
do not hand-build a DAG.
A provider registry
First-class ASR, LLM, TTS, and realtime providers sit behind one
interface. Swap any stage when you change one string. Drop in your own
keys.
Turn-taking wired in
Barge-in, end-of-utterance, and idle handling run end to end, from the
caller’s audio to the model and back. You write no client code.
A built-in tool belt
The agent can transfer, hold, route to a skill, or send DTMF with no
setup. The agent can also call your own HTTP and MCP tools in the middle
of the conversation.
Two ways to run the conversation
The runtime supports two pipeline shapes. Pick one shape for each agent. Most teams start with a cascaded pipeline. They then move latency-critical agents to speech-to-speech.- Cascaded (ASR → LLM → TTS)
- Speech-to-speech (realtime)
agent.json
agent.clutchcall.dev or
through the control-plane API. The system stores the config per agent and
loads it when a call reaches that agent. See
Configuration for the full field
reference.
Pipeline nodes
A cascaded agent is a graph of typed nodes.entry_node names where a turn
starts. Each node’s next_node points to the next node. Beyond the three
conversation nodes, the runtime ships call-flow nodes. With these nodes, you
can build an IVR without leaving the config.
The provider registry
Every ASR, LLM, TTS, and realtime backend sits behind one registry. To select a provider, you set one string on the node. You write no code and do no redeploy. The runtime brings credentials from your tenant vault (sealed at rest) or from the environment. Thus you can bring your own keys for each stage.The registry accepts more identifiers than the headline set above. It also
accepts regional and self-hosted ASR/TTS options, plus a self-hosted
inference gateway that runs your own models. See
BYO ASR / LLM / TTS,
BYO speech-to-speech, and
Self-hosted inference.
provider empty,
you get the defaults marked above (deepgram ASR, openai LLM, elevenlabs
TTS). An LLM node can also declare llm_max_retries and an
llm_fallback_provider. Then, when a turn fails, the runtime retries the
primary provider. After the retries, it falls back once to the second
provider. Only then does it give up. You get this resilience without retry
logic of your own.
If you did not configure a provider’s credentials, the registry returns
nothing for that stage. It does not fail the whole call. An unconfigured ASR
drops the audio. A streaming TTS falls back to the one-shot synthesis path, so
the caller still hears the reply.
Turn-taking, out of the box
Barge-in and end-of-utterance are wired from the caller’s audio to the model and back. You pick a mode and tune a few timings. The interrupt travels a single control path for you.silero(default) — on-device voice-activity detection on the gateway. Right for cascaded pipelines.server_vad— the realtime provider decides turn boundaries. The runtime auto-selects this mode forREALTIMEentry nodes.energy/none— a lightweight energy gate, or fully manual.
Tool calling
Your agent can act on the world in the middle of a conversation. The runtime advertises a set of tools to the model each turn. The runtime then executes whatever the model calls. Built-in telephony tools are available to every agent with no setup. The model can calltransfer_call, route_to_skill, hold_call /
unhold_call, send_dtmf, disconnect_call, and request_supervisor. The
runtime issues the matching control action on the live leg. Per-trunk realm
rules govern where a call may be transferred.
Your own tools plug in three ways:
- HTTP tools — describe an endpoint and its JSON schema. The model calls the tool, and the runtime makes the request (bearer / basic / header auth supported).
- MCP tools — point at a Model Context Protocol server. The runtime runs
tools/listand registers every tool that the server exposes. - Client tools — declare a function that your app fulfills, for actions that must run in your environment.
tool_allowlist.
An empty allowlist means all of the agent’s tools. The full walkthrough is in
Tool calling.
Where sessions live
Each call gets a runtime session pinned to the core that handles the leg. The session has its own turn-detector state, provider sessions, and deadlines. Timeouts and the maximum session length are configurable. They hot-reload without dropped in-flight calls. Running sessions keep the deadlines they started with. See Session lifecycle.Next steps
Runtime overview
How the runtime drives a live conversation, start to finish.
Configure an agent
Every field in the agent config, with examples.
Bring your own models
Swap in your own ASR, LLM, and TTS providers and keys.
Tool calling
Give the agent HTTP, MCP, and client tools.

