- Read aloud click the speaker icon on any assistant message to hear it spoken; click again to stop
- Read File right-click any editor tab and choose Read File to hear the whole file read aloud
- Read Selected select any text in the editor, right-click, and choose Read Selected
- The agent can talk back turn on Jarvis Mode and the AI chat agent, plus Claude Code or any other CLI agent connected through
coder-mcp, can speak a short spoken summary on its own, e.g. after finishing a long task while you were away - Three backends the OS’s built-in voices (free, instant), OpenRouter TTS models, or Cartesia’s streaming API (starts speaking before the whole clip finishes generating)
- Per-model voices give different models their own personality, Claude gets one voice, GPT gets another, instead of everything sharing one default
- One global Stop a Stop button appears in the title bar the moment anything is speaking, no matter which of the above started it
- Off by default nothing here is on until you turn it on in Settings
This is Phase 1, Coder can speak to you. Phase 2 will close the loop: hands-free listening and full voice conversation, so “Jarvis Mode” becomes a real two-way mode instead of read-aloud with a good name.
Turning it on
Speech Output lives in Settings → Models → Speech Output.- Toggle Enable read-aloud on assistant messages, this turns on the speaker icon on chat messages, plus Read File and Read Selected.
- Pick a Backend (see below) and fill in its model/voice/key.
- Optionally toggle Let the agent speak a short summary on its own, this is the same setting the title bar’s Jarvis Mode button flips. Off by default; turning it on lets the agent decide when to speak, not just you clicking a button.
Backends
Voice groups, give models their own voice
Under Voice groups, click + Add Group to assign a specific voice to a specific model, separate from your default voice. Each group has:- A label, just for your own reference, e.g. “Claude” or “Luna”
- A provider match, the Settings → Models provider key the model belongs to, e.g.
anthropicoropenai - An optional model match, a substring to narrow within that provider, e.g.
lunato only match models with “luna” in their id - Its own full backend/voice/speed/volume config, same as the default
anthropic for matching purposes, so a group targeting anthropic applies to both an in-app chat using a Claude model and a Claude Code session speaking through coder-mcp.