Changelog

What’s shipped

Everything that’s landed in OpenWhisp, newest first. Expand a feature for a short how-to — the steps, the exact phrases to say, and whether it’s usable today. Every change traces to a public issue and a reviewed pull request you can read, run, and fork.

July 2026

The headline: Parakeet — our fast, on-device realtime streaming engine — is now the default on a fresh install. Alongside it, a big batch of new features, fixes, and under-the-hood hardening, all landed on main, all covered by tests, all on your machine. New this release also includes built-in auto-update and a 28-fix stability sweep. The latest additions: per-app refine tone (casual in Slack, formal in Mail, verbatim in your terminal), a fifth transcription engine — Apple's SpeechAnalyzer on macOS 26 — and agent dictation that now knows your project's branch and file names and lets you tap to finish. Among the features: meeting mode that records a call and gives you an on-device transcript plus a local Markdown summary — now with Me/Them speaker attribution and a live talking indicator, and with a separate, optionally larger summarization model you can point at your own server — a floating Scratchpad to dictate into with no target app, quiet-dictation mode for whispering into your mic, opt-in on-device audio retention with one-click re-transcription and an auto-cleanup policy, a fully-remappable dictation trigger with a record-a-shortcut field, an AppleScript keystroke insert method and mouse-button dictation triggers, a local Usage Insights dashboard, opt-in screen-context awareness that biases transcription toward the names already on screen, batch file transcription with watch folders, hands-free (tap-to-lock) dictation, adjustable AI cleanup, voice editing, a self-learning dictionary, rich local formatting, spoken-filename @-mentions for code editors, agent-CLI cleanup, output targets that route a dictation to a file/Shortcut/webhook, first-class Modes you can invoke by name, a Rules engine that runs your own actions when a dictation finishes, and an openwhisp:// URL scheme so Raycast, Alfred, or any launcher can drive dictation.

53
changes shipped
32
new features
1713
tests passing
100%
on-device

