01 · Hotkeys
Hold. Speak. Release.
Halopen captures while a hotkey is held. No wake words. No ambient listening. The moment your finger lifts, the text lands.
Talk hotkey — the default. Hold, speak, release. Customize in Settings → Hotkeys.
Open Vocabulary — add proper nouns, identifiers, terms that get misheard.
Open Snippets — voice-trigger phrase expansion. Say a trigger, it expands inline.
Command mode — select text, hit the chord, say "rewrite as a bulleted list".
02 · App routing
The right mode for the app you're in.
Halopen auto-routes by frontmost app. Verbatim is the default; override per-app in Settings → Per-app default.
Verbatim — what you said, exactly
Code editors, terminals, chat. Anywhere a missed contraction or auto-corrected identifier would cost time.
Auto-routed in: Terminal · iTerm2 · Xcode · VS Code · Cursor · Cline · Claude Code · Slack · Discord · Messages
Polish — filler out, punctuation in
Removes "um", "uh", "you know"; adds sentence punctuation and capitalization. Your words, less hesitation.
Good for: chat replies that want polish without rewrite · short email replies · status updates
Editorial — rambled to written
Reshapes a spoken thought into a written paragraph. Keeps meaning + voice; restructures clauses for clarity.
Good for: drafting emails · Notion docs · Bear / Obsidian notes · longer-form writing
03 · Vocabulary
Teach Halopen the words that matter to you.
Open Vocabulary (⌃⌘B) and add the words that get misheard. Halopen biases the recognizer toward them on every dictation.
- →Proper nouns: people, places, company names. "Charlevoix", "M-E-R-I-A", "queso fresco"
- →Code identifiers: file paths, env vars, function names. "ASTRO_DB_REMOTE_URL", "handleSubmit", "src/lib/foo.ts"
- →Industry terms: jargon the model doesn't see at general scale. "pgvector", "rehydrate", "QPS"
- →Spelled-out acronyms: when you want letters, not a word. "F-D-I-C", "S-Q-L"
The biasing prompt has a ~244-token ceiling per call. Pick the ~80 words that get misheard most; the rest is room for the cursor-adjacent context Halopen reads automatically.
04 · Voice for prompt engineering
Speech earns clauses typing skips.
Sustained typing tops out around 60-80 wpm; speech runs at ~150. The 2x bandwidth turns into better prompts — the clauses you'd skip while typing are free to say.
-
1. Three-clause prompts beat one-clause prompts.
What to change → where it lives → what not to touch. The third clause is the one typing skips and speaking includes.
-
2. Negative constraints land cleaner spoken.
"And do not touch the audio capture path" — typing this is friction; speaking it is one breath. Agents respect named no-go zones.
-
3. Test contracts pin the implementation.
"The test should fail with X; X lives in tests/Y" — named tests anchor the agent's interpretation. Claude/Cursor will respect a contract more than a vague spec.
-
4. File paths + line numbers transcribe cleanly.
Halopen captures "src/lib/foo dot ts colon one twenty three" as
src/lib/foo.ts:123when those identifiers are in your vocabulary. -
5. Recover mid-thought — "actually, let me restate that…"
Speech is editable in flight. Restart a clause, the agent reads the latest version. Typing penalizes restarts; speaking rewards them.
05 · Power moves
The settings that pay back the most.
Per-app overrides
Settings → Per-app default. Terminal → Verbatim. Notion → Editorial. Mail → Polish. The auto-routing already gets most of these right; override for the apps that are personal.
Audit log
Settings → Audit Log shows every dictation + cleanup pair. Click a row for full request URL + "Copy as cURL". Export JSON for analysis.
Snippets
Voice-trigger phrase expansion. "Intro signature" → your full email footer. "Address block" → your shipping address. Saves keystrokes on the things you say a hundred times a year.
Local mode
Settings → Transcription mode → Local. Apple Silicon runs Whisper Large via WhisperKit on-device. No network, no cloud — your speech never leaves the Mac.