{"slug": "i-dictate-almost-every-prompt-to-claude-code-now-this-mac-tool-writes-down-what", "title": "I dictate almost every prompt to Claude Code now. This Mac tool writes down exactly what I said", "summary": "A developer released voice-input, an MIT-licensed push-to-talk dictation tool for macOS built on Hammerspoon and a zsh script, designed specifically for prompting coding agents like Claude Code. The tool transcribes speech via Alibaba Cloud's qwen3-asr-flash or Gemini, then applies a constrained qwen-plus cleanup pass limited to removing fillers, fixing punctuation and correcting term spelling, with a self-maintaining vocabulary file that Claude Code updates with \"wrong => right\" corrections. Over 23 days the developer logged 1,872 clips (about 13 hours of audio) at under $2 in list-price API cost, with 86 of 108 vocabulary edits made automatically by Claude.", "body_md": "**TL;DR**: [voice-input](https://github.com/siyuanseever/voice-input) is push-to-talk dictation for macOS. Tap right Command, speak, tap again, and a second or two later the text is pasted at your cursor. It is built for talking to coding agents, so it has one hard rule: write down what was said. Never rewrite it, never translate it, never answer it. MIT, Hammerspoon plus one zsh script.\n\nMost of my working day is now spent talking to Claude Code: describing a change, pointing at a bug, asking why. Typing that is slow; saying it is fast. Off-the-shelf dictation got in the way in three ways:\n\n`qwen3-asr-flash` (fast and cheap), then Gemini on its free tier, then an optional on-device Qwen3-ASR-1.7B (MLX) that works offline. A model that is out of quota, unreachable or gone is skipped automatically.`qwen-plus` gets a brief that allows exactly three edits: drop fillers and stutters, fix punctuation, fix the spelling of terms. No synonyms, no reordering, no added words, and never an answer.`wrong => right` lines are applied afterwards for what still slips through.\nHere is a synthetic clip I made with macOS `say` and ran through it:\n\n```\nspoken:  \"Um, can you refactor the, the panel code so that it uses the new i18n helper,\n          and then run the tests? Don't push yet.\"\npasted:  Can you refactor the panel code so that it uses the new i18n helper and then run the tests? Don't push yet.\n```\n\nThe \"um\" and the repeated \"the\" are gone; the request is still a request.\n\n`qwen-flash`. It swapped synonyms, reordered clauses and once finished my sentence with half a sentence I never said. Making the rules stricter made it worse. The vocabulary file is the part I'm happiest with, and I don't maintain it by hand. Since I talk to Claude Code all day, it usually understands what I meant and can tell which word was misheard. So my `CLAUDE.md` has a rule like this:\n\n```\n## Misheard words in my dictation\nI dictate most messages. When you can tell a term was misheard and are sure of the right one,\nadd \"wrong => right\" to ~/.config/voice-input/vocab.txt and mention it in one line at the end of your reply.\nIf the wrong spelling is a common word, include surrounding words so normal speech isn't rewritten. If unsure, ask.\n```\n\nIn the first month my vocabulary file got 108 edits; 86 of them were made by Claude this way. The next time I say the word, the transcript is right. That is the loop in the bottom-right corner of the diagram.\n\nAfter a month: 1,872 clips over 23 days, about 13 hours of audio. At list price that is under $2 (about ¥11 on the China region); my actual bill was zero, because on the China region each model version comes with a new-account free quota and the tool spends those first. With \"stop when used up\" turned on in the console, an exhausted quota returns an error instead of a charge, and the next model takes over.\n\nThe tool works with either an Alibaba Cloud Model Studio key (International or China region; set Region to Auto and it works out which one your key belongs to) or a free Gemini key. The UI follows your macOS language, English or Chinese.\n\n`[Pasted text]` and you can't check what was transcribed.`/compact`; saying only \"continue\" pastes `continue` with no full stop.\n\n```\nbrew install --cask hammerspoon\nbrew install ffmpeg jq\ngit clone https://github.com/siyuanseever/voice-input ~/projects/voice-input\n~/projects/voice-input/install.sh\n```\n\nThen give Hammerspoon Accessibility and Microphone permission, paste a key in the panel's Settings, and tap right Command.\n\nKnown limits, up front: macOS only. I mostly speak Chinese mixed with English, so that is what it has been used on most; English I tested with synthetic clips. The Gemini path has no separate proofreading step, so it occasionally keeps a filler word. Issues and PRs welcome.", "url": "https://wpnews.pro/news/i-dictate-almost-every-prompt-to-claude-code-now-this-mac-tool-writes-down-what", "canonical_source": "https://dev.to/threedaycat/i-dictate-almost-every-prompt-to-claude-code-now-this-mac-tool-writes-down-exactly-what-i-said-47ag", "published_at": "2026-10-25 14:42:46+00:00", "updated_at": "2026-10-25 14:44:57.656789+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents", "natural-language-processing"], "entities": ["Claude Code", "Hammerspoon", "Alibaba Cloud Model Studio", "qwen3-asr-flash", "qwen-plus", "Gemini", "Qwen3-ASR-1.7B", "macOS"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-dictate-almost-every-prompt-to-claude-code-now-this-mac-tool-writes-down-what", "markdown": "https://wpnews.pro/news/i-dictate-almost-every-prompt-to-claude-code-now-this-mac-tool-writes-down-what.md", "text": "https://wpnews.pro/news/i-dictate-almost-every-prompt-to-claude-code-now-this-mac-tool-writes-down-what.txt", "jsonld": "https://wpnews.pro/news/i-dictate-almost-every-prompt-to-claude-code-now-this-mac-tool-writes-down-what.jsonld"}}