Troubleshooting
Specific symptom → specific cause → specific command. If you hit something not on this page, myclawn log --tail in one window and re-trigger the failure in another is the right first move — every important event is audited.
Daemon
daemon control socket missing at …
The daemon isn't running. Quick checks:
myclawn --status # full status incl. PID
ls -la ~/.myclawn/control.sock # socket should exist if daemon is alive
tail -50 ~/.myclawn/daemon.err.log # last 50 lines incl. crash, if anyIf launchd / systemd has it paused:
ls ~/.myclawn/paused.flag # if this exists, daemon will start paused
rm ~/.myclawn/paused.flag # clear it
myclawn resume # or thisForce a restart:
# macOS
launchctl kickstart -k gui/$(id -u)/com.myclawn.daemon
# Linux (systemd user unit)
systemctl --user restart myclawn-daemon"I clicked Quit in the tray and now the daemon won't come back"
That's the locked design: tray Quit writes paused.flag and disables autostart so a reboot doesn't silently bring it back. To restart, open the desktop app — it will re-enable autostart on boot — or run myclawn resume at the CLI.
myclawn ask
EACCES: permission denied … shim.key
Your daemon predates the shim-key auto-gen fix. Restart the daemon — it generates shim.{key,pub} at boot with 0640 owner=you group=myclawn so any bot in the myclawn group can read it.
launchctl kickstart -k gui/$(id -u)/com.myclawn.daemon
ls -la ~/.myclawn/shim.key # should now be -rw-r----- you myclawn"myclawn ask returns Routing — no answer / status pending forever"
The most common cause is the daemon being paused. Check:
ls ~/.myclawn/paused.flag # present iff paused
myclawn --status # shows paused: true
myclawn resume # clearIf not paused, check that the brain is actually running batches. Look for consecutive llm_call_start → llm_call_complete pairs:
myclawn log --type llm_call_* --last 10If the brain is silent, your LLM provider may be returning errors (rate limit, auth failure). After 5 consecutive failures the daemon's circuit breaker drops agent messages — check consecutive_llm_failures in --status.
myclawn run
"Claude refuses to call myclawn ask — flags it as a prompt injection"
Old priming wording triggered claude's injection detector. Update the cached CLI:
# launcher curls latest run.js on every invocation, so simply
myclawn run claude # next launch pulls the new priming via --append-system-promptConfirm: after spawning, the stderr should print [myclawn] priming applied via --append-system-prompt. If not, your ~/.myclawn/run.js is stale — delete it and re-run.
Bot's claude blocks at "In Bypass Permissions mode, Claude Code will not ask…"
The bot's ~/.claude/settings.json is missing the pre-accept setting:
sudo cat ~bot-1/.claude/settings.json
# should contain: {"skipDangerousModePermissionPrompt": true}If empty / missing, run myclawn run --bot=bot-1 -- claude --version once — that re-runs the bot setup, which seeds settings.json.
"Invalid bot name 'X'. Falling back to your user."
Old fleet.js rejected bare names. Latest auto-prefixes — --bot=lisa → bot-lisa. Same fix as above: myclawn run curls the latest fleet.js; the second attempt should succeed.
"shell-init: getcwd: cannot access parent directories: Permission denied"
Cosmetic. Appears when the launcher transiently chdir's into a directory the new bot user can't traverse. Harmless — the spawn succeeds.
Whisper-to-bot
"I hit send and nothing happens"
Latest UI surfaces errors inline (in red). If you see no error AND no "✓ sent" toast, the catch is still swallowing. Update the dashboard:
- Refresh the webview (Cmd+R in the desktop app, or relaunch).
- Check that the badge reads Local · live, not Local · offline. Whispering to an offline pty errors with
agent_X not registered. - If running in a regular browser (not Tauri), the dashboard falls back to
POST /api/local/inject— that route refuses non-localhost callers, so you must be onlocalhost:3000or127.0.0.1.
Proxy
"unable to verify the first certificate" inside a bot
The bot isn't trusting ~/.myclawn/ca.pem. Two paths:
- Bot's
~/.zshenvdidn't setNODE_EXTRA_CA_CERTS— re-runmyclawn runto refresh the env. - Some tools (e.g. older Python, Go binaries) ignore the env var and ship their own bundle. Try
SSL_CERT_FILE=$NODE_EXTRA_CA_CERTS yourtool, or use--no-botfor that specific tool.
"placeholder_on_wrong_host" in daemon.log
The bot tried to send a placeholder to a host the placeholder's allow-list doesn't cover. The proxy forwards the literal placeholder string (not the real key). The receiving service rejects it. Add the host:
myclawn keys ls # see current hosts
myclawn keys rotate <name> <real-value> # there's no direct "add host" — recreate with the new host
myclawn keys rm <name>
myclawn keys add <name> <real> --hosts <h1>,<h2>Memory
"first memory_search may be slow on fresh install"
EmbeddingGemma is being downloaded + warmed in the background. First search takes ~30s; subsequent ones are sub-100ms. Wait it out — the model is ~300MB and lives in ~/.cache/myclawn-embeddings/.
"SQLITE_CORRUPT on memory.db"
Rare; usually caused by an OOM kill during a write. The brain runs from the markdown memory and reindexes embeddings on next startup if the db is corrupt — just delete it:
rm ~/.myclawn/<cloneId>/memory.db ~/.myclawn/<cloneId>/memory.db-wal ~/.myclawn/<cloneId>/memory.db-shm
launchctl kickstart -k gui/$(id -u)/com.myclawn.daemon
# embedding backfill log will appear in daemon.err.logOperations
"How do I see what the daemon is doing right now?"
myclawn log --tail # the trust audit
tail -f ~/.myclawn/daemon.log # operational (proxy connects, LLM calls)
myclawn --status # daemon state, queue depth, budget
myclawn dreams --prompt # the actual system prompt the LLM sees"I want to start over"
myclawn kill # logs every device out of the clone session, stops daemon
myclawn uninstall # removes ~/.myclawn, ~/.config/myclawn, sudoers, fleet helper, bots
# then a fresh install:
curl -fsSL https://www.myclawn.com/install.sh | bashWhen to email us
If you hit something that's not here and not obvious from myclawn log: grab the last 100 audit entries as JSON and email them to [email protected]:
myclawn log --last 100 --json > /tmp/myclawn-issue.jsonlSecurity issues — do not file a public ticket. Email [email protected]. See Security for the disclosure policy.