Voice prompts for Cursor that actually work
The first time most people try speaking to Cursor, they try to dictate code. "Const user equals await fetch user open paren id close paren." It goes badly, they decide voice isn't for programming, and they go back to typing.
The fix is simple. Don't dictate code. Dictate intent. Cursor writes the code; your job is to explain what you want, and explaining is something you're much faster at out loud.
What's worth saying out loud
Good candidates for voice:
- Bug reports to the agent. "When I log out and back in, the dashboard still shows the old user's projects. I think the query cache isn't being cleared on logout."
- Refactors with constraints. "Split this component into a list and an item. Keep the props the same so nothing upstream changes."
- Questions about code you didn't write. "Why does this hook re-render twice on mount?"
- Review notes. "Rename this to something clearer, and the error message should tell the user what to do next."
Bad candidates:
- Exact code. Type it, or describe it and let the model write it.
- One-word edits. Faster to type.
- Anything you'd be embarrassed to say in an open-plan office. (Real constraint. Push-to-talk and a quiet voice help.)
A setup that works in any editor
Cursor's chat and its inline edit box are both normal text fields, so anything that can put text on your clipboard works with them. Here's the flow with Whisp:
- Open the chat or inline edit (⌘K) in Cursor.
- Press ⌥ Space and talk. Take your time; pauses don't end the recording.
- Press Return to finish. Whisp copies the cleaned-up text.
- ⌘V into Cursor, skim it, send.
The nice part of doing it at the system level is that the same habit works in VS Code, Zed, a terminal agent, a browser chat, or a GitHub comment. You learn one shortcut and stop thinking about it.
If you prefer holding a key, the Mac App Store version has push-to-talk on ⌥R. Hold it while you talk, release to finish.
Saying file names without fixing them afterwards
This is the bit that usually ruins voice prompts for code. You mention a file and get it back spelled like a sentence.
Whisp handles the common ones after recognition. "docker compose dot yaml" becomes docker-compose.yml. "tsconfig dot json" becomes tsconfig.json. Acronyms come out the way you'd type them: API, SQL, OAuth, GraphQL, CI/CD.
For files specific to your project, save them as vocabulary in Settings. Once UserProfile.vue is in there, saying "user profile dot vue" gives you UserProfile.vue. And "at sign" in front of a saved file name gives you an @ mention, which is handy for pointing the agent at a file.
Three habits that make spoken prompts better
Lead with the outcome. "I want the empty state to show a button that creates the first project." Then add details. The model and your listener (you, reading it back) both parse that order better.
Say what must not change. When you type, you skip the constraints because they're tedious. Out loud they're cheap: "don't touch the API types, and keep the test names."
Read it before sending. Takes two seconds. Catches the one word the recognizer misheard. This is also why we like the copy-then-paste flow: you always see the prompt before the model does.
A real-ish example
What you say:
Why does the docker compose yaml drop the my sequel connection after every restart? I think the app starts before the database is ready, so maybe add a health check and make the API wait for it.
What lands in Cursor:
Why does the docker-compose.yml drop the MySQL connection after every restart? I think the app starts before the database is ready, so maybe add a health check and make the API wait for it.
That's a better prompt than most of us would type, because typing it would have felt like too much effort.
Give it a week
Voice prompting feels odd for about three days, then it's hard to go back. Whisp has a seven-day free trial on the Mac App Store, no card needed, then $9.99 once. Everything runs on your Mac.