2.0.7
Latest
Sep 29, 2026
Translate into English as you dictate
- Speak any language, type English — turn on Translate to English and whatever you say is typed out in English, in whichever app you’re in. It reaches well past coding: read along with a meeting in a language you don’t speak. It’s in the menubar menu, and in Settings → Advanced.
- It uses a second speech model — the fast model the app ships with genuinely cannot translate. Ask it to and it hands back what you said, unchanged, with no error: OpenAI left translation out of that model’s training. So switching translation on downloads a translation-capable model once, about 948 MB, after asking. Never turn it on and you never download it.
- Mixing languages works — while translation is on, the spoken language is detected for you, so switching between English and anything else mid‑conversation is fine: English stays English, everything else arrives in English. Your Dictate → Language setting is left alone and comes back when you switch translation off.
- Dictation is slower while translating — roughly twice as long per phrase, because the translating model is the larger one. With translation off, dictation is exactly as fast as before.
- “Delete models” now frees everything — the compiled Neural Engine cache the installed app builds, a few hundred megabytes, was invisible to it and never reclaimed.
iTerm2 dictation fixed, multilingual replies pronounced properly
- Dictation works in iTerm2 again — transcribed text wasn't being inserted there at all, and because Auto-Submit's Enter was delivered, you got an empty command submitted instead. The accessibility write reported success while silently doing nothing, so the app never fell back to the typing path that works. Writes are now verified rather than trusted, in every app.
- Multilingual voices follow the language you write in — a Supertonic voice used to be a hard language pin: ask for an English reply on a German voice and the model would refuse, citing the instruction. The engine now detects the language of each sentence on-device and pronounces it with that language’s own sounds, so an English sentence on a German voice comes out as English — not as English read through German phonetics. Kokoro voices are unchanged — a Kokoro voice is its language.
- Pin the reply language if you want one —
tts_language, or OW_TTS_LANGUAGE per project, names the language every spoken reply is written in, for any voice, whatever the conversation is in.
- Half the download size — 7.1 MB, against 12.7 MB for the first 2.0.6 build. A text-normalization engine the app never actually used is no longer linked in.
- Audio engine upgraded to FluidAudio 0.15.8 — better handling of possessives in spoken replies, plus a batch of speech-recognition fixes.
- 2.0.6 was republished — the first build, put out a few hours earlier, is missing the size reduction and several fixes found in review. Both call themselves 2.0.6, so re-download if you took the early one.
Speaking indicator fixed in every mode
- The speaking indicator works in every mode — the “Playing…” status and the speaker icon on the voice preview button only ever updated in Hands-Free; in Press-to-Talk and Hold-to-Talk they were permanently dark. Playback state is now published inside the app rather than polled off disk, so both follow real playback everywhere — and react immediately instead of up to a third of a second late.
- No more frozen bars on the overlay — leaving Hands-Free mid-listen could strand the last analyzer frame on screen, redrawing at 30 fps indefinitely instead of going quiet.
- The audio spectrum is only analyzed when something draws it — every audio buffer was reduced to 96 frequency bands on both the microphone and playback paths, including for the default overlay style, which doesn't display them. That work is now skipped unless a spectrum is on screen.
- Quieter background timers, and the debug log is capped —
paste_debug.log previously grew for the life of an install.
Upstream WhisperKit, custom vocabulary fixed
- Custom vocabulary is safe to use again — setting any custom vocabulary used to make every dictation return an empty transcript: recording ran, nothing got typed. Verified by dictating with a non-empty vocabulary, not just by reading a changelog.
- The WhisperKit fork is gone — the app had been pinned to a fork carrying a one-line fix for exactly that. Argmax shipped the fix upstream in WhisperKit 1.1.0 — a more thorough implementation, with ~200 new tests — so speech-to-text now runs on upstream
argmaxinc/WhisperKit and the fork is out of the dependency graph entirely.
- Codex hooks move to
~/.codex/hooks.json — Codex warns when hooks are split between hooks.json and an inline [hooks] table in config.toml, so the app now writes only the former. Reconnect Codex in Settings → Agents to move an existing install.
- Pi catches up — it gains the persona and reply-language layers it was missing, so a spoken reply on Pi now matches Claude Code and Codex.
- No more
SDK auth failed noise when Claude Code starts — its MCP client probes for an OAuth endpoint before connecting, and the server answered with an empty body, which the SDK parsed as a malformed OAuth error document and logged every time. Both that path and GET /mcp now answer with proper JSON. The persona line also picks a or an correctly.
First-run setup, visible personas
- A four-pane first run — permissions, dictation, voice and connecting your coding agent, in a sheet on first launch. It replaces being dropped into the Settings window with a wall of JSON on top of it, and carries model-download progress the whole way through — including the ~1.5 GB speech model, which used to download with nothing on screen explaining the wait. Skippable at every step, and reopenable any time from the menubar → Setup….
- It knows which agents you have — the agent pane detects the agents you actually run and lists those first. First run previously always showed Claude Code config regardless, because nothing was stored yet and Claude Code was the fallback. Codex users now also get told about hook trust in the app: Codex silently skips untrusted hooks, so without that step dictated turns are just quietly silent.
- Personas are no longer a secret — choosing a voice has always attached a national character to every spoken reply (French dry and faintly unimpressed, Hindi irrepressibly helpful, British dry and unflappable). It applied on every turn, it was derived from the voice id, and nothing in the app ever said so. The voice picker now names each language group's persona, so you can compare before choosing, and the selected one is spelled out underneath.
- And you can pick a different one — Settings → Voice → Persona defaults to Automatic, the voice's own character, so nothing changes unless you change it. Multilingual (Supertonic) voices get no persona automatically, so this is currently the only way to give them any character at all.
- Larger type throughout the windows — the dictation overlay is deliberately untouched.
OW_TTS_PERSONA joins the existing OW_TTS_* variables for per-project overrides.
Six colour themes
- Pick how the app looks — a Themes card in Settings → General offers six palettes: Champagne (the new default — cream with champagne gold and a sky-blue tint), Cream (the original look), Light and Dark (neutral greys on white or near-black), Pastel (soft blue and rose), and Sky (soft sky blue with a champagne accent).
- It applies everywhere — Settings, the window chrome and the dictation overlay all follow your choice. The five fixed themes hold their look whatever macOS is set to, and each one says so under the picker; Cream is the one theme that keeps tracking your Mac's light/dark setting, the way the app always has.
- The menu bar icon stays neutral — it deliberately keeps following macOS rather than your theme, so it stays legible against a light or dark menu bar.
Speaks Dutch, German, Polish, Russian & Ukrainian — and a real Settings window
- A second speech engine — Supertonic-3 — Kokoro-82M has no voice for Dutch, German, Polish, Russian or Ukrainian, so those replies came out as an English voice reading foreign text. That isn't "accented" — an ASR read-back of Kokoro's Dutch scored ~100% WER against ~3.7% for Supertonic-3; the sentence was unrecoverable. Those five languages now synthesize through Supertonic-3 (already inside FluidAudio, so no extra binary and no subprocess).
- Kokoro stays the default — the app routes on the voice you pick: Kokoro keeps its nine languages, including Mandarin, which Supertonic-3 was never trained on. Existing voice preferences are untouched.
- Ten new voices — one female and one male style for each of the five languages, on top of Kokoro's 54. All 31 Supertonic languages ride inside the one model, so a power user can name any of them via
OW_TTS_VOICE.
- Replies written in the voice's language — picking a Dutch voice now also nudges the agent to write its spoken summary in Dutch. Without it, a Dutch voice just read English aloud.
- Fast, and on the Neural Engine — Supertonic-3 at int8 synthesizes at ~19× realtime, roughly 10× faster than the shipping Kokoro. Streaming playback, barge-in, the
speak tool and /v1/audio/speech are unchanged.
- Fixes the wiring exposed: 44.1 kHz output is resampled for playback (it would have played ~1.8× too slow), tagged voice ids are no longer silently dropped back to the global voice, and a blocked Supertonic download no longer flips the whole TTS server into an error state while Kokoro is loaded.
- A real Settings window — settings move out of the menubar popover into a proper tabbed window: Dictation · Voice · Agents · Advanced, with General on the right as the app logo. It keeps the warm cream/gold identity throughout — the tab bar is drawn by the app, so there's no gray system strip. The menubar is now a small dropdown (Settings · Show Overlay · Quit).
- Connect several agents at once — the Agents tab lists all four agents (Claude Code, Codex CLI, Pi, Antigravity) with their own status and Connect button, instead of a single-select picker that implied you could only use one. Each row has an ⓘ explaining exactly which files get written, and the manual follow-up step stays on screen instead of hiding in a tooltip.
- Dictation on WhisperKit large-v3 turbo — stronger noise robustness, ~99 languages, and clean punctuation and casing. Custom vocabulary works at both layers — biasing the model as it listens and correcting the finished transcript.
- More from the same window — a resizable transcription overlay (up to 1600×1000) with one OFF · Wave · LED Bars · Graph · Curtain style dropdown, transcription history in the menubar, permission rows that are real buttons opening System Settings, branded sliders and text fields throughout, and clearer wording: "Auto-Apply" → Connect, "Detail" → Length, reply modes now "Only when I dictate" / "On every turn".
- This release rolls up everything since 1.6.0.
Antigravity & Pi, voice personas, mid-turn speaking
- Two more agents — Antigravity & Pi — spoken replies now work beyond Claude Code and Codex in the Antigravity CLI (
agy) and Pi. Pick your agent in the Setup card and Auto-Apply wires it up: Claude Code, Codex, and Antigravity get a hook plus a speak tool; Pi gets a drop-in extension.
- Voice personas — pick a voice with a national accent and the reply is written to match its character: the British voice turns dry and deadpan, the Italian voice warm and expressive, the Japanese voice courteous and understated, and so on across nine accents. It colors tone only; it never changes the facts.
- Mid-turn speaking — replies are spoken through an in-app
speak tool the agent calls, so speech can start mid-turn instead of only after the whole reply lands. (Pi uses an equivalent extension.)
- Queue spoken replies — an option to let replies queue and play in order instead of the newest cutting off the last.
- Adjustable speaking speed — a Speed slider in Voice Settings sets how fast replies are spoken (0.7×–1.5×, default 1.1×). Per-project override via
OW_TTS_SPEED.
- Scalable overlay — the floating overlay has a resize grip: drag up to step the transcript from 3 → 2 → 1 lines, then to a waveform-only pill; the size is remembered.
- Simpler Response modes — the little-used "when Text" option is gone; Response is now when Voice (dictated turns only, the default) or Always.
- Fixes: invalid voice names from the model fall back to your voice; the transcription overlay takes the first click even when the app is in the background (click any line to copy it); the Permissions rows stay visible in the menu.
Reliability: will-speak indicator, live download progress
- Will-speak indicator — the menu bar icon switches to a speaker (and the status pill reads Standby · will speak) whenever your next dictated turn's reply will be spoken aloud, so a silent turn no longer looks like a bug. Arms only when you dictate into a terminal or editor.
- Overlay transcript history fixed — the floating overlay's scrollable transcript pane, empty since the pure-Swift port, now shows every dictation as it happens, straight from the in-process pipeline.
- First-run download progress — the menu shows a live percentage while the ~1.5 GB speech model downloads, then a "compiling for the Neural Engine" message. A failure banner explains why, with Retry and Copy Diagnostics buttons.
- Copy Diagnostics — one click in Server & Logs copies a support-ready report (app/macOS versions, permission states, model/cache status, disk space, log tails) to the clipboard.
Auto-focus any app, Response mode
- Auto-focus any installed app — the Automation dropdown now lists every app on your Mac (Word, WhatsApp, Slack…), searchable by name, alongside the dev/terminal favorites.
- Response mode — choose when replies are spoken: on dictated turns only, typed turns only, or always. Per-project override via
OW_TTS_RESPONSE.
- Snappier menu — fixed a 3–4s freeze when opening the menubar popover by moving a blocking launch-at-login check off the main thread.
- Automation polish, in-app help hints on every section, and a tidier menu layout.
Fully native — no Python
- Fully native — speech-to-text (WhisperKit) and text-to-speech (Kokoro) now run in-process on the Apple Neural Engine. The Python server, virtualenv, and
setup.sh are gone. Install is just "drag to Applications."
- In-app streaming playback + instant barge-in — replies start speaking after the first sentence; "hold on" cancels audio and in-flight synthesis in-process.
- Tagless voice mode — no more
[VOICE:] tag; a hook fingerprints each dictation and routes the spoken reply to the right session.
- Warm redesign matching the site, WhisperKit 1.0, and a fix for garbled speech on some Apple Silicon chips.
Streaming TTS
- Streaming text-to-speech — speech starts after the first sentence instead of waiting for the whole response, with gapless playback and near-instant barge-in.
- Codex CLI TTS honors your in-app volume; setup finds Python from pyenv, conda, MacPorts, or Intel Homebrew.
- Stability and security fixes: overlay teardown crash, mis-routed text edge cases, and a removed AppleScript-injection vector.
New icon & polish
- New diamond app icon, transcription-overlay separators, refreshed dependencies, and full open-source credits.
Custom controls, hands-free polish
- New waveform/terminal-cursor logo, custom menu and checkbox controls, a silence progress bar, and hardened installation.
Hands-free bug fixes
- 11 hands-free fixes (silence detection, barge-in, keyword matching), collapsible Voice Settings, and persistent card states.
Hands-Free Mode & Hold-to-Talk
- Hands-Free Mode — say "initiate" to start, silence auto-transcribes, "hold on" interrupts, all via on-device keyword detection.
- Hold-to-Talk added as a third input mode alongside Press-to-Talk, plus a new gradient waveform icon.
Native focus, 11 voices
- Native app focus without System Events permission, a configurable push-to-talk key, 11 Kokoro voices, 15 auto-focus apps, and a 17-fix Swift audit.
Accessibility prompt, voice detail levels
- First-launch Accessibility prompt with live status, Brief/Natural/Detailed spoken-summary levels, barge-in, and a smaller overlay.
Built-in Push-to-Talk
- Built-in push-to-talk (no external dictation app needed), reliable auto-focus, the transcription overlay, an events log, and a language selector.
Auto-Submit & Auto-Focus
- Say "submit" to press Cmd+Enter, auto-focus the target app after transcription, configurable ports, and 17 bug fixes.
First release — macOS menubar app
- The original menubar app for voice mode with Claude Code on Apple Silicon: start/stop servers, a Claude Code hook, and on-device Whisper + Kokoro.