For the complete documentation index, see llms.txt. Any page on this site can be fetched as Markdown by appending .md to its URL.

Voice Agents

Brain

Pick the language model, decide whether the agent reasons before answering, keep conversation history in bounds, and choose what the agent remembers about callers.

The Brain card holds the settings that decide how the agent thinks: which Language Model it runs on, whether Reasoning is on, and how Conversation history is kept once a conversation outgrows the model's context window. A model is required; the rest default to off. The card is on the Conversation step of the agent editor.

What the agent remembers about a caller between calls is separate, and lives on the Returning Callers card one step earlier, under Routing & Memory. Those settings are documented here too, from Memory down, because they decide what the agent knows when it starts thinking.

Language model

Every model here can hold a conversation, follow a system prompt, and call tools. They differ in speed, cost, and how well they handle complicated instructions.

ModelProviderReasoningSetup
Claude Haiku 4.5AnthropicYesIncluded
Claude Haiku 5.5AnthropicYesIncluded
Nova MicroAmazonNoIncluded
Nova LiteAmazonNoIncluded
Nova 2 LiteAmazonNoIncluded
Gemini 3.8 FlashGoogleYesConnect your own account
Gemini 3.5 Flash-LiteGoogleYesConnect your own account
GPT-5.1OpenAIYesConnect your own account

Latency matters more than capability on a phone call. A model that answers in half a second usually produces a better conversation than a more capable one that pauses for two seconds, because callers hear the pause as hesitation. Start with the default. Move up if the agent demonstrably can't handle the task, and down if a smaller model handles it just as well on your own test calls.

Which models you can actually pick

The table above is the full curated list — Tandem supports these models and no others, so there's no model id to type in. The dropdown shows a subset of that list, grouped by provider, and the Setup column is what decides whether a given model is in your subset:

  • Included — available to every organization with no setup. If one is retired upstream it drops off the list.
  • Connect your own account — appears only after your organization connects its own account for that provider as an integration. Tandem doesn't supply keys for these; you bring your own.

Which models fall in which group changes as the catalog grows, so read it off the table rather than assuming it follows the provider.

If you open an agent whose saved model is no longer available, the field flags it and you'll need to choose another before saving. The agent keeps running on its saved configuration until you do.

A model that Tandem replaced with a newer one from the same provider is handled differently. The agent opens with the replacement already selected, runs on it for every call, and saves it the next time you save. Gemini 2.5 Flash and Gemini 2.5 Pro were both replaced by Gemini 3.8 Flash.

Changing an agent's model is safe: the prompt, tools, dispositions, and everything else carry over. Re-test on a real call afterwards, though, since models follow the same prompt somewhat differently.

Reasoning

Reasoning (also called extended thinking) lets the model work through a problem before it answers. The toggle only appears for models that support it.

The reasoning itself is never spoken to the caller — they hear only the final answer. What they do notice is the extra time it takes, which is why this is off by default.

Turn it on when the agent has to hold several constraints at once: multi-step eligibility rules, arithmetic over data it just fetched, decisions that depend on three or four things the caller said. Leave it off for straightforward question-and-answer or intake, where it just adds delay.

Thinking budget (tokens)

With reasoning on, you can optionally cap how much thinking the model does. Higher budgets allow deeper reasoning and take longer.

  • Minimum 1024 tokens.
  • Leave it empty to use the model's default.
  • Pair it with a Thinking cue on the Voice & Speech card so the extra time isn't silent.

Gemini models

Gemini 3 models take a thinking level (low, medium, or high) instead of a token count, so the budget you enter picks the level:

Thinking budgetLevel
EmptyMedium
1024 to 4095Low
4096 to 16383Medium
16384 or moreHigh

Gemini 3 models always do some thinking. With Reasoning off, the agent runs at the lowest level the model allows: low on Gemini 3.8 Flash, minimal on Gemini 3.5 Flash-Lite. The reasoning is still never spoken; turning it off only keeps it short.

Claude Haiku 5.5

Claude Haiku 5.5 also takes an effort level (low, medium, or high) instead of a token count. The budget you enter picks the level using the same table as the Gemini models above. With Reasoning off, Claude Haiku 5.5 does no thinking at all.

Memory

Everything from here to Reconnect after a dropped call is on the Returning Callers card, on the Routing & Memory step, not on Brain. The whole card is Voice only: every setting on it keys on the caller's phone number, and a chat visitor has none.

Memory decides how much the agent recalls about a caller on their next call. It's keyed to the caller, so a returning caller doesn't start from zero. The default is None.

