"The bug wasn't in the code. It was in one hotkey doing two jobs."
The Three Modes
Every serious dictation tool converges on the same three modes, because they're the three things you actually want to do with your voice at a cursor:
- Dictation: "type what I say." Speech becomes text, inserted at the cursor or replacing a selection.
- Command: "do what I say to this." Speech is an instruction — "make this shorter," "turn this into bullets" — that rewrites the selected text, or generates new text when nothing is selected.
- Transform: a saved command you run on demand or automatically — "Polish," "Fix Korean register," "No exclamation marks." A named, reusable command mode.
The Hijack Bug
Here's a real Firekeeper war story. In an early build, command mode was welded onto the dictation hotkey: if text happened to be selected when you started dictating, the app treated your speech as a command and rewrote the selection instead of inserting your words. That sounds clever — until you select a paragraph to look at it, start dictating something unrelated, and your paragraph silently gets "rewritten." One hotkey doing two jobs, disambiguated by a fragile signal (is anything selected?), is a bug generator. The fix was blunt: give command mode its own hold hotkey so a stray selection can never hijack normal dictation.
Bad: [dictate key] + selection present? -> maybe dictate, maybe rewrite (guess!)
Good: [dictate key] -> always dictate
[command key] -> always command
Explicit Beats Clever
The lesson generalizes far past voice apps: when one control's behavior depends on hidden state, users can't predict it, and unpredictable destructive behavior is the worst kind. A separate, explicit control for each intent is boring and correct. Firekeeper's dictation key always dictates; its command key always commands. No mode is ever inferred from whether you happened to have something highlighted.