| --- |
| summary: "Symptom first troubleshooting hub for OpenClaw" |
| read_when: |
| - OpenClaw is not working and you need the fastest path to a fix |
| - You want a triage flow before diving into deep runbooks |
| title: "Troubleshooting" |
| --- |
| |
| # Troubleshooting |
|
|
| If you only have 2 minutes, use this page as a triage front door. |
|
|
| ## First 60 seconds |
|
|
| Run this exact ladder in order: |
|
|
| ```bash |
| openclaw status |
| openclaw status --all |
| openclaw gateway probe |
| openclaw gateway status |
| openclaw doctor |
| openclaw channels status --probe |
| openclaw logs --follow |
| ``` |
|
|
| Good output in one line: |
|
|
| - `openclaw status` β shows configured channels and no obvious auth errors. |
| - `openclaw status --all` β full report is present and shareable. |
| - `openclaw gateway probe` β expected gateway target is reachable. |
| - `openclaw gateway status` β `Runtime: running` and `RPC probe: ok`. |
| - `openclaw doctor` β no blocking config/service errors. |
| - `openclaw channels status --probe` β channels report `connected` or `ready`. |
| - `openclaw logs --follow` β steady activity, no repeating fatal errors. |
|
|
| ## Anthropic long context 429 |
|
|
| If you see: |
| `HTTP 429: rate_limit_error: Extra usage is required for long context requests`, |
| go to [/gateway/troubleshooting#anthropic-429-extra-usage-required-for-long-context](/gateway/troubleshooting#anthropic-429-extra-usage-required-for-long-context). |
|
|
| ## Plugin install fails with missing openclaw extensions |
|
|
| If install fails with `package.json missing openclaw.extensions`, the plugin package |
| is using an old shape that OpenClaw no longer accepts. |
|
|
| Fix in the plugin package: |
|
|
| 1. Add `openclaw.extensions` to `package.json`. |
| 2. Point entries at built runtime files (usually `./dist/index.js`). |
| 3. Republish the plugin and run `openclaw plugins install <npm-spec>` again. |
|
|
| Example: |
|
|
| ```json |
| { |
| "name": "@openclaw/my-plugin", |
| "version": "1.2.3", |
| "openclaw": { |
| "extensions": ["./dist/index.js"] |
| } |
| } |
| ``` |
|
|
| Reference: [/tools/plugin#distribution-npm](/tools/plugin#distribution-npm) |
|
|
| ## Decision tree |
|
|
| ```mermaid |
| flowchart TD |
| A[OpenClaw is not working] --> B{What breaks first} |
| B --> C[No replies] |
| B --> D[Dashboard or Control UI will not connect] |
| B --> E[Gateway will not start or service not running] |
| B --> F[Channel connects but messages do not flow] |
| B --> G[Cron or heartbeat did not fire or did not deliver] |
| B --> H[Node is paired but camera canvas screen exec fails] |
| B --> I[Browser tool fails] |
| |
| C --> C1[/No replies section/] |
| D --> D1[/Control UI section/] |
| E --> E1[/Gateway section/] |
| F --> F1[/Channel flow section/] |
| G --> G1[/Automation section/] |
| H --> H1[/Node tools section/] |
| I --> I1[/Browser section/] |
| ``` |
|
|
| <AccordionGroup> |
| <Accordion title="No replies"> |
| ```bash |
| openclaw status |
| openclaw gateway status |
| openclaw channels status --probe |
| openclaw pairing list --channel <channel> [--account <id>] |
| openclaw logs --follow |
| ``` |
| |
| Good output looks like: |
| |
| - `Runtime: running` |
| - `RPC probe: ok` |
| - Your channel shows connected/ready in `channels status --probe` |
| - Sender appears approved (or DM policy is open/allowlist) |
|
|
| Common log signatures: |
| |
| - `drop guild message (mention required` β mention gating blocked the message in Discord. |
| - `pairing request` β sender is unapproved and waiting for DM pairing approval. |
| - `blocked` / `allowlist` in channel logs β sender, room, or group is filtered. |
|
|
| Deep pages: |
| |
| - [/gateway/troubleshooting#no-replies](/gateway/troubleshooting#no-replies) |
| - [/channels/troubleshooting](/channels/troubleshooting) |
| - [/channels/pairing](/channels/pairing) |
|
|
| </Accordion> |
|
|
| <Accordion title="Dashboard or Control UI will not connect"> |
| ```bash |
| openclaw status |
| openclaw gateway status |
| openclaw logs --follow |
| openclaw doctor |
| openclaw channels status --probe |
| ``` |
| |
| Good output looks like: |
| |
| - `Dashboard: http://...` is shown in `openclaw gateway status` |
| - `RPC probe: ok` |
| - No auth loop in logs |
|
|
| Common log signatures: |
| |
| - `device identity required` β HTTP/non-secure context cannot complete device auth. |
| - `AUTH_TOKEN_MISMATCH` with retry hints (`canRetryWithDeviceToken=true`) β one trusted device-token retry may occur automatically. |
| - repeated `unauthorized` after that retry β wrong token/password, auth mode mismatch, or stale paired device token. |
| - `gateway connect failed:` β UI is targeting the wrong URL/port or unreachable gateway. |
|
|
| Deep pages: |
| |
| - [/gateway/troubleshooting#dashboard-control-ui-connectivity](/gateway/troubleshooting#dashboard-control-ui-connectivity) |
| - [/web/control-ui](/web/control-ui) |
| - [/gateway/authentication](/gateway/authentication) |
|
|
| </Accordion> |
|
|
| <Accordion title="Gateway will not start or service installed but not running"> |
| ```bash |
| openclaw status |
| openclaw gateway status |
| openclaw logs --follow |
| openclaw doctor |
| openclaw channels status --probe |
| ``` |
| |
| Good output looks like: |
| |
| - `Service: ... (loaded)` |
| - `Runtime: running` |
| - `RPC probe: ok` |
|
|
| Common log signatures: |
| |
| - `Gateway start blocked: set gateway.mode=local` β gateway mode is unset/remote. |
| - `refusing to bind gateway ... without auth` β non-loopback bind without token/password. |
| - `another gateway instance is already listening` or `EADDRINUSE` β port already taken. |
|
|
| Deep pages: |
| |
| - [/gateway/troubleshooting#gateway-service-not-running](/gateway/troubleshooting#gateway-service-not-running) |
| - [/gateway/background-process](/gateway/background-process) |
| - [/gateway/configuration](/gateway/configuration) |
|
|
| </Accordion> |
|
|
| <Accordion title="Channel connects but messages do not flow"> |
| ```bash |
| openclaw status |
| openclaw gateway status |
| openclaw logs --follow |
| openclaw doctor |
| openclaw channels status --probe |
| ``` |
| |
| Good output looks like: |
| |
| - Channel transport is connected. |
| - Pairing/allowlist checks pass. |
| - Mentions are detected where required. |
|
|
| Common log signatures: |
| |
| - `mention required` β group mention gating blocked processing. |
| - `pairing` / `pending` β DM sender is not approved yet. |
| - `not_in_channel`, `missing_scope`, `Forbidden`, `401/403` β channel permission token issue. |
|
|
| Deep pages: |
| |
| - [/gateway/troubleshooting#channel-connected-messages-not-flowing](/gateway/troubleshooting#channel-connected-messages-not-flowing) |
| - [/channels/troubleshooting](/channels/troubleshooting) |
|
|
| </Accordion> |
|
|
| <Accordion title="Cron or heartbeat did not fire or did not deliver"> |
| ```bash |
| openclaw status |
| openclaw gateway status |
| openclaw cron status |
| openclaw cron list |
| openclaw cron runs --id <jobId> --limit 20 |
| openclaw logs --follow |
| ``` |
| |
| Good output looks like: |
| |
| - `cron.status` shows enabled with a next wake. |
| - `cron runs` shows recent `ok` entries. |
| - Heartbeat is enabled and not outside active hours. |
|
|
| Common log signatures: |
| |
| - `cron: scheduler disabled; jobs will not run automatically` β cron is disabled. |
| - `heartbeat skipped` with `reason=quiet-hours` β outside configured active hours. |
| - `requests-in-flight` β main lane busy; heartbeat wake was deferred. |
| - `unknown accountId` β heartbeat delivery target account does not exist. |
|
|
| Deep pages: |
| |
| - [/gateway/troubleshooting#cron-and-heartbeat-delivery](/gateway/troubleshooting#cron-and-heartbeat-delivery) |
| - [/automation/troubleshooting](/automation/troubleshooting) |
| - [/gateway/heartbeat](/gateway/heartbeat) |
|
|
| </Accordion> |
|
|
| <Accordion title="Node is paired but tool fails camera canvas screen exec"> |
| ```bash |
| openclaw status |
| openclaw gateway status |
| openclaw nodes status |
| openclaw nodes describe --node <idOrNameOrIp> |
| openclaw logs --follow |
| ``` |
| |
| Good output looks like: |
| |
| - Node is listed as connected and paired for role `node`. |
| - Capability exists for the command you are invoking. |
| - Permission state is granted for the tool. |
|
|
| Common log signatures: |
| |
| - `NODE_BACKGROUND_UNAVAILABLE` β bring node app to foreground. |
| - `*_PERMISSION_REQUIRED` β OS permission was denied/missing. |
| - `SYSTEM_RUN_DENIED: approval required` β exec approval is pending. |
| - `SYSTEM_RUN_DENIED: allowlist miss` β command not on exec allowlist. |
|
|
| Deep pages: |
| |
| - [/gateway/troubleshooting#node-paired-tool-fails](/gateway/troubleshooting#node-paired-tool-fails) |
| - [/nodes/troubleshooting](/nodes/troubleshooting) |
| - [/tools/exec-approvals](/tools/exec-approvals) |
|
|
| </Accordion> |
|
|
| <Accordion title="Browser tool fails"> |
| ```bash |
| openclaw status |
| openclaw gateway status |
| openclaw browser status |
| openclaw logs --follow |
| openclaw doctor |
| ``` |
| |
| Good output looks like: |
| |
| - Browser status shows `running: true` and a chosen browser/profile. |
| - `openclaw` profile starts or `chrome` relay has an attached tab. |
|
|
| Common log signatures: |
| |
| - `Failed to start Chrome CDP on port` β local browser launch failed. |
| - `browser.executablePath not found` β configured binary path is wrong. |
| - `Chrome extension relay is running, but no tab is connected` β extension not attached. |
| - `Browser attachOnly is enabled ... not reachable` β attach-only profile has no live CDP target. |
|
|
| Deep pages: |
| |
| - [/gateway/troubleshooting#browser-tool-fails](/gateway/troubleshooting#browser-tool-fails) |
| - [/tools/browser-linux-troubleshooting](/tools/browser-linux-troubleshooting) |
| - [/tools/browser-wsl2-windows-remote-cdp-troubleshooting](/tools/browser-wsl2-windows-remote-cdp-troubleshooting) |
| - [/tools/chrome-extension](/tools/chrome-extension) |
|
|
| </Accordion> |
| </AccordionGroup> |
|
|