After 1.3.0 we went and read what people actually complain about in dictation apps — Hacker News threads, the issue trackers of the open-source ones, the support pages of the subscription ones. Two things stood out. Trial users decide in the first hundred dictations whether an app is reliable, and the moment nothing pastes and nothing explains why, they're gone. And the fastest-growing group of users isn't dictating into email at all — they're talking to coding agents.
1.4.0 is built around both.
Vext is now an MCP server
Vext ships a built-in MCP server. Turn it on in Settings → General → MCP server for AI agents, and Claude Code, Codex, OpenCode, Cursor, Claude Desktop, Octomind and any other MCP client on your Mac can use Vext as a tool.
What an agent can do with it — the same things you can do from the menu bar and the main window:
- Dictate.
start_dictation, you talk,stop_dictationreturns the transcript — after your vocabulary, cleanup and the active style. Withpaste: trueit lands at your cursor like a normal dictation; without it, the agent just gets the text. - Transcribe any audio file on disk with the local model.
- Meetings. Start and stop a recording, read the transcript with speaker names and timestamps, get or regenerate the summary, label a speaker ("Speaker 2" → "Sarah", optionally remembering the voice), export to Markdown, text, SRT or VTT.
- History. List, search, read and delete dictations and notes; retry a failed dictation.
- Everything in Settings. Dictation style, translation, filler removal, auto-submit, microphone, per-app styles, vocabulary, known speakers.
Setup is one command for Claude Code:
claude mcp add --transport http vext http://127.0.0.1:58398/mcp --header "Authorization: Bearer <your token>"
Settings has a Copy config for… menu that fills in your token for Claude Code, Codex CLI, OpenCode, Cursor and Windsurf, Claude Desktop, and Octomind. The server listens on 127.0.0.1 only, every request needs the token Vext generates, and the whole thing is off until you switch it on. Nothing about your voice, transcripts or meetings leaves the machine — the agent talks to a local port, and the local model does the work.
It speaks both the classic MCP handshake and the 2026 per-request revision, so it works with today's clients and the ones about to update. If you dictate into coding agents, this turns "hold a key and talk" into "the agent asks you to talk, then does something with the answer."
See the words as you speak
Dictation now shows a pill at the bottom of the screen: a waveform, the elapsed time, and the transcript rolling in phrase by phrase as the recognizer finishes each one. You can read what it heard before you let go of the key.
Changed your mind mid-sentence? Press Escape or click the pill's ✕. The recording is discarded, nothing is transcribed, nothing is pasted — and the Escape doesn't reach the app underneath, so it won't close whatever you had open.
Nothing fails silently anymore
This was the reliability problem. A dictation that produced nothing produced nothing: no text, no message, no trace in History. You couldn't tell a silent take from a crashed recognizer.
Now:
- A take with no speech shows "No speech detected."
- If the recognizer fails on audio that clearly contains speech, Vext keeps the audio, shows what happened, and adds a "Transcription failed" row to History with a Retry button. Retry re-runs the whole pipeline — recognition, vocabulary, cleanup, your style — and puts the result on the clipboard, since your cursor has long since moved on. Deleting the row deletes the audio.
Audio of successful dictations is still never kept.
One style per app
The dictation style from 1.3.0 was global. It's now also per app: Settings → Language & LLM → Per-app styles. Message for Slack, As spoken for Terminal and Claude Code, Email for Mail, each with its own auto-submit switch. Add an app from the list of what's running or pick one from disk.
The style is chosen by the app that was in front when you started speaking — and that's also where the text goes. If you Cmd-Tab away while Vext is still processing, it switches back to the original app before pasting instead of dropping the text into whatever happens to be focused now.
Pick your microphone
Settings → Audio & STT → Microphone. System default, or any input device, for dictation, notes and meetings alike. Multi-input interfaces that used to record silence from the wrong channel now record the channel you chose.
Unplug the mic and Vext falls back to the system default and tells you so; the picker keeps your choice marked "(unavailable)" until the device comes back. If your first words keep going missing on AirPods, this is the fix: wireless mics take a moment to wake up, and a built-in or wired one doesn't.
Hotkeys: mouse buttons and quick tap
Middle and side mouse buttons can now be recorded as hotkeys — push-to-talk on a thumb button works exactly like a modifier key.
There's also an optional Quick tap toggles hands-free dictation: a press shorter than the hold delay on your push-to-talk key starts hands-free mode, another tap stops it, while a long press is still push-to-talk. One dedicated key, both behaviors. It's off by default because with Shift as the PTT key every capital letter would count as a tap; turn it on with Fn, Right ⌥ or a mouse button.
And typing a regular key while the push-to-talk combo is held now cancels the hold — Shift+letter is typing, not dictating.
"Record this call?"
When Zoom, Teams, Slack, FaceTime, Discord, Webex, Skype or Loom starts using your microphone, Vext shows a small prompt in the corner: Zoom is using your microphone — Record and transcribe this meeting? Record starts the usual meeting pipeline with speaker labels and summary; Not now dismisses it, and it disappears on its own after thirty seconds.
Nothing is recorded until you click Record, and the prompt can be switched off in Settings → Audio & STT → Meetings.
Fixes
- Deleting a vocabulary entry while its text field was focused crashed the app. Fixed, and the same pattern was fixed in the new per-app list before it could bite.
- The hotkey capture field could crash on repaint when a system font lookup returned nothing. It now uses a native label.
- Text pastes back into the app you started dictating in, not the one you switched to meanwhile.
Update
brew upgrade muvon/tap/vext
Or download Vext 1.4.0 directly. Meetings, speaker profiles, vocabulary and hotkeys carry over. The MCP server stays off until you enable it.
Everything still runs entirely on your Mac: no cloud, no account, no subscription.