Bolo: Voice Dictation That Doesn't Break Your Flow

Inspiration

A month before I built Bolo, my daily workflow looked like this: I'd be working inside Antigravity IDE, asking it to draft an implementation plan for a feature. Once it wrote that plan, I'd copy the whole thing, take it over to Claude, and ask Claude to read through it and flag any technical nuances I might be missing before I let Antigravity actually start writing code. I'd go back and forth like this three or four times, refining the plan until it was solid, before finally approving Antigravity to execute.

I was dictating all of this with Wispr Flow at the time. And that's where the friction showed up. Every time I needed to paste something in the middle of talking, like the improved implementation plan Claude had just handed back to me, I had to stop dictating completely, paste the text in manually, and then start dictating again to keep giving context. Doing that three or four times per feature, every single day, broke my train of thought constantly. It felt nothing like how we naturally write. When you're typing and need to drop in a link or a snippet, you just hit Cmd+V mid-sentence and keep going. Dictation had no equivalent of that.

So the core idea behind Bolo was simple: what if I could pause mid-speech, splice in whatever I'd just copied, and keep talking without ever breaking the recording?

The second reason was privacy. Every one of those voice notes, including plans, code discussions, and half-formed ideas, was getting sent off to Wispr Flow's servers. I wanted something that ran entirely on my own machine, so nothing left my laptop unless I explicitly chose a cloud model for speed.

Those two frustrations, broken flow and no control over my own data, are what Bolo exists to fix.

What it does

Bolo is a fast, private, open source voice dictation tool for macOS and Linux. Press a global hotkey (Ctrl+Space) from anywhere, in any app, and your speech gets transcribed and dropped right at your cursor. You can run it fully offline with local Whisper models, or switch to Groq's cloud Whisper for near instant transcription when speed matters more than staying local.

The feature closest to my heart is Option+V, mid dictation clipboard splicing. Press it while you're still talking, and whatever's on your clipboard gets injected into the transcript in place, no stopping, no restarting, no losing your train of thought. There's also Enhance Mode, which came out of a much smaller annoyance: when I ramble or trail off with "umm"s and half sentences, I can hit Groq Enhance and it cleans the raw transcript up into something structured, instead of me manually editing it afterward.

How we built it

I'm a vibe coder. I don't sit down and write every line myself, I work by describing what I want to Claude and iterating with it until the implementation is right. Bolo came together the same way: a Rust core daemon handling audio capture and voice activity detection, native hotkey layers for macOS (CGEventTap/Carbon) and Linux (Desktop Portals for Wayland and X11), and a routing layer that sends audio to either a local Whisper engine or Groq's cloud API depending on what I've configured.

Building it this way meant a lot of describing intent, reviewing what came back, and pushing back when something didn't sit right, which, funnily enough, is the exact same iterative loop that inspired the project in the first place. I was using the workflow that frustrated me to build the tool that fixed it.

Challenges we ran into

The trickiest part wasn't a bug in the traditional sense. It was getting the background daemon to actually behave like a daemon: staying alive persistently, surviving my laptop going to sleep, shutting the lid, opening it back up later, and just being there, ready, without me having to relaunch anything. Getting that right took Claude several attempts before the daemon actually held up the way I needed it to. It's the kind of problem that's invisible when it works and incredibly annoying every single time it doesn't, so getting it solid was worth the extra iterations.

Accomplishments that we're proud of

Getting a single Rust daemon to behave natively and reliably across two very different operating systems, and two very different hotkey and permission models on top of that, is the accomplishment I'm most proud of. macOS and Linux don't agree on how global hotkeys work, Wayland and X11 don't even agree with each other, and Bolo handles all three without the person using it ever needing to think about it.

I'm also proud that Option+V actually works the way I imagined it in my head before I ever wrote a line of code. It's a small feature on paper, but it's the entire reason Bolo exists, and getting it to feel truly seamless, splicing text mid-recording without a hiccup in the audio stream, made the whole project feel worth it.

And beyond the feature set, I'm proud that Bolo is free and fully open source. Wispr Flow and Superwhisper both charge monthly subscriptions for something people should be able to run privately on their own hardware.

What we learned

Building Bolo taught me that the best product ideas usually come from your own daily irritation, not from staring at a whiteboard. I didn't set out to build "an open source Wispr Flow alternative." I set out to stop breaking my own concentration four times a day. The privacy angle and the cross platform support came later, once I realized other people probably had the exact same two problems I did.

I also learned a lot about the gap between "this should be simple" and "this is actually simple to keep running forever in the background on someone's machine." Hotkeys, permissions, and daemons behave differently on macOS and Linux, and getting something that feels invisible and reliable across all of that takes real iteration, even when you're building with AI doing most of the typing.

What's next for Bolo

There's plenty of room to grow. I'd like to keep refining the local Whisper experience so it's a genuinely fast and accurate offline option, not just a fallback for when privacy matters more than speed. I also want to grow the vocabulary biasing so it adapts to a person's own writing and speech patterns over time instead of requiring a manually maintained word list. And since Bolo is fully open source, I'm hoping to bring in contributors who want to help push it onto more platforms and into more workflows than I could reach building it alone.


Built With

Share this project:

Updates

Submission history