Built-in voice/TTS announcements for accessibility (screen-reader-friendly mode)

Resolved 💬 3 comments Opened May 8, 2026 by ralstonia Closed May 12, 2026

Summary

Add first-class voice/TTS support to Claude Code so it can speak aloud:

  1. Attention prompts — when waiting for permission approval or user input
  2. 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.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