> ## Documentation Index
> Fetch the complete documentation index at: https://docs.roomote.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

> Talk naturally with a Fast Session using GPT-Live.

Voice turns a Fast Session into a natural, full-duplex spoken conversation.
GPT-Live handles listening, speaking, and interruptions while the actual Fast
Session handles questions and work with its selected model, tools, context, and
durable transcript. You can move between voice and text without switching to a
separate voice-only agent.

## Enabling voice

Voice uses OpenAI GPT-Live-1 and needs an OpenAI API key from a project with
GPT-Live access. A deployment admin can enter one from **Settings >
Integrations > Voice**, or a self-hosted operator can set
`R_VOICE_OPENAI_API_KEY`; the environment variable is used when both exist.
Voice is opt-in: the deployment's general `OPENAI_API_KEY` is not used, so
enabling OpenAI for task inference does not turn voice on. See the
[Voice integration](/integrations/voice) page for details.

The Voice integration settings include the GPT-Live voice selection and an
AI-generated audio preview. Existing selections are preserved. New and unset
connections default to Marin, one of OpenAI's recommended voices.

When the voice key is not configured the voice button does not appear. The key
stays on the control plane. The browser sends its WebRTC connection offer to Roomote
and receives only the negotiated session answer; it never receives the API key.

## Using voice

1. Select the voice button in a composer: in an open Session, or on the home
   page and the **New Session** dialog. From the home page or dialog a new
   Session is created and the call starts inside it.
2. Grant microphone access when the browser asks. A short rising tone
   confirms the call is open; a falling tone marks the end. A **Call started**
   marker appears in the Session.
3. Talk to Roomote the way you would on a phone call. It acknowledges each
   utterance in a few words, hands it to the Fast Session, and reports the
   response out loud when it lands. Every utterance is sent to the Fast Session,
   where the selected model, tools, context, and safeguards handle the response.
4. Speak at any time to interrupt. Roomote keeps listening while it speaks,
   and follow-ups go back through the same Fast Session. You can also type in
   the composer during the call.
5. Use the in-call controls to mute your microphone, silence Roomote's audio
   without muting yourself, or end the call. The button stays highlighted
   while the call is active, and a **Call ended** marker records its length.

Voice input requires a browser with microphone and WebRTC support, which
includes current Chrome, Edge, Safari, and Firefox.

## How the transcript works

A voice call is transcribed into the Session as the record of what was said.
Your speech appears as your messages, and what Roomote said out loud appears
as its replies. The Fast Session's work, such as tool calls, launched tasks,
and reports, appears between those turns exactly as it does in a typed
Session, so the timeline shows both the conversation and the work behind it.

During a call the Fast Session returns its results to the voice rather than
writing them as chat replies; Roomote then reports them in its own words,
keeping numbers, names, paths, and link labels exact. The exact Fast result stays
in the transcript as a collapsed **Reported result to voice** row, including when
the call drops or speech is interrupted. Typed messages sent during a call are
answered in writing as usual.

Each spoken request is cleaned up (filler words, false starts, and misheard
terms) by the deployment's helper model before it reaches the Fast Session.
GPT-Live is told which repositories, environments, and integrations the Fast
Session can reach, so it recognises their names, and the same names guide the
cleanup so a misheard repository name is corrected to the real one.

Ending the call stops the microphone; Fast work already started remains
visible in the Session and follows the normal Session lifecycle.