DepthWhat the agent knows on the next call
NoneNothing. Every call starts fresh. (Default)
WarmThat this caller has contacted you before, and roughly about what.
LightA short summary of previous calls.
ContinuityThe summary plus open items, so it doesn't re-ask what it knows.

Pick by what the agent does:

  • None for anonymous, one-shot interactions — a directory, a survey, an after-hours message line. Also the right choice when you'd rather not retain anything about callers.
  • Warm when recognition is the whole benefit: "Good to hear from you again."
  • Light for support lines where knowing the last issue saves the caller re-explaining it.
  • Continuity for multi-call processes — a claim, an application, a repair — where the point is picking up where you left off.

Memory means the agent retains information about your callers between calls. Choose the shallowest depth that does the job, and check it against your own retention and privacy obligations before enabling it on a line that handles sensitive matters.

Memory is built from summaries of earlier calls, so it's approximate by nature. Don't rely on it for anything that must be exact — look those facts up with a tool instead.

Returning caller greeting

With any memory depth other than None, a Returning caller greeting control appears. It decides what a caller the agent recognizes hears in place of the Greeting you set on the Persona card. Three settings:

SettingWhat a returning caller hears
Same greeting (default)The same greeting a first-time caller hears.
Write my ownA second greeting you write, spoken verbatim. No added delay.
Smart rewriteThe agent re-words your greeting to welcome them back. Delays the first audio.

First-time callers always hear the Persona greeting exactly as written, whichever setting you pick.

Write my own reveals a text box for the returning-caller greeting. Save is refused if you leave it empty, with Write a greeting for returning callers, or choose a different returning-greeting option — an empty box would save and then behave as Same greeting.

Choose by what the greeting has to do:

  • Same greeting when the first line is a fixed disclosure, a recording notice, or a legal script that has to be spoken word for word to everyone.
  • Write my own when returning callers should hear something different but still exact — including when the opening is a disclosure you are willing to word differently for them, but not willing to let a model rewrite. This is the only setting that gives you a second fixed line, and it costs nothing at call time.
  • Smart rewrite when you want warmth without authoring a second greeting, and a slightly slower open is acceptable. The agent paraphrases your Persona greeting through the model before the caller hears anything, so it needs a Greeting set to have something to work from.

Share memory across agents

Also shown once memory is on, under Advanced: Share memory across agents. It's off by default, which keeps a caller's history private to the agent that recorded it.

Turn it on when several agents serve the same caller and should each know what the others learned — a main line, a Spanish line, and a callback agent all handling the same account. The setting is per agent and it has to be on at both ends: an agent only reads history from other agents that are also sharing.

Leave it off when agents cover unrelated subjects, or when one of them handles matters the others have no business knowing about.

Reconnect after a dropped call

Reconnect after a dropped call is separate from memory depth and works even at None, because a dropped call is one conversation rather than two. Three settings:

SettingWhat a caller who rings back gets
Off (default)A normal greeting. The dropped conversation isn't referenced.
Offer to continueThe agent offers to pick up where they left off, knowing the topic.
Offer to continue, with full contextThe same offer, and the agent resumes with the whole conversation from the dropped call.

Either non-off setting applies only when the caller rings back within 10 minutes. After that, the call starts fresh.

Set it to one of the continue options for anything a caller would have to re-explain: an intake, a claim, a multi-step booking. Leave it Off for short transactional lines, where starting over costs the caller nothing.

Knowledge

Attaching a knowledge base gives the agent a searchable set of your own facts to answer from, which is almost always better than pasting reference material into the prompt. That's configured on the Knowledge card — see Knowledge Base.

Conversation history

Conversation history controls how the agent keeps track of what's been said once a call or chat runs long enough to fill the model's context window. It's in the Conversation History panel, which the slider button in the Brain card's header opens — don't confuse it with Timeouts & Limits, which covers idle behavior, call limits, and retry tuning. This section governs both channels — an agent that serves voice and chat gets the same history behavior on each, because both run through the same underlying agent.

Two strategies:

StrategyWhat it does
Sliding window (default)Once history exceeds Window size, the oldest messages are dropped to make room.
SummarizingOnce history grows large enough, older turns are replaced with a summary instead of being dropped.

There is deliberately no option to turn history management off. Without one of these two strategies, history grows until it overflows the model's context window mid-call or mid-chat, and the conversation dies.

