Built-in voice/TTS announcements for accessibility (screen-reader-friendly mode)
Summary
Add first-class voice/TTS support to Claude Code so it can speak aloud:
- Attention prompts — when waiting for permission approval or user input
- Turn summaries — a brief announcement of what the assistant just did
This is currently achievable via custom Notification and Stop hooks calling macOS say (or espeak/spd-say on Linux), but every user has to assemble it themselves — pick a voice, parse the transcript JSONL to get the last assistant text, strip markdown, etc.
Why
Accessibility. Blind and low-vision developers rely on screen readers, but Claude Code's TUI updates don't always announce cleanly through VoiceOver/NVDA (spinners, streaming tokens, tool-call panels). A built-in narration mode would make the tool usable for screen-reader users out of the box.
Hands-free / multitasking. Useful when stepping away from the screen (cooking, parenting, walking) — you can hear when Claude needs you and what it just finished, without watching the terminal.
Proposed shape
A \narration\ settings block, e.g.:
\\\json\
{
\"narration\": {
\"enabled\": true,
\"voice\": \"Allison (Enhanced)\",
\"announceOnIdle\": true,
\"announceTurnSummary\": \"first-line\" | \"full\" | \"off\",
\"stripMarkdown\": true,
\"maxChars\": 240
}
}
\\
Cross-platform backend: \say\ on macOS, \spd-say\/\espeak\ on Linux, SAPI on Windows. Or pluggable: \narration.command\ for a user-provided TTS pipe.
Workaround today
Hooks-based config in \~/.claude/settings.json\ — works but requires:
- knowing the transcript JSONL format and filtering sidechain entries
- markdown stripping with sed
- platform-specific TTS command discovery
- voice selection from a non-obvious list (\
say -v '?'\)
Most users won't get there. Worth being a first-class feature.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