Troubleshooting
Pick a section by symptom. Each has a checklist and ordered fixes. Settings shots (ts-03/ts-04) and system/menu-bar shots (ts-01/ts-02) are UI-replica WebP images (regenerate with make docs-screenshots).
Before you start: note these five
Section titled “Before you start: note these five”- macOS version
- VoiceHotkey version (Settings → About)
- Recognition engine name
- Local Only on/off
- App path (Finder → Get Info)
Hotkey does nothing
Section titled “Hotkey does nothing”No overlay, no menu-bar status change, no system feedback.
Checklist
Section titled “Checklist”- Menu bar icon present (app running)
- Accessibility enabled for the current app path
- Launched from
/Applicationsor~/Applications - Hotkey not conflicting with another app
- Hotkey page not warning about Accessibility
- Process — Menu bar icon should open a menu. Relaunch from Applications if missing.
- Accessibility — System Settings → Privacy & Security → Accessibility. One VoiceHotkey row, correct path, switch on. Remove duplicates, quit and reopen the app.
- Stable path — See Install & permissions.
- Rebind — Settings → Shortcuts → record a less common chord.
- Conflicts — Quit tools that clash with defaults: dictation
⌃⌥Space, command⌃⌥C.

ts-01-accessibility-list.webp)Recording but no text
Section titled “Recording but no text”Overlay shows listening, but the field stays empty or processing never finishes.
Checklist
Section titled “Checklist”- Demo mode off
- Microphone granted; correct input device
- Engine configured (key / Apple ready)
- Local Only not blocking a cloud engine
- Network / quota / key validity
- Caret in a normal text field (secure fields may block insert)
- Settings → General — turn Demo mode off.
- Read menu bar status — mic needed, engine not configured, Local Only blocked, etc.
- Microphone — enable for VoiceHotkey; verify hardware with Voice Memos.
- Engine — try Apple as a control. If Apple works but cloud fails → key/network/quota.
- Local Only — public engines fail when Local Only is on.
- Output — Text processing Output action should insert at caret; try Notes if Terminal blocks injection.

ts-02-menubar-status.webp)
ts-03-local-only.webp)Permissions keep resetting
Section titled “Permissions keep resetting”Worked yesterday; hotkey dead today; Accessibility looks half-set.
Common causes
Section titled “Common causes”| Cause | Notes |
|---|---|
| Path changed | Downloads, another folder, or a different build path |
| Signature / replace | Overwrite install treated as a new app |
| Duplicate rows | Wrong Accessibility entry bound |
- Keep a single app in Applications.
- Quit VoiceHotkey fully.
- Remove all VoiceHotkey rows from Accessibility and Microphone.
- Launch from the fixed path and re-grant.
- Always open that same path (debug vs release packages count as different paths).
Polish / translation unchanged
Section titled “Polish / translation unchanged”- Polish enabled / using the translation hotkey
- Post-process LLM key configured
- Local Only not blocking the API
- Fallback may insert raw transcript (expected on failure)
- Settings → Text processing: polish on; translation uses its own hotkey.
- Configure LLM provider keys.
- Compare with Local Only off, or point Base URL at localhost.
- Ensure raw voice typing works before enabling polish.
Voice commands do nothing
Section titled “Voice commands do nothing”- Settings → Voice commands → Enable voice commands is on
- Command hotkey is registered and Accessibility is granted
- Allow hotkeys is not turned off (if you only use dictionary shortcuts)
- User-dictionary entries are enabled and phrases match (exact then fuzzy)
See Voice commands.
Shell commands don’t run
Section titled “Shell commands don’t run”- Enable voice commands master switch is on
- Trial or Pro (not Free)
- Settings → Voice commands → Allow shell commands enabled (not under General)
- Didn’t cancel the confirm dialog
- Not blocked by the danger blocklist
- For intent-generated shell: intent model on and configured; for dictionary shell: entry type is shell and enabled
See Shell commands and Plans.

ts-04-license.webp)Quick scenarios
Section titled “Quick scenarios”- Path + both permissions
- Demo mode off
- One working engine
- Test in Notes
- Launch the new build from Applications
- Clear stale Accessibility rows and re-grant
- Confirm About version
- Cloud APIs must be reachable
- Or use Apple, the four on-device engines, or localhost
- Local Only also pauses update checks
Still stuck
Section titled “Still stuck”- Re-run the first-setup dry run.
- Collect the five items at the top.
- File an issue via Contact.
Install & permissionsDMG, path, Accessibility, microphone.
First-time setupDemo mode, engine, hotkeys, test.
