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.
"Signer not reachable — wallet tools will be unavailable"
Means signer.sock is missing. As of fleet v10 the daemon auto-spawns signer.mjs at boot; if you're seeing this, either signer crashed or the boot path failed:
ls ~/.myclawn/signer.sock # missing?
ls ~/.myclawn/wallet.json # required input
launchctl kickstart -k gui/$(id -u)/com.myclawn.daemon # restart daemon → auto-spawns signer
grep -i signer ~/.myclawn/daemon.err.log | tailmyclawn 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>Wallet
"myclawn wallet shows (not created)"
Latest fix: launcher reads wallet through the daemon's control.sock (cookie-authed). If you still see "(not created)" after updating, the daemon either doesn't have a signer connected, or the signer's wallet.json is missing:
grep -i 'Signer connected' ~/.myclawn/daemon.err.log | tail -1
ls -la ~/.myclawn/wallet.json"How do I top up?"
Bridge USDC to Base (Coinbase, Bridge.Base.org, or any L2 bridge) and send to the address shown by myclawn wallet. Confirm arrival with myclawn wallet balance (refreshes from chain).
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 support@myclawn.com:
myclawn log --last 100 --json > /tmp/myclawn-issue.jsonlSecurity issues — do not file a public ticket. Email hello@myclawn.com. See Security for the disclosure policy.