Typing is the bottleneck now. An agent will happily take 3 times the context you'd ever bother typing: your constraints, your edge cases, the things you explicitly don't want. Almost nobody gives it that. Typing a paragraph is a chore, so you send a one-liner and get a one-liner's quality back.
Dictation fixes it. Most people quit before they find a tool that works, because the first ones you try are slow, clip the start of your sentence, and can't spell your own product names.
Dictate intent and constraints, not code.
Describe what you want and what you don't want. The model handles the structure. Speaking out variable names, brackets and indentation is a waste of breath.
Accuracy and speed matter less than you'd think. What makes dictation stick is pressing the same key everywhere: an email, VS Code, a commit message, Claude chat, a Teams reply, your agent's prompt. Once you stop checking whether this app has a mic button, it's automatic.
So no per-app mic buttons, and don't run one dictation tool inside your AI CLI and a different one everywhere else. Pick one hotkey and use it for everything.
Handy is the one to pick. Free, open source (MIT), push-to-talk, and it runs on Windows, macOS and Linux. Press the shortcut, talk, and your words paste into whatever field has focus.
winget install cjpais.Handy on Windowsbrew install --cask handy on macOSThe no warm-up point sounds minor. It's the reason most people give up on in-app dictation, and almost nobody works out what actually went wrong.
You click the mic button in the Claude or ChatGPT app and start talking straight away, because of course you do. The first few words never make it. The button needs a moment to spin up.
Your transcript starts mid-sentence, you retype it by hand, and the 3rd time it happens you stop bothering.
❌ Figure: Bad example - Bad example - An in-app mic button that clips the start of every sentence
You press the Handy hotkey and talk. Recording starts on the keypress, so the first words land.
✅ Figure: Good example - Good example - Push-to-talk that is recording from the moment the key goes down
Handy is also why you don't need a subscription for this. Wispr Flow is USD $12/user/month billed annually (USD $15 monthly) and Aqua Voice is USD $8/month billed annually (USD $10 monthly). Both are cloud-based, so you get the confidentiality question back.
Windows' built-in Win+H dictation. Slow, unreliable, and the reason most people decide dictation isn't for them before they ever try anything good.
❌ Figure: Bad example - Bad example - The OS dictation that puts people off dictation entirely
Claude Code has dictation built in. Run /voice, hold Space while you talk, then release. It's free (no tokens, and it doesn't count toward the limits in /usage) and it's tuned for coding vocabulary.
It's fine. It's still not worth switching tools for:
/voice doesn't exist in Claude chat, in Codex, in your browser, in your IDE or in Teams, so you need Handy for all of those anyway. Two dictation keys is worse than one, and the key you use in the other 20 apps is the one that winsIt's also missing in places you might well be working. It needs a Claude.ai account, so it's out with an Anthropic API key, Amazon Bedrock, Google Cloud or Microsoft Foundry, and it's out over SSH or in Claude Code on the web, because the microphone is local. Handy has none of those limits. It just types into whatever's in front of you.
Use /voice when you're on a machine that doesn't have Handy and you want dictation right now. Then install Handy.
🙂 Figure: OK example - OK example - /voice as a stopgap, not as your dictation setup
Learn more: Claude Code voice dictation docs
3 tweaks take Handy from "works" to "used every day":
Custom words earn their keep fastest, because the words you say most often are the ones every model gets wrong.
Product names: YakShaver, SugarLearning, TimePro
AI tool names you say constantly: Codex, Cowork, Claude (frequently transcribed as "clawed"), Anthropic
Plus the names of the people on your team, which transcription always mangles.
✅ Figure: Good example - Good example - Custom words worth adding at SSW
Don't add your codebase's symbols. Loading in every class and function name is tempting and pointless.
Your agent already has the repo in context, so say "the yak shaver controller" and it'll resolve that to YakShaverController on its own, because it can see the file. Dictating to an agent doesn't need an exact transcript, only one that's close enough to understand.
Save custom words for the places where nothing will fix it for you afterwards: a product name in a client email, a colleague's name in Teams, a commit message. Keep the list short. Every extra entry is another candidate for the fuzzy matcher to test, and another chance it fires on something you didn't mean.
Whisper models take your custom words as the initial_prompt, so they bias recognition itself. Every other model, which on Windows means Parakeet, is not biased - Handy runs a fuzzy match over the finished transcript instead. That leaves a few limits worth knowing:
There is no import button. For bulk entry, edit %APPDATA%\com.pais.handy\settings_store.json, add to the custom_words array, and restart Handy.
Once the habit's there, it's not only for prompts:
See also: Do you use Dictate for emails? for the Microsoft 365 built-in equivalent.