Troubleshooting 🔧
When crocbot misbehaves, here’s how to fix it. Start with the FAQ’s First 60 seconds if you just want a quick triage recipe. This page goes deeper on runtime failures and diagnostics. Provider-specific shortcuts: /channels/troubleshootingStatus & Diagnostics
Quick triage commands (in order):| Command | What it tells you | When to use it |
|---|---|---|
crocbot status | Local summary: OS + update, gateway reachability/mode, service, agents/sessions, provider config state | First check, quick overview |
crocbot status --all | Full local diagnosis (read-only, pasteable, safe-ish) incl. log tail | When you need to share a debug report |
crocbot status --deep | Runs gateway health checks (incl. provider probes; requires reachable gateway) | When “configured” doesn’t mean “working” |
crocbot gateway probe | Gateway discovery + reachability (local + remote targets) | When you suspect you’re probing the wrong gateway |
crocbot channels status --probe | Asks the running gateway for channel status (and optionally probes) | When gateway is reachable but channels misbehave |
crocbot gateway status | Supervisor state (launchd/systemd/schtasks), runtime PID/exit, last gateway error | When the service “looks loaded” but nothing runs |
crocbot logs --follow | Live logs (best signal for runtime issues) | When you need the actual failure reason |
crocbot status --all (it redacts tokens). If you paste crocbot status, consider setting CROCBOT_SHOW_SECRETS=0 first (token previews).
See also: Health checks and Logging.
Common Issues
No API key found for provider “anthropic”
This means the agent’s auth store is empty or missing Anthropic credentials. Auth is per agent, so a new agent won’t inherit the main agent’s keys. Fix options:- Re-run onboarding and choose Anthropic for that agent.
- Or paste a setup-token on the gateway host:
- Or copy
auth-profiles.jsonfrom the main agent dir to the new agent dir.
OAuth token refresh failed (Anthropic Claude subscription)
This means the stored Anthropic OAuth token expired and the refresh failed. If you’re on a Claude subscription (no API key), the most reliable fix is to switch to a Claude Code setup-token and paste it on the gateway host. Recommended (setup-token):Control UI fails on HTTP (“device identity required” / “connect failed”)
If you open the dashboard over plain HTTP (e.g.http://<lan-ip>:18789/ or
http://<tailscale-ip>:18789/), the browser runs in a non-secure context and
blocks WebCrypto, so device identity can’t be generated.
Fix:
- Prefer HTTPS via Tailscale Serve.
- Or open locally on the gateway host:
http://127.0.0.1:18789/. - If you must stay on HTTP, enable
gateway.controlUi.allowInsecureAuth: trueand use a gateway token (token-only; no device identity). See Control UI.
CI Secrets Scan Failed
This meansdetect-secrets found new candidates not yet in the baseline.
Follow Secret scanning.
Service Installed but Nothing is Running
If the gateway service is installed but the process exits immediately, the service can appear “loaded” while nothing is running. Check:- Preferred:
crocbot logs --follow - File logs (always):
/tmp/crocbot/crocbot-YYYY-MM-DD.log(or your configuredlogging.file) - LaunchAgent (if installed):
$CROCBOT_STATE_DIR/logs/gateway.logandgateway.err.log - Linux systemd (if installed):
journalctl --user -u crocbot-gateway[-<profile>].service -n 200 --no-pager - Windows:
schtasks /Query /TN "crocbot Gateway (<profile>)" /V /FO LIST
- Bump file log detail (persisted JSONL):
- Bump console verbosity (TTY output only):
- Quick tip:
--verboseaffects console output only. File logs remain controlled bylogging.level.
”Gateway start blocked: set gateway.mode=local”
This means the config exists butgateway.mode is unset (or not local), so the
Gateway refuses to start.
Fix (recommended):
- Run the wizard and set the Gateway run mode to Local:
- Or set it directly:
- Set a remote URL and keep
gateway.mode=remote:
--allow-unconfigured to start the gateway without
gateway.mode=local.
No config file yet? Run crocbot setup to create a starter config, then rerun
the gateway.
Service Environment (PATH + runtime)
The gateway service runs with a minimal PATH to avoid shell/manager cruft:- Linux:
/usr/local/bin,/usr/bin,/bin
DISPLAY should live in ~/.crocbot/.env (loaded early by the
gateway).
Exec runs on host=gateway merge your login-shell PATH into the exec environment,
so missing tools usually mean your shell init isn’t exporting them (or set
tools.exec.pathPrepend). See /tools/exec.
Telegram channels require Node; Bun is unsupported. If your
service was installed with Bun or a version-managed Node path, run crocbot doctor
to migrate to a system Node install.
Skill missing API key in sandbox
Symptom: Skill works on host but fails in sandbox with missing API key. Why: sandboxed exec runs inside Docker and does not inherit hostprocess.env.
Fix:
- set
agents.defaults.sandbox.docker.env(or per-agentagents.list[].sandbox.docker.env) - or bake the key into your custom sandbox image
- then run
crocbot sandbox recreate --agent <id>(or--all)
Service Running but Port Not Listening
If the service reports running but nothing is listening on the gateway port, the Gateway likely refused to bind. What “running” means hereRuntime: runningmeans your supervisor (launchd/systemd/schtasks) thinks the process is alive.RPC probemeans the CLI could actually connect to the gateway WebSocket and callstatus.- Always trust
Probe target:+Config (service):as the “what did we actually try?” lines.
gateway.modemust belocalforcrocbot gatewayand the service.- If you set
gateway.mode=remote, the CLI defaults to a remote URL. The service can still be running locally, but your CLI may be probing the wrong place. Usecrocbot gateway statusto see the service’s resolved port + probe target (or pass--url). crocbot gateway statusandcrocbot doctorsurface the last gateway error from logs when the service looks running but the port is closed.- Non-loopback binds (
lan/tailnet/custom, orautowhen loopback is unavailable) require auth:gateway.auth.token(orCROCBOT_GATEWAY_TOKEN). gateway.remote.tokenis for remote CLI calls only; it does not enable local auth.gateway.tokenis ignored; usegateway.auth.token.
crocbot gateway status shows a config mismatch
Config (cli): ...andConfig (service): ...should normally match.- If they don’t, you’re almost certainly editing one config while the service is running another.
- Fix: rerun
crocbot gateway install --forcefrom the same--profile/CROCBOT_STATE_DIRyou want the service to use.
crocbot gateway status reports service config issues
- The supervisor config (launchd/systemd/schtasks) is missing current defaults.
- Fix: run
crocbot doctorto update it (orcrocbot gateway install --forcefor a full rewrite).
Last gateway error: mentions “refusing to bind … without auth”
- You set
gateway.bindto a non-loopback mode (lan/tailnet/custom, orautowhen loopback is unavailable) but didn’t configure auth. - Fix: set
gateway.auth.mode+gateway.auth.token(or exportCROCBOT_GATEWAY_TOKEN) and restart the service.
crocbot gateway status says bind=tailnet but no tailnet interface was found
- The gateway tried to bind to a Tailscale IP (100.64.0.0/10) but none were detected on the host.
- Fix: bring up Tailscale on that machine (or change
gateway.bindtoloopback/lan).
Probe note: says the probe uses loopback
- That’s expected for
bind=lan: the gateway listens on0.0.0.0(all interfaces), and loopback should still connect locally. - For remote clients, use a real LAN IP (not
0.0.0.0) plus the port, and ensure auth is configured.
Address Already in Use (Port 18789)
This means something is already listening on the gateway port. Check:Extra Workspace Folders Detected
If you upgraded from older installs, you might still have~/crocbot on disk.
Multiple workspace directories can cause confusing auth or state drift because
only one workspace is active.
Fix: keep a single active workspace and archive/remove the rest. See
Agent workspace.
Main chat running in a sandbox workspace
Symptoms:pwd or file tools show ~/.crocbot/sandboxes/... even though you
expected the host workspace.
Why: agents.defaults.sandbox.mode: "non-main" keys off session.mainKey (default "main").
Group/channel sessions use their own keys, so they are treated as non-main and
get sandbox workspaces.
Fix options:
- If you want host workspaces for an agent: set
agents.list[].sandbox.mode: "off". - If you want host workspace access inside sandbox: set
workspaceAccess: "rw"for that agent.
”Agent was aborted”
The agent was interrupted mid-response. Causes:- User sent
stop,abort,esc,wait, orexit - Timeout exceeded
- Process crashed
”Agent failed before reply: Unknown model: anthropic/claude-haiku-3-5”
crocbot intentionally rejects older/insecure models (especially those more vulnerable to prompt injection). If you see this error, the model name is no longer supported. Fix:- Pick a latest model for the provider and update your config or model alias.
- If you’re unsure which models are available, run
crocbot models listorcrocbot models scanand choose a supported one. - Check gateway logs for the detailed failure reason.
Messages Not Triggering
Check 1: Is the sender allowlisted?AllowFrom: ... in the output.
Check 2: For group chats, is mention required?
DM blocked (allowlist)
IfdmPolicy is allowlist, unknown senders are ignored until they are added.
Check:
- Confirm
channels.telegram.allowFromcontains your user ID. - Confirm
channels.telegram.dmPolicyisallowlistoropenas intended.
Image + Mention Not Working
In some cases, when you send an image with ONLY a mention (no other text), mention metadata may not be included. Workaround: Add some text with the mention:- ❌
@croc+ image - ✅
@croc check this+ image
Session Not Resuming
Check 1: Is the session file there?/new, /reset, or a reset trigger?
Agent Timing Out
Default timeout is 30 minutes. For long tasks:process tool to background long commands.
Channel Disconnected
Media Send Failing
Check 1: Is the file path valid?- Images: max 6MB
- Audio/Video: max 16MB
- Documents: max 100MB
High Memory Usage
crocbot keeps conversation history in memory. Fix: Restart periodically or set session limits:Common troubleshooting
“Gateway won’t start — configuration invalid”
crocbot now refuses to start when the config contains unknown keys, malformed values, or invalid types. This is intentional for safety. Fix it with Doctor:crocbot doctorreports every invalid entry.crocbot doctor --fixapplies migrations/repairs and rewrites the config.- Diagnostic commands like
crocbot logs,crocbot health,crocbot status,crocbot gateway status, andcrocbot gateway probestill run even if the config is invalid.
“All models failed” — what should I check first?
- Credentials present for the provider(s) being tried (auth profiles + env vars).
- Model routing: confirm
agents.defaults.model.primaryand fallbacks are models you can access. - Gateway logs in
/tmp/crocbot/…for the exact provider error. - Model status: use
/model status(chat) orcrocbot models status(CLI).
Build errors on main — what’s the standard fix path?
git pull origin main && pnpm installcrocbot doctor- Check GitHub issues
- Temporary workaround: check out an older commit
npm install fails (allow-build-scripts / missing tar or yargs). What now?
If you’re running from source, use the repo’s package manager: pnpm (preferred). The repo declarespackageManager: "pnpm@…".
Typical recovery:
How do I switch between git installs and npm installs?
Use the website installer and select the install method with a flag. It upgrades in place and rewrites the gateway service to point at the new install. Switch to git install:- The git flow only rebases if the repo is clean. Commit or stash changes first.
- After switching, run:
Telegram block streaming isn’t splitting text between tool calls. Why?
Block streaming only sends completed text blocks. Common reasons you see a single message:agents.defaults.blockStreamingDefaultis still"off".channels.telegram.blockStreamingis set tofalse.channels.telegram.streamModeispartialorblockand draft streaming is active (private chat + topics). Draft streaming disables block streaming in that case.- Your
minChars/ coalesce settings are too high, so chunks get merged. - The model emits one large text block (no mid‑reply flush points).
- Put block streaming settings under
agents.defaults, not the root. - Set
channels.telegram.streamMode: "off"if you want real multi‑message block replies. - Use smaller chunk/coalesce thresholds while debugging.
Cloud Code Assist API error: invalid tool schema (400). What now?
This is almost always a tool schema compatibility issue. The Cloud Code Assist endpoint accepts a strict subset of JSON Schema. crocbot scrubs/normalizes tool schemas in currentmain, but the fix is not in the last release yet (as of
January 13, 2026).
Fix checklist:
- Update crocbot:
- If you can run from source, pull
mainand restart the gateway. - Otherwise, wait for the next release that includes the schema scrubber.
- If you can run from source, pull
- Avoid unsupported keywords like
anyOf/oneOf/allOf,patternProperties,additionalProperties,minLength,maxLength,format, etc. - If you define custom tools, keep the top‑level schema as
type: "object"withpropertiesand simple enums.
Gateway stuck on “Starting…”
The client connects to a local gateway on port18789. If it stays stuck:
Fix 1: Stop the supervisor (preferred)
If the gateway is supervised by systemd, killing the PID will just respawn it. Stop the supervisor first:
crocbot CLI is installed:
Debug Mode
Get verbose logging:Log Locations
| Log | Location |
|---|---|
| Gateway file logs (structured) | /tmp/crocbot/crocbot-YYYY-MM-DD.log (or logging.file) |
| Gateway service logs (supervisor) | Linux: journalctl --user -u crocbot-gateway[-<profile>].service -n 200 --no-pager |
| Session files | $CROCBOT_STATE_DIR/agents/<agentId>/sessions/ |
| Media cache | $CROCBOT_STATE_DIR/media/ |
| Credentials | $CROCBOT_STATE_DIR/credentials/ |
Health Check
Reset Everything
Nuclear option:Getting Help
- Check logs first:
/tmp/crocbot/(default:crocbot-YYYY-MM-DD.log, or your configuredlogging.file) - Search existing issues on GitHub
- Open a new issue with:
- crocbot version
- Relevant log snippets
- Steps to reproduce
- Your config (redact secrets!)
“Have you tried turning it off and on again?” — Every IT person ever 🦞🔧
Browser Not Starting (Linux)
If you see"Failed to start Chrome CDP on port 18800":
Most likely cause: Snap-packaged Chromium on Ubuntu.
Quick fix: Install Google Chrome instead:
