Vibe Coding Needs a Soundtrack
I counted once. In a single Claude Code session — maybe an hour of work on a gnarly TypeScript refactor — the agent produced about 4,200 words of English prose. That is a Medium longread. I did not read a Medium longread. I wrote about 180 lines of code with the agent that hour, and in exchange the agent handed me a Medium longread about those 180 lines, and I skimmed maybe a fifth of it.
This is a problem specific to the last two years. Before Karpathy coined vibe coding, before Cursor shipped Composer, before Claude Code existed, you read code during development. Your code, someone else's code, doesn't matter. Code was the thing being read. The output of your work was code and the input to reviewing your work was also code.
Now half of what you produce during a session is the agent's narration about the code. The plan it wrote before touching anything. The diff walkthrough after each edit. The explanation of why it chose Map over Object. The caveat about edge cases you should verify. Each chunk is useful. Each chunk is roughly 100 to 300 lines of prose. You are supposed to read all of them. You know, deep down, that you are reading about a third.
And you get away with it. Mostly. Until three turns later when the agent says "as I mentioned earlier, the retry logic intentionally skips 404s" and you have no idea where "earlier" is, because you scrolled past it without reading. Now you scroll up. Find the paragraph. Read it. Scroll back down. Your context is blown. The plan you had in your head is gone. You were about to approve a diff and now you're lost in a chat log.
This is the audio-shaped hole in vibe coding.
I do not think I am the only person who noticed. I think everyone noticed. What nobody was doing, at least not in a way I could find, was solving it with TTS. The existing solutions all missed the shape of the problem. macOS Say speaks like a Speak & Spell. ChatGPT's voice mode only works inside ChatGPT. VoiceOver reads every menu bar item and dialog box because it is a screen reader for blind users, which is a completely different job. None of them are "select this arbitrary chunk of terminal text and read it in a decent voice." That's not a feature any of them ship.
So we built it. The extension started as something to listen to Substack articles while cooking. Then I noticed I was selecting Claude Code output and hitting the bubble more than I was selecting Substack. Then I realized that's the actual use case. Not "help me read articles" — "help me keep coding while the agent explains what it did."
The moment it clicked was a Tuesday afternoon around 4pm. I was reviewing a diff Claude had made across seven files. The explanation was dense. Six paragraphs. I selected the explanation, hit play at 1.5x, and my eyes went to the diff view. For the next ninety seconds I watched the changes scroll by while the rationale played in my ears. Import moved from line 12 to line 8 — yes, that's because the helper now gets called earlier, I just heard it. Parameter renamed from ctx to context — yes, the agent said it was for consistency with the adjacent file. Every change had its explanation tagged to it, not because of any smart alignment code, just because I was consuming both streams at the speed they naturally run.
That's the unlock. When you read agent output, you read it then look at the code. Sequentially. Slowly. With eye fatigue piling up. When you listen to agent output, you consume it while looking at the code. Parallel. No context switch. Your visual bandwidth is spent on the thing that actually matters, which is the code, and your audio bandwidth — which was previously spent on silence or Spotify — absorbs the justification.
Surgeons listen to music. Truckers listen to audiobooks. Not because they are bored. Because their eyes are committed. Vibe coding gives you the same constraint. Your eyes are on the diff, on the test output, on the terminal, on the file tree. Your ears are free. Route something useful to them.
I have seen people push back on this, so let me acknowledge the pushback. One, "but I can read faster than the agent can speak." Maybe. At 2.5x playback most people can barely keep up with Kokoro on technical content. The bottleneck is comprehension, not words-per-minute, and comprehension for agent output is weirdly higher in audio because you can't skim your way past the confusing bit. You have to let it finish. Two, "but I want to scan." Scan the code. The explanation is linear and dense; scanning loses you the chain of reasoning. Three, "but my team doesn't do this." Neither does mine. I don't care. The point isn't conformity, it's getting more out of the three hours you spend each day reviewing AI output.
If I'm honest about what changed in my own workflow since I started doing this, it's not speed. I do not ship more code. I ship roughly the same amount. What changed is how much I trust what the agent did. Before, I would accept diffs I hadn't fully understood because reading the explanation was expensive. Now I can hear the full rationale while I skim the diff, so I actually know what I'm approving. The error rate went down. The number of "wait, why did we do it this way" moments in PR review went down. I still catch things I disagree with, but I catch them earlier, before the diff lands in a commit.
The whole thing is free. I keep having to repeat that because it confuses people. There is no API key, no signup, no freemium tier. We run the TTS server. You install a menubar app, give it accessibility permission, and select text. That is the entire onboarding. It takes thirty seconds.
What I can't promise is that you'll keep using it. Some people try it, shrug, and go back to reading. That's fine. Vibe coding is still new enough that nobody has settled on what the right workflow looks like. Maybe audio isn't the answer for you. Maybe you read at 3,000 words per minute and the parallelism buys you nothing. I would still bet, though, that if you spend an hour today inside Claude Code or Cursor or Gemini CLI, and you add up the prose the agent produced, and you try to honestly estimate how much of it you actually read — you'll find the gap. And once you see the gap, you'll want to close it.
Select the text. Hit play. Look at the code.
That's the whole trick.
Related Reading
More ways to use audio while coding.