Aurator
Dictation for your Mac that coaches you as you speak.
Problem
Dictation tools like Wispr Flow, and the others, stop at transcription. They turn your speech into text, and that is all they do. None of them use the hours of speech you produce every day to actually help you communicate better.
Solution
Aurator does the transcription, and then goes a step further. It analyses all the speech you produce while you work, and becomes an in-depth coach. It shows you where your speaking and your communication can improve, and it tracks the topics you spend the most words on, so you get real insight into what you talk about most, and how to say it better.
What it is
A native macOS app for everyday, system-wide dictation. Press a shortcut anywhere, speak, and it types clean text into whatever app you are using, transcribed on your device in English and Spanish. Every session is analysed so that, over time, it coaches you toward clearer communication.
Design process
General research
I use dictation all day, and I looked closely at the tools that exist, like Wispr Flow and VoiceInk. They transcribe well, but they stop there. None of them use the speech you produce to help you get better.
Market validation
I wrote a feature by feature comparison against the tool I was using, and set the bar plainly. Aurator has to be good enough to replace it for a full normal day of my own work.
Ideation
I designed it in two layers. The dictation you use all day, transcribed and cleaned on the device, and a coach built quietly on top of the sessions that dictation produces.
Testing
I built a separate command line target to test the transcription and cleanup engines on their own, away from the app, and I set a done when test for every phase of the plan.
Iteration
I rebuilt the coach three times, and tuned the cleanup so it keeps one warm model in memory, skips the model when there is nothing to fix, and throws away any rewrite that changed too much of your words.
Build
I built system wide dictation from any app, on device transcription in English and Spanish, on device cleanup, a personal dictionary, per app rules, the full session history, and the coaching layer that scores six dimensions of how you speak.
Test
I use it every day on my own machine, which is the main test, and the engines are covered by the separate lab target.
Release
Aurator is not released yet. The app is built through packaging, signing, and auto update. The last steps before selling it are the licensing and the update links.
Technical breakdown
Aurator is a native macOS menu bar app in Swift. It works in four stages, each behind its own small interface so it can be tested or swapped on its own. Capture holds the shortcut and the microphone, Transcribe turns your speech into text on the device, Refine cleans it up with the on device Apple model, and Insert writes it into whatever app you are in and saves the session. The coaching lives on top of that saved history, and never sits on the dictation path.
Four stages, each behind its own protocol
Aurator runs as Capture, Transcribe, Refine, Insert, and each stage sits behind a small Swift protocol so it can be tested or swapped without touching the others. A separate AuratorLab command line target exercises the transcription and cleanup engines in isolation, away from the menu bar app. On a pipeline built on unproven OS APIs, isolating each stage behind an interface is what lets you verify and replace the risky parts one at a time.
Streaming transcription on brand new macOS speech APIs
Transcription uses Apple's SpeechAnalyzer and SpeechTranscriber entirely on the device, streaming audio buffers in live rather than waiting for the end of a phrase, and biasing recognition with your personal dictionary terms. These APIs were new and unproven, so I marked the risky calls to verify at build, and the shipped engine confirms the real path, the model inventory, the best available audio format, and the streaming input. New platform APIs are worth isolating and proving against hardware before you build on top of them.
Prewarming the model so the first dictation is instant
The first use has to download and load a language model, which would stall your very first dictation, the worst possible first impression. So I prewarm the model at launch behind a preparing pill, so it is ready by the time you press the key. Move a one time cost to a moment the user is not waiting on it.
Cleanup that is fast, and refuses to rewrite you
The on device Foundation model cleanup cost a few seconds a call and would sometimes rewrite too much. So I keep one warm model session and recycle it past a roughly 6,000 character budget, skip the model entirely when a fast check finds no fillers or repeats, and reject any result that changed more than 60 percent of the text, falling back to a rule based cleaner. An LLM in a hot path needs a cheap skip for the easy cases, and a hard guardrail against it changing your meaning.
Pasting reliably, with a per-character fallback
Inserting text into another app is not one solved problem, paste breaks in some apps and mangles accented Spanish characters. So the default is a synthesised paste with a save and restore of your clipboard, so I do not stomp whatever you had copied, and there is a type it out fallback that sends each character as a key event for the apps that ignore paste. System wide text insertion has no single reliable path, so you carry two and choose per app.
A coaching layer that never sits on the dictation path
The coach scores six dimensions of your speaking, pace, fluency, directness, concision, clarity, and vocabulary, and it reads the same session history that dictation writes, but it never runs while you are dictating. A live practice mode records two attempts and compares them, and pointedly never writes those practice runs into the real sessions table, so practising cannot inflate your score. Keep the thing you measure and the thing the user does all day on separate paths, so neither slows or corrupts the other.
Built to be sold, so nothing about me is baked in
Because Aurator will be sold, everything personal is either a setting or learned from your own data, and the session schema is user neutral, with a standing rule that holds every future feature to that line. A debug build stays unlocked so I can develop without fighting the licence. If a personal tool is meant to become a product, keeping yourself out of the data model from the start saves a painful rewrite later.
Shipped like a real Mac app, signed and notarised
It is a Developer ID signed, notarised, universal build for both Intel and Apple Silicon, generated from an XcodeGen project, with a seven day trial and a one time unlock, Sparkle auto updates, and a backup and restore to a single zip. Media even auto pauses while you record, through a vendored MediaRemote adapter. Distributing outside the App Store means you own the signing, notarising, and update pipeline yourself, and it is worth building that early.