Have Zundamon read it aloud
Claude Code is great. But when a long response comes back, you end up staring at the screen the whole time.
"What if it just read this to me, so I don't have to watch the screen?"
So I built it: voicevoice, a CLI that reads Claude Code's responses aloud in real time.
The default voice is Zundamon — a popular Japanese synthetic-voice character. That voice reads Claude's responses to you.
Setup in 3 lines
brew install john-rocky/tap/voicevoice
voicevoice setup # also auto-installs VOICEVOX here
voicevoice on
That's it. Just launch claude as usual, and Zundamon reads each response as it comes back.
What it does
- Auto-reads Claude Code's responses
- Switch among 50+ character voices (Zundamon, Shikoku Metan, Aoyama Ryusei, etc.)
- Fully local. No cloud API, completely free
- When OFF, zero impact on Claude Code (checks one file and exits immediately, ~0.1ms)
- One
uninstallfully restores your environment
Usage
Basics
# turn reading ON and launch Claude
voicevoice on
claude
To toggle mid-conversation:
! voicevoice off # mute (can run during a Claude conversation)
! voicevoice on # resume
Works standalone too
You can use it as a plain text-to-speech tool without Claude Code.
voicevoice "Hello, nice weather today"
# pipes work too
echo "Build succeeded!" | voicevoice
# for a male voice
voicevoice -s 13 "Good work"
Change the voice
# list available characters
voicevoice -l
Shikoku Metan: Normal(id=2), Sweet(id=0), Tsundere(id=6), Sexy(id=4), Whisper(id=36), Murmur(id=37)
Zundamon: Normal(id=3), Sweet(id=1), Tsundere(id=7), Sexy(id=5), Whisper(id=22), Murmur(id=38), Exhausted(id=75), Tearful(id=76)
Kasukabe Tsumugi: Normal(id=8)
Aoyama Ryusei: Normal(id=13), Passionate(id=81), Grumpy(id=82)
...
Pick from 50+ characters × multiple styles. Save your favorite and it's used for the hook-driven auto-reading too.
voicevoice config speaker 13 # switch to Aoyama Ryusei (saved)
voicevoice config speed 1.3 # a bit faster
How it works
Claude Code (response complete)
↓ Stop hook
voicevoice-hook.sh
↓ check if enabled
voicevoice CLI
↓ HTTP (localhost)
VOICEVOX engine
↓
audio playback
It uses Claude Code's Stop hook. Each time a response completes, the hook script fires, grabs the last message, and passes it to VOICEVOX.
Key points:
- Reading runs in the background. You can type your next input even while it's playing.
- Long responses are cut at 500 characters with "…(truncated)."
- Audio from multiple sessions queues via a file lock. Voices never overlap.
- Everything runs on your Mac. No internet needed.
What voicevoice setup does
The setup command automatically:
- Installs VOICEVOX if missing (downloads the DMG → copies to /Applications)
-
Generates the hook script (
~/.claude/hooks/voicevoice-hook.sh) - Registers the hook in Claude Code's settings.json
It won't break existing settings. Running it twice won't double-register.
Uninstall
voicevoice uninstall
This alone:
- removes the hook registration from settings.json (other settings untouched)
- deletes the hook script
- deletes all config and flag files
You return to exactly the same environment as before setup. It's a one-shot to remove, so feel free to try it.
Requirements
- macOS 14+ (Apple Silicon)
- Claude Code
-
VOICEVOX — auto-installed by
voicevoice setup -
jq —
brew install jq
Command list
| Command | Description |
|---|---|
voicevoice setup |
first-time setup (incl. VOICEVOX auto-install) |
voicevoice on |
reading ON |
voicevoice off |
reading OFF |
voicevoice status |
check current state |
voicevoice config |
view/change settings |
voicevoice -l |
list characters |
voicevoice uninstall |
full removal |
Closing
You don't have to watch the screen the whole time you're coding — Zundamon tells you the gist.
Stretching, making coffee, listening to Claude's responses. That kind of dev experience is honestly pretty nice.
Repo:
https://github.com/john-rocky/voicevoice
brew install john-rocky/tap/voicevoice
If you use VOICEVOX character voices publicly, credit is required (e.g. VOICEVOX:Zundamon). See the VOICEVOX terms.

Top comments (0)