This page covers what to do when Harpax won't download, won't launch, or launches but doesn't start monitoring your sessions. Work through the symptoms in order — most issues are caught by the Launch page's automatic health checks.
Start here: run the health checks
Every time you open Harpax, the Launch page runs a battery of automated checks. If any of them fail, that's almost always the right place to start:
- Daemon binary is present and executable
- Claude hooks are correctly configured in
settings.json - The Harpax MCP server is registered with Claude
- The sessions directory exists and is writable
- Your config file is valid YAML
- Ports
9850,9851, and9852are available
Failed checks often display a Fix button that resolves them automatically. Try that first.
Symptom: the download failed or the installer won't run
Pre-installation issues depend on how you obtained Harpax (direct download, package manager, etc.). Once you have a binary in hand, jump to the next section.
- Browser blocked the download. Some browsers flag newly published binaries until they reach a reputation threshold. Choose "Keep" or "Allow" in your browser's download manager.
- Windows SmartScreen warning. Click More info → Run anyway. The warning appears for any binary that hasn't accumulated enough installations to be recognized.
- macOS Gatekeeper warning. Right-click the app, choose Open, then confirm. Do not double-click on first run.
- Antivirus quarantine. Add an exclusion for the Harpax binary and the
~/.harpax/directory.
Symptom: Harpax launches but the daemon won't start
Open a terminal and run harpax serve directly — the output will point at the problem. The most common causes:
Port conflict
Harpax needs three loopback ports:
9850— WebSocket bridge (GUI ↔ daemon)9851— IPC server (hook verdicts)9852— MCP server (allowed-action re-injection)
If another process is holding any of these, the daemon will refuse to start. Find and stop the conflicting process, or change the ports in ~/.harpax/config.yaml under the shim block.
# Windows
netstat -ano | findstr "9850 9851 9852"
# macOS / Linux
lsof -i :9850 -i :9851 -i :9852
Sessions directory not writable
Harpax writes JSONL session files to ~/.harpax/sessions by default. If that path isn't writable (permissions issue, full disk, or a custom path that doesn't exist), the daemon fails on startup. Create the directory manually if needed, or override the path in config.yaml:
storage:
path: /a/path/you/can/write/to
Symptom: Harpax is running but isn't seeing any session activity
The daemon is up, the GUI shows "Connected," but nothing appears in the live monitor when you use Claude Code. This is almost always a hook configuration problem.
Claude's hook runner cannot parse Windows backslash paths in settings.json. If you edited the file manually and used backslashes, the hooks will silently fail to spawn.
Re-run Harpax's startup auto-configuration (or click Fix on the Hooks health check), which writes the path with forward slashes via filepath.ToSlash().
Other hook issues to check
- Hook client binary is missing. The hook entry in
settings.jsonpoints tohook-client.exe(or its Unix equivalent). Make sure the file exists at that exact path. - Claude Code isn't reading the right settings file. Claude looks at user-level settings first, then project-level. Confirm which file Harpax wrote to via the Setup page in the GUI.
- Hooks are configured for the wrong events. Harpax needs
PreToolUse,PostToolUse,UserPromptSubmit,SessionStart, andSessionEnd. If only some are registered, only some events will arrive. - Hook timeout too low. The default
performance.hook_timeout_msis2000. On slow disks or constrained machines, hooks can time out before the daemon responds — raise the limit if you seewarn_on_slow_hookmessages in the logs.
Symptom: blocks aren't enforced
Events appear in the live monitor and detections fire, but dangerous tool calls still execute. The most likely cause:
- You're in passive mode. Passive mode logs everything but never blocks. Switch
protection.modetoactivein your config (or use the Shim Mode toggle on the Settings page). - The detection fired at a non-critical level. By default, only
criticalseverity blocks;highwarns. Adjustprotection.severity_actionsif you want a stricter posture. - The pattern is in your allowlist. Check
~/.harpax/allowlist.yamlor the Allowlist section in Settings.
Where to look for logs
~/.harpax/logs/daemon.log— daemon output, including hook IPC events and detection decisions~/.harpax/sessions/<session-id>.jsonl— raw event stream for a specific session- The browser dev tools console inside the GUI for frontend errors
Still stuck?
If you've worked through the checks above and Harpax still isn't behaving, open a support ticket. Include:
- Operating system and version
- Harpax version (run
harpax version) - The output of
harpax servefrom a terminal - The contents of
settings.json(with any secrets redacted) - A recent session JSONL file if the issue is detection-related
See How do I connect with the Cambric team? for the support channels.