Dictation Cleanup Changed My Meaning: What to Check
Where dictation apps invent words, what filler removal should and shouldn't touch, unedited samples at three strengths, and where the raw transcript lives.
You dictated a message, the app handed back something cleaner, and one phrase in it is not what you said. A hedge is gone, a number moved, or a sentence you never spoke now reads perfectly. Here is where that happens and what to do about it.
Two places words can be invented
A dictation app is two stages. A recognizer turns audio into a raw transcript. Then, in many current apps, a language model cleans that transcript up. Both stages can put words in your mouth, in different ways.
The recognizer mostly substitutes: it hears the sounds correctly and writes a different word with the same sounds. It also drops words, and a dropped word leaves a visible hole.
The cleanup model is the more dangerous stage because its mistakes read well. Ask a general-purpose model to “clean this up” and it fills the hole with the most plausible word, finishes the sentence you trailed off on, and answers the question you were only transcribing. Nothing looks wrong. That is the problem: a substitution you can catch, a fluent invention you can’t.
ListenIn’s cleanup runs under one rule: reordered, never invented. Every content word in the output has to trace back to a word actually present in the transcript: unchanged, repaired by sound, or re-rendered as a number or punctuation. If the recognizer dropped a word, cleanup treats it as unsaid and leaves the gap rather than guessing. A question is transcribed, not answered. “Can you send the deck” stays a request to whoever you were writing to; it never becomes “I’ll send the deck”. The why page describes the goal as hearing the mess and handing back the message.
What filler removal should touch, and what it shouldn’t
“Remove the ums” sounds like one operation. It is a boundary, best stated as two lists.
Fair game:
- Fillers and verbal tics: um, uh, like, you know, 嗯, 那个
- Stutters: “I I I think” becomes “I think”
- Retractions: “send it to Sarah, wait no, to the whole team” keeps only the team
- Thinking aloud: “let me think”, “how do I put this”
- A point made twice, folded into one that keeps the details from both (Refined only)
The rule says these are not touched at any strength:
- Hedges: maybe, probably, 大概. Removing one changes what you committed to
- Register: blunt stays blunt, casual stays casual
- Numbers, names and dates. Nothing is computed, converted, or resolved; “next Wednesday” stays “next Wednesday”
- Technical tokens as recognized: grpc stays grpc, Swift UI stays Swift UI
- Language switch points: an English term inside a Chinese sentence stays English
The second list is where “cleanup changed my meaning” lives. A model that tightens prose will happily drop a “probably”, and now you have promised something.
Three strengths on the same dictation
Under Settings → Cleanup, Cleanup strength has three options: Verbatim (punctuation only), Standard (remove fillers, fix slips), and Refined (restructure & bullets). By design, Standard removes fillers and resolves retractions but keeps your sentence order as prose. Refined also merges repeats and turns three or more parallel points into a list.
The samples below are inputs from our regression corpus, sent to the production cleanup service on 2026-09-18. Each strength was run twice; where the two runs differed, both are shown. Outputs are pasted unedited.
Sample 1. Raw transcript:
um so i think we should uh ship the fix on thursday and um also we should ship it on thursday because the numbers look fine
| Strength | Output |
|---|---|
| Verbatim | We should ship the fix on Thursday because the numbers look fine. |
| Standard | Run 1: I think we should ship the fix on Thursday, because the numbers look fine. Run 2: We should ship the fix on Thursday, because the numbers look fine. |
| Refined | We should ship the fix on Thursday, because the numbers look fine. |
Sample 2. Three parallel points:
for the onboarding flow we need to cut the signup form down to three fields and we need to send the welcome email right after verification and we also need to log every drop off point so we can see where people quit
Standard:
For the onboarding flow, we need to cut the signup form down to three fields, send the welcome email right after verification, and log every drop-off point so we can see where people quit.
Refined:
For the onboarding flow, we need to:
- Cut the signup form down to three fields
- Send the welcome email right after verification
- Log every drop-off point so we can see where people quit
Two observations. Sample 2 is the strengths working as designed: identical words, only Refined adds structure. Sample 1 is not. Verbatim removed “um” and “uh” and folded the repeated clause in both runs; “I think” survived in one Standard run and in neither Verbatim nor Refined run. “I think we should ship” and “we should ship” are not the same sentence. Nothing was invented, but a hedge was lost at two of three strengths. That is over-editing, and it is why the raw transcript, not a strength setting, is the guarantee described below.
When the target is a coding agent
Dictating into Claude Code or Cursor raises the stakes: a step the cleanup model invents is a step the agent will run. So coding prompts get the same rule with a stricter shape. When the front app is a terminal, Cursor, VS Code, Xcode, or Claude Code and Write prompts in AI coding tools is on, a dictation is rewritten as a prompt: the goal first, ordered steps numbered, constraints in their own block. Headings and list labels have to be your own words. From the same regression run:
can you bump the timeout to ten seconds because the upload keeps failing on big files
Bump the timeout to 10 seconds, because the upload keeps failing on big files.
“Ten” became “10” under the number-formatting rule; no step, tool, or check was added. ListenIn prepares the prompt and inserts it. It does not run it. The voice coding page covers the setup, and a separate post covers mixed Chinese-English prompts.
How to spot over-editing, and which strength to use
Open Dictation History and click Show raw transcript. The signs:
- A hedge is missing or a number changed
- A two-item message came back as a list
- A question came back with an answer
- An English term inside a Chinese sentence came back in Chinese
- Any word you cannot find in the raw transcript
Which strength for what:
- Refined (restructure & bullets): notes to yourself, messages you would otherwise rewrite, anything with three or more points
- Standard (remove fillers, fix slips): when order and wording carry meaning: quoting someone, giving feedback
- Verbatim (punctuation only): when you want a transcript. Given Sample 1, check it against the raw transcript
- On any strength, set Lists to Never (prose only) if you never want a list
The raw transcript is the safety layer
Cleanup is a second pass, never the only copy. If the cleanup service is unreachable, or you have used the week’s free words, the raw Apple transcript still lands at your cursor and the HUD says which happened: “Cleanup failed — raw transcript inserted (check network or key)” or “Weekly quota used up — raw transcript inserted · Upgrade to Pro”. History keeps the raw transcript next to the final text whenever the two differ, stored on your Mac. If the app exits mid-dictation, the next launch offers the local draft for recovery.
What leaves the Mac during cleanup is text, never audio, and the security page lists it per mode. Bring your own key and the text goes straight to your provider; run a local Ollama model and nothing leaves at all.
A note on Whisper hallucination studies
Search “dictation app added words I didn’t say” and you will find research on OpenAI’s Whisper. Koenecke et al., “Careless Whisper” (arXiv 2402.08021), studies exactly this: hallucinated phrases and sentences in Whisper output. OpenAI’s own model card for Whisper says “the predictions may include texts that are not actually spoken in the audio input” (as of 2026-09-18).
Those findings describe Whisper. ListenIn does not use Whisper; recognition runs through Apple’s speech engine, forced on-device, and we know of no equivalent public study of that engine, so we make no claim about its rate either way. The design response is the same: bound the cleanup pass so it cannot add words, and keep the raw transcript one click away so you can check.
Try it on your own Mac
Free tier, no account. Audio never leaves your Mac.