Skip to content

Troubleshooting

Pick a section by symptom. Each has a checklist and ordered fixes. Dashed frames are screenshot placeholders (public/screenshots/ts-*.svg).

  1. macOS version
  2. VoiceHotkey version (Settings → About)
  3. Dictation engine name
  4. Local Only on/off
  5. App path (Finder → Get Info)

No overlay, no menu-bar status change, no system feedback.

  • Menu bar icon present (app running)
  • Accessibility enabled for the current app path
  • Launched from /Applications or ~/Applications
  • Hotkey not conflicting with another app
  • Hotkey page not warning about Accessibility
  1. Process — Menu bar icon should open a menu. Relaunch from Applications if missing.
  2. Accessibility — System Settings → Privacy & Security → Accessibility. One VoiceHotkey row, correct path, switch on. Remove duplicates, quit and reopen the app.
  3. Stable path — See Install & permissions.
  4. Rebind — Settings → Hotkey → record a less common chord.
  5. Conflicts — Quit tools that clash with defaults: dictation ⌃⌥Space, command ⌥Space.
Placeholder: clean Accessibility list
Fig. A · Accessibility list (placeholder · ts-01-accessibility-list.svg)

Overlay shows listening, but the field stays empty or processing never finishes.

  • 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)
  1. Settings → General — turn Demo mode off.
  2. Read menu bar status — mic needed, engine not configured, Local Only blocked, etc.
  3. Microphone — enable for VoiceHotkey; verify hardware with Voice Memos.
  4. Engine — try Apple as a control. If Apple works but cloud fails → key/network/quota.
  5. Local Only — public engines fail when Local Only is on.
  6. Output — post-process Output action should insert at caret; try Notes if Terminal blocks injection.
Placeholder: menu bar status
Fig. B · Menu bar status (placeholder · ts-02-menubar-status.svg)
Placeholder: Local Only toggle
Fig. C · Local Only (placeholder · ts-03-local-only.svg)

Worked yesterday; hotkey dead today; Accessibility looks half-set.

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
  1. Keep a single app in Applications.
  2. Quit VoiceHotkey fully.
  3. Remove all VoiceHotkey rows from Accessibility and Microphone.
  4. Launch from the fixed path and re-grant.
  5. Always open that same path (debug vs release packages count as different paths).

  • 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)
  1. Settings → Text post-process: polish on; translation uses its own hotkey.
  2. Configure LLM provider keys.
  3. Compare with Local Only off, or point Base URL at localhost.
  4. Ensure bare dictation works before enabling polish.

  • 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.


  • 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.

Placeholder: License page
Fig. D · License (placeholder · ts-04-license.svg)

  1. Path + both permissions
  2. Demo mode off
  3. One working engine
  4. Test in Notes

  1. Re-run the first-setup dry run.
  2. Collect the five items at the top.
  3. File an issue via Contact.