New features

  • Per-app refine tone — casual in Slack, formal in Mail, verbatim in your terminal

    Set how the AI cleans up your words per app, so a message in Slack comes out casual, an email in Mail comes out formal, and dictation into a terminal or code editor is left verbatim — no AI rewrite at all. It's Wispr Flow's most-praised feature, done entirely on-device: pick a preset (verbatim, minimal, casual, formal, or a custom prompt) for any app in Settings. Code editors and terminals default to verbatim automatically so a spoken command is never reshaped.

    How to use
    MAK-77PR #203
    Available now

    Give each app its own refine tone in Settings › Profiles.

    1. Open Settings › Profiles and turn on “Apply per-app profiles”.
    2. Add an app (or pick an existing profile) and choose a Refine preset in its column: Verbatim, Minimal cleanup, Casual, Formal, or Custom.
    3. For Custom, a prompt editor appears below the table — write a one-line tone instruction (it still runs behind the same safety guard, so it can't translate your words).
    4. Terminals and code editors (Terminal, iTerm2, Warp, VS Code, Xcode, JetBrains, Cursor, Zed, and more) default to verbatim automatically — an explicit preset overrides that.
    5. Precedence when more than one applies: an active Mode wins, then the per-app preset, then your global cleanup dial.
  • A fifth engine: Apple's SpeechAnalyzer (macOS 26) — fast, on-device file transcription

    On macOS 26, OpenWhisp can use Apple's new SpeechAnalyzer / SpeechTranscriber as an on-device transcription engine — fully local, auto-punctuating, and about 2× faster than Whisper on file transcription. It backs the file queue, meetings, watch folders, and history re-transcribe, with a live-dictation variant too. It sits alongside Parakeet (the default), WhisperKit, whisper.cpp, and Apple Speech; pick it in Settings › Models.

    How to use
    MAK-59PR #188
    Available now

    On macOS 26, choose Apple SpeechAnalyzer in Settings › Models.

    1. Requires macOS 26 — the engine only appears there.
    2. Open Settings › Models and select Apple SpeechAnalyzer.
    3. It runs on-device and auto-punctuates. The file-transcription path (files, meetings, watch folders, history re-transcribe) is the primary, fastest win — roughly 2× Whisper's speed on files.
    4. Custom-vocabulary biasing isn't wired for this engine yet; use Parakeet, WhisperKit, or whisper.cpp when you need it.
  • Agent dictation gets your project's vocabulary — branch, folder, and file names land right

    When a coding agent hands you the mic, OpenWhisp now feeds it your workspace context — the project folder name, the current git branch, and file/symbol names — so spoken dev terms come out spelled correctly (your branch feature/agent-eou, a file called getUserProfile). It's OpenWhisp's local answer to Claude Code's /voice project hints, and it works exactly where /voice can't: API-key, Bedrock, SSH, and privacy-locked setups. The context is derived on your Mac, used only for that session, never saved, and API-key-shaped tokens are filtered out so nothing secret leaks into a transcript.

    How to use
    MAK-75PR #202
    Available now

    Automatic for MCP agents — the cwd and git branch are derived on each dictate call.

    1. No setup for MCP clients: openwhisp mcp runs in the client's working directory and self-derives the folder name + git branch on each openwhisp_dictate call.
    2. A client can also pass explicit context (e.g. recent file names) — explicit values win and merge with the derived ones.
    3. Opt out with the OPENWHISP_MCP_WORKSPACE_CONTEXT environment variable (0/false/off/no).
    4. From the CLI, pass --cwd, --git-branch, or --terms "a,b,c".
    5. Terms bias whichever engine honors it (whisper.cpp, WhisperKit, Apple Speech) and are session-scoped only — never written to your vocabulary file.
  • Tap to finish an agent dictation — a deliberate “done”, like Claude Code /voice

    When an agent asks you a question by voice, you can now end the answer yourself with a tap of your dictation key — a deliberate finish, instead of waiting out the silence/end-of-utterance detector or a timeout. A new autoSubmit option on the openwhisp_dictate tool matches Claude Code /voice's behavior (hold or tap, submit automatically or wait for confirm). Your own hotkey dictations are unaffected.

    How to use
    MAK-76PR #200
    Available now

    During an agent dictation, tap your dictation key to finish and return the transcript now.

    1. When a coding agent opens a dictation, speak your answer.
    2. Tap your dictation hotkey to end the session immediately and return the transcript — overriding any pending silence/EOU settle wait.
    3. A tap during the confirm window re-opens the session so you can append more.
    4. Agents can set autoSubmit on the openwhisp_dictate tool to choose submit-immediately vs. wait-for-confirm.
  • OpenWhisp keeps itself up to date — built-in auto-update

    OpenWhisp now updates itself. A built-in updater (Sparkle 2) checks for new signed releases and offers to install them, so you're no longer re-downloading the app by hand. Updates are delivered from a cryptographically signed feed, and the update check is disclosed in the privacy docs. It's part of the notarized release build.

    How to use
    MAK-56PR #169
    Available now

    OpenWhisp checks for updates on its own and offers to install them.

    1. Nothing to set up — the app checks for new signed releases automatically and prompts you when one is available.
    2. You can also check on demand from Settings → General → Check for Updates.
    3. Updates come from a cryptographically signed appcast; the update check is disclosed in the privacy documentation.
  • Parakeet Realtime — a true streaming engine: words appear ~0.3 s behind your voice

    A new on-device transcription engine built on NVIDIA Parakeet (CoreML, via the Apache-2.0 FluidAudio SDK). Unlike the batch engines, Parakeet is architecturally streaming: partials trail your voice by about a third of a second WITH punctuation and capitalization, and the final text lands ~50 ms after you release the hotkey — no end-of-dictation decode wait. Five model variants cover realtime English, an efficiency tier, best-accuracy English, an ultra-light 120M model, and a multilingual model (~40 languages, auto-detected). Meetings, batch file jobs, watch folders, and history re-transcription run on Parakeet too (a 25-language batch model), and the models show up in Settings › Storage with sizes and one-click delete. It's now the default, recommended engine on a fresh install (existing users keep whatever engine they already chose).

    How to use
    MAK-46PR #163
    Available now

    Settings › Models › pick “Parakeet Realtime (CoreML)”, choose a variant, and dictate — the model downloads itself on first use.

    1. Open Settings › Models and select “Parakeet Realtime (CoreML)” (badged Experimental).
    2. Pick a variant: Unified realtime (default, 0.32 s latency, punctuation), Unified efficient (same accuracy, lower CPU), Unified accurate, EOU ultra light (smallest), or Parakeet Multilingual (~40 languages, auto-detect).
    3. The model (~150–600 MB) downloads automatically to Application Support/FluidAudio and is cached; the row shows Not downloaded / Downloading… / installed.
    4. Dictate as usual — words stream in as you speak in preview and live-typing modes, and meetings/file jobs automatically use Parakeet's multilingual batch model.

    The English variants refuse a fixed non-English dictation language up front (switch to the Multilingual variant or Auto instead of silently mangling it). Parakeet is ASR-only: the translate-to-English toggle doesn't apply, and vocabulary biasing is text-side only.

  • Agent dictations can end the moment you finish speaking — end-of-utterance auto-stop

    When a coding agent hands you the mic, the session previously ended on a timeout or an energy-silence heuristic. The Parakeet EOU model emits a genuine “the speaker finished” signal, and OpenWhisp can now use it: an experimental, default-off toggle ends agent-requested dictations right after your utterance settles — a crisper finish than waiting out the silence window. Your own hotkey dictations are never auto-stopped.

    How to use
    MAK-46PR #163
    Available now

    Settings › Agent Bridge › turn on “Stop on end-of-utterance (Parakeet EOU)” with the Parakeet EOU variant selected.

    1. Select the Parakeet engine with the “EOU — ultra light” variant (Settings › Models).
    2. Open Settings › Agent Bridge and enable “Stop on end-of-utterance (Parakeet EOU)”.
    3. When an agent requests a dictation, speak your answer — the session finishes ~0.6 s after your utterance ends (a new word cancels the pending stop).

    Experimental and default-off. Only the EOU variant emits the signal — on any other engine or variant the toggle is inert and the silence auto-stop still applies. Agent sessions only.

  • Meeting mode — record a call, get an on-device transcript and a local summary

    Record a meeting (system audio + your mic) straight to your Mac, then let OpenWhisp transcribe it with your on-device engine and summarize it locally into Markdown — a short overview, the decisions made, and the action items. A new Meetings pane in Settings lists every recording with its transcript and summary, and lets you re-transcribe, summarize, export a .md, or delete (which also removes the audio). Nothing leaves your machine unless you choose a cloud LLM for the summary — and then only after an explicit per-meeting confirmation. The summary is checked against the transcript's language, so a small model can't quietly hand you an English summary of a Russian meeting; if it tries, OpenWhisp keeps the transcript and tells you.

    How to use
    MAK-50PR #158
    Available now

    Start/Stop a recording from the menu bar, then open Settings → Meetings to read the transcript, run the summary, and export.

    1. Start a recording from the OpenWhisp menu bar (Start meeting), and Stop it there when the call ends — the audio is captured on-device as a 16 kHz WAV.
    2. Open Settings → Meetings: the new recording appears in the list and is transcribed automatically by your on-device engine (long recordings are chunked, like file transcription).
    3. For a summary: with a LOCAL LLM configured it runs automatically once transcription finishes; with a cloud or agent-CLI provider you get a per-meeting “Summarize (transcript leaves this Mac)” confirmation first, so cloud text-sharing is never silent.
    4. Use the row’s Actions menu to Re-transcribe, Summarize, Export .md (summary + transcript), or Delete (which also deletes the recording’s audio).

    Live now. The summary is map-reduced for long meetings and always demanded in the transcript’s own language — if a small model translates it away, OpenWhisp rejects the summary and keeps the transcript. Speaker attribution (Me vs. Them) now ships too — see the next entry. Cloud summaries only ever run after your explicit confirmation.

  • Meeting mode now labels who spoke — Me vs. Them — plus a live talking indicator

    Meeting recordings are now attributed. Alongside the mixed recording, OpenWhisp writes two separate on-device WAVs — your microphone (“Me”) and the system audio (“Them”) — and transcribes each leg on its own, then interleaves them by time into a single transcript with Me:/Them: labels. The Meetings pane shows the attributed transcript, the .md export includes it, and the local summary is built from the labeled transcript so action items can be pinned to a speaker. While a meeting records, the live row tells you who’s talking (“You’re talking” / “They’re talking” / “Both” / “…”), with a matching glyph in the menu bar. Everything stays on your Mac. This is a robust, degrade-safe addition: the mixed recording is unchanged and still the fallback, and if a leg can’t be captured or transcribed the meeting simply keeps its plain, un-attributed transcript.

    How to use
    MAK-52PR #160
    Available now

    Record a meeting as before — the transcript now comes back with Me:/Them: labels, and the live row shows who’s talking while you record.

    1. Start a meeting from the menu bar as usual. OpenWhisp records the mixed audio plus two per-speaker legs (your mic and the system audio), all on-device.
    2. While recording, the Meetings pane’s live row shows “You’re talking”, “They’re talking”, “Both”, or “…”, and the menu-bar item shows a matching glyph.
    3. When transcription finishes, the pane shows the attributed transcript (Me:/Them: lines). Export .md includes it, and the local summary is built from the labeled transcript so action items can carry the speaker.

    Live now. “Them” is everyone on the remote side of the call — system audio is a single mixed stream, so distinguishing individual remote participants (per-person diarization) is a separate follow-on. Attribution is degrade-safe: the mixed recording is unchanged and remains the fallback, and if a leg can’t be captured or transcribed the meeting keeps its plain, un-attributed transcript.

  • Meeting summaries can use their own, larger model — separate from dictation cleanup

    Dictation cleanup wants a tiny, fast model because it runs on every final transcript; a meeting summary is different — it runs only when you ask for it, so it can afford a bigger, smarter model. Meeting mode now has its own “Summarization model” setting, independent of the cleanup LLM. Leave it on “Same as cleanup” (the default) and nothing changes. Or point summaries at a larger local model behind your own server — e.g. a 70B running in llama-server / Ollama — while keeping a fast on-device model for live dictation. The privacy gate follows the summary model, not cleanup: if the summarization provider is local, summaries still run automatically; if it's a cloud provider, you still get the explicit per-meeting “transcript leaves this Mac” confirmation, now naming the actual summary provider. The transcript-language guard on the summary is unchanged.

    How to use
    MAK-53PR #159
    Available now

    Open Settings → Meetings → Summarization model to pick a separate provider/model for summaries, or leave it on “Same as cleanup”.

    1. Open Settings → Meetings. The new “Summarization model” picker defaults to “Same as cleanup” — existing behavior, no change needed.
    2. To use a bigger model just for summaries, pick a provider (On this Mac, Your server, or OpenAI) and optionally a model name; for a self-hosted server you can also set its URL. Leave the model blank to use the server/provider default.
    3. Summaries then run through that model: a local summary provider still summarizes automatically after transcription; a cloud one asks for your per-meeting confirmation first, naming the provider the transcript would be sent to.

    Live now. Cleanup keeps favoring a small fast model; the summary model runs only when you summarize. Agent-CLI isn't offered for summaries (the summarize path is OpenAI-shape); use the cleanup Agent-CLI provider for dictation as before. The summary is still checked against the transcript's language and rejected if it's translated away.

  • A floating Scratchpad — dictate anywhere, even with no app to type into

    Open the Scratchpad from the menu bar (or open "openwhisp://scratchpad") and you get an always-on-top note panel to dictate into when nothing else has focus — a quick capture surface that's fully local. Keep several notes in a list, type or dictate freely, and each note shows a small provenance line (when it was last dictated vs. typed). Nothing leaves your Mac; the notes are saved on device.

    How to use
    MAK-49PR #155
    Available now

    Open the Scratchpad from the menu bar (⌘S in the menu) or via openwhisp://scratchpad, then dictate or type; each dictation lands in the active note.

    1. Click the OpenWhisp menu-bar icon → “📝 Scratchpad” (or run open "openwhisp://scratchpad" from any launcher).
    2. The floating panel opens on top of your other windows and takes focus. Use “+ New” for another note; click a note in the left list to switch.
    3. With the Scratchpad frontmost, start a dictation (your trigger key) — the text appends into the active note instead of an app. You can also just type.
    4. Each note shows a provenance line (e.g. “Dictated 3:14 PM · typed 3:20 PM”); the list is ordered most-recently-touched first. Notes persist locally between launches.

    v1 is plain text with a simple multi-note list and per-note dictated/typed timestamps. It's local-only (saved under Application Support). Rich text, tabs, checklists, and image paste are intentionally deferred. Dictation lands in the Scratchpad only while it's the frontmost window; otherwise dictation goes to your focused app as usual.

  • Keep your dictation audio on-device — re-transcribe any past dictation, with an auto-cleanup policy

    Turn on opt-in audio retention and OpenWhisp saves each dictation's raw audio on this Mac — and only this Mac; it never leaves the device. A re-transcribe button on any saved history entry runs that audio back through your current engine (handy after you switch or upgrade a model) and keeps the old text as a one-click revert. A retention policy sweeps automatically: keep at most N clips and/or delete audio + history older than N days. Retention is OFF by default, and turning it off deletes every saved clip. The cleanup only ever removes files OpenWhisp itself created.

    How to use
    MAK-40PR #147
    Available now

    Settings › Privacy › turn on “Keep raw audio for re-transcription”, set the clip/day caps, then use the re-transcribe button on any saved history entry.

    1. Open Settings › Privacy & Permissions › History.
    2. Turn on “Keep transcription history” (needed to associate audio with an entry), then turn on “Keep raw audio for re-transcription”. It's off by default — the audio stays on this Mac and is never uploaded.
    3. Set the policy: “Keep at most N clips” and/or “Delete audio + history after N days” (0 = no cap). The sweep runs after each dictation and on launch.
    4. Dictate as usual (standard hold-to-talk sessions). Each dictation's audio is saved beside its history entry.
    5. On a saved entry, click the re-transcribe (waveform) button to run its audio through your current engine again; the new text replaces the old, and the revert arrow restores the previous words.
    6. Turn the toggle off (or use Clear History) to delete every saved clip immediately.

    On-device only — audio never leaves your Mac. Retention covers standard hold-to-talk dictations (which produce a single whole-session recording); live-chunk/streaming sessions aren't retained yet. Crash recovery of an interrupted in-progress recording is scaffolded and tested in core but not yet wired to a launch prompt — that's a follow-up; retention, re-transcribe, and the cleanup policy are live now.

  • Two new ways to get your words in: an AppleScript keystroke insert method and mouse-button triggers

    Some apps mangle the usual paste (⌘V) and direct-insert methods — Electron apps, remote-desktop (VNC) windows, and non-QWERTY keyboard layouts. A new AppleScript keystroke insert method types your transcript in as if from the keyboard, which those surfaces accept; pick it globally or per-app. And you can now bind a non-primary mouse button (middle, or a side button) as a dictation trigger, using the same hold or hands-free style as your trigger key.

    How to use
    MAK-42PR #148
    Available now

    Settings › Output › Insertion → “AppleScript keystroke”, and Settings › Dictation › Activation → “Mouse-button trigger”. Both can also be set per-app under Per-App Profiles.

    1. Insert method: Settings › Output › Insertion → choose “AppleScript keystroke” if paste/direct insert misbehaves in an app (Electron, VNC, non-QWERTY).
    2. Per-app override: Settings › Per-App Profiles → add the app and set its “Insert” column (Inherit / Auto / Direct / Paste / AppleScript).
    3. Mouse trigger: Settings › Dictation › Activation → “Mouse-button trigger” → pick Middle button or a side button (Mouse 4-10). “Off” disables it.
    4. The mouse trigger uses your existing activation style — hold to talk, or tap to lock hands-free.

    The AppleScript method never touches the clipboard, and your transcript is always safely escaped into the script (quotes, backslashes, and newlines can't break or inject it) — it falls back to paste if the script can't run (grant Accessibility/Automation permission if prompted) or if the transcript is very long (keystroke types at keyboard speed). The left and right mouse buttons are deliberately not bindable, since they're needed for normal clicking.

  • Set any key or combo as your dictation trigger — record-a-shortcut in Settings

    The dictation trigger is no longer limited to Fn or Control + Space. Open Settings › Dictation › Activation, click “Record shortcut”, and press any key or modifier combo (⌥⌘R, ⌃⇧Space, a lone Option — whatever you like). OpenWhisp warns before you pick something that would fire on ordinary typing, shadow a system shortcut like ⌘Space, or clash with your Refine key. Your custom trigger works in both hold-to-talk and hands-free modes, and the two original presets stay one click away.

    How to use
    MAK-17PR #145
    Available now

    Settings › Dictation › Activation → “Record shortcut”, press your combo; the two presets remain as quick picks.

    1. Open Settings › Dictation › Activation.
    2. Click “Record shortcut” and press the key or modifier combo you want (e.g. ⌥⌘R, ⌃⇧Space, or a lone Option). Press Esc to cancel a recording.
    3. If the combo would fire on ordinary typing, shadow a system shortcut (⌘Space, ⌘Q…), or clash with your Refine key, a warning appears — pick another.
    4. Prefer a built-in? The “Trigger key” menu keeps Fn (Globe) and Control + Space as one-click quick picks.
    5. Your custom trigger works in both Hold-to-talk and Hands-free activation styles.

    Live in Settings today. A single typing key with no modifier is rejected (it would fire as you type); add a modifier or bind a non-text key (function row, Esc, arrows) instead.

  • See your dictation stats — words, speaking speed, time saved, streaks — all on this Mac

    A new Insights tab in Settings surfaces what OpenWhisp was quietly counting: total words dictated, your words-per-minute, an estimated time saved versus typing, current and longest daily streaks, and a breakdown of which apps you dictate into. It's all computed on-device from metadata only — counts and durations, never your transcripts — and there's a one-click share card (a PNG rendered locally) if you want to post your numbers. No accounts, no cloud.

    How to use
    MAK-38PR #144
    Available now

    Open Settings › Insights to see your words, WPM, time saved, and streaks; Save/Copy the share card to post them.

    1. Open OpenWhisp Settings and pick the “Insights” tab.
    2. Read your lifetime words, speaking speed (WPM), and estimated time saved (the card states the typing-speed assumption behind that estimate).
    3. Check your current and longest streaks and which apps you dictate into most.
    4. Click “Save share card…” to write a PNG, or “Copy image” to put it on the clipboard — the image is rendered entirely on your Mac; nothing is uploaded.

    Time saved is an estimate: it compares your speaking time to typing the same words at 40 wpm (a common average). Your real typing speed will differ. Stats are metadata only — no transcript text is ever stored or shown here, and sessions recorded while a password field was focused are excluded.

  • Screen-context awareness — dictation that knows the names already on screen

    Opt in per app and, at dictation start, OpenWhisp reads the focused field's existing text on your Mac to do two things: harvest the proper nouns and code identifiers already there (Anthropic, kubectl.apply, getUserProfile) and feed them to the transcription engine so it spells them right, and — only with a local AI cleanup provider — hand the surrounding text to the cleanup model so it matches the thread's tone. Off by default, gated to apps you list, never reads password fields, and nothing read is saved to disk.

    How to use
    MAK-34PR #150
    Available now

    Settings › Privacy › Screen Context: turn it on, add the apps you want, then dictate — names on screen bias transcription; local cleanup also gets the surrounding text.

    1. Grant Accessibility (Settings › Privacy › Permissions) — it's how OpenWhisp reads the focused field.
    2. Settings › Privacy › Screen Context → turn on “Read screen context (advanced)”. It's off by default.
    3. Click “Add Last-Used App” to allowlist the app you were just typing in. Context is only ever read in apps you list.
    4. Dictate as usual. Proper nouns and identifiers on screen bias the on-device transcription so they come out right.
    5. For the surrounding-text cleanup boost, keep your AI cleanup provider on Built-in or your own local LLM (Cleanup › AI Cleanup) — with OpenAI or an agent CLI selected, no surrounding text is shared.

    Live now. Bias terms only prime the on-device transcription engine (whisper.cpp) and never leave your Mac; the WhisperKit engine ignores the term prompt today (a known pilot gap), so bias terms apply on the whisper.cpp backend. Surrounding text is shared ONLY with a local cleanup provider and never with a cloud/agent-CLI one. Password fields are excluded entirely, and nothing read is written to disk. Vision/OCR of non-text UI is out of scope for this version.

  • Rules — run your own actions when a dictation finishes

    OpenWhisp can now do something with a dictation the moment it's done: append it to a Markdown log, run a Shortcut, POST it to a webhook, run a script, open a URL, or type a canned snippet — automatically, when the transcript matches a rule you set. A rule is a match (starts-with / contains / exact / regex, optionally scoped to one app) plus a list of actions, and it's a pure side channel: if a rule or its action fails, your words are still typed exactly as before — nothing is dropped or delayed. It generalizes the old “run my script” toggle and reuses the same file / Shortcut / webhook delivery under the hood.

    How to use
    MAK-43PR #151
    Available now

    Settings › Rules › Add rule: pick when it fires and what it matches, then add one or more actions.

    1. Open Settings › Rules and click “Add rule”.
    2. Choose when it fires: “After transcribe” (the raw transcript, pre-refine) or “After refine” (the final text that gets typed).
    3. Set the match: Always, Exact, Starts with, Contains, or Regex — optionally scope it to one app by bundle ID (e.g. com.apple.Notes).
    4. Add actions in order: Insert snippet, Open URL (use {{text}} for the transcript), Run script, Run Shortcut, POST webhook, or Append to file.
    5. Save. Rules run automatically on your next matching dictation.
    6. To run a rule on agent-bridge sessions too, set its “Sessions” to “Agent only” or “Both” — it's dictation-only by default so an agent's transcript never leaves your machine unless you opt in.

    Live in Settings today. Actions are fail-open: a failing or slow action is skipped and never affects the normal insert. Scripts and Shortcuts receive the transcript on stdin (never interpolated into a command line); webhooks receive it as JSON; an Open-URL template's {{text}} is percent-encoded. Regex is guarded against catastrophic backtracking. The old Output › Script toggle still works and is unchanged.

  • Drop in an audio or video file — batch transcription with a live queue and subtitle export

    Point OpenWhisp at MP3/MP4/M4A/WAV/WEBM (and more) and it decodes them to 16 kHz audio, runs your on-device engine, and shows a live per-file queue (Queued → Loading model → Transcribing → Enhancing → Done). Long files are chunked automatically, and finished transcripts export to plain text, SubRip (.srt) or WebVTT (.vtt) with chunk-level timestamps. Set up watch folders and any media dropped in transcribes itself.

    How to use
    MAK-36PR #142
    Available now

    Settings › File Transcription › Add files, watch the queue, then export .txt/.srt/.vtt from any finished file. Add a watch folder to auto-transcribe drops.

    1. Open Settings › File Transcription.
    2. Click “Add audio or video files…” and pick one or more media files — they queue up and transcribe one at a time on your current engine.
    3. Watch each row move through Queued → Loading model → Transcribing → Done; long files are chunked for you.
    4. On a finished row, use Export to save .txt, .srt, or .vtt (SRT/VTT carry chunk-level timestamps).
    5. Optional: “Add a watch folder…” so any new media dropped into it is transcribed automatically (files still copying are picked up once they settle).

    Timestamps for .srt/.vtt are chunk-level (each cue spans a decode window), since the local engines surface plain text per chunk — finer per-word timing is a future engine-seam upgrade. The optional LLM “Enhance” pass over finished transcripts is present as a toggle but only runs when an LLM is configured.

  • Hands-free dictation — tap to lock the mic open, tap or Esc to stop

    Dictation no longer has to be held. Switch on Hands-free mode (or just double-tap your trigger key) and one tap locks the mic open so you can speak with your hands free; a second tap — or Esc — stops it. A safety net ends a forgotten locked session after a long silence, so a session you walk away from won't record forever. Holding the key still works exactly as before.

    How to use
    MAK-16PR #143
    Available now

    Turn on Hands-free in Settings (or double-tap the trigger key), tap to start, tap again or press Esc to stop.

    1. Settings › Dictation › Activation › “Activation style” → “Hands-free (tap to lock)”. (Or leave it on “Hold to talk” and double-tap the trigger key to lock the mic open for a single session.)
    2. Tap your trigger key (Fn or Control + Space) — the overlay shows a lock badge and “Hands-free — tap key or Esc to stop”.
    3. Speak with your hands free; the mic stays live.
    4. Tap the trigger key again, or press Esc, to stop. Esc discards the session; a stop tap delivers it.
    5. Optional safety net: “Auto-stop after long silence” (on by default) ends a locked session after a long quiet stretch so a forgotten one can't record forever.

    Live in Settings today. Hold-to-talk remains the default and is unchanged. The double-tap gesture reaches lock even without changing the setting; a normal pause to think won't trip the silence safety auto-stop (its hangover is deliberately long).

  • Trigger OpenWhisp from Raycast, Alfred, or any launcher — the openwhisp:// URL scheme

    OpenWhisp now answers an openwhisp:// URL, so any launcher or script can start a dictation, refine your last result, or paste it — no CLI needed. Point Raycast or Alfred at open "openwhisp://record" and bind it to a key. The scheme exposes only a small, validated allow-list of safe verbs — never a shell string or an arbitrary file — and rejects anything malformed as a whole.

    How to use
    MAK-37PR #141
    Available now

    Hand OpenWhisp a URL like openwhisp://record from Raycast, Alfred, Shortcuts, or a script; ready-made Raycast/Alfred recipes ship in integrations/.

    1. Make sure OpenWhisp is installed (if it isn't running, macOS launches it and delivers the URL on start).
    2. From any launcher or a terminal: open "openwhisp://record" to start/stop dictation, open "openwhisp://paste-last-result" to paste the last result, or open "openwhisp://refine?instruction=make%20it%20formal" to rewrite the last result onto your clipboard.
    3. Chain verbs in one URL — open "openwhisp://?switch-mode=email&record" — they run in order, all-or-nothing.
    4. For a one-key setup, add the Raycast Script Commands or the Alfred recipe from the integrations/ folder and bind them to hotkeys.

    record, refine, paste-last-result, switch-mode, and activate-mode all work today. switch-mode?key=… queues a Mode for your next dictation; activate-mode?key=… sets it as the sticky active Mode without recording (MAK-39 wired the named-mode registry). An unknown key is logged as a miss rather than silently pinning a phantom mode. See integrations/README.md for the full grammar.

  • Modes — save a dictation style and invoke it by name

    A Mode bundles a tone (Formal / Casual / Legal / Chat / Personalized), an AI instruction, optional model and language/output/AI-cleanup overrides, a custom icon, and a stable key you can invoke. Pick one as your active mode in Settings, bind a mode to an app so it auto-activates, or switch modes from a launcher with openwhisp://switch-mode?key=…. Modes generalize the old per-app profiles and travel inside config export/import and packs, so a style is shareable.

    How to use
    MAK-39PR #146
    Available now

    Create a Mode in Settings › Modes, give it a tone/instruction, then set it active there or invoke it by key from an openwhisp:// URL.

    1. Settings › Modes → “+” to add a Mode. Give it a name, a key (it's normalized to lowercase-with-hyphens), a tone, and optionally an AI instruction, icon, or language/output/AI-cleanup overrides.
    2. Set your “Active mode” at the top of the pane — it governs your next dictations until you change it (or pick “None” for global settings).
    3. Bind a Mode to an app (its bundle ID) and turn on per-app modes to have it auto-activate when you dictate into that app.
    4. From a launcher: open "openwhisp://switch-mode?key=email" to use a Mode for just your next dictation, or "openwhisp://activate-mode?key=email" to make it the sticky active Mode.
    5. Share a Mode by exporting your config (it now includes Modes) or shipping it in a config pack.

    The tone/instruction, language/output/AI-cleanup overrides, LLM-model override, active-mode picker, app auto-activation, and both URL verbs are live. Two pieces are deferred honestly: a per-Mode transcription-model swap is carried and round-trips but is NOT yet applied to the live engine mid-session, and per-Mode global hotkeys are not wired (key-based invocation via the URL scheme + picker is the shipped path). The old Per-App Profiles pane still exists; Modes are seeded from your profiles on first launch.

  • Say a filename, get an @-mention — hands-free file references in Cursor & Windsurf

    Speak a file the way you'd read it aloud — “main dot t s”, “at main”, “index dot j s x” — and OpenWhisp writes @main.ts / @main / @index.jsx so your editor's own file autocomplete pops up. It's a pure, offline text transform, and it's deliberately timid: only clear filename forms are rewritten, so ordinary speech (“I ate lunch”, “the main point”, “at noon”) is never touched.

    How to use
    MAK-48PR #131
    Available now

    Turn it on once in Settings, then say the filename in Cursor or Windsurf; the “dot <ext>” or leading “at” cue becomes an @-mention.

    1. Turn it on: Settings › Cleanup › Formatting › “Enable file tagging in code editors” (off by default).
    2. Dictate into Cursor or Windsurf and say the filename the way you'd read it: the name, the word “dot”, then the extension spelled out letter-by-letter (“main dot t s”) or as a whole word (“main dot swift”).
    3. Or lead with “at” for a bare mention: “at main” → @main.
    4. The @-mention lands in your editor and its file autocomplete disambiguates the rest.

    Say

    • “main dot t s” → @main.ts
    • “index dot j s x” → @index.jsx
    • “main dot swift” → @main.swift
    • “at main” → @main
    • “open main dot t s and fix it” → open @main.ts and fix it

    Works in Cursor and Windsurf when the Settings toggle is on — OpenWhisp only converts spoken filenames while one of those editors is frontmost, so ordinary dictation everywhere else (chat, docs) is never touched. Off by default. An optional AX read of the open workspace to auto-pick the exact extension is still a stretch goal.

  • Use your Claude or Codex CLI as the AI cleanup engine

    Pipe your dictation through a coding-agent CLI you already have installed — claude, codex, or any command that reads stdin — and reuse the subscription you already pay for as the cleanup model. No separate API key, no extra service: it's the inverse of Agent Bridge, consuming an agent as the refine engine.

    How to use
    MAK-44PR #130
    Available now

    Point OpenWhisp at a local agent CLI (e.g. claude -p) and it cleans up each dictation using your own subscription.

    1. Open Settings › Cleanup › AI Model and set Provider to “Agent CLI (Claude / Codex)”.
    2. Pick a preset — Claude Code (claude -p) or Codex (codex exec) — or choose Custom and enter any command that reads stdin and writes the cleaned text to stdout.
    3. Turn on “Improve every dictation automatically” below (or use Refine on demand). OpenWhisp feeds your transcript to the CLI on stdin — never on the command line, so nothing you say can be interpreted as a command — and uses its output as the refined text.
    4. If the CLI is missing, errors, times out, or returns nothing, OpenWhisp keeps your original words — you never lose a dictation.

    Reuses your locally-installed CLI and its own login — no API key needed here. Where your text goes depends on which CLI you pick (a cloud coding agent, or a fully local model).

  • Send your dictation straight into a macOS Shortcut

    Route the final transcript into any Shortcut you've built — add it to Things or Reminders, append to a note, fire a webhook, run AppleScript. One OS-level integration reaches the whole Shortcuts ecosystem, and if the shortcut can't run, your text falls back to normal insertion so nothing is ever lost.

    How to use
    Available now

    Pick a Shortcut in Settings; OpenWhisp runs it with your transcript as the input.

    1. Build a Shortcut in Shortcuts.app that starts with “Receive input” (text) and does whatever you want with it.
    2. Open Settings › Output › Output target and choose Shortcut, then pick your Shortcut from the list (or type its name and Refresh).
    3. Dictate as usual — OpenWhisp runs `shortcuts run <name>` with your transcript on stdin and hands the text off.

    Live now. Runs on the final transcript only (live-typing always goes to the focused app). On any error or timeout it fails open to normal insertion, so your words are never lost.

  • Adjustable AI cleanup, from a light touch to a full polish

    Pick how much the AI reshapes your words — None, Low, Medium, or High — and OpenWhisp always keeps your raw transcript so you can revert to exactly what you said in one click.

    How to use
    MAK-35PR #121
    Available now

    Choose a cleanup level in Settings; revert to your exact words anytime.

    1. Open Settings › Cleanup › Automatic Cleanup and pick a level on the dial: None (verbatim, no AI pass), Low (fixes caps, punctuation, spelling), Medium (also removes fillers and lightly rephrases), or High (also resolves spoken self-corrections like “3, no wait, 4” → “4”).
    2. Dictate as usual — the level you chose is applied automatically to each final transcript. None skips the AI entirely.
    3. In Settings › Privacy › History, click the revert (↺) button next to any entry the AI reshaped to swap the cleaned text back to your raw words — the originals are copied to your clipboard.

    Live now. The dial is the single source of truth for AI cleanup — the old on/off “Improve every dictation” toggle (tray + onboarding) now just reflects it. Higher levels trade literal fidelity for polish; the revert button appears only when the AI actually changed your words. Revert currently covers the standard preview and insert-at-end dictation modes (not the live-streaming per-chunk mode, which pastes as it types). It lives in History and, right after a dictation lands, in the post-dictation overlay — a one-tap “Revert to original” pill that swaps the cleaned text back to your raw words in place when it safely can, and otherwise leaves them on the clipboard for ⌘V.

  • Voice editing — “scratch that”, “delete last sentence”, “undo”

    Fix a misspoken phrase without deleting and re-dictating. A deterministic, offline command layer edits the in-progress text before it's committed. No AI required.

    How to use
    Available now

    In Preview mode, say the command on its own and it edits the pending text.

    1. Set Settings › Output › Delivery to “Preview, then insert” (the mode that holds the text on-screen until you release the key).
    2. Leave “Spoken edit commands” on in that same Delivery section (it’s on by default).
    3. Dictate as usual, then pause and say a command on its own — “scratch that” drops the last thing you said, “undo” brings it back.
    4. Release the key: the edited text is what gets inserted.

    Say

    • “scratch that” — drop the last thing you said
    • “delete last word”
    • “delete last sentence”
    • “new paragraph”
    • “new line”
    • “undo” — reverse the last edit

    Works in Preview mode (the text is held until release, so an edit can still change it). A command is recognized only when the WHOLE phrase is spoken on its own — say it as its own short utterance, with a pause, so the recognizer punctuates it as a separate sentence. A command buried inside a longer phrase (“finish the report scratch that let me redo”) is left as plain text on purpose, so ordinary speech like “scratch the surface” is never eaten. Parser is case- and punctuation-tolerant (including … and curly quotes).

  • A self-learning dictionary — star, sort by use, and accept corrections it proposes

    Your Substitutions list now sorts your starred and most-used rules to the top and shows how often each has fired. And when you fix a single misheard word right after dictating, OpenWhisp proposes that fix for you to accept into the dictionary — learned and stored entirely on your Mac, never uploaded.

    How to use
    Available now

    Star and reorder your rules by use, and accept the corrections OpenWhisp learns from your type-overs.

    1. Open Settings › Cleanup › Vocabulary. Your Substitutions open sorted starred-first then most-used, each with a 'used N×' count; 'Sort by use' re-sorts on demand (rows stay put while you type so nothing jumps under the cursor).
    2. Click the star on any rule to keep it at the top on the next sort.
    3. Dictate into a normal text field, then immediately type over a single misheard word to fix it (e.g. 'kubernetis' → 'kubernetes').
    4. OpenWhisp adds that fix to 'Suggested corrections' at the top of the Vocabulary section — click Add to make it a rule, or Dismiss to never be offered it again.
    5. Turn the whole capture off with 'Learn corrections as I type over them' if you don't want it.

    Live today: star + usage sort + per-rule usage counts, and the full accept/dismiss flow — an accepted suggestion becomes a real substitution that rewrites future transcripts, and nothing is ever added silently. How a suggestion appears today: after an insert made via the Accessibility path, if you type over ONE word within a couple of seconds while the SAME field stays focused and its text is readable via Accessibility, that edit is captured and run through the conservative learner (single-word casing/spelling fixes only). Deferred: capture is a single short-delay re-read, not continuous observation — corrections you make after that window, in paste-only or some web/Electron fields (where the field text isn't Accessibility-readable), or that span multiple words, aren't captured yet. You can always add those rules by hand in the same list.

  • Richer local formatting — numbers, lists, and markdown

    Opt-in rules turn spoken structure into clean text: "bullet…" into a list, "twenty twenty-six" into 2026, "bold that" into markdown — all deterministic, all off by default so nothing surprises you.

    How to use
    MAK-20PR #119
    Available now

    Turn on the rule groups you want in Settings, then just speak the structure.

    1. In Settings › Cleanup › Formatting, turn on the groups you want — Numbers and years, Currency, Spoken lists, Markdown commands. They're independent and off by default.
    2. Dictate naturally — the rules rewrite structure locally, on-device, no LLM.

    Say

    • “five dollars” → $5, “ten cents” → 10¢
    • “twenty twenty six” → 2026 (spoken times like “ten thirty” are left alone)
    • “bullet buy milk” → - buy milk, “number one …” → 1. …
    • “heading intro” → # intro, “bold ship it” → **ship it**

    Live now. Each group is off by default so it never touches ordinary prose until you turn it on.

  • Send dictations beyond the focused app

    Foundational plumbing for routing a transcript somewhere other than the app you're in — a file, a Shortcut, a webhook. Built to fail open: if a target can't take it, your text still lands where it always did. Never dropped.

    How to use
    Available now

    Route a dictation to a file, Shortcut, or webhook instead of the focused app.

    1. Open Settings › Output › Output target and pick a destination: Focused app (default), File, Shortcut, or Webhook.
    2. Fill in that target's details (a file path, a Shortcut, or a webhook URL).
    3. Dictate as usual — the final text goes to your chosen target. If it isn't configured or a delivery fails, your words still land in the focused app — never dropped.

    Live now. The choice is global (one destination for all apps) for this version. Live-typing (“Type live as you speak”) always goes to the focused app; only the final transcript is routed.

  • Dictate straight into a Markdown or text file

    Point OpenWhisp at a file — an Obsidian daily note, a Logseq journal, a scratch .md — and your dictation gets appended there instead of typed into the focused app. Add a dated heading if you like, or overwrite for a rolling "last dictation" buffer. All local; if the file can't be written, your words still land in the focused app — never dropped.

    How to use
    Available now

    Choose File as the output target; each dictation is appended with an optional dated heading.

    1. Open Settings › Output › Output target and choose File, then Choose… the file to write to (any .md or .txt — e.g. your vault's daily note).
    2. Optionally set a heading template with {{date}}, {{time}}, or {{datetime}} tokens (e.g. "## {{datetime}}") to stamp each entry.
    3. Choose Append (add each dictation to the end, blank-line separated) or Overwrite (keep only the latest).
    4. Dictate — the final text is written to the file; live partials are ignored so you get one clean entry.

    Live now. All local; if the file can't be written, your words still land in the focused app — never dropped.

  • Send a dictation straight to a webhook (Notion, Obsidian, Zapier, n8n…)

    POST your finished transcript as JSON — text, language, app, and timestamp — to any URL you configure, with optional auth headers. If the endpoint is down or slow, your words still land in the focused app as usual. Never dropped.

    How to use
    Available now

    Point the output target at a URL; OpenWhisp POSTs each dictation there as JSON.

    1. Open Settings › Output › Output target and choose Webhook, then enter your URL and add any headers your endpoint needs (e.g. an Authorization token).
    2. Dictate as usual — OpenWhisp POSTs { text, language, appBundleID, timestamp } as JSON to your URL.
    3. If the POST fails (non-2xx, network error, or timeout), the same text is typed into the focused app instead — you never lose it.

    Live now. Content-Type: application/json is always set; your custom headers are applied verbatim, with a short timeout so a slow endpoint fails open quickly.

  • Quiet-dictation mode — whisper into your mic and still get clean text

    A new toggle tuned for whispering and very soft speech. It applies a much stronger on-device audio boost (a high-gain normalizer with a hard no-clip limiter) and lowers the speech-detection threshold so quiet words still register as speech instead of being dropped as silence. Pair it with getting close to the mic in a quiet room. Off by default; everything runs locally.

    How to use
    MAK-45PR #153
    Available now

    Settings › Dictation › Microphone › turn on “Quiet-dictation mode”, get within a few inches of the mic, and dictate softly.

    1. Open Settings › Dictation › Microphone.
    2. Turn on “Quiet-dictation mode”. (Leave “Auto-boost quiet microphone” on too — quiet mode is the stronger boost curve.)
    3. Position the mic within a few inches of your mouth and pick a quiet spot — the boost is aggressive, so it will also lift background noise.
    4. Dictate softly or whisper; the lowered speech threshold keeps quiet words from being treated as silence.

    v1 is a preprocessing preset — a stronger auto-gain plus whisper-friendly VAD/silence thresholds — not a custom whisper model. The boost never clips (hard-limited), and it won't amplify near-silence into hiss. In a noisy room the aggressive gain can raise background noise, so quiet mode is best close to the mic.

Fixes

  • Custom vocabulary now works on Parakeet (files, meetings, and re-transcribes)

    Custom vocabulary was silently doing nothing on Parakeet — the default engine. It now biases Parakeet's transcription of files, meetings, and history re-transcribes toward your terms (via FluidAudio's built-in keyword spotting). It's batch-only on this engine, so it doesn't apply to live dictation — the Settings footnote says so plainly — and it always fails open: if biasing can't run, you still get your transcript.

    MAK-71MAK-70PR #178
  • A 28-fix stability sweep — Scratchpad layout, Settings reset, and a snappier app

    A broad bug-hunt across the recent releases fixed 28 verified issues. Highlights: the Scratchpad's note list no longer dwarfs the editor (and the panel remembers its size), “Reset all settings” now actually resets everything it promised, and the app feels faster — the Parakeet audio path was moved off the main thread, removing a source of UI lag during dictation.

  • Cleanup can no longer silently translate your dictation

    When you dictated in Russian (or any non-Latin script) with automatic AI cleanup on, a small cleanup model would sometimes translate the text to English — the overlay showed your Russian words but the pasted text came back in English. OpenWhisp now checks the cleaned text against what you dictated: if the cleanup dropped your writing system and swapped it for Latin, it's treated as a bad translation and OpenWhisp keeps your original transcript instead (the same fail-open path it already uses when the LLM errors). The check is deliberately conservative — same-language cleanups, Latin‑to‑Latin, short phrases, and Russian prose mixed with English code or URLs all pass untouched — and it never runs when you actually asked to translate (Translate to English, the Improve‑translation mode, a spoken refine instruction, or an agent‑bridge refine). The cleanup prompts were also hardened to spell out “reply in the same language, never translated”.

  • Refining an English dictation can no longer come back in another language

    The language guard was one-directional: it caught a Russian dictation that AI cleanup translated to English, but not the inverse. If the “Improve translation” target-language picker was ever left on Russian, an ENGLISH dictation you refined with AI would come back in Russian — the picker told the polish prompt to produce Russian even though the transcription engine only ever translates to English. Two fixes: the improve-translation flow now always polishes in English (the only language the engine translates into), and the stale target-language picker — which could not be honored coherently — has been removed. And the language guard is now symmetric: it rejects a cleanup that swapped your writing system in EITHER direction (English→Russian as well as Russian→English), while genuinely-intended translations still pass because their expected target script is declared. Same conservative thresholds as before: same-language cleanups, short phrases, and mixed code/URLs are untouched, and spoken-instruction, agent-bridge, and custom-Mode refines still own their own language contract.

  • Silence no longer errors on one backend but not the other

    Dictating nothing now quietly produces nothing on both whisper backends — no more stray error toast depending on which engine you'd picked in Advanced settings.

    MAK-23PR #123
  • OpenWhisp can't accidentally kill your other whisper servers

    The engine now checks a process is one it actually launched — by full path, not just name — before signaling it, so your own Homebrew or hand-built whisper-server is safe. Plus a fix for a startup port race.

    MAK-27MAK-28PR #118
  • A data race in Apple Speech dictation, closed

    Session state is now confined to a single context, so a late recognition callback can never leak a partial from one dictation into the next.

    MAK-29PR #116
  • Agent rate limiting counts sessions on one honest clock

    The per-client session cap could be bypassed by a long-running session straddling the window edge. It now measures membership and expiry on the same clock, so the cap holds.

    MAK-31PR #112
  • Post-processing scripts clean up after themselves

    Timed-out post-processing scripts now reap reliably — honest about best-effort process-group isolation, with a guarded kill that can never signal OpenWhisp's own processes.

    MAK-30PR #115
  • The audio-device watcher tears down cleanly

    The CoreAudio listener that notices when you plug in a mic now removes itself symmetrically — no lingering, unremovable observer.

    MAK-33PR #114
  • Onboarding catches a dead hotkey before you test it

    The setup flow now does a live Input Monitoring check on the hotkey step. If OpenWhisp can't detect key presses, you get an inline “Open System Settings → Input Monitoring” fix that re-checks itself — so you never reach the “try it” step with a push-to-talk key that silently can't fire.

    MAK-24PR #140
  • Meeting summary failures now tell you what actually went wrong

    When a meeting summary failed, the UI showed a generic error even when the real cause was specific — the provider was unreachable, the model missing, the request rejected. The failure now surfaces the underlying reason so you can fix the right thing instead of guessing.

Improvements

  • A calmer Settings — a short everyday list, power-user panes tucked away

    The Settings sidebar had grown to a wall of 15 rows. It's now a short Setup section with the panes you actually touch, plus a collapsible “More features” group for the rest (it auto-opens if you deep-link into one). A few power-user controls moved out of the first-run flow too — so a fresh install can be productive without changing a single setting. Nothing was removed or renamed; your existing settings are untouched.

    MAK-62PR #194
  • Five-minute “voice for your agent” setup guides

    New setup guides walk you through giving your coding agent a voice in about five minutes — one page each for Claude Code, Cursor, and any generic MCP client, plus an honest comparison of OpenWhisp against Claude Code /voice, VoiceMode, and Spokenly. The Claude Code guide has dedicated sections for API-key / Amazon Bedrock users, SSH / remote sessions, and HIPAA / privacy-locked orgs — exactly the setups where a cloud voice feature can't go.

    MAK-60PR #187
  • Parakeet is now the default, recommended transcription engine

    After testing well, the Parakeet realtime engine is promoted from experimental to the default: a fresh install downloads and uses it from the very first launch, and it carries the “Recommended” badge in Settings › Models. The change is safe for existing users — anyone already on WhisperKit (or any engine they chose) is left exactly where they were, so an update never swaps a working engine out from under you.

    MAK-46PR #172
  • Discover what OpenWhisp can do — a Tips & Commands cheat sheet + first-run overlay hints

    A new “Tips & Commands” menu item opens a cheat sheet of every gesture, spoken command, and feature that actually ships — with the real Settings path for each. Onboarding now ends with a short “What's next” card, and for your first few sessions the dictation overlay rotates a dismissible one-line tip (“say ‘scratch that’ to undo”) so the deeper features aren't buried. Hints auto-off after the first-run window and never interrupt an agent question or a refine.

    How to use
    MAK-25PR #149
    Available now

    Open “Tips & Commands…” from the menu bar for the full cheat sheet; new users also get a closing onboarding card and a few rotating overlay hints.

    1. Click the OpenWhisp menu-bar icon and choose “Tips & Commands…” to open the cheat sheet — grouped by voice editing, hands-free, spoken formatting, file @-mentions, AI cleanup, output targets, launcher automation, and the self-learning dictionary, each row with its real Settings path.
    2. First-run onboarding now closes with a “What's next” card pointing at 2–3 features to try (voice editing, hands-free mode, the AI cleanup dial).
    3. For roughly your first ten dictations, the overlay shows a small rotating tip while you speak; click its × to dismiss one forever.

    Live now. The overlay hints are calm and ambient — they only appear in a quiet listening moment of an ordinary dictation, never during an agent question, a refine, a hands-free-locked session, or while a transcript or revert control is on screen, and they auto-off after the first-run window. Every tip and Settings path in the cheat sheet is checked against what the running app actually does.

  • One place for text transforms

    The dictation pipeline now runs through a single, ordered post-processing chain — the groundwork that lets new transforms and output targets drop in cleanly, with behavior verified byte-for-byte against the old path.

    MAK-15PR #124
  • Corrupt settings files can't take the app down

    All five on-device data stores now share one hardened loader: a bad file is quarantined and the app carries on with sane defaults, instead of a fix living in only one of them.

    MAK-22PR #113
  • End-to-end audio testing, so features stay working

    A full regression suite now feeds pre-recorded audio through the whole pipeline — the reason "1290 tests passing" is more than a number. Every feature above ships with coverage.

  • One subprocess lifecycle for both bundled servers

    OpenWhisp runs two local helper processes — whisper-server for transcription and llama-server for on-device refine. Their start/stop/cleanup code was copy-pasted between the two; now it lives in one shared, tested place, so a fix to how a server is launched or reaped applies to both. The port a server binds is also acquired more safely, closing a race where two starts could collide on one port.

    MAK-21PR #152
  • Sturdier agent bridge — the MCP adapter now speaks a typed protocol and holds one connection

    The MCP server that lets coding agents drive OpenWhisp was rebuilt on the same typed, tested message envelopes the rest of the bridge uses, instead of hand-assembled JSON. It also keeps a single connection to the app open across tool calls (reconnecting by itself if the app restarts) rather than reconnecting every time — fewer moving parts, same behavior, now covered by its own tests.

    MAK-5PR #154