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

# Voice

> Push-to-talk speech input and spoken replies, using local models or a cloud API.

This page will cover voice input and output. Voice brackets the turn rather than
changing it: speech-to-text feeds the same message-building path as typed input,
and text-to-speech reads back the reply after the output guard has run, so a
guardrail refusal is spoken too rather than silently dropped. Push-to-talk is
bound to `F11`, started with the `--voice` flag, or toggled with the `/voice`
command.

Backends are pluggable on both sides. Locally, `faster-whisper` handles STT and
Piper handles TTS; install them with `uv sync --group voice-local`. Cloud
backends cover OpenAI, Deepgram, and ElevenLabs, and policy files name the
**environment variable** holding an API key, never the key itself.

The page will cover `voice_policy.yaml` in full. It is off by default, and the
presence of the file does not enable it, so you must set `enabled: true` and
install your chosen backends. Settings include per-direction backend and model
selection, capture settings with a hard cap on one utterance as a
runaway-microphone guard, a cap on synthesized text length, and `fail_open`,
which degrades to text with a notice rather than crashing when a backend fails.
Voice is interactive only; the headless one-shot path stays text-only.

<Note>
  This page is in progress. The shipped `voice_policy.yaml` is fully commented
  and is the best reference until it lands.
</Note>

See [Terminal UI](/interfaces/tui) for the push-to-talk binding,
[Commands](/interfaces/commands) for `/voice`, and
[Configuration](/guides/configuration) for how `voice_policy.yaml` resolves.
