Resonant

Resonant + Cursor

Better prompts.
Better code.
Spoken, not typed.

Cursor is only as good as the context you give it. You type prompts at 40 words per minute. You speak at 200. That 5x gap is the difference between “fix this” and a prompt that actually produces the right code.

Resonant transcribes your voice locally on your Mac. Press a key in Cursor, speak the full context, and clean text lands in the prompt box. No cloud. No latency.

Used by engineers at

AnthropicCursorGoogleNvidiaStripe

The gap

You know what
the prompt needs.
You just don't type it.

Every time you abbreviate a Cursor prompt because typing the full version takes too long — that's a worse outcome. The constraints you left out. The edge case you didn't mention. The context that would have prevented three rounds of back-and-forth.

The bottleneck isn't Cursor. It's the interface between your understanding and the model. Voice removes it.

What you type~40 wpm

“add error handling to the API routes”

Missing: which routes, what errors, what response format, what logging, which errors to retry vs. fail.

What you'd say~200 wpm

“Add error handling to the three payment API routes. Stripe errors should return a 402 with the Stripe error code. Rate limits should return 429 with a retry-after header. Everything else is a 500 with a generic message — don't expose internal details. Log the full error to our logger with the request ID for tracing.”

Full spec. Dictated in 12 seconds. Cursor gets it right the first time.

Real prompts

Same task. Different input.
Different code.

Refactoring auth middleware

Typed7 words — typed in 10 sec

fix token validation order in auth middleware

Dictated52 words — dictated in 8 sec

Open the auth middleware in the API folder — there's an edge case where tokens issued before the schema migration aren't being validated correctly. The expiry check runs before the version check. Swap the order and add a log line when it catches an old token so we can see how often it's happening in prod.

Building a new feature

Typed8 words — vague scope

add saved filters feature for the dashboard

Dictated89 words — complete spec in 15 sec

Add a saved filters feature for the dashboard. Power users apply the same complex filter combinations every day — think 3-4 filters with specific date ranges and category selections. They should be able to save a filter set with a name, load it from a dropdown, and delete ones they don't use anymore. Store the filters in the user's profile, not in local storage — they switch between machines. Keep the UI minimal, just a small save icon next to the filter bar and a dropdown to load.

Debugging a test failure

Typed9 words — no context

why is my test failing with nil pointer

Dictated66 words — full reproduction context in 12 sec

I'm looking at this stack trace — it's a nil pointer on the cache layer, but only in the test environment, and only when the test suite runs in parallel. I think it's a race condition in the mock setup, but I want to understand if there's a pattern here before I start patching individual tests. The mock is initialized in TestMain and shared across all subtests without a mutex.

Where it fits

Six moments in an
AI-native workflow.

Prompt composition

Say everything the function needs to do. Every constraint, every edge case, every 'oh and also.' Voice removes the pressure to be concise — and concise prompts produce worse code.

Code review narration

Walk through a PR like you'd explain it in person. What you're approving, what concerns you, what should change. Dictated as a comment. Faster than inline annotations.

Architecture brainstorms

Talk through the tradeoffs before you commit to anything. Dictate the reasoning into Cursor's chat. Get pushback on the parts that don't hold up.

Error context dumps

Describe the stack trace, the reproduction steps, the environment, the thing you already tried. Give Cursor the full picture. Stop getting answers to the question you typed instead of the problem you have.

Commit messages

Explain what the change does and why — the way you'd explain it to a teammate. Resonant structures it. No more 'fix stuff' commits.

Inline comments

The reason this function exists, why this approach was chosen, what the next person should know. Spoken in 5 seconds. Would have taken 30 to type.

Screen context (OCR)

[Resonant sees: payments.ts:142 — createCharge() — Error: Stripe rate limit exceeded]

You say

“add retry logic with exponential backoff, max 3 attempts”

Cursor receives

Add retry logic with exponential backoff (max 3 attempts) to createCharge() in payments.ts:142 for Stripe rate limit errors.

Screen context

Resonant reads
your screen.

OCR picks up the file, the line number, the error message, the function name. You don't have to describe what you're looking at — Resonant already knows.

“Fix this” becomes a precise, located instruction with the full context attached.

Architecture

Your code stays
on your machine.

Cloud dictation routes your audio through external servers. Every prompt you dictate — the internal API structure, the authentication design, the migration plan — travels to someone else's infrastructure.

Resonant processes everything on your Mac. Audio never leaves your device. The only thing that reaches Cursor is the finished text — exactly as if you'd typed it.

Free. Local. Works in any Cursor field.

Give Cursor the context
it actually needs.

Better prompts. Better code. No subscription, no cloud, no typing bottleneck.

Requires macOS 14+ · Apple Silicon