Show HN: Saylark – Open-source voice dictation for Mac, like Wispr Flow Developer btahir released Saylark, an MIT-licensed, free open-source voice dictation app for Apple Silicon Macs running macOS 26 or later, distributed as a signed and notarized Saylark.dmg. Saylark runs the 0.6B-parameter Parakeet speech model on the Neural Engine via FluidAudio, keeps recognition on-device after a one-time ~600 MB model download, and adds a "Return sends" feature that pastes dictated text and presses Return in the Claude, Codex and ChatGPT desktop apps. The app requires about 700 MB of free disk space and four macOS permissions (Microphone, Input Monitoring, Accessibility, Clipboard), and it writes audio to disk during takes so recordings survive a crash. Dictation for talking to coding agents: hold a key, talk, press Return to send. Runs on your Mac. Hold Fn, talk, let go. Your words land at the cursor, exactly as you said them. In Claude, Codex or ChatGPT, press Return mid-take and Saylark sends the message. Free, MIT licensed, no account. Download Saylark.dmg https://github.com/btahir/saylark/releases/latest/download/Saylark.dmg · Website https://saylark.shiptiffin.app · How it works how-it-works · Build from source build-from-source - Return sends. While you dictate, press Return: Saylark stops, pastes and presses Return for you, so one take becomes one sent message. On by default in the Claude, Codex and ChatGPT desktop apps; you choose the apps, or turn it on everywhere. - Your exact words. There is no AI rewriting step. Saylark removes fillers um, uh, er, hmm and stutter repeats "the the" , turns "new line" and "new paragraph" into line breaks, and applies your dictionary. Everything else is typed as you said it. See Literal text literal-text . - Never loses a take. Audio is written to disk while you talk and is recovered after a crash. Cancelled and failed takes stay on Home, where you can paste or transcribe them again. - A dictionary that's a plain text file. Names and jargon the model should spell your way. Edit it in the app, in any editor, with saylark dict , or let your agent keep it up to date let-your-agent-maintain-it . - Hold to talk, double-tap for hands-free. The trigger is Fn, Right Option or Right Command. Esc cancels. - Pastes at the cursor , then puts your own clipboard back. With no text field focused, a card holds your words: copy them, or paste them into the next field you click. - Speech recognition runs on your Mac. The app's only network use is downloading its models. No account, no telemetry. See Privacy privacy . - Quiet. A menu bar app with one window Home, Dictionary, Settings . It shows in the Dock only while that window is open. Saylark.dmg https://github.com/btahir/saylark/releases/latest/download/Saylark.dmg latest release, signed and notarized by Apple . Open it and drag Saylark to Applications. All versions are on the releases page https://github.com/btahir/saylark/releases , each with a SHA-256 checksum file. - macOS 26 or later - A Mac with Apple Silicon M1 or later . Intel Macs are not supported. - About 700 MB of free disk space for the speech models On first launch Saylark downloads its speech model, about 600 MB, once. Onboarding shows the progress. After that, dictation works offline. Onboarding walks you through four macOS permissions. Each one has a reason: | Permission | Why | |---|---| | Microphone | To hear you while you dictate | | Input Monitoring | To see the trigger key Fn, Right Option or Right Command | | Accessibility | To paste into the app you are using and press Return for "Return sends" | | Clipboard "Always Allow" | To put your own clipboard contents back after a paste | Then try a take in the practice field, and you're set. 1. You hold the key. Saylark starts recording right away and shows a small pill at the bottom of the screen. 2. Recognition runs as you talk. Parakeet credits , a 0.6B-parameter speech model, runs on the Neural Engine through FluidAudio https://github.com/FluidInference/FluidAudio . A voice activity model splits long takes at pauses, so most of the work is done before you let go. 3. You let go. Saylark finishes the last few words, applies your dictionary, adds paragraph breaks at long pauses, and pastes. Home shows how long each take took to turn into text. 4. Your clipboard comes back. Saylark pastes through the clipboard, then restores what was there. The floating pill shows your voice level while you talk three styles: Seeds, Trace, Wave . Turn on "Show words while you talk" to see the words as they are recognized, as in the animation above. Saylark types what the speech model heard, with a small, fixed cleanup that only removes things: - Fillers um, uh, er, hmm and their spellings are dropped. - Stutter repeats of one to three words "the the", "I think I think" are collapsed. Doubles that are usually meant "very very", "had had" are kept. - "New line" and "new paragraph" become line breaks. - Your dictionary dictionary fixes the spelling of names and jargon. Numbers, units, addresses and identifiers are never touched. There is no language model that rephrases, summarizes or "polishes" your words, so a prompt to an agent says what you said. Names and jargon the model should spell your way live in one plain text file: ~/Library/Application Support/Saylark/dictionary.txt Lines starting with are comments. Kubernetes: cooper netties, cube or nettys Supabase: super base Tailwind kubectl - Term on its own means "spell it this way". Saylark fixes case and spacing "tail wind" becomes Tailwind . - Term: wrong spelling, wrong spelling also lists what the model writes instead. Those spellings are replaced with the term the Dictionary tab calls them replacements . - Edit it on the Dictionary tab, in any editor, or with saylark dict . Saylark picks up a change within about a second; no restart. - A line it can't read no term before the colon, a comma in the term is skipped and left as you wrote it. The Dictionary tab and saylark dict list show skipped lines. Saylark is careful with ordinary words. A term that is also an English word gets no case or sound-alike fixes, and a replacement made only of ordinary words is used only when the model was unsure of those words. All-lowercase terms kubectl get the stricter rules too. Once your dictionary has terms, Saylark downloads a second, small model about 100 MB that helps it spot them in what you said. The dictionary is a text file, so a coding agent can keep it current. One way, if you use Claude Code or Codex: schedule a daily job cron, launchd, or the agent's own scheduler with a prompt like this: Read the messages I sent today for example my git commit messages, or a "sent" folder I point you to . List product names, people, tools and jargon I wrote that a speech model would likely misspell. Skip ordinary English words. For each new one, run saylark dict add "