A new plugin for Claude Code adds text-to-speech so developers can hear responses instead of reading them. The tool called claude-read-aloud ships with free system voices and a local neural engine. Premium options include Speechify ElevenLabs and OpenAI for higher quality output.
Michael Gifford released the plugin on GitHub. It works in Claude Code's terminal interface and has a companion extension for VS Code. The VS Code extension adds an in-chat speaker button hotkeys and a settings panel inside Claude Code's sidebar.
Why listening changes the workflow
Developers working with Claude Code all day read constantly. After hours of screen time the eyes skimming instead of absorbing. Listening shifts that load. You hear the full answer while your eyes stay on the code it describes. For developers with low vision dyslexia or screen fatigue the tool makes Claude Code usable where it was not before.
The plugin handles long replies without delay. Text splits at sentence boundaries into ramped chunks. Small chunks go first to minimize time to first sound. Each next chunk synthesizes while the previous one plays so there are no gaps. Replies cap at 12000 characters or about 14 minutes and notify you when cut. Code blocks get spoken as "code omitted" since nobody wants JSON read aloud.
Free voices with no setup
The default provider uses system voices. macOS says the voice directly. Linux uses speech-dispatcher. Windows uses SAPI. No configuration needed. One limitation on Linux: the stock voice is espeak which sounds robotic. Running /read-aloud:voice-setup installs Kokoro a local neural voice with 54 options. The download is about 340MB and runs entirely on your machine with no account or API key required.
Premium providers cost money but deliver better quality. Speechify runs about ten dollars per million characters. ElevenLabs starts at five dollars per month. OpenAI costs fifteen dollars per million characters. Each requires an API key set as an environment variable. The config file at ~/.config/claude-read-aloud/config.json stores your provider choice voice speed and auto-read setting. API keys never touch the file.
Installation takes two commands
Run these from the terminal:
claude plugin marketplace add michaelpgifford/claude-read-aloud
claude plugin install read-aloud@claude-read-aloud
The same steps work inside Claude Code as /plugin marketplace add and /plugin install. Python 3.9 or higher must be on your PATH. No packages to install since the entire engine is one standard library script. Terminal only users need just the plugin. VS Code users add the extension separately from the marketplace.
VS Code extension adds the interface
The extension called MichaelGifford.claude-read-aloud-button adds a status bar button a toolbar icon on the Claude Code panel and hotkeys. On Linux and Windows press Ctrl+Alt+S to speak and Ctrl+Alt+X to stop. macOS uses Cmd+Option+S and Cmd+Option+X. The right-click menu includes "Read aloud" alongside copy and paste. Highlight specific text first and only that section reads.
The most useful additions sit inside the chat itself. A speaker button appears next to the microphone in the chat box. Click it and the visible reply reads aloud. This scopes to the current workspace so sessions in other projects cannot hijack what gets read. A Read Aloud section in Claude Code's sidebar shows the current voice with a test button a provider switcher speed control and auto-read toggle. Selecting a new voice from the searchable picker saves it and plays a sample immediately.
How the in-chat button works
VS Code provides no official way to add a button inside another extension's webview. The solution patches two files in the installed Claude Code extension. The webview/index.js file gets a script appended that inserts the button and captures right-click selections. The extension.js file has its Content-Security-Policy updated to allow one localhost connection on port 48777. This is the reason the feature is opt-in rather than default.
Original files get backed up with .cra-orig extensions and restored exactly on removal. Every Claude Code update wipes the patch. The extension notices this on startup and re-applies it asking you to reload. In the worst case the button disappears until the next reload. The hotkeys and status bar button never depend on the patch. If you previously hand-patched these files revert that first since the patcher refuses to stack two injections.
This is a userscript style local modification in the same spirit as browser extensions that add buttons to websites. It never leaves your machine. The ideal fix would be Anthropic shipping a TTS feature natively in Claude Code.
Auto-read stays off by default
The developers measured over four hours of speech per day in a working session. Auto-read is off on purpose. You can enable it with /read-aloud:speak-auto on but most people return to on-demand within a day. The plugin remembers your choice. Stop always works mid-sentence with /speak-stop the button or the hotkey.
Speechify's WAV files sometimes arrive with broken streaming header sizes. The plugin repairs them automatically. If you hear static with another tool that was likely the cause.
Under the hood
The plugin uses the session's own transcript for playback. Hooks receive the exact path so there is never a guess about which conversation to read. The /read-aloud:speak-status command shows the current provider voice and config location. The command provider option lets you plug in any local engine like Piper or Kokoro through a command template. The {text} placeholder gets replaced with the text to speak. Add {out} if your engine writes a WAV file which enables gapless chunking.
The project is MIT licensed. The repository lives at github.com/MichaelPGifford/claude-read-aloud. The VS Code extension installs from the marketplace with code --install-extension MichaelGifford.claude-read-aloud-button. For developers who spend hours reading Claude Code output this tool converts that time into listening time which changes how you interact with the assistant.