
Too much Yapn?
Most of my day is now spent talking to coding agents. I type prompts into Claude Code, commands into a terminal, and the odd LinkedIn and X posts so companies notice me. Talking is faster than typing, but no dictation tool was enough for me STOP typing. How do I invoke a slash command? What if I want to speak out a command in the terminal? And what if I wanted all those without pinching my pockets?
So I built Yapn because why not. A super fast Dictation app, lives in your notch. Hold Right Option, and its listening. What lands at the cursor is what you meant to write, formatted for the app you are in. Everything runs on the Mac. The audio never leaves it.

It lives in the notch. While you speak, the notch grows into a cool little waveform. When you let go, it transcribes, then folds back into the notch.

Choosing the speech model
Before building the app, I tested which speech model to use. I recorded 35 clips of myself saying the kind of things I dictate all day: file paths, command flags, skill names. Then I ran every clip through six setups built on OpenAI's Whisper and NVIDIA's Parakeet.
One setup looked like the winner on paper. I'd given it a list of developer words to listen out for, and it got 94% of words right. But it heard that list everywhere. "Compare" came out as /compact and "empty" came out as TypeScript, in 13 of the 35 clips. A dictation app that drops random words into your sentences is worse than one that misses a few.
Plain Parakeet was the opposite. It heard the right words and simply wrote them as words: "slash lib" instead of /lib. That's a formatting problem, and formatting I can fix myself. It was also more than 30 times faster than Whisper with a word list. So Yapn uses plain Parakeet, running on your Mac, and does its own formatting on top.
Parakeet heard the right words and just wrote them plainly. I can fix formatting. I can't fix a model that makes words up.
Speaking code?
Say the symbol and Yapn writes it. "Slash" becomes /, "dash dash" becomes --, "dot" becomes a dot. It also knows when to leave a word alone. "Dash" is usually just English, as in "dash off a note", so it only turns into a hyphen when it's clearly part of a command, like the -d in a docker command. The list of symbols Yapn understands is short for now, and it grows with every update.
"Run slash code review on this branch." → run /code-review on this branch
"Open src slash lib slash auth dot ts." → open src/lib/auth.ts
"docker compose up dash d." → docker compose up -d
"Uh, the the build is slow." → The build is slowNames work the same way. Say "slash grill me" and Yapn checks the Claude Code skills you actually have installed, then writes /grill-me. If you don't have a skill by that name, it won't make one up.
Reading the room
The same sentence should come out differently depending on where you're typing. When you start talking, Yapn notices which app you're in and picks a writing style to match.
- In a terminal, it writes a command.
- In Claude Code, it writes a prompt, with your skills spelled right.
- On LinkedIn and in Mail, it writes polished sentences.
- Everywhere else, it writes clean everyday text.
In a terminal
"npm test with the verbose flag." → npm test --verbose
"Git commit with message fix login bug." → git commit -m "fix login bug"
On LinkedIn
"Honestly this was kind of the best talk I've seen this year."
→ This was the best talk I've seen this year.In a terminal you get one clean line, with no full stop and no capital letter. Yapn never presses Enter, so a dictated command never runs by itself. It also fixes what the speech model tends to get wrong there: letters spelled out one by one, like "C D S R C", become cd src, and "get commit" becomes git commit.
On LinkedIn and in Mail, it drops filler like "basically" and "honestly" and makes sure every sentence starts with a capital and ends properly.
It also works in the terminal built into VS Code and Cursor. From the outside that looks just like the code editor, so Yapn checks whether you're typing in the editor or in its terminal before it picks a style.
Smart cleanup with Apple Intelligence
Some things simple rules can't fix. When you say "Let's meet Monday, no wait, Tuesday", you want "Let's meet Tuesday." That takes a language model. With Smart cleanup switched on, Yapn uses Apple Intelligence, which also runs on your Mac, so your words still never leave it.
It only asks the model when your words need it: when you correct yourself, start a sentence twice, or stumble a lot. Everyday dictation skips that step and stays instant.
And it doesn't blindly trust the model. If the model's version changes a command, loses your question mark, or rewrites more than it should, Yapn throws it away and pastes the simpler version instead. The model can tidy what you said, but it can't change what you meant.
Apple's model is slow to answer if it hasn't been used for a few seconds. Yapn wakes it up the moment you press Right Option, so it's ready by the time you finish talking.

The menu shows your last dictation and how long it took to appear after you let go. The screenshot above is from the dictation that asked for this very write-up: 373 ms with Smart cleanup on, written in the everyday style for Cursor.
Your clipboard stays yours
Yapn types into any app by pasting. The catch is that pasting goes through your clipboard. So Yapn remembers whatever you had copied, pastes your words, and then puts your clipboard back exactly as it was.
Testing it on how I really talk
Reading test sentences aloud isn't how people talk. Real speech has stutters, restarts and changes of mind. So Yapn can keep a private history of your dictations. It's off by default and stays on your Mac. I go through mine, correct anything Yapn got wrong, and those become new tests.
Every time I change how Yapn cleans up text, I check one number: how many dictations the change made worse. That number should always be zero.
Shipping

Version 0.2.0 is a free download for Apple Silicon Macs on macOS 14 and later, from GitHub releases (might be newer version at the time of you reading this). Apple hasn't approved it yet, so the first time you open it you'll need to click "Open Anyway" in Privacy & Security. Next up: getting it approved by Apple, recognising file names from your projects the way it already recognises skills, and showing words on screen as you speak.
Stack
Swift · AppKit · SwiftUI · Parakeet TDT 0.6B v2 on Core ML (FluidAudio) · Apple Foundation Models · Accessibility API · SwiftPM
