The loop is short: hold a hotkey, record from the microphone, run a local Whisper model, tidy the text and paste at the cursor. Open-source apps such as Handy and OpenWhispr already do this offline, so an agent can finish a working single-platform version in one sitting. The fiddly parts are macOS permissions (microphone, accessibility, input monitoring) that stop sticking when the app moves, and the cleanup quality. You give up the phone apps, sync, the meeting Notetaker and per-app tone.
Before you buildWispr Flow Free allows 2,000 dictated words a week on desktop. If that is enough, you don't need to pay or build.
Build me a hold-to-talk dictation tool to replace Wispr Flow. Requirements: - Python 3.12 on macOS 13+: a menu-bar app (`rumps`) started with `uv run dictate`, showing idle, recording and transcribing states. - Hotkey: hold Right Option to record and release to stop (`pynput`). A tap under 300 ms is ignored; Escape while recording cancels. - Audio: `sounddevice` at 16 kHz mono into memory, capped at 90 seconds; trim silence at both ends with `webrtcvad`. Audio is never written to disk. - Transcription: `faster-whisper` with the `small.en` model, int8, fully local. A settings file selects another model for other languages. The first run downloads the model (about 0.5 GB) and says so. - Cleanup: remove "um", "uh" and repeated words with rules and keep the punctuation Whisper returns. An optional LLM pass, off by default, goes to an OpenAI-compatible URL from .env (a local Ollama URL works) and only fixes self-corrections such as "five, no, six" without rewording. - Paste: put the text on the clipboard, send Cmd+V with `pynput`, then restore the previous clipboard after 300 ms. - Dictionary: ~/.dictate/words.txt of names and jargon, passed to Whisper as the initial prompt, and a snippets file that expands spoken triggers such as "my email" into text. - History: sqlite3 at ~/.dictate/history.db keeping the last 500 transcripts, viewable from a menu item, with a "never store" setting. - Single user. No accounts, no telemetry. The only network calls are the model download and the optional LLM URL. - Out of scope: Windows, Linux, phones, meeting transcription, team features, per-app tone. - README: the three macOS permissions to grant (Microphone, Accessibility, Input Monitoring), a warning that they attach to the terminal or the built app so moving it means granting them again, and a budget of 15 minutes for the prompts.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Wispr Flow.
Add a command mode to the dictation tool in this folder. Requirements: - Hold Right Option + Right Shift to record a spoken instruction instead of dictation. - Copy the current selection (Cmd+C, then restore the clipboard), send it and the instruction to the configured LLM URL, and paste the reply over the selection. - Show the instruction and the result in a menu item for undo, and refuse to run if no LLM URL is set. - Never send text unless the hotkey was pressed. - Update the README.
Add per-app styles to the dictation tool in this folder. Requirements: - Detect the frontmost app's bundle ID with `pyobjc` (NSWorkspace) when recording starts. - A styles.toml maps bundle IDs to a style (casual, neutral, formal) and an optional list of words to avoid. - With the LLM pass on, add the style as an instruction; with it off, only apply the rule-based cleanup. - Log the app and style used with each history entry. - Update the README.
Port the dictation tool in this folder to Windows 11. Requirements: - Keep the core in a platform-neutral module and put hotkey, paste and tray code behind a small interface with macOS and Windows implementations. - Windows: hold Right Alt via `pynput`, tray icon with `pystray`, paste with Ctrl+V, config under %APPDATA%\dictate. - Document that apps running as administrator ignore simulated keystrokes from a normal process. - Add tests for the platform-neutral cleanup and dictionary code. - Update the README.
Add live partial transcription to the dictation tool in this folder. Requirements: - While recording, transcribe the last 5 seconds every 2 seconds and show the latest text in a small floating window (`rumps` or a tiny Tk window) without typing it anywhere. - On release, run the full transcription as before and paste only that result. - Skip the live preview when the CPU is busy: if one pass takes longer than 2 seconds, stop previewing for the rest of the recording. - Update the README.
It types into every text field on four platforms, cleans up speech as you talk and learns your names and jargon, so the output needs little editing. People who dictate all day pay for that polish and for the same behaviour on laptop and phone. Occasional users can stay on the free 2,000 words a week.
Estimate · Local transcription costs nothing. The optional cleanup pass is billed per token by whichever provider you point it at. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0/user | $0/user | 2,000 words a week on desktop and 1,000 on mobile, 100+ languages, personal dictionary and snippets, limited Notetaker access. |
| Pro | $15 | $12 | Unlimited dictation, longer Notetaker history, shared dictionary and snippets, a shared team workspace, centralized billing, usage analytics and priority support. |
| Growth | $23 | $18 | Everything in Pro plus SAML SSO, org-wide HIPAA enforcement with a signed BAA, multiple domains, admin control over model training and unlimited Notetaker access. |
| Enterprise | custom | — | Everything in Growth plus SCIM, audit logs, MDM, domain capture, custom contract terms and dedicated support. |
Free allows 2,000 dictated words a week on desktop and 1,000 on mobile.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $15 a month on the Pro plan per seat, $180 a year (checked 2026-10-14).
The iPhone and Android apps, and syncing between devices; Tone that adapts to each app, such as chat versus email; The meeting Notetaker with named speakers and summaries; Shared dictionaries, snippets and usage analytics for a team; Enterprise paperwork: SOC 2 Type II, ISO 27001 and a HIPAA BAA. If any of those matter to you, keep paying.
Yes: Handy (open source), OpenWhispr (open source), VoiceInk (open source).