SpeakySpeak
start some Claudes, walk away hear replies as they arrive
(rainbows = replies waiting)
What the demo replies say
- Terminal 1, events-site: “Deploy finished, the events site is live and the newsletter went out to 212 readers.”
- Terminal 2, markemark: “I found the memory leak. It was the image cache holding every thumbnail forever. One line fix, tests are green, ready for your review.”
- Terminal 3, everething: “The refactor is done, all 34 tests pass and the branch is pushed. The tricky part was the session cache. My notes are in the commit body.”
Free (and fully local voice processing)
for Claude Code on macOS
What it does
One voice at a time
Replies queue up instead of talking over each other.
AirPods stem controls
Click to pause, skip ahead, or step back.
It waits for you
Pause it, and new replies queue up quietly.
The mini player
Drag it anywhere; the full queue lives in the menu bar.
Why a voice?
Because eyes are usually busy and ears usually aren't.
ADHD-friendly
Replies find you instead of waiting in a quiet window. No staring at a terminal, no forgotten tabs.
Blind and low-vision devs
Every reply read aloud in a natural voice, without steering a screen reader through terminal output.
Hands full
Feeding the baby, making dinner, pacing with a coffee – the work keeps talking while you live your life.
RSI and limited mobility
AirPods clicks and one global hotkey drive the whole thing. No mouse, no window-hunting.
A suggested way to work
None of this is required – one Claude Code session works fine on its own. It's my adapted version of how Boris Cherny, Claude Code's creator, works – tuned to my own workflows.
A window per project, each its own color
Start long runs, then walk away.
Replies aloud, one at a time, in order.
Timestamps on replies, so a backlog makes sense by ear.
Two Macs? A different voice for each.
Those tab colors are an iTerm2 setting: Session › Edit Session › Tab Color. How to use it is the five-minute visual tour of all of this; the full guide has the rest, including the one line to add to your CLAUDE.md so every reply says what time it was written.
Full Feature List
The queue
- One at a time – replies play serially, never over each other
- Newest plays next – or group by session and hear each one's replies in the order they happened
- Pause holds everything – new replies wait; a rainbow glow reminds you
- Skip one reply – drop the track you don't want without stopping the pipeline
- Survives restarts – the queue is restored on launch, silently
- Clear played / clear all from the full deck
- Take control – play a reply now, remove it, or send a whole session to the front
Playback
- Speed selector – 0.8× to 2×, right on the full deck
- Volume slider, with every render loudness‑normalized so replies match
- Back 10 / forward 10, restart, previous reply, full transport
- Mute that keeps queueing – chats build up quietly until you're back
- Global quiet hotkey (⌃⌥⌘Space) – silence the room from any app, no permission prompts
The voice
- Kokoro neural voice – a free neural voice that runs on your own Mac (Apple Silicon), ~54 to choose from. English only for now; other languages fall back to a macOS voice
- Warm renderer – replies become audio in under a second
- Automatic fallback to the best installed macOS voice (Intel works too)
- Voice preview in Settings; changing voice re‑renders what's still queued
- Per-machine voices – tell your Macs apart by ear
AirPods & media keys
- Stem clicks – click to pause, double for next, triple for back
- Now Playing – Control Center scrubber while speaking, released when idle so your music keys come back
- Two Macs, one pair – the two apps take turns instead of fighting over your AirPods
What it reads
- The whole reply – every part of a long turn, not just the last paragraph
- Tuned for the ear – emoji and markdown stripped, paths spoken as filenames, URLs as "link"
- You choose when – at the end of a reply, or as a long run works, so you hear a request made twenty minutes in
- Permission prompts, out loud – when Claude stops to ask "may I run this?", a distinct chime plays and you hear which session is waiting and what it asked
The app
- Floating mini player – auto-appears while speaking, drag it anywhere, in three looks: Classic, Glassy or Glassier
- Your accent colour – one slider repaints the whole app, colours or plain white, grey and black
- Menu-bar icon with queue badge and a pulse while playing, and a slash through it whenever nothing will be heard
- Works where Claude Code runs on your Mac – terminal, the desktop app, VS Code, Cursor. Not Claude Code on the web, and not sessions on another machine over SSH
- Native Settings window – it writes plain text files in your home folder, so edits from the shell stay in sync
- Built-in updates – an ↑ on the menu-bar icon when a new one is out, one button in Settings to install it
- Fully local – no accounts, no telemetry, MIT-licensed, works offline
Install
There's no download. The installer is your Claude: it builds the app from source on your Mac, checking every step – and it's more fun this way, because you watch it get made, and later the same Claude can customize anything (the voice, the speed, when it speaks). Just ask it.
It clones the repo, installs what's missing, builds the app and wires up the hook. Needs macOS 15.6 or newer, Claude Code, Homebrew, and the Xcode command-line tools.
How to use it · GUIDE.md · INSTALL.md · github.com/radam5000/speakyspeak
Using Claude Code in the desktop app, VS Code or Cursor? Same install, same result. Claude Code on the web and sessions on a remote machine are out: the hook has to run on the Mac that plays the sound. Tested by hand in the terminal and the desktop app; VS Code and Cursor use the same hook mechanism. Want a particular voice, a slower speed, or two Macs sharing one pair of AirPods? Add that to the prompt – the instructions tell Claude how to adapt.
Also by Adam
Previews Markdown right in Finder, with the spacebar.
An offline knowledge tablet – no internet required.
Feel free to say hi and connect if this helped you.