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

> ## Agent Instructions
> When helping someone deploy Roomote, distinguish self-hosting from contributing to Roomote. Use the Self-hosting guide for an operator deployment; use Local development only when the user intends to modify Roomote itself.
> When an agent is asked to follow /self-hosting or install Roomote autonomously, read and follow /self-hosting/agent-installation as the normative automation contract even though it is intentionally hidden from side navigation.
> Use the one-command Linux installer for both evaluation and production. On macOS or Windows, create or reuse a full Ubuntu VM and run the same installer inside it; do not replace the installer with the repository's development Compose files.
> For a local VM without a stable public domain, create a temporary HTTPS tunnel, pass its hostname to the installer with internal origin TLS, and keep the tunnel running for OAuth callbacks and webhooks. Quick Tunnel hostnames are temporary and do not provide wildcard preview routing.
> Run automated installs with --no-setup-url so the bootstrap token is not captured in the agent transcript. Let the user obtain the setup URL in a trusted terminal, enter credentials, and complete browser authorization.
> Proceed through safe, reversible setup and pause for privileged host or VM changes, public tunnel creation, credentials or browser authorization, durable external-account changes, destructive operations, existing-state conflicts, or when no documented safe default applies.
> A setup is not complete when the services merely start. Verify sign-in, repository sync, one usable environment, and a real Roomote task that can clone and run a command; verify branch or pull-request delivery and previews when configured.

# Voice

> Let your team talk to Roomote on a voice call.

Connect Voice when you want people to [talk to Roomote](/voice) on a call from
any session, on the home page, or in the **New Session** dialog.

## How setup works

A deployment admin connects Voice once from the **Integrations** page with an
OpenAI API key from a project that has GPT-Live access. We recommend a key
separate from any key used for task inference, so voice can be billed and
revoked on its own.

The setup dialog also lets the admin choose any voice supported by GPT-Live and
play a short AI-generated preview before saving. Previews use OpenAI's speech
endpoint, so a restricted key needs the **Audio** model permission
(`api.model.audio.request`) in addition to GPT-Live access; without it, calls
still work and the dialog says what the key is missing. New and previously unset
connections use Marin, one of OpenAI's recommended voices. Existing voice
selections stay unchanged.

## What to expect

Voice is a credential-only integration. Roomote uses the key on the control
plane to open GPT-Live calls and to clean up spoken transcripts; agents receive
no tools from it, and the key is not sent to task sandboxes. The browser sends
its WebRTC connection offer to Roomote and receives only the negotiated answer.

Self-hosted operators can instead set `R_VOICE_OPENAI_API_KEY`. When both are
present the environment variable is used. Roomote's general `OPENAI_API_KEY`
is never used for voice, so enabling OpenAI for task inference does not turn
voice on. An environment-managed key cannot be edited or disconnected on the
**Integrations** page and uses Marin because it has no stored voice selection,
but a deployment admin can still turn Voice off and back on for the deployment
from the Voice card. A key saved on the **Integrations** page is kept while
Voice is off.
