Remix.run Logo
d4rkp4ttern an hour ago

Related: I used the amazing 100M-parameter Pocket-TTS [1] model to make a stop-hook based voice plugin [2] that lets Claude Code give a short voice update whenever it stops. The hook quietly inserts nudges to Claude Code to end its response with a short speakable summary, and in case it forgets, it uses a headless agent to create the summary.

It was trickier than I expected, to get it working well: FFMpeg pipe streaming for low-latency playback, a three-hook injection strategy because the agent forgets instructions mid-turn, mkdir-based locks to queue concurrent voice updates from multiple sessions, and /tmp sentinel files to manage async playback state and prevent infinite loops.

[1] Pocket-TTS: https://github.com/kyutai-labs/pocket-tts

[2] Claude-code voice plugin: https://pchalasani.github.io/claude-code-tools/plugins-detai...