Claude TTS Local
Claude TTS Local reads Claude Code's final assistant replies aloud on Windows using the local SAPI voices already installed on your machine.
Written by Aydın Fatoğlu.
Why It Exists
Long Claude Code runs often finish while you are looking elsewhere. This extension gives those final replies a local voice, without sending your text to Google, Azure, ElevenLabs, OpenAI, or any other cloud TTS service.
It is purpose-built for Claude Code's official Stop hook and the last_assistant_message payload. The actual speech is handled by Windows System.Speech.Synthesis.SpeechSynthesizer / SAPI.
Features
- Reads Claude Code's final assistant response automatically.
- Uses only local Windows SAPI voices.
- No cloud TTS service, API key, or internet connection required for speech.
- Uses Claude Code's official
Stop hook.
- Reads
last_assistant_message from the hook JSON payload.
- Removes long Markdown code blocks before speaking.
- Reads Markdown links by their visible text instead of the URL.
- Cleans common Markdown formatting noise.
- Supports mixed Turkish / English replies in
auto voice mode.
- Switches between Turkish and English SAPI voices by text chunk.
- Keeps rate and volume controls in VS Code.
- Runs the speaking process asynchronously so Claude Code is not blocked.
Commands
Open the Command Palette and search for Claude TTS.
Claude TTS: Open Settings
Claude TTS: Install Claude Code Hook
Claude TTS: Stop Speaking
Claude TTS: Replay Last Speech
Claude TTS: Test Voice
Claude TTS: Toggle Enabled
Claude TTS: Open Config
Setup
- Install the extension.
- Run
Claude TTS: Install Claude Code Hook.
- Run
Claude TTS: Open Settings.
- Keep
Voice set to auto for mixed Turkish / English detection.
- Ask Claude Code a short question and wait for the final reply.
To interrupt an ongoing readout, run Claude TTS: Stop Speaking or click the Stop TTS status-bar item. After stopping, the same status-bar item changes to Replay TTS so you can hear the last reply again.
Claude TTS Local creates or updates:
%USERPROFILE%\.claude\settings.json
Before changing an existing Claude settings file, it writes a timestamped backup under:
%USERPROFILE%\.claude\backups
Settings
The extension stores speech settings in config.json next to the speech script.
{
"enabled": true,
"rate": 0,
"volume": 100,
"voice": "auto"
}
rate uses the Windows SAPI range:
-10: slow
0: normal
10: fast
When voice is auto, the script scores text chunks and chooses a Turkish or English voice when available. If a matching language voice is missing, it falls back to another installed SAPI voice.
Privacy
Speech synthesis is local. Claude TTS Local does not upload the assistant response to a remote TTS provider.
The extension only reads and writes:
- Its local config file.
- The Claude Code settings file when you explicitly install the hook.
Requirements
- Windows.
- VS Code 1.85 or newer.
- Claude Code installed and configured.
- At least one installed Windows SAPI voice.
- Optional: Turkish and English SAPI voices for best mixed-language output.
Stop Ongoing Speech
Claude TTS Local tracks the PowerShell process currently speaking and writes its process ID to a local speech.pid file. The Stop Speaking command safely targets that tracked speak.ps1 process and removes the PID file.
The last cleaned reply is stored locally in last-speech.txt. After you stop playback, use Replay Last Speech or the Replay TTS status-bar item to restart the last readout.
This gives you a fast stop button without disabling future automatic reads.
Notes
This extension is not affiliated with Anthropic, Claude, Microsoft, or Visual Studio Code.
Marketplace note: there are other voice/TTS extensions for Claude-related workflows. Claude TTS Local is focused on local Windows SAPI output through Claude Code's official Stop hook.