Repository navigation
[Feature]: Read AI responses aloud via built-in TTS (per-message "read aloud" action) #3964
Description
Before submitting
- I searched existing issues and did not find a duplicate.
- I am describing a concrete problem or use case, not just a vague idea.
Area
apps/desktop
Use case
Add an optional text-to-speech action that reads the assistant's chat output aloud, on a per-message basis.
Problem
Today there is no way to have T3 Code read its own responses out loud while I'm away from the screen or looking at the code. This makes it harder to concentrate and read output on longer coding sessions.
Related issues:
- #653 — Voice support covered voice input / prompting (STT) and was closed as not planned ("out of scope, there are apps that do this already").
- #376 — Lifecycle hooks / notification integration (peon-ping) is about completion/error cues for state changes, not about reading the content of a response.
Neither of these addresses the use case of having the model's content itself read aloud, message by message, on demand.
Proposed solution
A per-message "Read aloud" / "Speak" action on the assistant message UI (next to copy button), with a small set of built-in voices and the option to auto-read new streaming responses.
Two implementation paths, either or both:
- Browser
SpeechSynthesisUtterance— zero-cost, no model download, works offline, uses the OS-provided voices. Good baseline, available everywhere the UI runs. - Optional cloud TTS (OpenAI, ElevenLabs, etc.) via the same providerhook surface the app already uses — better quality, natural voices, streaming audio. Opt-in, BYO-key.
Suggested shape
- A 🔊 button on each assistant message bubble
- Optional setting: "Auto-read streaming assistant responses when complete" (off by default)
- Optional setting: pick TTS engine (System / OpenAI / ElevenLabs / ...) and voice.
- Respect streaming boundaries — only enqueue a chunk once it forms a complete sentence / code block boundary so narration stays coherent.
- Stop/pause controls while speaking.
Open questions
- Should reading also cover code blocks verbatim, skip them, or summarize ("30-line TS function")? My vote: skip fenced code by default, read prose.
- Should there be a keyboard shortcut to read the latest assistant message?
Why this matters
- Hands-free during long turns. While the agent is generating/running, I can keep my eyes on the editor and have the response delivered as audio.
- Accessibility. Users with low vision, dyslexia, or who simply skim better by ear benefit from spoken output.
- Outdoing Claude Code and Codex on this. Even though their chats have a "read aloud" control on assistant messages, their coding agents don't.
Smallest useful scope
A single button under each message that read out the message it's under, with a pause function. Smallest useful scope would not need more advanced controls, or model selection.
Alternatives considered
No response
Risks or tradeoffs
No response
Examples or references
No response
Contribution
- I would be open to helping implement this.
Activity
fasuizu-br commentedon Jul 30, 2026
Disclosure: BRAINIALL operates Brainiall TTS, so this is a vendor opt-in offer, not a neutral recommendation.
The system
SpeechSynthesisUtterancebaseline in the issue looks like the right first implementation. If maintainers want a provider comparison after that, BRAINIALL can prepare a deliberately small, provider-agnostic spike for one completed message at a time:We would keep code blocks, sentence-boundary streaming and background auto-read out of the first spike. If that scope would help, please reply with the preferred provider interface / audio format; otherwise we will not follow up.