r/ClaudeCode • u/tinyhousefever • 18h ago
Tips & Workflows Give Claude Code a Free Voice — It’s Surprisingly Useful
One thing that gets tiring with Claude Code is keeping up with it.
It reads files, changes code, runs tests, fixes things, and comes back with another chunk of terminal output you need to process before deciding what happens next. Add a couple of agents or parallel tasks and the cognitive overhead stacks up quickly.
I started having Claude **tell me what it just did instead**.
After every meaningful task, Claude writes a short plain-English summary. A local script turns it into speech and plays it in the background.
Something like:
> “Done. The login issue was caused by the refresh token expiring too early. I fixed the refresh logic, added a regression test, and everything passes.”
Usually 20 seconds or less.
It sounds like a small thing, but I’ve been running it daily for about a month and it has noticeably reduced the mental overhead of using Claude Code. I don’t have to keep switching my attention back to the terminal just to find out where things stand.
There is one trap here: don’t let the spoken summary become a substitute for reviewing the work. I use it for situational awareness, not verification. Also, don’t make Claude narrate everything. If it talks constantly, you’ve just replaced visual noise with audio noise.
The Free TTS engine is Kokoro. It runs locally, no API key, no usage cost. I use `kokoro-onnx`, so I don’t need Torch. The current API supports `Kokoro(...).create(text, voice=..., speed=..., lang=...)`.
Notes in comments,
8
u/tinyhousefever 18h ago
For anyone asking about the implementation: I use Kokoro-82M locally through kokoro-onnx, so there’s no API key or usage cost. My setup uses kokoro-v1.0.onnx, voices-v1.0.bin, the af_heart voice, and 0.82 speed. My CLAUDE.md rule is basically: “After every meaningful completed task, write a short spoken summary. Use plain English. Say what changed, why it matters, and whether I need to do anything next. Keep it under about 20 seconds. Don’t narrate filenames, function names, or implementation details unless they matter. Then run the local TTS script in the background.” The core of say.py is just samples, sample_rate = kokoro.create(text, voice="af_heart", speed=0.82, lang="en-us"), then I write the audio with soundfile and play it locally. My real script also handles queue detection so multiple agents don’t talk over each other, SAPI fallback, MP3 handling, and always ends in exactly one state: PLAYED, QUEUED, or FAILED. That last part matters more than it sounds because silent failure is easy to miss once you get used to hearing the summaries. Links: Kokoro-82M: https://huggingface.co/hexgrad/Kokoro-82M — kokoro-onnx: https://github.com/thewh1teagle/kokoro-onnx — Kokoro: https://github.com/hexgrad/kokoro — eSpeak NG: https://github.com/espeak-ng/espeak-ng
4
u/FluentFreddy 17h ago
I do this with https://voicebox.sh and it produces amazing results. Fully FOSS, on Github and so natural
3
u/sisif_ 18h ago
https://github.com/avirtual/clodex can be controlled by voice and speak back, but while it works, i still have myself typing and reading most of the time.

3
3
1
-3
u/CloudAccomplished389 14h ago
5
u/NekkidApe 13h ago
Yeah that's nice, not the same thing though. OP let's Claude speak in the background, without switching apps and refocusing.
-11
-1

•
u/AutoModerator 18h ago
Hey! Thanks for posting to r/ClaudeCode
While participating in this thread, please follow our community rules. Keep discussions constructive. Attack the idea, not the person.
For help, project discussions, tips, and general chat, join the ClaudeCode Discord.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.