Files
openclaw/docs/gateway/troubleshooting.md

768 lines
27 KiB
Markdown
Raw Normal View History

---
2026-01-30 03:15:10 +01:00
summary: "Quick troubleshooting guide for common OpenClaw failures"
read_when:
- Investigating runtime issues or failures
title: "Troubleshooting"
---
2026-01-31 21:13:13 +09:00
# Troubleshooting 🔧
2026-01-30 03:15:10 +01:00
When OpenClaw misbehaves, here's how to fix it.
2026-01-24 09:49:35 +00:00
Start with the FAQs [First 60 seconds](/help/faq#first-60-seconds-if-somethings-broken) if you just want a quick triage recipe. This page goes deeper on runtime failures and diagnostics.
2026-01-08 07:58:14 +01:00
Provider-specific shortcuts: [/channels/troubleshooting](/channels/troubleshooting)
2026-01-11 01:31:35 +01:00
## Status & Diagnostics
Quick triage commands (in order):
2026-01-31 21:13:13 +09:00
| Command | What it tells you | When to use it |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------- |
| `openclaw status` | Local summary: OS + update, gateway reachability/mode, service, agents/sessions, provider config state | First check, quick overview |
| `openclaw status --all` | Full local diagnosis (read-only, pasteable, safe-ish) incl. log tail | When you need to share a debug report |
| `openclaw status --deep` | Runs gateway health checks (incl. provider probes; requires reachable gateway) | When “configured” doesnt mean “working” |
| `openclaw gateway probe` | Gateway discovery + reachability (local + remote targets) | When you suspect youre probing the wrong gateway |
| `openclaw channels status --probe` | Asks the running gateway for channel status (and optionally probes) | When gateway is reachable but channels misbehave |
| `openclaw gateway status` | Supervisor state (launchd/systemd/schtasks), runtime PID/exit, last gateway error | When the service “looks loaded” but nothing runs |
| `openclaw logs --follow` | Live logs (best signal for runtime issues) | When you need the actual failure reason |
2026-01-11 01:31:35 +01:00
2026-01-30 03:15:10 +01:00
**Sharing output:** prefer `openclaw status --all` (it redacts tokens). If you paste `openclaw status`, consider setting `OPENCLAW_SHOW_SECRETS=0` first (token previews).
2026-01-11 01:31:35 +01:00
See also: [Health checks](/gateway/health) and [Logging](/logging).
## Common Issues
### No API key found for provider "anthropic"
This means the **agents auth store is empty** or missing Anthropic credentials.
Auth is **per agent**, so a new agent wont inherit the main agents keys.
Fix options:
2026-01-31 21:13:13 +09:00
- Re-run onboarding and choose **Anthropic** for that agent.
- Or paste a setup-token on the **gateway host**:
```bash
2026-01-30 03:15:10 +01:00
openclaw models auth setup-token --provider anthropic
```
- Or copy `auth-profiles.json` from the main agent dir to the new agent dir.
Verify:
2026-01-31 21:13:13 +09:00
```bash
2026-01-30 03:15:10 +01:00
openclaw models status
```
### OAuth token refresh failed (Anthropic Claude subscription)
This means the stored Anthropic OAuth token expired and the refresh failed.
If youre 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):**
```bash
# Run on the gateway host (paste the setup-token)
2026-01-30 03:15:10 +01:00
openclaw models auth setup-token --provider anthropic
openclaw models status
```
If you generated the token elsewhere:
```bash
2026-01-30 03:15:10 +01:00
openclaw models auth paste-token --provider anthropic
openclaw models status
```
More detail: [Anthropic](/providers/anthropic) and [OAuth](/concepts/oauth).
2026-01-21 23:58:30 +00:00
### 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 cant be generated.
**Fix:**
2026-01-31 21:13:13 +09:00
2026-01-21 23:58:30 +00:00
- Prefer HTTPS via [Tailscale Serve](/gateway/tailscale).
- Or open locally on the gateway host: `http://127.0.0.1:18789/`.
- If you must stay on HTTP, enable `gateway.controlUi.allowInsecureAuth: true` and
use a gateway token (token-only; no device identity/pairing). See
[Control UI](/web/control-ui#insecure-http).
2026-01-05 15:13:51 +02:00
### CI Secrets Scan Failed
This means `detect-secrets` found new candidates not yet in the baseline.
Follow [Secret scanning](/gateway/security#secret-scanning-detect-secrets).
2026-01-08 02:28:21 +01:00
### Service Installed but Nothing is Running
2026-01-21 17:45:12 +00:00
If the gateway service is installed but the process exits immediately, the service
2026-01-08 02:28:21 +01:00
can appear “loaded” while nothing is running.
**Check:**
2026-01-31 21:13:13 +09:00
2026-01-08 02:28:21 +01:00
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway status
openclaw doctor
2026-01-08 02:28:21 +01:00
```
2026-01-21 17:45:12 +00:00
Doctor/service will show runtime state (PID/last exit) and log hints.
2026-01-08 02:28:21 +01:00
**Logs:**
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- Preferred: `openclaw logs --follow`
- File logs (always): `/tmp/openclaw/openclaw-YYYY-MM-DD.log` (or your configured `logging.file`)
- macOS LaunchAgent (if installed): `$OPENCLAW_STATE_DIR/logs/gateway.log` and `gateway.err.log`
- Linux systemd (if installed): `journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pager`
- Windows: `schtasks /Query /TN "OpenClaw Gateway (<profile>)" /V /FO LIST`
2026-01-08 02:28:21 +01:00
2026-01-09 02:56:29 +01:00
**Enable more logging:**
2026-01-31 21:13:13 +09:00
2026-01-09 02:56:29 +01:00
- Bump file log detail (persisted JSONL):
```json
{ "logging": { "level": "debug" } }
```
- Bump console verbosity (TTY output only):
```json
{ "logging": { "consoleLevel": "debug", "consoleStyle": "pretty" } }
```
- Quick tip: `--verbose` affects **console** output only. File logs remain controlled by `logging.level`.
See [/logging](/logging) for a full overview of formats, config, and access.
2026-01-22 00:21:04 +00:00
### "Gateway start blocked: set gateway.mode=local"
This means the config exists but `gateway.mode` is unset (or not `local`), so the
Gateway refuses to start.
**Fix (recommended):**
2026-01-31 21:13:13 +09:00
2026-01-22 00:21:04 +00:00
- Run the wizard and set the Gateway run mode to **Local**:
```bash
2026-01-30 03:15:10 +01:00
openclaw configure
2026-01-22 00:21:04 +00:00
```
- Or set it directly:
```bash
2026-01-30 03:15:10 +01:00
openclaw config set gateway.mode local
2026-01-22 00:21:04 +00:00
```
**If you meant to run a remote Gateway instead:**
2026-01-31 21:13:13 +09:00
2026-01-22 00:21:04 +00:00
- Set a remote URL and keep `gateway.mode=remote`:
```bash
2026-01-30 03:15:10 +01:00
openclaw config set gateway.mode remote
openclaw config set gateway.remote.url "wss://gateway.example.com"
2026-01-22 00:21:04 +00:00
```
**Ad-hoc/dev only:** pass `--allow-unconfigured` to start the gateway without
`gateway.mode=local`.
2026-01-30 03:15:10 +01:00
**No config file yet?** Run `openclaw setup` to create a starter config, then rerun
2026-01-22 00:21:04 +00:00
the gateway.
### Service Environment (PATH + runtime)
2026-01-21 17:45:12 +00:00
The gateway service runs with a **minimal PATH** to avoid shell/manager cruft:
2026-01-31 21:13:13 +09:00
- macOS: `/opt/homebrew/bin`, `/usr/local/bin`, `/usr/bin`, `/bin`
- Linux: `/usr/local/bin`, `/usr/bin`, `/bin`
This intentionally excludes version managers (nvm/fnm/volta/asdf) and package
2026-01-21 17:45:12 +00:00
managers (pnpm/npm) because the service does not load your shell init. Runtime
2026-01-30 03:15:10 +01:00
variables like `DISPLAY` should live in `~/.openclaw/.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 isnt exporting them (or set
`tools.exec.pathPrepend`). See [/tools/exec](/tools/exec).
2026-01-13 07:15:57 +00:00
WhatsApp + Telegram channels require **Node**; Bun is unsupported. If your
2026-01-30 03:15:10 +01:00
service was installed with Bun or a version-managed Node path, run `openclaw 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 host `process.env`.
**Fix:**
2026-01-31 21:13:13 +09:00
- set `agents.defaults.sandbox.docker.env` (or per-agent `agents.list[].sandbox.docker.env`)
- or bake the key into your custom sandbox image
2026-01-30 03:15:10 +01:00
- then run `openclaw 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 here**
2026-01-31 21:13:13 +09:00
- `Runtime: running` means your supervisor (launchd/systemd/schtasks) thinks the process is alive.
- `RPC probe` means the CLI could actually connect to the gateway WebSocket and call `status`.
2026-01-21 17:45:12 +00:00
- Always trust `Probe target:` + `Config (service):` as the “what did we actually try?” lines.
**Check:**
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- `gateway.mode` must be `local` for `openclaw gateway` and 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. Use `openclaw gateway status` to see the services resolved port + probe target (or pass `--url`).
- `openclaw gateway status` and `openclaw doctor` surface the **last gateway error** from logs when the service looks running but the port is closed.
2026-01-21 20:35:39 +00:00
- Non-loopback binds (`lan`/`tailnet`/`custom`, or `auto` when loopback is unavailable) require auth:
2026-01-30 03:15:10 +01:00
`gateway.auth.token` (or `OPENCLAW_GATEWAY_TOKEN`).
- `gateway.remote.token` is for remote CLI calls only; it does **not** enable local auth.
- `gateway.token` is ignored; use `gateway.auth.token`.
2026-01-30 03:15:10 +01:00
**If `openclaw gateway status` shows a config mismatch**
2026-01-31 21:13:13 +09:00
2026-01-21 17:45:12 +00:00
- `Config (cli): ...` and `Config (service): ...` should normally match.
- If they dont, youre almost certainly editing one config while the service is running another.
2026-01-30 03:15:10 +01:00
- Fix: rerun `openclaw gateway install --force` from the same `--profile` / `OPENCLAW_STATE_DIR` you want the service to use.
2026-01-30 03:15:10 +01:00
**If `openclaw gateway status` reports service config issues**
2026-01-31 21:13:13 +09:00
- The supervisor config (launchd/systemd/schtasks) is missing current defaults.
2026-01-30 03:15:10 +01:00
- Fix: run `openclaw doctor` to update it (or `openclaw gateway install --force` for a full rewrite).
**If `Last gateway error:` mentions “refusing to bind … without auth”**
2026-01-31 21:13:13 +09:00
- You set `gateway.bind` to a non-loopback mode (`lan`/`tailnet`/`custom`, or `auto` when loopback is unavailable) but didnt configure auth.
2026-01-30 03:15:10 +01:00
- Fix: set `gateway.auth.mode` + `gateway.auth.token` (or export `OPENCLAW_GATEWAY_TOKEN`) and restart the service.
2026-01-30 03:15:10 +01:00
**If `openclaw gateway status` says `bind=tailnet` but no tailnet interface was found**
2026-01-31 21:13:13 +09:00
- 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.bind` to `loopback`/`lan`).
**If `Probe note:` says the probe uses loopback**
2026-01-31 21:13:13 +09:00
- Thats expected for `bind=lan`: the gateway listens on `0.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.
2026-01-08 02:28:21 +01:00
### Address Already in Use (Port 18789)
This means something is already listening on the gateway port.
**Check:**
2026-01-31 21:13:13 +09:00
2026-01-08 02:28:21 +01:00
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway status
2026-01-08 02:28:21 +01:00
```
It will show the listener(s) and likely causes (gateway already running, SSH tunnel).
If needed, stop the service or pick a different port.
2026-01-15 06:18:34 +00:00
### Extra Workspace Folders Detected
2026-01-30 03:15:10 +01:00
If you upgraded from older installs, you might still have `~/openclaw` on disk.
2026-01-15 06:18:34 +00:00
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
2026-01-15 06:18:34 +00:00
[Agent workspace](/concepts/agent-workspace#extra-workspace-folders).
### Main chat running in a sandbox workspace
2026-01-30 03:15:10 +01:00
Symptoms: `pwd` or file tools show `~/.openclaw/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:**
2026-01-31 21:13:13 +09:00
- 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:**
2026-01-31 21:13:13 +09:00
2026-01-06 21:29:41 +00:00
- User sent `stop`, `abort`, `esc`, `wait`, or `exit`
- Timeout exceeded
- Process crashed
**Fix:** Just send another message. The session continues.
### "Agent failed before reply: Unknown model: anthropic/claude-haiku-3-5"
2026-01-30 03:15:10 +01:00
OpenClaw 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:**
2026-01-31 21:13:13 +09:00
- Pick a **latest** model for the provider and update your config or model alias.
2026-01-30 03:15:10 +01:00
- If youre unsure which models are available, run `openclaw models list` or
`openclaw models scan` and choose a supported one.
- Check gateway logs for the detailed failure reason.
See also: [Models CLI](/cli/models) and [Model providers](/concepts/model-providers).
### Messages Not Triggering
**Check 1:** Is the sender allowlisted?
2026-01-31 21:13:13 +09:00
```bash
2026-01-30 03:15:10 +01:00
openclaw status
```
2026-01-31 21:13:13 +09:00
Look for `AllowFrom: ...` in the output.
**Check 2:** For group chats, is mention required?
2026-01-31 21:13:13 +09:00
```bash
2026-01-13 07:15:57 +00:00
# The message must match mentionPatterns or explicit mentions; defaults live in channel groups/guilds.
# Multi-agent: `agents.list[].groupChat.mentionPatterns` overrides global patterns.
grep -n "agents\\|groupChat\\|mentionPatterns\\|channels\\.whatsapp\\.groups\\|channels\\.telegram\\.groups\\|channels\\.imessage\\.groups\\|channels\\.discord\\.guilds" \
2026-01-30 03:15:10 +01:00
"${OPENCLAW_CONFIG_PATH:-$HOME/.openclaw/openclaw.json}"
```
**Check 3:** Check the logs
2026-01-31 21:13:13 +09:00
```bash
2026-01-30 03:15:10 +01:00
openclaw logs --follow
2026-01-08 06:48:28 +00:00
# or if you want quick filters:
2026-01-30 03:15:10 +01:00
tail -f "$(ls -t /tmp/openclaw/openclaw-*.log | head -1)" | grep "blocked\\|skip\\|unauthorized"
```
### Pairing Code Not Arriving
If `dmPolicy` is `pairing`, unknown senders should receive a code and their message is ignored until approved.
**Check 1:** Is a pending request already waiting?
2026-01-31 21:13:13 +09:00
```bash
2026-01-30 03:15:10 +01:00
openclaw pairing list <channel>
```
2026-01-13 07:15:57 +00:00
Pending DM pairing requests are capped at **3 per channel** by default. If the list is full, new requests wont generate a code until one is approved or expires.
**Check 2:** Did the request get created but no reply was sent?
2026-01-31 21:13:13 +09:00
```bash
2026-01-30 03:15:10 +01:00
openclaw logs --follow | grep "pairing request"
```
2026-01-13 07:15:57 +00:00
**Check 3:** Confirm `dmPolicy` isnt `open`/`allowlist` for that channel.
### Image + Mention Not Working
Known issue: When you send an image with ONLY a mention (no other text), WhatsApp sometimes doesn't include the mention metadata.
**Workaround:** Add some text with the mention:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
-`@openclaw` + image
-`@openclaw check this` + image
### Session Not Resuming
**Check 1:** Is the session file there?
2026-01-31 21:13:13 +09:00
```bash
2026-01-30 03:15:10 +01:00
ls -la ~/.openclaw/agents/<agentId>/sessions/
```
**Check 2:** Is the reset window too short?
2026-01-31 21:13:13 +09:00
```json
{
"session": {
"reset": {
"mode": "daily",
"atHour": 4,
2026-01-31 21:13:13 +09:00
"idleMinutes": 10080 // 7 days
}
}
}
```
2025-12-22 20:36:34 +01:00
**Check 3:** Did someone send `/new`, `/reset`, or a reset trigger?
### Agent Timing Out
Default timeout is 30 minutes. For long tasks:
```json
{
"reply": {
2026-01-31 21:13:13 +09:00
"timeoutSeconds": 3600 // 1 hour
}
}
```
Or use the `process` tool to background long commands.
### WhatsApp Disconnected
```bash
2025-12-13 13:25:49 +00:00
# Check local status (creds, sessions, queued events)
2026-01-30 03:15:10 +01:00
openclaw status
2026-01-13 07:15:57 +00:00
# Probe the running gateway + channels (WA connect + Telegram + Discord APIs)
2026-01-30 03:15:10 +01:00
openclaw status --deep
# View recent connection events
2026-01-30 03:15:10 +01:00
openclaw logs --limit 200 | grep "connection\\|disconnect\\|logout"
```
2025-12-13 13:25:49 +00:00
**Fix:** Usually reconnects automatically once the Gateway is running. If youre stuck, restart the Gateway process (however you supervise it), or run it manually with verbose output:
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway --verbose
```
2025-12-13 13:25:49 +00:00
If youre logged out / unlinked:
```bash
2026-01-30 03:15:10 +01:00
openclaw channels logout
trash "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/credentials" # if logout can't cleanly remove everything
openclaw channels login --verbose # re-scan QR
```
### Media Send Failing
**Check 1:** Is the file path valid?
2026-01-31 21:13:13 +09:00
```bash
ls -la /path/to/your/image.jpg
```
**Check 2:** Is it too large?
2026-01-31 21:13:13 +09:00
- Images: max 6MB
2026-01-31 21:13:13 +09:00
- Audio/Video: max 16MB
- Documents: max 100MB
**Check 3:** Check media logs
2026-01-31 21:13:13 +09:00
```bash
2026-01-30 03:15:10 +01:00
grep "media\\|fetch\\|download" "$(ls -t /tmp/openclaw/openclaw-*.log | head -1)" | tail -20
```
### High Memory Usage
2026-01-30 03:15:10 +01:00
OpenClaw keeps conversation history in memory.
**Fix:** Restart periodically or set session limits:
2026-01-31 21:13:13 +09:00
```json
{
"session": {
2026-01-31 21:13:13 +09:00
"historyLimit": 100 // Max messages to keep
}
}
```
## Common troubleshooting
2026-01-19 03:38:51 +00:00
### “Gateway wont start — configuration invalid”
2026-01-30 03:15:10 +01:00
OpenClaw now refuses to start when the config contains unknown keys, malformed values, or invalid types.
2026-01-19 03:38:51 +00:00
This is intentional for safety.
Fix it with Doctor:
2026-01-31 21:13:13 +09:00
2026-01-19 03:38:51 +00:00
```bash
2026-01-30 03:15:10 +01:00
openclaw doctor
openclaw doctor --fix
2026-01-19 03:38:51 +00:00
```
Notes:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- `openclaw doctor` reports every invalid entry.
- `openclaw doctor --fix` applies migrations/repairs and rewrites the config.
- Diagnostic commands like `openclaw logs`, `openclaw health`, `openclaw status`, `openclaw gateway status`, and `openclaw gateway probe` still run even if the config is invalid.
2026-01-19 03:38:51 +00:00
### “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.primary` and fallbacks are models you can access.
2026-01-30 03:15:10 +01:00
- **Gateway logs** in `/tmp/openclaw/…` for the exact provider error.
- **Model status**: use `/model status` (chat) or `openclaw models status` (CLI).
### Im running on my personal WhatsApp number — why is self-chat weird?
Enable self-chat mode and allowlist your own number:
```json5
{
channels: {
whatsapp: {
selfChatMode: true,
dmPolicy: "allowlist",
2026-01-31 21:13:13 +09:00
allowFrom: ["+15555550123"],
},
},
}
```
See [WhatsApp setup](/channels/whatsapp).
### WhatsApp logged me out. How do I reauth?
Run the login command again and scan the QR code:
```bash
2026-01-30 03:15:10 +01:00
openclaw channels login
```
### Build errors on `main` — whats the standard fix path?
2026-01-31 21:13:13 +09:00
1. `git pull origin main && pnpm install`
2. `openclaw doctor`
3. Check GitHub issues or Discord
4. Temporary workaround: check out an older commit
### npm install fails (allow-build-scripts / missing tar or yargs). What now?
If youre running from source, use the repos package manager: **pnpm** (preferred).
2026-01-16 22:41:49 +00:00
The repo declares `packageManager: "pnpm@…"`.
Typical recovery:
2026-01-31 21:13:13 +09:00
```bash
git status # ensure youre in the repo root
pnpm install
pnpm build
2026-01-30 03:15:10 +01:00
openclaw doctor
openclaw gateway restart
```
2026-01-16 22:41:49 +00:00
Why: pnpm is the configured package manager for this repo.
### 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**:
2026-01-31 21:13:13 +09:00
```bash
curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method git --no-onboard
```
Switch **to npm global**:
2026-01-31 21:13:13 +09:00
```bash
curl -fsSL https://openclaw.ai/install.sh | bash
```
Notes:
2026-01-31 21:13:13 +09:00
- The git flow only rebases if the repo is clean. Commit or stash changes first.
- After switching, run:
```bash
2026-01-30 03:15:10 +01:00
openclaw doctor
openclaw gateway restart
```
### Telegram block streaming isnt splitting text between tool calls. Why?
Block streaming only sends **completed text blocks**. Common reasons you see a single message:
2026-01-31 21:13:13 +09:00
- `agents.defaults.blockStreamingDefault` is still `"off"`.
- `channels.telegram.blockStreaming` is set to `false`.
- `channels.telegram.streamMode` is `partial` or `block` **and 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 midreply flush points).
Fix checklist:
2026-01-31 21:13:13 +09:00
1. Put block streaming settings under `agents.defaults`, not the root.
2. Set `channels.telegram.streamMode: "off"` if you want real multimessage block replies.
3. Use smaller chunk/coalesce thresholds while debugging.
See [Streaming](/concepts/streaming).
### Discord doesnt reply in my server even with `requireMention: false`. Why?
`requireMention` only controls mentiongating **after** the channel passes allowlists.
By default `channels.discord.groupPolicy` is **allowlist**, so guilds must be explicitly enabled.
If you set `channels.discord.guilds.<guildId>.channels`, only the listed channels are allowed; omit it to allow all channels in the guild.
Fix checklist:
2026-01-31 21:13:13 +09:00
1. Set `channels.discord.groupPolicy: "open"` **or** add a guild allowlist entry (and optionally a channel allowlist).
2. Use **numeric channel IDs** in `channels.discord.guilds.<guildId>.channels`.
3. Put `requireMention: false` **under** `channels.discord.guilds` (global or perchannel).
Toplevel `channels.discord.requireMention` is not a supported key.
2026-01-31 21:13:13 +09:00
4. Ensure the bot has **Message Content Intent** and channel permissions.
5. Run `openclaw channels status --probe` for audit hints.
Docs: [Discord](/channels/discord), [Channels troubleshooting](/channels/troubleshooting).
### Cloud Code Assist API error: invalid tool schema (400). What now?
This is almost always a **tool schema compatibility** issue. The Cloud Code Assist
2026-01-30 03:15:10 +01:00
endpoint accepts a strict subset of JSON Schema. OpenClaw scrubs/normalizes tool
schemas in current `main`, but the fix is not in the last release yet (as of
January 13, 2026).
Fix checklist:
2026-01-31 21:13:13 +09:00
1. **Update OpenClaw**:
- If you can run from source, pull `main` and restart the gateway.
- Otherwise, wait for the next release that includes the schema scrubber.
2026-01-31 21:13:13 +09:00
2. Avoid unsupported keywords like `anyOf/oneOf/allOf`, `patternProperties`,
`additionalProperties`, `minLength`, `maxLength`, `format`, etc.
2026-01-31 21:13:13 +09:00
3. If you define custom tools, keep the toplevel schema as `type: "object"` with
`properties` and simple enums.
See [Tools](/tools) and [TypeBox schemas](/concepts/typebox).
## macOS Specific Issues
### App Crashes when Granting Permissions (Speech/Mic)
If the app disappears or shows "Abort trap 6" when you click "Allow" on a privacy prompt:
**Fix 1: Reset TCC Cache**
2026-01-31 21:13:13 +09:00
```bash
tccutil reset All bot.molt.mac.debug
```
**Fix 2: Force New Bundle ID**
2026-01-30 03:15:10 +01:00
If resetting doesn't work, change the `BUNDLE_ID` in [`scripts/package-mac-app.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-app.sh) (e.g., add a `.test` suffix) and rebuild. This forces macOS to treat it as a new app.
### Gateway stuck on "Starting..."
The app connects to a local gateway on port `18789`. If it stays stuck:
**Fix 1: Stop the supervisor (preferred)**
If the gateway is supervised by launchd, killing the PID will just respawn it. Stop the supervisor first:
2026-01-31 21:13:13 +09:00
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway status
openclaw gateway stop
# Or: launchctl bootout gui/$UID/bot.molt.gateway (replace with bot.molt.<profile>; legacy com.openclaw.* still works)
```
**Fix 2: Port is busy (find the listener)**
2026-01-31 21:13:13 +09:00
2026-01-06 03:25:21 +01:00
```bash
lsof -nP -iTCP:18789 -sTCP:LISTEN
```
If its an unsupervised process, try a graceful stop first, then escalate:
2026-01-31 21:13:13 +09:00
```bash
kill -TERM <PID>
sleep 1
kill -9 <PID> # last resort
2026-01-06 03:25:21 +01:00
```
2026-01-11 10:15:37 +00:00
**Fix 3: Check the CLI install**
2026-01-30 03:15:10 +01:00
Ensure the global `openclaw` CLI is installed and matches the app version:
2026-01-31 21:13:13 +09:00
2026-01-11 10:15:37 +00:00
```bash
2026-01-30 03:15:10 +01:00
openclaw --version
npm install -g openclaw@<version>
2026-01-11 10:15:37 +00:00
```
## Debug Mode
Get verbose logging:
```bash
2025-12-13 13:25:49 +00:00
# Turn on trace logging in config:
2026-01-30 03:15:10 +01:00
# ${OPENCLAW_CONFIG_PATH:-$HOME/.openclaw/openclaw.json} -> { logging: { level: "trace" } }
2025-12-13 13:25:49 +00:00
#
# Then run verbose commands to mirror debug output to stdout:
2026-01-30 03:15:10 +01:00
openclaw gateway --verbose
openclaw channels login --verbose
```
## Log Locations
2026-01-31 21:13:13 +09:00
| Log | Location |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Gateway file logs (structured) | `/tmp/openclaw/openclaw-YYYY-MM-DD.log` (or `logging.file`) |
2026-01-30 03:15:10 +01:00
| Gateway service logs (supervisor) | macOS: `$OPENCLAW_STATE_DIR/logs/gateway.log` + `gateway.err.log` (default: `~/.openclaw/logs/...`; profiles use `~/.openclaw-<profile>/logs/...`)<br />Linux: `journalctl --user -u openclaw-gateway[-<profile>].service -n 200 --no-pager`<br />Windows: `schtasks /Query /TN "OpenClaw Gateway (<profile>)" /V /FO LIST` |
2026-01-31 21:13:13 +09:00
| Session files | `$OPENCLAW_STATE_DIR/agents/<agentId>/sessions/` |
| Media cache | `$OPENCLAW_STATE_DIR/media/` |
| Credentials | `$OPENCLAW_STATE_DIR/credentials/` |
## Health Check
```bash
# Supervisor + probe target + config paths
2026-01-30 03:15:10 +01:00
openclaw gateway status
# Include system-level scans (legacy/extra services, port listeners)
2026-01-30 03:15:10 +01:00
openclaw gateway status --deep
2025-12-13 13:25:49 +00:00
# Is the gateway reachable?
2026-01-30 03:15:10 +01:00
openclaw health --json
# If it fails, rerun with connection details:
2026-01-30 03:15:10 +01:00
openclaw health --verbose
2025-12-13 13:25:49 +00:00
# Is something listening on the default port?
lsof -nP -iTCP:18789 -sTCP:LISTEN
# Recent activity (RPC log tail)
2026-01-30 03:15:10 +01:00
openclaw logs --follow
# Fallback if RPC is down
2026-01-30 03:15:10 +01:00
tail -20 /tmp/openclaw/openclaw-*.log
```
## Reset Everything
Nuclear option:
```bash
2026-01-30 03:15:10 +01:00
openclaw gateway stop
# If you installed a service and want a clean install:
2026-01-30 03:15:10 +01:00
# openclaw gateway uninstall
2026-01-30 03:15:10 +01:00
trash "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}"
openclaw channels login # re-pair WhatsApp
openclaw gateway restart # or: openclaw gateway
```
⚠️ This loses all sessions and requires re-pairing WhatsApp.
## Getting Help
2026-01-30 03:15:10 +01:00
1. Check logs first: `/tmp/openclaw/` (default: `openclaw-YYYY-MM-DD.log`, or your configured `logging.file`)
2. Search existing issues on GitHub
3. Open a new issue with:
2026-01-30 03:15:10 +01:00
- OpenClaw version
- Relevant log snippets
- Steps to reproduce
- Your config (redact secrets!)
---
2026-01-31 21:13:13 +09:00
_"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:
2026-01-31 21:13:13 +09:00
```bash
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
Then set in config:
2026-01-31 21:13:13 +09:00
```json
{
"browser": {
"executablePath": "/usr/bin/google-chrome-stable"
}
}
```
2026-01-07 02:04:02 +01:00
**Full guide:** See [browser-linux-troubleshooting](/tools/browser-linux-troubleshooting)