> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voiceinfra.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Built-In Tools: Language Switching, State, Pause and Agent Transfer

> Four capabilities you can switch on for any agent — automatic language switching, mid-call conversation state, a pause-and-listen tool, and hand-off to another agent.

Beyond the custom functions you write yourself, VoiceInfra ships four capabilities you can switch on for any agent. They live on the agent's **Functions** tab under **System Tools**, and each one is off until you turn it on.

<Note>
  Each tool also takes an optional **custom tool description**. This is the text the model reads when deciding whether to use the tool. Leaving it blank uses a sensible default; writing your own is the main lever if a tool fires too often or not often enough.
</Note>

## Auto Language Switching

Lets the agent change the language of the conversation when the caller speaks another language or asks to switch. The agent's transcription language is the starting language.

* **Supported languages** — the languages the agent is allowed to switch to. Leave empty to accept any language the model supports.
* **Voices** — optional. A different voice to use for a specific language. Leave blank and the agent keeps its usual voice, but the language is still passed through so the voice pronounces it correctly.

<Warning>
  If the agent runs a realtime model, it keeps its configured voice. Language switching still works — the agent understands and replies in the new language — but it cannot swap to a per-language voice mid-call.
</Warning>

## Conversation State Updates

Lets the agent assign values to conversation variables mid-call. Those values then become available to later prompts, to function parameters, and to workflow equation transitions.

You configure up to **10 updates**, each pairing a variable name with an expression:

| Part | Example |
| - | - |
| Variable | `retry_count` |
| Expression | `retry_count + 1` |

### Writing expressions

Expressions support:

* **Constants** — numbers, quoted text, `true`, `false`, `null`
* **Existing variables** — any variable already in the conversation
* **LLM extraction** — `llm: "Does the user sound frustrated?"` asks the model to work out a value from the conversation. Write it exactly in that form; a bare question is rejected.
* **Casts** — `bool()`, `number()`, `text()`
* **Arithmetic** — `+ - * /`
* **Comparisons** — `=`, `==`, `!=`, `<`, `<=`, `>`, `>=`
* **Logic** — `and`, `or`, `not`
* **Conditionals** — `if <condition> then <value> else <value>`

```text theme={null}
llm: "Is the caller frustrated?" OR (retry_count > 3)
```

<Tip>
  You can have at most one `llm:` extraction per expression. If you need two model judgements, use two updates.
</Tip>

### Rules the editor enforces

* Variable names use letters, digits and underscores, and must start with a letter or underscore
* Reserved words (such as `and`, `if`, `true`, `llm`, `text`) cannot be used as variable names
* Each variable may only be assigned once
* A maximum of 10 updates

<Note>
  Evaluation is all-or-nothing per tool call. If one expression fails, none of the updates in that call are applied, and the agent is told the update failed.
</Note>

## Pause and Listen

Lets the agent pause and stay silent until the caller speaks again — for moments like *"give me a second"* or *"let me think"*.

While paused, the agent does not fill the silence. The normal inactivity timeout still applies, so a caller who pauses and then says nothing will still get the [silence timeout](/docs/agents/no-code-builder) behaviour.

## Agent Transfer

Lets this agent hand the conversation to another specialist AI agent — mid-call or mid-chat. The switch lives here, on the **Functions** tab, alongside the other system tools.

Because it is a way of transferring a call, the full guide sits with the other transfer options:

<Card title="Transfer to another agent" icon="arrow-right-arrow-left" href="/docs/calls/transfer#transfer-to-another-agent">
  How agent-to-agent hand-off works, its rule settings, and how it differs from transferring to a human.
</Card>

## Frequently asked questions

<AccordionGroup>
  <Accordion title="Do system tools cost anything extra?">
    No. They are part of the agent. Calls, messages, and any transfers you configure are metered normally — see [Pricing](/docs/pricing).
  </Accordion>

  <Accordion title="Can I use more than one system tool on the same agent?">
    Yes. They are independent switches and can all be on at once.
  </Accordion>

  <Accordion title="How is agent transfer different from a workflow transfer node?">
    Agent transfer moves the conversation to another **AI agent**. A transfer node in a [workflow](/docs/agents/workflow-builder) moves the call to a **human**, an extension, or an external number. Both can exist in the same agent.
  </Accordion>

  <Accordion title="Does language switching work with every voice provider?">
    It works with all supported providers. What differs is whether the agent can also change **voice** for the new language — realtime models keep the voice they started with.
  </Accordion>

  <Accordion title="Where are conversation variables visible afterwards?">
    Values the agent captures are added to the transcript as extracted data and are visible in the call log's structured analysis, alongside anything your own functions collected.
  </Accordion>
</AccordionGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.