Most LocalVoiceAI problems fall into one of a few categories: missing macOS permissions, a stale binary after a rebuild, a missing dependency, or a network issue during first-run model download. The sections below walk through each scenario with its symptoms, root cause, and exact fix.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/npateriya/LocalVoiceAI/llms.txt
Use this file to discover all available pages before exploring further.
Event tap failed / Nothing transcribes
Event tap failed / Nothing transcribes
SymptomThe log at Holding Fn+F10 produces no recording or transcription.Cause
/tmp/localvoice.log shows:localvoice creates a CGEventTap at the session level to detect F10 key presses system-wide. macOS requires two separate privacy permissions for this:- Accessibility — allows the process to simulate Cmd+V paste into the focused window
- Input Monitoring — allows the process to observe all keystrokes system-wide
- Open System Settings → Privacy & Security → Accessibility
- Add
~/.local/bin/localvoiceand ensure the toggle is blue (enabled) - Open System Settings → Privacy & Security → Input Monitoring
- Add
~/.local/bin/localvoiceand ensure the toggle is blue (enabled) - Restart the service:
Doesn't work in iTerm2 / VS Code terminal
Doesn't work in iTerm2 / VS Code terminal
SymptomRunning Once started this way, the service runs in the correct process context and responds to F10 from any app.
./localvoice or ~/.local/bin/localvoice directly from a terminal window does not respond to F10 keypresses, even though permissions appear to be granted.CauseWhen you launch a binary directly from a terminal, the process inherits that terminal’s permissions context. iTerm2, VS Code’s integrated terminal, and similar apps may not hold an Input Monitoring entitlement themselves, which prevents any child process they spawn from receiving system-wide key events — even if localvoice is listed in the Input Monitoring preference pane.FixUse the LaunchAgent instead of running the binary directly. The LaunchAgent (com.localvoiceai.localvoice) runs as its own first-class process under launchd, completely independent of any terminal:Transcription is gibberish
Transcription is gibberish
SymptomThe service appears to record and transcribe —
[REC] and [OK] Pasted: lines appear in the log — but the pasted text is nonsense, unrelated words, or random characters.CauseThe most common cause is a sample rate mismatch between the audio capture rate and the rate Whisper expects. A secondary cause is a corrupted or incomplete model file.Fixlocalvoice auto-detects your microphone’s native sample rate (48 kHz or 44.1 kHz) via PortAudio and writes a correctly-headered WAV file at that rate, so no manual configuration is needed. If you’re seeing gibberish:- Restart the service to clear any stale audio state:
- Check the log for any
[ERROR]lines fromwhisper-cli: - If the model file is corrupted, delete it and let LocalVoiceAI re-download it on next start:
The binary will download a fresh copy of
ggml-small.bin(~244 MB) automatically.
Permissions lost after make update
Permissions lost after make update
SymptomThe service worked before, but after running CauseEvery build produces a binary with a different cryptographic hash. macOS ties Accessibility and Input Monitoring grants to the specific binary hash, so when the hash changes, both permissions are automatically revoked — even though the file path is identical.FixAfter every
make update it stops transcribing and the log shows the event tap error again:make update recompiles the binary from source and code-signs it with a new ad-hoc signature:make update, re-grant both permissions:- Open System Settings → Privacy & Security → Accessibility
- Remove the old
localvoiceentry (if present) and re-add~/.local/bin/localvoice - Open System Settings → Privacy & Security → Input Monitoring
- Remove the old
localvoiceentry (if present) and re-add~/.local/bin/localvoice - Confirm both toggles are blue (enabled)
Service not running / make status shows nothing
Service not running / make status shows nothing
SymptomRunning If the file is missing, the LaunchAgent was never installed or was removed. Re-run the install:
make status prints Not running., or launchctl list | grep com.localvoiceai.localvoice returns no output. The service was previously installed but does not appear to be loaded.FixWork through these steps in order:Check whether the plist is present
Load the plist if it exists but isn't registered
If the file is present but
launchctl list shows nothing, load it manually:whisper-cli not found
whisper-cli not found
SymptomThe log shows:The service starts but immediately exits.CauseThe LaunchAgent plist sets the following This means
localvoice shells out to the whisper-cli binary (provided by the Homebrew whisper-cpp package) to run inference on Apple Metal GPU. If whisper-cli is not installed or is not on the PATH the LaunchAgent uses, the process exits immediately.FixInstall whisper-cpp via Homebrew:PATH for the service process:whisper-cli must be located at /opt/homebrew/bin/whisper-cli (the standard Homebrew prefix on Apple Silicon). If you installed Homebrew to a non-standard location, update the PATH value in ~/Library/LaunchAgents/com.localvoiceai.localvoice.plist accordingly and run make reload.No input device / Cannot open mic
No input device / Cannot open mic
SymptomThe log at Recording never starts and nothing is transcribed.Cause
/tmp/localvoice.log shows one of the following lines when you hold F10:localvoice uses PortAudio to open the system’s default input device at its native sample rate. These errors occur when:- No microphone is connected or enabled (e.g. external USB mic unplugged, Bluetooth headset disconnected)
- macOS has not granted the
localvoiceprocess Microphone access in Privacy & Security - The default input device is unavailable or in use by another exclusive-access application
- Confirm a microphone is connected and selected as the default input device in System Settings → Sound → Input.
- Open System Settings → Privacy & Security → Microphone and ensure
~/.local/bin/localvoiceis listed and its toggle is blue (enabled). - Restart the service to re-initialize PortAudio with the current device state:
- Check the log again:
A successful mic open will show a
[REC] Recording at <rate>Hz...line when you next hold F10.
Model download fails on first run
Model download fails on first run
SymptomOn the very first start, the log shows:The service exits before transcription is available.CauseAt startup, Option 2 — Download the model manually, then restart:Once
localvoice checks for the model at ~/.cache/localvoice/ggml-small.bin. If the file is not found, it attempts to download it from Hugging Face. This can fail due to a network connectivity issue, a firewall blocking the Hugging Face domain, or insufficient disk space.FixEnsure you have at least 250 MB of free disk space, then try one of the following:Option 1 — Restart the service (it will retry the download):~/.cache/localvoice/ggml-small.bin is present, localvoice skips the download step on all future starts.For issues not covered here, open an issue on the GitHub repository at https://github.com/npateriya/LocalVoiceAI. Include the relevant lines from
tail -100 /tmp/localvoice.log in your report to help with diagnosis.