Troubleshooting
Common errors and fixes. If yours isn't here, open an issue — we'll add it.
DaemonLockHeld when running axon
✗ Another daemon process holds the lock (PID 12345, started at 2026-05-27T14:00:00Z)
Cause: another axon daemon (or Axon Desktop) is already running against the same ~/.axon/ directory.
Fix:
- If you intended to run the CLI: quit Axon Desktop first (tray menu → Quit Axon)
- If a previous daemon crashed and left a stale lock: confirm with
ps -p <PID>, then delete~/.axon/daemon.pidand retry
Dashboard window opens blank (Electron)
Cause: usually a stale dashboard build mismatching the daemon's expected assets, or a renderer-side JS error.
Fix:
- View → Toggle Developer Tools, check Console for red errors
- If you see "Failed to fetch": daemon isn't running — check the terminal where
pnpm startis logged - If you built from source: rebuild the chain —
pnpm --filter @axon-trading/dashboard build && pnpm --filter @axon-trading/cli build && pnpm --filter @axon-trading/desktop build
Mode switch hangs on "Restarting…"
Cause: the daemon either failed to restart cleanly or the dashboard isn't picking up the new bearer token.
Fix:
- Look at the daemon log (terminal where
pnpm startis running, or Console.app filtered toAxon) - Common cause: live-mode config is invalid (bad RPC URL, builder address). Switch back to demo, fix config in Settings → Live trading configuration, then try again.
- Force a hard reload of the dashboard: ⌘R (browser) or right-click → Reload (Electron)
MCP server not connecting in agent runtime
Cause: usually the agent runtime can't find the axon binary, or the daemon isn't running.
Fix:
- Run
axon(or open Axon Desktop) — daemon must be running for MCP tool calls to succeed - Check the runtime's MCP config file (paths vary per runtime — see Connect Agent)
- Verify
axon install --verifyreports the path is resolvable - Restart your agent runtime after running
axon install
"Couldn't run diagnostics: Failed to fetch" in dashboard
Cause: dashboard's bearer token is stale (daemon restarted, token rotated).
Fix:
- Hard reload (⌘R) — dashboard re-fetches
/v1/session/refreshto get the new token - If that doesn't work, reopen the dashboard from
axon dashboardor from the desktop tray
macOS "Axon is damaged and can't be opened"
Cause: Gatekeeper rejecting the unsigned download.
Fix:
xattr -cr "/Applications/Axon.app"
This removes the quarantine attribute Safari/curl set on the download. Then right-click → Open → Open the first time.
Port 47890 already in use
Cause: another process — usually a forgotten axon daemon, or a totally unrelated service.
Fix:
lsof -ti:47890 # see the PID
lsof -ti:47890 | xargs kill # nuke it if you're sure
Or set a different port: AXON_PORT=47891 axon.
"Cannot find module 'better-sqlite3'" on Desktop
Cause: native module wasn't rebuilt against Electron's Node ABI.
Fix (from source):
cd packages/desktop
./node_modules/.bin/electron-rebuild -f -w better-sqlite3
If installing from a release tarball, the native binary should be prebuilt — file an issue if it's missing for your platform.
node-gyp fails: "no such file or directory: '2/axon-terminal/...'"
Cause: your repo clone path contains a space (e.g. ~/Documents/GitHub 2/). node-gyp doesn't handle spaces in build paths.
Fix: move the clone to a no-space path:
mv "~/Documents/GitHub 2/axon-terminal" "~/code/axon-terminal"
cd ~/code/axon-terminal && pnpm install
(better-sqlite3 ships prebuilt binaries and isn't affected — only electron-installer-dmg's macos-alias transitive dep needs compilation locally.)
Strategy install fails with STRATEGY_SIGNER_NOT_PINNED
Cause: you built @axon-trading/cli from source without the Strykr ed25519 public key inlined, so the daemon refuses to install Strykr-signed strategies.
Fix:
- Use a published
@axon-trading/clifrom npm (the Strykr-published binaries inline the pinned pubkey) - OR install your own strategies signed with your own key (set
AXON_PUBLISHED_STRYKR_PUBKEYat build time)
Auto-update notification but nothing happens
For unsigned macOS builds, Apple blocks automatic installation. The notification opens the GitHub Releases page — download the new .dmg manually.
Signed v1.0+ will support seamless auto-install. Track #auto-update.
Audit log "chain break" error
AuditTamperError: chain break at row 12345
Cause: the audit DB's hash chain is inconsistent. Almost always caused by concurrent writers (two daemons running against the same ~/.axon/ — should now be prevented by the daemon lock, but possible on older versions).
Fix:
- Inspect the row:
sqlite3 ~/.axon/audit.db "SELECT * FROM audit_log WHERE id = 12345" - If it's a benign break (no actual tamper), recover:
axon audit rebuild-chain --confirm - If you suspect tamper: archive + start fresh:
axon audit reset --confirm(you keep the archived DB for forensics)
Anything else
Open an issue with:
- Your platform (OS, arch, version)
axon --version- Steps to reproduce
- Daemon log output (terminal or Console.app filtered to "Axon")
- DevTools console output (for dashboard issues)