Adding Voice In and Out to Claude Code for Nothing
Running an agent in a terminal keeps your hands on the keyboard, and long tasks keep your eyes on a screen you don’t otherwise need to watch.
I wired up voice input and output. Both ended up free, but not on the first attempt — and the thing that decided it wasn’t quality or price.
Input: it’s already built in
I installed a separate dictation tool first, then deleted it. Claude Code ships /voice.
Tap mode is the one worth using: press space once to start, talk, press again to stop. Better than push-to-talk for anything longer than a sentence, because you’re not holding a key while thinking.
Check for a native equivalent before adding a tool. I did it in the wrong order and installed something I didn’t need.
Output: where it got interesting
Attempt 1 — ElevenLabs
Quality is excellent. Wire it up over MCP and the agent can generate speech itself.
The free tier is 10 minutes a month. For reading back replies, that’s a few days.
More importantly, buried in the terms:
The free tier prohibits commercial use and requires attribution to
elevenlabs.io.
For a personal experiment, fine. If anything you’re building might eventually earn money, the free tier disqualifies itself — and that’s a much harder constraint to notice than a minute counter, because nothing warns you. You just find out later that everything you produced was out of compliance.
Attempt 2 — Edge TTS
Uses the read-aloud voices behind Microsoft Edge. No credits, no quota. Quality is a step below, and completely fine for the job.
Wrapped in one command:
speak "build finished"
speak summary.md # read a whole file
The file case turned out to be more useful than the notification case. Long documents get read while I do something else.
The comparison that mattered
| ElevenLabs free | Edge TTS | |
|---|---|---|
| Quota | 10 min/month | none |
| Cost | $0 (paid: $6–22/mo) | $0 |
| Commercial use | prohibited | allowed |
| Attribution | elevenlabs.io required |
none |
| Quality | best in class | fine for daily use |
The answer was routine work on Edge TTS, anything that ships on a paid tier. Trying to standardise on one provider was the actual mistake.
Auto-narration needs two constraints
I hooked replies to be read aloud automatically. It became usable once I added two rules.
Read one sentence, not the reply. Reading the whole thing means reading code blocks out loud. One sentence is enough to convey “it’s finished” or “it’s asking you something”, which is all you need from audio.
Ship an off switch.
jarvis on
jarvis off
You will need this. The first time your machine starts talking during a call, or in a library, or with someone else in the room, is the moment you learn that a hook without a kill switch is a bug. Build the toggle at the same time as the hook, not after.
Dashboards: put it where you already look
I built two views of system state and kept one.
- A standalone HTML dashboard — nice to look at, never opened
- A dashboard inside the notes app I open every day — actually read
Only the one embedded in an existing habit survived. Standalone dashboards are fun to build and don’t attach to anything you already do.
I consolidated scattered note folders into a single vault for the same reason. Multiple storage locations means repeatedly asking “where did I write that”, and that friction is enough to stop you writing things down at all.
What I’d tell myself
- Auto-narration is a notification channel, not a reading channel. Try to absorb content through it and you’ll go back to the screen
- Voice input wins on long instructions. Short commands are faster typed
- On free tiers, read the licence before the limits. “10 minutes a month” was survivable. “No commercial use” wasn’t, and it was the part I nearly missed