Sliding window is the simpler and cheaper of the two, but dropping is silent: on a long call, the caller's opening statement — why they called, an account number, a consent they gave — can fall out of the window without either side noticing. Window size sets how many messages are kept before the oldest start dropping; leave it unset to use the SDK's own default of 40 messages.

Summarizing avoids that loss by folding older turns into a shorter summary instead of discarding them, at the cost of added latency on the turn where summarization fires — the model has to produce the summary before it can answer. Two fields tune it, both optional:

  • Summary ratio — the fraction of history replaced by a summary each time summarization runs. Between 0.1 and 0.8. Unset uses the SDK's own default of 0.3.
  • Preserve recent messages — how many of the most recent messages are always kept verbatim, never folded into a summary. Between 2 and 100. Unset uses the SDK's own default of 10.

There's no field for which model produces the summary — it's fixed by the platform. Letting that be configurable would mean running a full-size inference on the caller's critical path at the exact moment the context window overflows, which is the wrong tradeoff for either channel. Its retry behavior is fixed for the same reason, and is not what the model-retry fields on the Timeouts & Limits card set: those tune the model that answers the caller, and the summarizer keeps the platform's own short backoff so a failure while it runs cannot outlast the turn it fires inside.

Two more fields apply regardless of which strategy you pick:

  • Pin first — messages at the very start of the call or chat that are never dropped or summarized away, no matter how long the conversation runs. This is the field that actually protects the caller's opening turns. Between 1 and 20 messages.
  • Proactive compression threshold — instead of waiting for history to overflow before acting, compress once this fraction of the context window is already in use. Between 0.3 and 1. Leave it unset to compress reactively only (the default), which is cheaper on most turns but risks a latency spike on the turn where the overflow finally happens.

Limits and defaults

SettingValue
Language ModelRequired
ReasoningOff by default; only shown for capable models
Thinking budgetOptional; whole number, minimum 1024 tokens
MemoryNone by default
Returning caller greetingSame greeting by default; requires memory other than None; Write my own requires text
Share memory across agentsOff by default; requires memory other than None; must be on at both ends
Reconnect after a dropped callOff by default; independent of memory depth; 10-minute window
Conversation strategySliding window by default
Window size10–400 messages; sliding window only; SDK default 40
Summary ratio0.1–0.8; summarizing only; SDK default 0.3
Preserve recent messages2–100 messages; summarizing only; SDK default 10
Pin first1–20 messages; applies to both strategies
Proactive compression threshold0.3–1; applies to both strategies; reactive-only if unset

Troubleshooting

The agent is slow to respond. In order of likelihood: Reasoning is on, the thinking budget is high, or the model is a larger one than the task needs. Turn reasoning off and re-test before changing anything else.

The agent loses track of complicated rules. Try Reasoning on. If that doesn't fix it, the prompt is probably the problem — see Persona on numbered steps.

A model I want isn't in the dropdown. Check its Setup column in the table above — if it reads Connect your own account, your organization has to connect its own integration for that provider first. If the model isn't in the table at all, it isn't supported; the list is curated, so there's no way to add one yourself.

The field says the saved model is no longer available. The model was retired upstream. Pick a replacement and save.

The agent doesn't recognize a returning caller. Confirm Memory isn't None, and remember that the first call with memory enabled is the one that creates the memory — recognition starts on the second.

Returning callers hear the ordinary greeting. Returning caller greeting is on Same greeting, which is the default, or the memory depth is None, which hides the control entirely. Set a depth first, then pick Write my own or Smart rewrite.

Save is refused asking for a returning-caller greeting. Write my own is selected with an empty box. Write the greeting, or switch to Same greeting or Smart rewrite.

Smart rewrite doesn't change anything. It paraphrases the Greeting on the Persona card, so it has nothing to work from if that field is empty. Set a greeting, or use Write my own, which does not depend on one.

The agent recalls something inaccurately. Memory is a summary, not a record. Facts that must be exact belong in a tool lookup or a knowledge base.

The agent forgets something the caller said earlier in a long call. With the default Sliding window strategy, the oldest messages drop once Window size is exceeded. Switch to Summarizing to keep older turns as a summary instead of losing them, or raise Pin first to protect the caller's opening turns specifically.

Turns are slower on long calls or chats. If Conversation strategy is set to Summarizing, latency goes up on whichever turn triggers a summarization pass — that's expected. If a Proactive compression threshold is set, compression can also fire earlier, on more turns, in exchange for avoiding a latency spike at the point of overflow; leave it unset to compress reactively only.

Next steps

On this page