Voice Commands & Course Correction
Two prompt-engineering features make dictated speech read like written text instead of a verbatim transcript: voice commands turn spoken formatting cues into actual formatting, and course correction removes self-corrections so only what you meant to say survives. Both are always active — there's no setting to turn them off — and both are shared @verba/core logic (packages/core/src/cleanupService.ts), applied identically by the VS Code extension and the macOS app.
Voice Commands
Say a formatting instruction while dictating, and Claude converts it to the actual formatting during cleanup — no manual editing afterward.
| Say | Result |
|---|---|
| "New paragraph" / "Neuer Absatz" | Paragraph break |
| "New line" / "Neue Zeile" | Line break |
| "Period" / "Punkt" | . |
| "Comma" / "Komma" | , |
| "Colon" / "Doppelpunkt" | : |
| "Semicolon" / "Semikolon" | ; |
| "Question mark" / "Fragezeichen" | ? |
| "Exclamation mark" / "Ausrufezeichen" | ! |
| "Bullet point" / "Aufzählung" | - (list item) |
| "Number one/two/three" / "Nummer eins/zwei/drei" | 1. / 2. / 3. |
Voice commands are language-independent: the underlying instruction is given to Claude once, and it recognizes the command phrase in whichever language you're speaking, mixed or not. Claude also uses surrounding context to resolve ambiguity — for example, "period" spoken as punctuation versus "period" used as an ordinary word in a sentence.
Course Correction
Real speech includes self-corrections: "let's meet tomorrow — no wait, on Friday at ten." Course correction detects phrases like these and keeps only the final, corrected statement, discarding the abandoned first attempt. The result: "let's meet on Friday at ten."
Recognized correction phrases include "no wait", "I meant", "actually, rather", "correction", and equivalent patterns in both German and English — matched by meaning, not by a fixed phrase list, so natural variations are still caught.
Where this happens
Both instructions are folded into every Claude request made by CleanupService — the default cleanup prompt and the framing added around every custom template — so they apply no matter which template is active. This is part of why the logic lives once in @verba/core rather than being reimplemented per surface: get it right once, and dictation reads naturally everywhere you use Verba.