DEV Community

Daisuke Majima
Daisuke Majima

Posted on • Originally published at qiita.com

I built a CLI that reads Claude Code's responses aloud (Zundamon TTS)

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.

Demo video (GitHub)

Setup in 3 lines

brew install john-rocky/tap/voicevoice
voicevoice setup    # also auto-installs VOICEVOX here
voicevoice on
Enter fullscreen mode Exit fullscreen mode

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 uninstall fully restores your environment

Usage

Basics

# turn reading ON and launch Claude
voicevoice on
claude
Enter fullscreen mode Exit fullscreen mode

To toggle mid-conversation:

! voicevoice off    # mute (can run during a Claude conversation)
! voicevoice on     # resume
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

Change the voice

# list available characters
voicevoice -l
Enter fullscreen mode Exit fullscreen mode
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)
...
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

How it works

Claude Code (response complete)
    ↓ Stop hook
voicevoice-hook.sh
    ↓ check if enabled
voicevoice CLI
    ↓ HTTP (localhost)
VOICEVOX engine
    ↓
audio playback
Enter fullscreen mode Exit fullscreen mode

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:

  1. Installs VOICEVOX if missing (downloads the DMG → copies to /Applications)
  2. Generates the hook script (~/.claude/hooks/voicevoice-hook.sh)
  3. 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
Enter fullscreen mode Exit fullscreen mode

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
  • jqbrew 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
Enter fullscreen mode Exit fullscreen mode

If you use VOICEVOX character voices publicly, credit is required (e.g. VOICEVOX:Zundamon). See the VOICEVOX terms.


Originally published in Japanese on Qiita. GitHub / X

Top comments (0)