You can dictate code on a Mac, but not the way most people first try. Speaking raw syntax ("const, open paren, close paren, fat arrow, open brace") is slow, tiring and easy to get wrong. What works in 2026 is speaking intent: you describe the change in plain sentences to an AI coding agent such as Cursor, Claude Code, Codex or Windsurf, and it writes the syntax. Voice handles the part that's prose, and the agent handles the part that's punctuation.
This guide covers that workflow with Whisperer, plus the one setting that matters most for code: a personal dictionary so names like Kubernetes, useEffect and PostgreSQL come out spelled right.
To be clear up front: Whisperer does not have spoken symbol or casing commands. Saying "open paren" gives you the words "open paren", not (. Earlier versions had a Code Mode for this; it was removed in Whisperer 2.0.
Why dictating raw syntax doesn't work well#
Code is dense with characters that have no natural spoken form. A short TypeScript line like this:
const user = await db.users.findFirst({ where: { id } });
is eleven words of English if you read it naturally, but about two dozen spoken tokens if you have to name every brace, dot and semicolon. You also have to plan the punctuation in your head before you say it, which is the opposite of the "think out loud" benefit of voice.
The other problems:
- Every mistake is expensive. A misheard "dot" breaks the line, and fixing it means finding the spot with the keyboard anyway.
- It doesn't scale past one line. Indentation, multi-line blocks and nested brackets are hard to hold in your head while speaking.
- It's tiring to talk that way. Speaking in a command grammar is a separate skill that takes real practice before it feels faster than typing.
Dedicated command-grammar tools exist for people who need to code with no keyboard at all, and they're worth looking at if that's you. For most developers who want to type less, the better trade is to stop dictating syntax entirely.
The workflow that works: speak intent to an agent#
Most code changes start as a sentence in your head: "make the retry logic back off exponentially and give up after five attempts". That sentence is exactly what an AI coding agent wants as input. Speaking it takes a few seconds.
“in the payments service make the retry logic back off exponentially starting at 200 milliseconds give up after five attempts and log each retry with the order ID”
In the payments service, make the retry logic back off exponentially, starting at 200 milliseconds. Give up after five attempts and log each retry with the order ID.The flow in Whisperer:
- Click into the prompt box of your agent: Cursor's chat or agent panel, Claude Code or Codex in the terminal, Windsurf, Copilot Chat in VS Code.
- Hold Fn (or your own shortcut) and speak. The live preview shows the words as you go.
- Release. Whisperer copies the text and shows a Copied ⌘V toast.
- Press ⌘V, read it once, and send.
The agent writes the code with correct casing, symbols and indentation. You review the diff with the keyboard, which is what the keyboard is good at.
Why spoken prompts tend to be better prompts#
When people type prompts, they abbreviate: "add retry". When they speak, they explain: which service, what the limit is, what should happen on failure. Agents do better with that context. Voice makes the longer, clearer prompt cost about the same effort as the short one.
Get identifiers right with the personal dictionary#
The real weak spot for developers isn't syntax, it's vocabulary. Speech models are trained mostly on everyday speech, so library names, internal service names and acronyms come out wrong. The personal dictionary fixes that.
Dictionary
4867 corrections from 12 packs
Each entry is what the app hears and what it should write:
| You say | Add as correct form |
|---|---|
| "post gress", "postgres Q L" | PostgreSQL |
| "cube control" | kubectl |
| "use effect" | useEffect |
| "next JS" | Next.js |
| "Supa base" | Supabase |
| your internal service names | however your team spells them |
“the use effect hook is refetching every render because the dependency array includes the Supa base client”
The useEffect hook is refetching every render because the dependency array includes the Supabase client.A few things to know:
- Close variations. Leave "Also fix close variations" on and similar mishearings get caught by one entry.
- It learns. When you correct a word, Whisperer can add it to the dictionary marked Learned.
- Prompt words. A second tab holds a short list of terms the speech model is told to expect before you start. Use it for the handful of names you say constantly.
This is a spelling fix for specific words you choose, not a casing engine. "Use effect" becomes useEffect because you added that entry, not because Whisperer understands camelCase. More in the dictionary setup guide.
What to dictate, and what to type#
| Task | Voice or keyboard |
|---|---|
| Prompts to Cursor, Claude Code, Codex, Windsurf | Voice |
| Commit messages and PR descriptions | Voice |
| Code review comments | Voice |
| Docstrings, README sections, comments | Voice |
| Slack replies while you're mid-task | Voice |
| Short edits, renames, navigation | Keyboard |
| Writing syntax directly | Keyboard, or ask the agent |
For comments and docstrings, dictate the sentence, then paste it after the // or inside the docstring you've already opened.
Optional: the Coding AI mode#
With Pro, Whisperer can pass your dictation through an AI before you paste it. The built-in Coding mode rewrites spoken text into concise technical prose, keeping technical terms and function names as you said them. It's useful for turning a rambling explanation into a clean docstring or PR description. It doesn't produce code syntax from spoken commands. The AI can be the built-in model that runs offline on your Mac, or your own Claude, ChatGPT or Gemini plan. See AI writing.
Works in every editor#
Because Whisperer delivers text through the clipboard, it works anywhere you can paste:
Cursor and Windsurf
Speak into the agent or chat panel, paste with ⌘V, send. See voice coding with Cursor.
VS Code and JetBrains
Copilot Chat, commit message box, comments, Markdown files. See dictation for VS Code.
Terminal agents
Claude Code and Codex in Terminal, iTerm2 or Warp. See dictation for the terminal.
Xcode
Prompts, comments and docs work the same way.
Why not Apple Dictation?#
Apple's built-in dictation is fine for prose and costs nothing. For developer work it lacks a personal dictionary you control, learned corrections and a choice of speech engines, and it doesn't have spoken code commands either. See the Apple Dictation comparison and is Apple Dictation good enough for developers.
How to start#
Day one: prompts and messages
Use voice only for agent prompts and Slack. No learning curve.
Add ten dictionary entries
The libraries, services and names that come out wrong. That covers most of the friction.
Add commit messages and PR descriptions
They're prose. Speak them.
Keep the keyboard for syntax
Edits, navigation and small fixes stay on the keyboard. That split is the point.
FAQ#
Can Whisperer turn "open paren" into ( or "camel case" into camelCase?#
No. Whisperer does not have spoken symbol or casing commands. It writes what you say as text. For code, the practical approach is to describe the change to an AI coding agent and let it write the syntax, and to add identifiers you say often to the personal dictionary.
What is the fastest way to write code by voice?#
Speak intent, not syntax. Tell Cursor, Claude Code, Codex or Windsurf what you want in full sentences, paste the prompt, and review what the agent writes. Use the keyboard for small edits and navigation.
Does Whisperer type into my editor automatically?#
No. Whisperer copies the transcribed text and shows a Copied ⌘V toast. You paste it with ⌘V wherever your cursor is, which works in any editor, terminal or chat box.
More: Voice coding guide, Voice to text for developers, camelCase and snake_case by voice, Vibe coding with voice. Whisperer is $2.99 on the Mac App Store; see pricing.
Meeting notes and dictation that run on your Mac
$2.99 app, Pro $14.99, paid once. No account, no subscription.
Get Whisperer