#disconnected (1008): unauthorized: gateway token mismatch (open the dashboard URL and paste the toke
1 messages Β· Page 1 of 1 (latest)
That disconnected (1008): unauthorized: gateway token mismatch usually means the Gateway is up, but the Control UI / GoClaw is still sending an old/wrong token (often after a crash/restart).
Fix checklist:
- On the machine running the Gateway, grab the current dashboard URL + token:
openclaw dashboard
Open the link it prints (donβt reuse an old bookmarked URL).
- Verify what token the Gateway expects:
openclaw config get gateway.auth.token
Then in Control UI settings (or in GoClaw if it asks), paste that exact token.
- If you donβt have a token yet (or itβs blank), generate one:
openclaw doctor --generate-gateway-token
openclaw gateway restart
- If the browser UI keeps reconnecting even after pasting the right token: open the dashboard in an incognito/private window (clears the cached token stored in localStorage) and paste it again.
If itβs still broken, paste outputs of:
openclaw --version
openclaw gateway status
openclaw status --all
Docs reference: https://docs.openclaw.ai/help/faq#the-control-ui-says-unauthorized-or-keeps-reconnecting-what-now
Still broken.
Took the URL for dashboard and replaced the token as it was different. I now receive another error:
missing scope: operator.read
missing scope: operator.read means: you are authenticated, but the token youβre currently connected with is not an operator token with read permissions (so the UI canβt even call basic βstatusβ methods).
Most common cause: your browser/UI is reusing an old device token (or a node-scoped token from GoClaw), not the fresh gateway token.
Try this:
-
Donβt paste tokens here (theyβre secrets).
-
On the Gateway host, open the dashboard the βcleanβ way:
openclaw dashboard
- In your browser, clear site data for the dashboard origin (or just use an Incognito/Private window), then load the dashboard URL again.
- This forces the Control UI to stop reusing the old stored device token and re-pair correctly.
- If it now shows pairing required, approve the browser device:
openclaw devices list
openclaw devices approve <requestId>
- If it still says
missing scope, you likely have a paired device entry with wrong scopes. Fix by revoking that deviceβs operator token and reloading the UI:
openclaw devices list
openclaw devices revoke --device <deviceId> --role operator
Then reload the dashboard and approve again.
If you tell me:
openclaw --version- and whether youβre opening the UI via
127.0.0.1, LAN IP, or Tailscale/Serve URL
β¦I can point you to the exact best path (HTTP vs HTTPS/secure context affects pairing/device identity a lot).
Version 2026.2.14
Diagnosis (read-only)
Gateway connection details:
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: C:\Users\archo.openclaw\openclaw.json
Bind: auto
β Config: C:\Users\archo.openclaw\openclaw.json
β Restart sentinel: none
! Port 18789
Port 18789 is already in use.
- pid 9800: node.exe (127.0.0.1:18789)
- Another process is listening on this port.
β Tailscale: off Β· Running Β· archon.tail9f1bf4.ts.net
ips: 100.72.168.77, fd7a:115c:a1e0::3a3a:a84d
β Skills: 18 eligible Β· 0 missing Β· C:\Users\archo.openclaw\workspace
β Channel issues (none)
Pasteable debug report. Auth tokens redacted.
Troubleshooting: https://docs.openclaw.ai/troubleshooting
Overview
βββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Item β Value β
βββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Version β 2026.2.14 β
β OS β windows 10.0.26200 (x64) β
β Node β 24.13.1 β
β Config β ~.openclaw\openclaw.json β
β Dashboard β http://127.0.0.1:18789/ β
β Tailscale β off Β· Running Β· archon.tail9f1bf4.ts.net β
β Channel β stable (default) β
β Update β pnpm Β· npm latest 2026.2.14 β
β Gateway β local Β· ws://127.0.0.1:18789 (local loopback) Β· reachable 61ms Β· auth token β
β Security β Run: openclaw security audit --deep β
β Gateway self β Archon (100.72.168.77) app unknown windows 10.0.26200 β
β Gateway service β Scheduled Task installed Β· registered Β· running β
β Node service β Scheduled Task not installed β
β Agents β 1 total Β· 0 bootstrapping Β· 0 active Β· 94 sessions β
βββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
That status output is the smoking gun: port 18789 is already in use by node.exe (PID 9800). After the crash you almost certainly ended up with a zombie/old gateway process still listening, so the dashboard/GoClaw is talking to that instance (tokens/scopes wonβt line up).
1) Fix the βport already in useβ first (Windows)
On the gateway machine:
- Check if the gateway is actually healthy:
openclaw gateway status
If it says RPC probe: ok, donβt start another gateway.
- If
RPC probe: failed(or itβs clearly wedged), stop/kill the process thatβs holding the port:
- Easiest: Task Manager β Details β PID 9800 β End task
- Or CLI:
taskkill /PID 9800 /F
- Start fresh:
openclaw gateway start
(or openclaw gateway if you run it in the foreground, not as a service)
2) Then fix missing scope: operator.read
That error means the client connected, but with a token that doesnβt have operator.read (often a stale device token).
Do this after the gateway is cleanly restarted:
- Open a fresh dashboard session (clears stored device token):
- Incognito/Private window, then run:
openclaw dashboard
- If it still complains about scope, rotate/revoke the browserβs operator device token:
openclaw devices list
Then either:
openclaw devices rotate --device <deviceId> --role operator --scope operator.read --scope operator.write
or revoke (forces re-pair):
openclaw devices revoke --device <deviceId> --role operator
If you paste openclaw gateway status output, I can tell you which branch youβre on (healthy gateway vs wedged listener).
Your Gateway is actually up and reachable (ws://127.0.0.1:18789, service running). The earlier βport already in useβ is consistent with the Scheduled Task gateway already listening β so the remaining problem is almost certainly a bad/stale device token cached by the UI/client, and that token was issued without the operator.read scope.
Do this on the gateway machine:
1) Hard-reset the Control UIβs cached credentials
- Close all dashboard tabs.
- Open an Incognito/Private window and load the dashboard again via:
openclaw dashboard
This avoids the old localStorage entry the Control UI keeps (openclaw.control.settings.v1).
2) If it still says missing scope: operator.read, revoke/rotate the device token
List devices:
openclaw devices list
Find the entry that corresponds to your browser (or the GoClaw client), then revoke the operator role (simplest reset):
openclaw devices revoke --device <deviceId> --role operator
Reload the dashboard (incognito) β on localhost it should re-issue a fresh operator token with the right scopes.
If you prefer explicit scopes instead of revoke:
openclaw devices rotate --device <deviceId> --role operator --scope operator.read --scope operator.write
3) One quick sanity check
Run and paste the output (itβs safe / token-redacted):
openclaw gateway status
I want to confirm youβre not accidentally talking to a different instance/config (itβll show βConfig (cli)β vs βConfig (service)β if they differ).
Docs: https://docs.openclaw.ai/web/control-ui and https://docs.openclaw.ai/cli/devices
OpenClaw status
Overview
βββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Item β Value β
βββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Dashboard β http://127.0.0.1:18789/ β
β OS β windows 10.0.26200 (x64) Β· node 24.13.1 β
β Tailscale β off β
β Channel β stable (default) β
β Update β pnpm Β· npm latest 2026.2.14 β
β Gateway β local Β· ws://127.0.0.1:18789 (local loopback) Β· reachable 86ms Β· auth token Β· Archon (100.72.168.77) app β
β β unknown windows 10.0.26200 β
β Gateway service β Scheduled Task installed Β· registered Β· running β
β Node service β Scheduled Task not installed β
β Agents β 1 Β· no bootstraps Β· sessions 93 Β· default main active 47m ago β
β Memory β enabled (plugin memory-core) Β· unavailable β
β Probes β skipped (use --deep) β
β Events β none β
β Heartbeat β 1h (main) β
β Sessions β 93 active Β· default minimax-m2.5:cloud (131k ctx) Β· ~.openclaw\agents\main\sessions\sessions.json β
βββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Security audit
Summary: 3 critical Β· 2 warn Β· 1 info
CRITICAL Control UI allows insecure HTTP auth
gateway.controlUi.allowInsecureAuth=true allows token-only auth over HTTP and skips device identity.
Fix: Disable it or switch to HTTPS (Tailscale Serve) or localhost.
CRITICAL DANGEROUS: Control UI device auth disabled
gateway.controlUi.dangerouslyDisableDeviceAuth=true disables device identity checks for the Control UI.
Fix: Disable it unless you are in a short-lived break-glass scenario.
CRITICAL Small models require sandboxing and web tools disabled
Small models (<=300B params) detected: - ollama/qwen3:14b (14B) @ agents.defaults.model.fallbacks (unsafe; sandbox=off; web=[web_search, web_fetch, browser]) Uβ¦
Fix: If you must use small models, enable sandboxing for all sessions (agents.defaults.sandbox.mode="all") and disable web_search/web_fetch/browser (tools.deny=["group:web","browser"]).
WARN No auth rate limiting configured
gateway.bind is not loopback but no gateway.auth.rateLimit is configured. Without rate limiting, brute-force auth attacks are not mitigated.
Fix: Set gateway.auth.rateLimit (e.g. { maxAttempts: 10, windowMs: 60000, lockoutMs: 300000 }).
WARN Discord slash commands have no allowlists
Discord slash commands are enabled, but neither an owner allowFrom list nor any per-guild/channel users allowlist is configured; /β¦ commands will be rejected fβ¦
Fix: Add your user id to channels.discord.allowFrom (or approve yourself via pairing), or configure channels.discord.guilds.<id>.users.
Full report: openclaw security audit
Deep probe: openclaw security audit --deep
Channels
ββββββββββββ¬ββββββββββ¬βββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Channel β Enabled β State β Detail β
ββββββββββββΌββββββββββΌβββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Discord β ON β OK β token config (MTQ3β¦LrJ8 Β· len 72) Β· accounts 1/1 β
ββββββββββββ΄ββββββββββ΄βββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Sessions
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββ¬ββββββββββ¬βββββββββββββββββββββ¬βββββββββββββββββ
β Key β Kind β Age β Model β Tokens β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββΌββββββββββΌβββββββββββββββββββββΌβββββββββββββββββ€
β agent:main:main β direct β 47m ago β minimax-m2.5:cloud β 90k/131k (68%) β
β agent:main:discord:channel:9794β¦ β group β 49m ago β minimax-m2.5:cloud β 26k/131k (20%) β
β agent:main:cron:1e52071f-e0fb-4β¦ β direct β 58m ago β kimi-k2.5:cloud β 21k/131k (16%) β
β agent:main:cron:1e52071f-e0fb-4β¦ β direct β 58m ago β kimi-k2.5:cloud β 21k/131k (16%) β
β agent:main:cron:55e800ec-e3a5-4β¦ β direct β 59m ago β kimi-k2.5:cloud β 35k/131k (27%) β
β agent:main:cron:55e800ec-e3a5-4β¦ β direct β 59m ago β kimi-k2.5:cloud β 35k/131k (27%) β
β agent:main:cron:1e52071f-e0fb-4β¦ β direct β 2h ago β kimi-k2.5:cloud β 21k/131k (16%) β
β agent:main:cron:55e800ec-e3a5-4β¦ β direct β 2h ago β kimi-k2.5:cloud β 17k/131k (13%) β
β agent:main:cron:1e52071f-e0fb-4β¦ β direct β 3h ago β minimax-m2.5:cloud β 6.4k/131k (5%) β
β agent:main:cron:55e800ec-e3a5-4β¦ β direct β 3h ago β minimax-m2.5:cloud β 0.2k/131k (0%) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄βββββββββ΄ββββββββββ΄βββββββββββββββββββββ΄βββββββββββββββββ
FAQ: https://docs.openclaw.ai/faq
Troubleshooting: https://docs.openclaw.ai/troubleshooting
Next steps:
Need to share? openclaw status --all
Need to debug live? openclaw logs --follow
Need to test channels? openclaw status --deep
Good β gateway is up and youβre hitting it on localhost (http://127.0.0.1:18789/). So missing scope: operator.read is no longer a βgateway downβ problem; itβs the browser/client presenting a device token that was issued with the wrong scopes (or a stale one cached).
Do this next (Windows):
1) Force the dashboard to stop using the cached device token
In Edge/Chrome:
- Close the dashboard tab(s)
- Open InPrivate / Incognito
- Run:
openclaw dashboard - In that InPrivate window, go to
http://127.0.0.1:18789/
(Incognito creates a new browser βdevice idβ, so it wonβt reuse the broken stored token.)
2) Fix the device token scopes on the gateway (most reliable)
Run:
openclaw devices list --json
You should see one or more devices with role operator. If one is missing scopes, rotate it to explicitly include operator.read:
openclaw devices rotate --device <deviceId> --role operator --scope operator.read --scope operator.write
If youβre not sure which device is the browser (or there are multiple), the blunt reset is:
openclaw devices revoke --device <deviceId> --role operator
Then reload the dashboard (Incognito) and it will re-issue a fresh operator token.
3) One command I still want (it shows config/service mismatches)
Please paste:
openclaw gateway status
That output is safe (tokens redacted) and will confirm the Scheduled Task service and your CLI are pointed at the same config/state (this matters for device tokens).
That paste is openclaw status, not openclaw gateway status β and the bit we need next is in gateway status (it will show Config (cli) vs Config (service) and the probe target).
1) Please run and paste:
openclaw gateway status
(tokens are redacted; safe to share)
2) Then fix the missing scope: operator.read (almost always stale device token)
On the gateway host, do one of these:
Option A (fastest): clear the Control UI cache
- Open the dashboard page β press F12 β Console, run:
localStorage.removeItem("openclaw.control.settings.v1");
location.reload();
(or just use an Incognito window)
Option B (server-side reset): revoke the browserβs operator device token
openclaw devices list --json
Find the browser deviceId, then:
openclaw devices revoke --device <deviceId> --role operator
Reload http://127.0.0.1:18789/ and it should re-issue a correct operator token (with operator.read).
Once you paste openclaw gateway status, I can tell immediately if youβve got a service/CLI profile mismatch (and if so, the fix is usually openclaw gateway install --force).
Those audit results explain why youβre stuck: youβve flipped both βbreak-glassβ Control UI switches on:
gateway.controlUi.allowInsecureAuth=truegateway.controlUi.dangerouslyDisableDeviceAuth=true
That combination bypasses the normal device identity/pairing flow and tends to leave the UI/client in a weird auth state (including βmissing scope: operator.readβ if itβs holding onto an old/incorrect device token).
Fix (recommended): put Control UI auth back to normal, then re-pair cleanly
- Turn the break-glass flags OFF (on the gateway host):
openclaw config set gateway.controlUi.allowInsecureAuth false
openclaw config set gateway.controlUi.dangerouslyDisableDeviceAuth false
openclaw gateway restart
- Clear the dashboardβs cached token (important)
- Open dashboard in an Incognito/Private window, or clear site data for
http://127.0.0.1:18789.
- If the UI now says pairing required, approve it:
openclaw devices list
openclaw devices approve <requestId>
One diagnostic that will likely reveal the last wrinkle
Please paste this (safe, tokens redacted):
openclaw gateway status
Iβm specifically looking for whether it shows Config (cli) vs Config (service) mismatch (common on Windows Scheduled Task). If they differ, the fix is usually:
openclaw gateway install --force
openclaw gateway restart
(Also: your audit warns about small model fallbacks without sandboxing/web tools restrictions β worth fixing after youβre connected, but itβs separate from the dashboard auth issue.)
Yep β the security audit basically confirms you βfixedβ the earlier token mismatch by turning on the two break-glass Control UI options, and now youβre paying the price (weird auth/scope behavior).
Do this in order (takes ~2 minutes)
1) Turn OFF the breakβglass Control UI flags
On the gateway host:
openclaw config set gateway.controlUi.allowInsecureAuth false
openclaw config set gateway.controlUi.dangerouslyDisableDeviceAuth false
openclaw gateway restart
Youβre on 127.0.0.1 anyway, so you donβt need insecure HTTP auth.
2) Clear the dashboardβs cached settings/token
Either:
- open an Incognito/Private window and go to
http://127.0.0.1:18789/, or - clear site data for
127.0.0.1:18789.
(That wipes the stale device token / settings blob the UI keeps.)
3) If it asks for pairing, approve it
openclaw devices list
openclaw devices approve <requestId>
4) If it still says missing scope: operator.read
Then revoke the browserβs operator token and retry:
openclaw devices list --json
openclaw devices revoke --device <deviceId> --role operator
One thing to avoid right now
Donβt keep toggling those two βinsecureβ flags to make it connect β it can get you connected in the short term, but it breaks the intended operator device-token + scope flow (and itβs genuinely unsafe on anything except localhost).
If you do the 4 steps above and it still fails, paste openclaw gateway status (not status) and Iβll tell you if the Scheduled Task service is using a different config/profile than your CLI (thatβs the other common Windows gotcha; fix is openclaw gateway install --force).
@old hill
05:03:04 [diagnostic] lane task error: lane=main durationMs=719 error="Error: spawn docker ENOENT"
05:03:04 [diagnostic] lane task error: lane=session:agent:main:main durationMs=730 error="Error: spawn docker ENOENT"
Agent was working correctly last night but now it is doing this across all platforms
07:03:04 Embedded agent failed before reply: spawn docker ENOENT
That log line is the key:
Error: spawn docker ENOENT = the Gateway tried to run the docker executable, but canβt find it (not installed, or not on PATH for the Gateway service).
This usually happens when Docker sandboxing is enabled (agents.defaults.sandbox.mode is "all" or "non-main"), but Docker isnβt available.
1) Confirm whatβs enabled
On the gateway host, run:
openclaw sandbox explain
If it shows sandboxing is on, you have two options:
Option A (fastest): turn sandboxing off
openclaw config set agents.defaults.sandbox.mode off
openclaw gateway restart
Option B: keep sandboxing β install/fix Docker
- Make sure Docker is installed and works on the gateway host:
docker --version docker ps - If Docker works in your terminal but the Gateway service still canβt find it, itβs almost always a service PATH issue (common on macOS/launchd). Reinstalling the service from the same environment can help:
openclaw gateway install --force openclaw gateway restart
Sandbox docs: https://docs.openclaw.ai/gateway/sandboxing
Sandbox CLI: https://docs.openclaw.ai/cli/sandbox
2) About βunauthorized / token mismatchβ (1008)
Thatβs separate: the Control UI is sending the wrong/old token.
- Get a fresh dashboard URL:
openclaw dashboard - Token is:
openclaw config get gateway.auth.token
(Only paste the token into the Control UI settings β donβt paste it into Discord.)
FAQ section: https://docs.openclaw.ai/help/faq#the-control-ui-says-unauthorized-or-keeps-reconnecting
If you paste these (safe) outputs, we can pinpoint it quickly:
openclaw --version
openclaw status --all
openclaw gateway status
And: are you running the Gateway natively or via Docker Compose?
spawn docker ENOENT means OpenClaw is trying to run Docker (usually because sandboxing is enabled) but the docker binary isnβt available (not installed, or not on PATH for the Gateway process). Thatβs why the embedded agent dies before it can reply.
Fix (pick one)
A) Fastest: disable sandboxing
Run on the gateway host:
openclaw config set agents.defaults.sandbox.mode off
openclaw gateway restart
B) Keep sandboxing: make Docker available
On the gateway host:
docker --version
which docker
If Docker works in your shell but OpenClaw still canβt find it, itβs commonly a service PATH issue (macOS/launchd especially). Reinstall the service from the same environment:
openclaw gateway install --force
openclaw gateway restart
Also: the βunauthorized / gateway token mismatch (1008)β part
Thatβs separate: the Control UI has an old/wrong token saved.
openclaw dashboard
openclaw config get gateway.auth.token
Then paste that token into the Control UI settings.
To pinpoint quickly, paste outputs of:
openclaw --version
openclaw sandbox explain
openclaw gateway status
And: are you running the Gateway natively or via Docker Compose?
disabling the sandbox seems to have worked thank you
Nice β that lines up exactly with spawn docker ENOENT (sandboxing was forcing tool runs through Docker, and Docker wasnβt reachable).
If you want to re-enable sandboxing later, youβll need Docker installed and visible to the Gateway serviceβs PATH (or run the gateway via Docker Compose).
If this fixed it, please right-click the solution message β Apps β β Mark Solution so Answer Overflow indexes it for the next person.
Is there a known bug that the AI collapses the gateway when they try restarting?
Also, since the update today, my system has struggled with a bunch of things, and is now saying the they are not able to perform exec commands at all...?
βGateway collapses on restartβ isnβt a single known bug so much as a symptom that the Gateway service canβt come back up with its current environment/config (and after an update those mismatches show up a lot).
The two most common culprits I see:
- Service using a different config/profile than your CLI
- Check:
If it showsopenclaw gateway statusConfig (cli)vsConfig (service)different, fix it with:
(This re-points the background service at the same config/profile youβre editing.)openclaw gateway install --force openclaw gateway restart
- Sandboxing/Docker (what you just hit)
- If sandboxing is on and Docker isnβt available to the service, it can βrestart β immediately crashβ and look like the gateway is collapsing.
Exec commands βnot able to perform exec at allβ
This depends on the exact error message. After updates, exec usually fails for one of these reasons:
A) Exec is being denied by tool policy
Check:
openclaw config get tools.allow
openclaw config get tools.deny
If exec is denied (or not allowed), the agent simply canβt run commands.
B) Exec got switched to host=gateway with allowlist security
If tools.exec.host is gateway, and tools.exec.security is allowlist, then most commands will be blocked unless explicitly allowlisted.
Check:
openclaw config get tools.exec.host
openclaw config get tools.exec.security
If you just want βnormal local execβ again, set it back to sandbox-hosted execution (no Docker required if sandboxing is off):
openclaw config set tools.exec.host sandbox
openclaw gateway restart
Also in-chat, send /exec (with no args) to see if you have a per-session override accidentally set.
C) Approvals/allowlist are blocking it
If you see approval-pending or βallowlist missβ messages, thatβs this path. (Different fix; weβll target it once we see the exact error.)
Fast triage: paste these outputs
These are the quickest to diagnose βrestart kills gatewayβ + exec issues:
openclaw --version
openclaw gateway status
openclaw status --all
openclaw sandbox explain
And when you try an exec, paste the exact error line you get (from chat or openclaw logs --follow). That one line usually tells us which bucket (A/B/C) youβre in.
Entire system has been SUPER unstable since the last update.
PS C:\Users\archo> openclaw gateway status
π¦ OpenClaw 2026.2.15 (3fe22ea) β I'll refactor your busywork like it owes me money.
β
β
Service: Scheduled Task (registered)
File logs: \tmp\openclaw\openclaw-2026-02-16.log
Command: C:\Program Files\nodejs\node.exe C:\Users\archo\AppData\Roaming\npm\node_modules\openclaw\dist\index.js gateway --port 18789
Service env: OPENCLAW_GATEWAY_PORT=18789
Config (cli): ~.openclaw\openclaw.json
Config (service): ~.openclaw\openclaw.json
Gateway: bind=auto (127.0.0.1), port=18789 (service args)
Probe target: ws://127.0.0.1:18789
Dashboard: http://127.0.0.1:18789/
Runtime: stopped (state Ready, last run time 2026/02/16 10:01:35)
RPC probe: ok
Service is loaded but not running (likely exited immediately).
File logs: \tmp\openclaw\openclaw-2026-02-16.log
Logs: schtasks /Query /TN "OpenClaw Gateway" /V /FO LIST
Listening: 127.0.0.1:18789
Troubles: run openclaw status
Troubleshooting: https://docs.openclaw.ai/troubleshooting
Yeah, when things get βSUPER unstable after an updateβ itβs almost always one of these patterns:
-
The Gateway service is now running with a different config/profile than your CLI
(so restarts look like βit collapsedβ because it comes back with different auth / different settings) -
Doctor/migrations didnβt fully apply (service entrypoint, config drift, etc.)
-
Exec got effectively disabled by either tool policy (
tools.allow/deny) or by exec security defaults (tools.exec.host/security/ask) changing during config modernization.
The fastest way to stop guessing is to grab a small βtriage bundleβ.
Please paste these outputs (theyβre safe; status --all redacts secrets)
Run on the gateway host:
openclaw --version
openclaw update status
openclaw gateway status
openclaw doctor
openclaw status --all
And if exec is failing: paste the exact exec error text you see (one line is usually enough).
Two quick fixes that often stabilize things immediately
1) Force the service to use the same config/profile youβre editing
If openclaw gateway status shows Config (cli) and Config (service) are different:
openclaw gateway install --force
openclaw gateway restart
2) Check whether exec is being blocked by config
These tell us if exec is denied or locked down:
openclaw config get tools.allow
openclaw config get tools.deny
openclaw config get tools.exec.host
openclaw config get tools.exec.security
(After you disabled sandboxing, host=sandbox should work fine and should not require Docker.)
If you just want to get back to βlast known goodβ
If we confirm the update itself is the cause, rollback is supported:
- Global install rollback:
npm i -g openclaw@<version> openclaw doctor openclaw gateway restart
Docs: https://docs.openclaw.ai/install/updating#rollback--pinning-when-something-breaks
Send the outputs above and we can tell you exactly which knob got flipped (and why restart/exec started acting weird).
That openclaw gateway status output is really telling:
- Runtime: stopped (Scheduled Task is not running)
- but RPC probe: ok and Listening: 127.0.0.1:18789
That basically means: something else is already running a Gateway on 18789, but itβs not the Scheduled Task. Then when you βrestartβ, the Scheduled Task often starts β sees the port is taken β exits immediately β everything feels flaky/unstable.
Fix: make it βone gateway, one supervisorβ
- Stop whatever is currently listening
openclaw gateway stop
- Check if the port is still in use
netstat -ano | findstr :18789
If it still shows a PID listening on 18789, paste that line (and weβll confirm what process it is). If itβs clearly a stray node.exe, you can kill it:
tasklist /fi "PID eq <pid>"
Stop-Process -Id <pid> -Force
- Rewrite/reinstall the Scheduled Task + wrapper (very common after updates)
openclaw gateway install --force
openclaw gateway restart
- Verify
openclaw gateway status
To see why the Scheduled Task exited
Please paste this output:
schtasks /Query /TN "OpenClaw Gateway" /V /FO LIST
Also: when you paste Windows paths in Discord, wrap them in triple backticks β¦ β otherwise Discord can eat backslashes and the βCommand:β line becomes unreadable.
Once the gateway is stable again, we can tackle the exec not working part (thatβs usually tool policy / exec host+security settings), but right now this βtwo gateways / port already boundβ situation would explain a ton of instability.
PS C:\Users\archo> openclaw config get tools.allow
π¦ OpenClaw 2026.2.15 (3fe22ea) β I'm the assistant your terminal demanded, not the one your sleep schedule requested.
Config path not found: tools.allow
PS C:\Users\archo> openclaw config get tools.deny
π¦ OpenClaw 2026.2.15 (3fe22ea) β If it's repetitive, I'll automate it; if it's hard, I'll bring jokes and a rollback plan.
Config path not found: tools.deny
PS C:\Users\archo> openclaw config get tools.exec.host
π¦ OpenClaw 2026.2.15 (3fe22ea) β Ah, the fruit tree company! π
Config path not found: tools.exec.host
PS C:\Users\archo> openclaw config get tools.exec.securit
π¦ OpenClaw 2026.2.15 (3fe22ea) β I'll refactor your busywork like it owes me money.
Config path not found: tools.exec.securit
Those config get β¦ results are actually fine: βConfig path not foundβ just means you havenβt set an override, so OpenClaw is using defaults for tool policy + exec settings. So this is not βexec is disabled in configβ (at least not via those keys).
The bigger smoking gun is still your earlier gateway status:
- Runtime: stopped (Scheduled Task exited)
- but RPC probe: ok and Listening: 127.0.0.1:18789
That almost always means you currently have two gateway processes fighting:
- the Scheduled Task is not running (it exited),
- but some other process is already listening on 18789, so the βservice restartβ looks like it βcollapsesβ because it starts, hits
EADDRINUSE/ port-in-use, then exits immediately.
Do this on Windows (PowerShell)
- Find whatβs actually listening on 18789:
netstat -ano | findstr :18789
- Inspect the PID before killing it (so we donβt nuke something unrelated):
$pid = <PID_FROM_NETSTAT>
Get-Process -Id $pid
Get-CimInstance Win32_Process -Filter "ProcessId=$pid" | Select-Object CommandLine
- If that command line is clearly OpenClaw/Node running
β¦openclaw\dist\index.js gateway β¦, kill it:
Stop-Process -Id $pid -Force
- Now rewrite + restart the Scheduled Task cleanly:
openclaw gateway install --force
openclaw gateway restart
openclaw gateway status
If the Scheduled Task still exits immediately
Paste the last ~200 lines of the file log:
Get-Content \tmp\openclaw\openclaw-2026-02-16.log -Tail 200
(or run openclaw logs --follow and copy the first fatal/error block).
Why exec βstops workingβ when this happens
If your chat/UI sometimes talks to the βwrongβ gateway instance (the stray one vs the scheduled-task one), you get random behavior: tools missing, exec failing, auth/token mismatch, restarts doing weird stuff, etc. Fixing the single running gateway usually stabilizes everything.
If you paste the netstat line + the CommandLine for that PID, I can tell you exactly what spawned the extra instance.
PS C:\Users\archo> netstat -ano | findstr :18789
TCP 127.0.0.1:18789 0.0.0.0:0 LISTENING 9864
TCP 127.0.0.1:18789 127.0.0.1:50503 FIN_WAIT_2 9864
TCP 127.0.0.1:18789 127.0.0.1:52795 ESTABLISHED 9864
TCP 127.0.0.1:18789 127.0.0.1:63807 TIME_WAIT 0
TCP 127.0.0.1:18789 127.0.0.1:63809 TIME_WAIT 0
TCP 127.0.0.1:50503 127.0.0.1:18789 CLOSE_WAIT 10912
TCP 127.0.0.1:52795 127.0.0.1:18789 ESTABLISHED 10912
TCP [::1]:18789 [::]:0 LISTENING 9864
Yep β that confirms it.
- PID 9864 is the process actually listening on
127.0.0.1:18789(and::1:18789). - PID 10912 is just a client connected to it (likely your browser / Control UI / some OpenClaw client).
So your βserviceβ (Scheduled Task) says βstoppedβ, but a different gateway instance is still running in the background, which is exactly the kind of thing that makes restarts/exec feel chaotic.
Next step: identify what 9864 is
Run:
Get-Process -Id 9864,10912 | Select-Object Id,ProcessName,Path
Get-CimInstance Win32_Process -Filter "ProcessId=9864" | Select-Object CommandLine
Get-CimInstance Win32_Process -Filter "ProcessId=10912" | Select-Object CommandLine
Paste the output (especially the CommandLine for 9864).
If 9864 is clearly OpenClaw/Node running the gateway
Then kill it and restart cleanly:
Stop-Process -Id 9864 -Force
openclaw gateway restart
openclaw gateway status
After that, openclaw gateway status should show Runtime: running (not stopped), and the instability usually disappears.
Why this breaks exec / βrestart collapsesβ
Because you end up with:
- one gateway instance the UI is talking to (PID 9864),
- while the Scheduled Task tries to start another, fails (port already taken), and exits,
- and depending on which instance your clients connect to, tool defaults / session state can differ β βexec stopped workingβ, token mismatch, etc.
Send the CommandLine for PID 9864 and we can tell you what spawned it (manual openclaw gateway β¦, a leftover older task, etc.).
PS C:\Users\archo> openclaw gateway status
π¦ OpenClaw 2026.2.15 (3fe22ea) β Your inbox, your infra, your rules.
β
β
Service: Scheduled Task (registered)
File logs: \tmp\openclaw\openclaw-2026-02-16.log
Command: C:\Program Files\nodejs\node.exe C:\Users\archo\AppData\Roaming\npm\node_modules\openclaw\dist\index.js gateway --port 18789
Service env: OPENCLAW_GATEWAY_PORT=18789
Config (cli): ~.openclaw\openclaw.json
Config (service): ~.openclaw\openclaw.json
Gateway: bind=auto (127.0.0.1), port=18789 (service args)
Probe target: ws://127.0.0.1:18789
Dashboard: http://127.0.0.1:18789/
Runtime: running (last run time 2026/02/16 10:26:46)
RPC probe: ok
Listening: 127.0.0.1:18789
Troubles: run openclaw status
Troubleshooting: https://docs.openclaw.ai/troubleshooting
Perfect β thatβs the βhealthyβ state:
- Runtime: running
- RPC probe: ok
- Listening: 127.0.0.1:18789
So the Scheduled Task is now the thing owning the port, and the βtwo gateways fightingβ instability should be gone.
Next: verify exec is back (or capture the exact failure)
Two quick checks on the gateway host:
- Sanity check the gateway can respond to basic health:
openclaw status
- Try a minimal exec from chat (or wherever you were attempting exec). If it still fails, we need the exact error text.
If exec still doesnβt work, the usual causes are:
- The agent/tool policy doesnβt include exec (per-agent overrides)
- Youβre in a channel/session where exec is intentionally blocked
- Sandbox/approvals settings are forcing gateway/node exec with allowlist approvals
Since your config lookups returned βpath not foundβ, youβre likely on defaults β so if exec is blocked, itβs probably per-agent tools config or session /exec overrides.
Run these to inspect:
openclaw config get agents.list
openclaw config get tools
(If tools is big, just paste agents.list first.)
And in the chat where exec fails, send:
/exec
and paste what it prints.
If everything is working now, please mark the solution (right-click β Apps β β Mark Solution) β the βport already in use / second gateway instanceβ issue is a super common Windows instability cause.
PS C:\Users\archo> openclaw status
π¦ OpenClaw 2026.2.15 (3fe22ea) β Greetings, Professor Falken
β
β
β
β
OpenClaw status
Overview
βββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Item β Value β
βββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Dashboard β http://127.0.0.1:18789/ β
β OS β windows 10.0.26200 (x64) Β· node 24.13.1 β
β Tailscale β serve Β· archon.tail9f1bf4.ts.net Β· https://archon.tail9f1bf4.ts.net β
β Channel β stable (default) β
β Update β pnpm Β· npm latest 2026.2.15 β
β Gateway β local Β· ws://127.0.0.1:18789 (local loopback) Β· reachable 78ms Β· auth token Β· Archon (100.72.168.77) app β
β β unknown windows 10.0.26200 β
β Gateway service β Scheduled Task installed Β· registered Β· running β
β Node service β Scheduled Task not installed β
β Agents β 1 Β· no bootstraps Β· sessions 89 Β· default main active 1m ago β
β Memory β enabled (plugin memory-core) Β· unavailable β
β Probes β skipped (use --deep) β
β Events β none β
β Heartbeat β 1h (main) β
β Sessions β 89 active Β· default minimax-m2.5:cloud (131k ctx) Β· ~.openclaw\agents\main\sessions\sessions.json β
βββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Security audit
Summary: 2 critical Β· 1 warn Β· 2 info
CRITICAL Small models require sandboxing and web tools disabled
Small models (<=300B params) detected: - ollama/qwen3:14b (14B) @ agents.defaults.model.fallbacks (unsafe; sandbox=off; web=[web_search, web_fetch, browser]) Uβ¦
Fix: If you must use small models, enable sandboxing for all sessions (agents.defaults.sandbox.mode="all") and disable web_search/web_fetch/browser (tools.deny=["group:web","browser"]).
CRITICAL Telegram group commands have no sender allowlist
Telegram group access is enabled but no sender allowlist is configured; this allows any group member to invoke /β¦ commands (including skill commands).
Fix: Approve yourself via pairing (recommended), or set channels.telegram.groupAllowFrom (or per-group groups.<id>.allowFrom).
WARN Discord slash commands have no allowlists
Discord slash commands are enabled, but neither an owner allowFrom list nor any per-guild/channel users allowlist is configured; /β¦ commands will be rejected fβ¦
Fix: Add your user id to channels.discord.allowFrom (or approve yourself via pairing), or configure channels.discord.guilds.<id>.users.
Full report: openclaw security audit
Deep probe: openclaw security audit --deep
Channels
ββββββββββββ¬ββββββββββ¬βββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Channel β Enabled β State β Detail β
ββββββββββββΌββββββββββΌβββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Telegram β ON β WARN β token config (8346β¦Y5p4 Β· len 46) Β· accounts 1/1 Β· gateway: Config allows unmentioned group β
β β β β messages (requireMention=false). Telegram Bot API pβ¦ β
β Discord β ON β OK β token config (MTQ3β¦LrJ8 Β· len 72) Β· accounts 1/1 β
ββββββββββββ΄ββββββββββ΄βββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Sessions
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββ¬ββββββββββ¬βββββββββββββββββββββ¬ββββββββββββββββββββ
β Key β Kind β Age β Model β Tokens β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββΌββββββββββΌβββββββββββββββββββββΌββββββββββββββββββββ€
β agent:main:main β direct β 1m ago β minimax-m2.5:cloud β 0.1k/131k (0%) β
β agent:main:cron:1e52071f-e0fb-4β¦ β direct β 24m ago β glm-5:cloud β 13k/131k (10%) β
β agent:main:cron:1e52071f-e0fb-4β¦ β direct β 24m ago β glm-5:cloud β 13k/131k (10%) β
β agent:main:cron:13a9781a-a797-4β¦ β direct β 29m ago β minimax-m2.5:cloud β unknown/131k (?%) β
β agent:main:cron:13a9781a-a797-4β¦ β direct β 29m ago β minimax-m2.5:cloud β unknown/131k (?%) β
β agent:main:cron:55e800ec-e3a5-4β¦ β direct β 29m ago β glm-5:cloud β 15k/131k (11%) β
β agent:main:cron:55e800ec-e3a5-4β¦ β direct β 29m ago β glm-5:cloud β 15k/131k (11%) β
β agent:main:cron:e54ced0d-e073-4β¦ β direct β 1h ago β minimax-m2.5:cloud β unknown/131k (?%) β
β agent:main:cron:e54ced0d-e073-4β¦ β direct β 1h ago β minimax-m2.5:cloud β unknown/131k (?%) β
β agent:main:discord:channel:1467β¦ β group β 1h ago β minimax-m2.5:cloud β unknown/131k (?%) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄βββββββββ΄ββββββββββ΄βββββββββββββββββββββ΄ββββββββββββββββββββ
FAQ: https://docs.openclaw.ai/faq
Troubleshooting: https://docs.openclaw.ai/troubleshooting
Next steps:
Need to share? openclaw status --all
Need to debug live? openclaw logs --follow
Need to test channels? openclaw status --deep
That openclaw status looks healthy now:
- Gateway: reachable (
ws://127.0.0.1:18789) - Gateway service: Scheduled Task β¦ running
- Dashboard:
http://127.0.0.1:18789/
So the βsuper unstableβ behavior you were seeing was very likely the two-gateways-fighting-for-port-18789 situation (Scheduled Task stopped, but another PID was actually listening). Now itβs back to a single supervised gateway, which is the stable setup.
About βexec commands not able to runβ
The Config path not found: tools.* you saw earlier is not a failure β it just means you havenβt explicitly set tool policy overrides, so defaults apply.
To diagnose the exec issue, I need the exact error text you get when exec fails (one line is enough). Common ones look like:
- βtool exec is not allowed / denied by policyβ
- βapproval required / allowlist missβ
- βspawn β¦ ENOENTβ (missing binary)
- βsandbox/docker β¦β (if sandboxing got re-enabled)
Please run these and paste output
openclaw sandbox explain
openclaw logs --follow
Then try one exec (wherever you do it: Discord chat / Control UI / etc.) and paste the error line you see, and/or whatever new error shows up in openclaw logs --follow.
Also: are you trying to exec from Discord (chat command) or from the Control UI? The path is slightly different and affects approvals/policy.
PS C:\Users\archo> openclaw config get agents.list
π¦ OpenClaw 2026.2.15 (3fe22ea) β If it's repetitive, I'll automate it; if it's hard, I'll bring jokes and a rollback plan.
Config path not found: agents.list
That openclaw status looks way healthier now (gateway reachable, Scheduled Task running). So weβve likely fixed the βrandomly collapsing on restartβ part (the port fight).
1) Your Memory plugin being βunavailableβ
This line stands out:
Memory: enabled (plugin memory-core) Β· unavailable
That wonβt usually break the whole gateway, but it can spam errors and make things feel janky. On the gateway host, run:
openclaw plugins doctor
openclaw logs --follow
β¦and look for memory-core errors.
2) Exec βnot able to perform exec commandsβ
On Discord, group/channel sessions are βnon-mainβ sessions. If your sandbox mode is non-main and Docker isnβt available, exec will fail specifically in those sessions (while DMs might still work).
So first, confirm your effective sandbox mode:
openclaw sandbox explain
openclaw config get agents.defaults.sandbox
If sandbox explain shows sandboxing is on (especially mode: non-main / all), and you donβt want Docker on Windows, disable it (again) and restart:
openclaw config set agents.defaults.sandbox.mode off
openclaw gateway restart
3) If exec still fails after sandbox is off
I need the exact error line you get when you try an exec (copy/paste). The fastest way to capture it is:
- Run:
openclaw logs --follow - Try one exec from Discord / Control UI
- Paste the first relevant error block.
Also: are you trying to exec from Discord (chat) or from the Control UI?
Config path not found: agents.list is normal β it just means youβre on the default single agent (no multiβagent list configured). So we can ignore that one.
The important part for your βexec doesnβt workβ complaint is still: is OpenClaw trying to exec inside a Docker sandbox? (because on Windows, that often turns into spawn docker ENOENT and only affects nonβmain sessions like Discord channels/threads).
1) Check the effective sandbox mode (this is the key command)
Run and paste:
openclaw sandbox explain
If it shows mode: non-main or mode: all (or anything that implies Docker), and you donβt have Docker available, disable it:
openclaw config set agents.defaults.sandbox.mode off
openclaw gateway restart
Why this matters: Discord channel/thread sessions are βnonβmainβ, so sandboxing can break exec there while DMs still work.
2) Get the exact exec failure
Please paste the exact error line you see when you try exec.
Fastest way to capture it:
openclaw logs --follow
Then try one βdo an execβ action (from Discord or Control UI), and copy the first relevant error block from the logs.
3) Memory plugin says βunavailableβ
This is separate, but it can add instability/noise. Run:
openclaw plugins doctor
openclaw plugins info memory-core
Paste what it reports (it usually tells you exactly what dependency/config is missing).
One quick question: are you trying to exec from Discord (in a channel/thread) or from the Control UI? That changes which session type youβre in and helps confirm the sandbox/nonβmain theory.
PS C:\Users\archo> openclaw sandbox explain
π¦ OpenClaw 2026.2.15 (3fe22ea) β I can grep it, git blame it, and gently roast itβpick your coping mechanism.
Effective sandbox:
agentId: main
sessionKey: agent:main:main
mainSessionKey: agent:main:main
runtime: direct
mode: off scope: agent perSession: false
workspaceAccess: none workspaceRoot: C:\Users\archo.openclaw\sandboxes
Sandbox tool policy:
allow (default): exec, process, read, write, edit, apply_patch, image, sessions_list, sessions_history, sessions_send, sessions_spawn, subagents, session_status
deny (default): browser, canvas, nodes, cron, gateway, telegram, whatsapp, discord, irc, googlechat, slack, signal, imessage
Elevated:
enabled: true
channel: webchat
allowedByConfig: false
failing gates: allowFrom (tools.elevated.allowFrom.webchat)
Fix-it:
- tools.sandbox.tools.allow
- tools.sandbox.tools.deny
- agents.list[].tools.sandbox.tools.allow
- agents.list[].tools.sandbox.tools.deny
- tools.elevated.enabled
- tools.elevated.allowFrom.webchat
Docs: docs.openclaw.ai/sandbox
PS C:\Users\archo> openclaw plugins doctor
π¦ OpenClaw 2026.2.15 (3fe22ea) β I'll refactor your busywork like it owes me money.
No plugin issues detected.
PS C:\Users\archo> openclaw plugins info memory-core
π¦ OpenClaw 2026.2.15 (3fe22ea) β Your inbox, your infra, your rules.
Memory (Core)
id: memory-core
File-backed memory search tools and CLI
Status: loaded
Source: ~\AppData\Roaming\npm\node_modules\openclaw\extensions\memory-core\index.ts
Origin: bundled
Version: 2026.2.15
Tools: memory_search, memory_get
CLI commands: memory
Good news: that output rules out the Docker/sandbox issue completely.
runtime: directmode: off
So exec is not failing because of Docker anymore.
The #1 remaining cause: your session got stuck with /exec host=gateway (or node)
If at any point you (or the UI) set /exec host=gateway, then exec starts going through the gateway/node approvals/allowlist path and can feel like βexec is brokenβ.
In the same Discord chat/thread where exec fails, send:
/exec
and paste what it prints.
If itβs anything other than host=sandbox, reset it:
/exec host=sandbox
(That restores βnormal local execβ behavior.)
If it still fails: grab the exact error from logs
Run on the gateway host:
openclaw logs --follow
Then try one exec again and paste the first relevant error block.
If you want a quick grep without live follow:
Select-String -Path \tmp\openclaw\openclaw-2026-02-16.log -Pattern "SYSTEM_RUN_DENIED|allowlist|approval|ENOENT|exec" -Context 2,6 | Select-Object -First 40
Side note: memory plugin βunavailableβ
Not your exec issue, but worth fixing to reduce instability/noise:
openclaw plugins doctor
openclaw plugins info memory-core
Paste the /exec output + the log error and we can tell you exactly which gate is blocking exec (session override vs allowlist/approval vs missing binary).
Current exec defaults: host=sandbox, security=full, ask=on-miss, node=(unset).
Options: host=sandbox|gateway|node, security=deny|allowlist|full, ask=off|on-miss|always, node=<id>.
Nice β that explains the βMemory β¦ unavailableβ line: the plugin is loaded and fine, but semantic memory search is disabled because OpenClaw canβt find a usable embeddings provider/key (so it marks memory search as unavailable).
Fix the βmemory unavailableβ warning
Run this to see the exact reason:
openclaw memory status --deep
Typical fix options:
- Provide an embeddings API key (OpenAI/Gemini/Voyage) so memory search can build its vector index.
- Or explicitly set it to local embeddings (Windows-native can be a bit rough; WSL2 is usually easier).
- Or if you donβt care about semantic search right now, you can ignore it (your Markdown memory files still exist; itβs just the vector search thatβs βunavailableβ).
Re: exec still βnot workingβ
Your sandbox explain shows for agent:main:main:
mode: offruntime: direct
So exec is not failing due to Docker/sandbox anymore.
The next most common gotcha is: youβre trying exec from a Discord channel/thread session (nonβmain), and that session has a different /exec override (e.g. host=gateway or host=node) which can trigger approvals/allowlist behavior.
In the Discord thread where exec fails, send:
/exec
and paste what it prints. If itβs not host=sandbox, reset it:
/exec host=sandbox
If it still fails after that, grab the real error:
openclaw logs --follow
Then try one exec and paste the first error block that appears.
If you paste the openclaw memory status --deep output + the /exec output (from Discord), we can get both of these fully cleaned up.
PS C:\Users\archo> openclaw memory status --deep
π¦ OpenClaw 2026.2.15 (3fe22ea) β The UNIX philosophy meets your DMs.
No API key found for provider "openai". Auth store: C:\Users\archo.openclaw\agents\main\agent\auth-profiles.json (agentDir: C:\Users\archo.openclaw\agents\main\agent). Configure auth for this agent (openclaw agents add <id>) or copy auth-profiles.json from the main agentDir.
No API key found for provider "google". Auth store: C:\Users\archo.openclaw\agents\main\agent\auth-profiles.json (agentDir: C:\Users\archo.openclaw\agents\main\agent). Configure auth for this agent (openclaw agents add <id>) or copy auth-profiles.json from the main agentDir.
No API key found for provider "voyage". Auth store: C:\Users\archo.openclaw\agents\main\agent\auth-profiles.json (agentDir: C:\Users\archo.openclaw\agents\main\agent). Configure auth for this agent (openclaw agents add <id>) or copy auth-profiles.json from the main agentDir.
That /exec output is exactly what we want:
host=sandbox β¦
So this is not a sandbox/Docker issue, and itβs not a session /exec misconfiguration either.
When people see βthe AI canβt execβ in this state, itβs usually one of these:
A) The exec tool is actually not available due to tool profile / perβprovider tool policy
tools.allow being βpath not foundβ just means you didnβt set an override β but you might have a tools.profile or tools.byProvider restriction (sometimes added by wizards/updates).
Please run and paste:
openclaw config get tools.profile
openclaw config get tools.byProvider
If tools.profile is minimal or messaging, that would explain βcanβt execβ.
B) The model/provider youβre using is not reliably tool-calling
Your status showed the session defaulting to minimax-m2.5:cloud. Some providers/models will βtalkβ about running commands but never actually emit tool calls.
Fast way to confirm: tail logs and try a single βrun dirβ request, then see if an exec tool call happens.
openclaw logs --follow
Then in Discord ask the bot something dead simple like: βrun dirβ.
- If logs show tool policy blocked / βtool not allowedβ β itβs (A).
- If logs show no exec attempt at all β itβs (B) (tool calling isnβt firing).
C) It is running exec but failing to spawn a shell/binary
Then the logs will contain the real error (spawn β¦ ENOENT, allowlist/approval, etc.).
If you paste:
tools.profile+tools.byProvideroutputs, and- the first relevant error block from
openclaw logs --followright after you request an exec,
β¦I can tell you which bucket youβre in and the exact fix.
openclaw memory status --deep is basically saying: memory-core is fine, but semantic memory search canβt run because thereβs no embeddings API key configured (OpenAI / Google(Gemini) / Voyage). So βMemory β¦ unavailableβ is expected until you give it some embeddings provider.
Fix the Memory βunavailableβ warning (pick ONE provider)
Option A β OpenAI embeddings (most common):
- Set an API key in config (so the Scheduled Task definitely sees it), then restart:
openclaw config set agents.defaults.memorySearch.provider openai
openclaw config set agents.defaults.memorySearch.model text-embedding-3-small
openclaw config set agents.defaults.memorySearch.remote.apiKey "<YOUR_OPENAI_API_KEY>"
openclaw gateway restart
- Then build the index:
openclaw memory index --verbose
Option B β Gemini embeddings:
openclaw config set agents.defaults.memorySearch.provider gemini
openclaw config set agents.defaults.memorySearch.model gemini-embedding-001
openclaw config set agents.defaults.memorySearch.remote.apiKey "<YOUR_GEMINI_API_KEY>"
openclaw gateway restart
openclaw memory index --verbose
(Important: donβt paste API keys into Discord.)
If you donβt care about semantic memory search right now, you can also just ignore that warning β your plain Markdown memory files still work; itβs only the vector search thatβs disabled.
Exec: your /exec defaults are correct
You pasted:
Current exec defaults: host=sandbox, security=full, ask=on-miss
β¦and openclaw sandbox explain shows mode: off / runtime: direct.
So exec is not blocked by Docker and not misconfigured via /exec.
At this point, if βthe AI canβt execβ, itβs almost always one of these two:
- The model/provider isnβt actually emitting tool calls (it will say it canβt, or it will describe what it would do, but never calls
exec). - Thereβs a tool policy/profile restriction (less likely, but still possible).
To sort that in 30 seconds:
- Run:
openclaw logs --follow
- Then in Discord ask something dead-simple like: βrun
dirβ.
- If the logs show an
execattempt and an error β paste that error block. - If the logs show no exec attempt at all β itβs the model/tool-calling reliability issue, and the quickest workaround is to switch that session/agent to a more tool-reliable model for debugging.
If you paste the first exec-related log lines you see after requesting dir, I can tell you exactly which one youβre hitting.
PS C:\Users\archo> openclaw config get tools.profile
π¦ OpenClaw 2026.2.15 (3fe22ea) β Type the command with confidenceβnature will provide the stack trace if needed.
Config path not found: tools.profile
PS C:\Users\archo> openclaw config get tools.byProvider
π¦ OpenClaw 2026.2.15 (3fe22ea) β Your AI assistant, now without the $3,499 headset.
Config path not found: tools.byProvider
Cool β tools.profile and tools.byProvider both being βpath not foundβ means you havenβt configured any tool allow/deny restrictions, so OpenClaw is using the default (i.e. exec shouldnβt be blocked by config).
And your /exec defaults you pasted are correct:
host=sandbox β¦(so no gateway/node allowlists/approvals getting in the way)
So if βthe AI canβt execβ, weβre down to two realistic causes:
1) The model/provider isnβt actually emitting tool calls (most common)
Some models will talk about running commands but never produce an exec tool call.
How to confirm in 30 seconds:
- On the gateway host, run:
openclaw logs --follow
- Then in Discord, ask something super blunt like:
βRun
dirand paste the output.β
If the logs show no exec call at all, itβs a tool-calling reliability/model issue (not your config). In that case the quickest workaround is: switch the session to a more tool-reliable model (ask in #models for the current best pick; tool-calling reliability changes fast).
2) It does call exec, but exec fails at runtime
Then the logs will show the real error (e.g. spawn ... ENOENT, permission issues, etc.). Paste the first error block you see right after requesting dir.
Side note: Memory βunavailableβ
Your openclaw memory status --deep output is expected: itβs just telling you there are no embeddings API keys configured (OpenAI/Gemini/Voyage), so semantic memory search canβt run. Not related to exec.
If you paste the relevant chunk from openclaw logs --follow after you ask it to run dir, I can tell you immediately which branch youβre in and the exact fix.
Agent is working but still struggling to do anythingexec required. Is this a known bug as the agent says its a dev issue as everythin on the agents side is as it should be.
The exec is returing no output
Not a single βknown bugβ where exec is globally broken in 2026.2.15 β with your current state (/exec shows host=sandbox and sandboxing is mode: off), the gateway should be able to exec.
When it still βcanβt do anything exec-requiredβ, itβs almost always one of these two:
- The model/provider isnβt actually emitting tool calls (itβll say it canβt / βdev issueβ, but no
exectool call ever happens). - It does emit
exec, but the gateway is throwing a real runtime error (youβll see it in logs:ENOENT, permissions, etc.).
Quick way to prove which one it is
On the gateway host, run:
openclaw logs --follow
Then, in Discord, ask the bot something dead simple like:
βRun
dirand paste the output.β
Now check the log output:
- If you never see an
exectool call β itβs a model/tool-calling reliability problem, not your gateway/config. - If you do see an exec attempt, paste the first error block after it β that will point to the exact fix.
Optional: faster log filter (no scrolling)
Select-String -Path \tmp\openclaw\openclaw-2026-02-16.log -Pattern "tool=exec|exec\\b|ENOENT|SYSTEM_RUN_DENIED" -Context 2,6 | Select-Object -Last 60
If it turns out to be (1), the pragmatic workaround is to switch that session to a tool-reliable model (the up-to-date recommendations change quickly, so ask in #models).
If /exec shows host=sandbox and sandbox explain says mode: off, then exec isnβt being blocked by sandboxing or config.
When βexec returns no outputβ, itβs usually not a known core bug β itβs one of:
- the model never actually calls the
exectool (so you get a βdev issueβ style reply but no tool run), or execis called but the spawn failed / output got lost, and the real reason is in the gateway logs.
Quick proof (takes 1 minute)
On the gateway host, run:
openclaw logs --follow
Then in Discord ask the agent to run something that must print output, e.g.:
cmd.exe /c echo HELLO
- or
powershell -NoProfile -Command "echo HELLO"
If exec still βreturns no outputβ, copy/paste the log lines that appear right after that message (look for tool=exec, spawn, ENOENT, SYSTEM_RUN_DENIED, etc.).
If you donβt want to live-follow logs
Grab the last exec-related lines from the file log:
Select-String -Path \tmp\openclaw\openclaw-2026-02-16.log `
-Pattern "tool=exec|exec\b|spawn|ENOENT|SYSTEM_RUN_DENIED" -Context 2,6 |
Select-Object -Last 80
Paste that output here.
Once we see whether the gateway is actually receiving an exec tool call (and whether it errors), we can say definitively if itβs a model/tool-calling issue vs a gateway/runtime issue.
10:57:02 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool start: runId=a77f58e1-1ce4-4870-aa3a-085787448938 tool=browser toolCallId=call_function_mt3j8ovgpt7k_1
10:57:02 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool end: runId=a77f58e1-1ce4-4870-aa3a-085787448938 tool=browser toolCallId=call_function_mt3j8ovgpt7k_1
Log tail truncated (increase --max-bytes).
10:57:07 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool start: runId=a77f58e1-1ce4-4870-aa3a-085787448938 tool=browser toolCallId=call_function_8wonldwkiy3g_1
10:57:07 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool end: runId=a77f58e1-1ce4-4870-aa3a-085787448938 tool=browser toolCallId=call_function_8wonldwkiy3g_1
10:57:12 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool start: runId=a77f58e1-1ce4-4870-aa3a-085787448938 tool=browser toolCallId=call_function_khas702zc5d0_1
10:57:12 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool end: runId=a77f58e1-1ce4-4870-aa3a-085787448938 tool=browser toolCallId=call_function_khas702zc5d0_1
10:57:16 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool start: runId=a77f58e1-1ce4-4870-aa3a-085787448938 tool=browser toolCallId=call_function_qjto93ob1knb_1
10:57:16 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool end: runId=a77f58e1-1ce4-4870-aa3a-085787448938 tool=browser toolCallId=call_function_qjto93ob1knb_1
10:57:37 debug cron {"module":"cron","storePath":"C:\Users\archo\.openclaw\cron\jobs.json"} {"nextAt":1771239600000,"delayMs":60000,"clamped":true} cron: timer armed
10:58:22 info discord-auto-reply {"module":"discord-auto-reply"} {"channelId":"979424156217147412","reason":"no-mention"} discord: skipping guild message
10:58:25 info gateway/ws {"subsystem":"gateway/ws"} β res β logs.tail 86ms conn=48acaadfβ¦6305 id=66199d01β¦2c48
10:58:38 debug cron {"module":"cron","storePath":"C:\Users\archo\.openclaw\cron\jobs.json"} {"nextAt":1771239600000,"delayMs":60000,"clamped":true} cron: timer armed
10:58:39 debug diagnostic {"subsystem":"diagnostic"} lane enqueue: lane=session:agent:main:discord:channel:979424156217147412 queueSize=1
10:58:39 debug diagnostic {"subsystem":"diagnostic"} lane dequeue: lane=session:agent:main:discord:channel:979424156217147412 waitMs=4 queueSize=0
10:58:39 debug diagnostic {"subsystem":"diagnostic"} lane enqueue: lane=main queueSize=2
10:58:39 debug diagnostic {"subsystem":"diagnostic"} lane dequeue: lane=main waitMs=5 queueSize=0
10:58:39 debug agent/embedded {"subsystem":"agent/embedded"} embedded run start: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 sessionId=cb016874-7b32-4b43-b42a-dfe637457cba provider=ollama model=minimax-m2.5:cloud thinking=off messageChannel=discord
10:58:39 debug diagnostic {"subsystem":"diagnostic"} run registered: sessionId=cb016874-7b32-4b43-b42a-dfe637457cba totalActive=2
10:58:39 debug agent/embedded {"subsystem":"agent/embedded"} embedded run prompt start: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 sessionId=cb016874-7b32-4b43-b42a-dfe637457cba
10:58:39 debug agent/embedded {"subsystem":"agent/embedded"} embedded run agent start: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5
10:58:43 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool start: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 tool=exec toolCallId=call_function_lobzf4qwyazj_1
10:58:43 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool end: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 tool=exec toolCallId=call_function_lobzf4qwyazj_1
10:58:46 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool start: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 tool=exec toolCallId=call_function_tjz0b3il4mbu_1
10:58:46 debug agent/embedded {"subsystem":"agent/embedded"} embedded run tool end: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 tool=exec toolCallId=call_function_tjz0b3il4mbu_1
10:58:49 debug agent/embedded {"subsystem":"agent/embedded"} embedded run agent end: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 isError=false
1
0:58:49 debug agent/embedded {"subsystem":"agent/embedded"} embedded run prompt end: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 sessionId=cb016874-7b32-4b43-b42a-dfe637457cba durationMs=9697
10:58:49 debug diagnostic {"subsystem":"diagnostic"} run cleared: sessionId=cb016874-7b32-4b43-b42a-dfe637457cba totalActive=1
10:58:49 debug agent/embedded {"subsystem":"agent/embedded"} embedded run done: runId=0c30cf01-bd47-4b70-b33c-c031ed0041d5 sessionId=cb016874-7b32-4b43-b42a-dfe637457cba durationMs=9840 aborted=false
10:58:49 debug diagnostic {"subsystem":"diagnostic"} lane task done: lane=main durationMs=9844 active=1 queued=0
10:58:49 debug diagnostic {"subsystem":"diagnostic"} lane task done: lane=session:agent:main:discord:channel:979424156217147412 durationMs=9857 active=0 queued=0
10:59:38 debug cron {"module":"cron","storePath":"C:\Users\archo\.openclaw\cron\jobs.json"} {"nextAt":1771239600000,"delayMs":21971,"clamped":false} cron: timer armed
That log snippet is not exec at all β it shows the agent calling the browser tool:
embedded run tool start β¦ tool=browser β¦
So right now we donβt yet have evidence that an exec tool call is happening, which is exactly how you can end up with βexec returns no outputβ: the model is saying it canβt / blaming βdev issuesβ, but it never actually emits an exec tool call.
Step 1: force a tiny exec that must print output
In Discord, ask the bot exactly:
Use the exec tool (not browser). Run:
cmd.exe /c echo HELLO_EXECand paste stdout+stderr.
That should produce unmistakable output.
Step 2: confirm in logs whether exec was actually called
On the gateway host, run one of these and paste the result:
A) Live tail
openclaw logs --follow
Then run the Discord message above, then copy the log lines around it.
B) Quick grep in the file log (often easiest on Windows)
Select-String -Path \tmp\openclaw\openclaw-2026-02-16.log `
-Pattern "tool=exec|\"tool\":\"exec\"|exec tool|spawn|ENOENT|SYSTEM_RUN_DENIED" `
-Context 2,8 | Select-Object -Last 120
How to interpret what youβll see
- No
tool=execlines at all β not a gateway bug; itβs model/tool-calling reliability (itβs choosing browser or just not calling tools). Workaround: switch to a more tool-reliable model/provider (ask in #models for the current best choice). tool=execshows up + an error β paste the error block; weβll fix the actual runtime issue (missing binary, permissions, etc.).tool=execshows up + stdout contains HELLO_EXEC, but Discord reply is blank β then itβs a response/rendering/routing issue, and the logs will usually show why.
Paste the grep output (or the live tail around the attempt) and we can pin it down immediately.
Your logs actually show the opposite of βexec is brokenβ:
10:58:43 β¦ tool=exec β¦
10:58:46 β¦ tool=exec β¦
β¦ isError=false
So the Gateway is receiving and running exec tool calls. The problem is either:
- the command really produced empty stdout/stderr, or
- the tool result isnβt making it into the Discord reply (mention-gating / reply suppression / formatting).
Also, this line is a huge clue:
discord: skipping guild message β¦ reason="no-mention"
If your message didnβt mention the bot, OpenClaw will often not reply at all in guild channels by default (it may still store context).
Quick, definitive test
In the Discord channel/thread, send a message that mentions the bot and asks for a command that must print output:
Run exactly: cmd.exe /c echo HELLO_EXEC
If you donβt mention it, it may get skipped and look like βno outputβ.
Then extract the actual exec result from the file log
Since openclaw logs is truncating, search the local file log for the exec call IDs you already have:
Select-String -Path \tmp\openclaw\openclaw-2026-02-16.log `
-Pattern "0c30cf01-bd47-4b70-b33c-c031ed0041d5|call_function_lobzf4qwyazj_1|call_function_tjz0b3il4mbu_1" `
-Context 0,20
Paste that output here. That will tell us whether stdout/stderr is empty (true βno outputβ) vs Discord just not sending it back.
If the echo HELLO_EXEC stdout is empty in the log, that would be a real Windows exec capture bug and worth escalatingβbut first we need that snippet.
Bug Report Summary
Issue: Exec tool returns no output on Windows
Environment:
OS: Windows_NT 10.0.26200 (x64)
Node: v24.13.1
OpenClaw: 2026.2.14
Reproduction:
Send any exec command via webchat (e.g., echo "test" or powershell -Command "dir")
Tool runs and completes successfully (~100-200ms)
Response returns empty: (no output)
Log Evidence:
Gateway logs show exec tool start/end events
No stdout/stderr content captured between start/end
Bug affects ALL exec commands, all shells (PowerShell, cmd, echo)
Root Cause (Suspected):
Windows child_process spawn not capturing stdout/stderr correctly β likely a Node.js Windows-specific issue with how the exec subsystem pipes output.
Impact:
Blocks all shell command execution on Windows
Workaround: Use read/write/gateway tools instead
Log Evidence:
From C:\tmp\openclaw\openclaw-2026-02-16.log (lines ~5610-5620):
{"subsystem":"agent/embedded","1":"embedded run tool start: runId=7234d5ee-908b-4c5e-bb71-352f7f70a6cf tool=exec toolCallId=call_function_4so4mywj51co_1","_meta":{...},"time":"2026-02-16T11:41:56.720Z"}
{"subsystem":"agent/embedded","1":"embedded run tool end: runId=7234d5ee-908b-4c5e-bb71-352f7f70a6cf tool=exec toolCallId=call_function_4so4mywj51co_1","_meta":{...},"time":"2026-02-16T11:41:56.906Z"}
Note: ~186ms execution time, but no stdout/stderr content between start and end entries.
Earlier example (lines ~5036-5048):
{"subsystem":"agent/embedded","1":"embedded run tool start: runId=f701a225-ae81-49d9-969f-4690629c064e tool=exec toolCallId=call_function_7jxq5ara2is3_1","_meta":{...},"time":"2026-02-16T10:51:23.814Z"}
{"subsystem":"agent/embedded","1":"embedded run tool end: runId=f701a225-ae81-49d9-969f-4690629c064e tool=exec toolCallId=call_function_7jxq5ara2is3_1","_meta":{...},"time":"2026-02-16T10:51:23.939Z"}
Same pattern β tool completes in ~125ms with zero output captured.13
Those log lines prove the Gateway is executing the exec tool (tool=exec start/end, isError=false). But the start/end debug lines donβt include stdout/stderr, so we still need one more datapoint: did the exec runner actually capture output, and it just wasnβt sent to Discord β or was stdout/stderr genuinely empty?
1) First: make sure youβre actually triggering replies in Discord
Your logs also show:
discord: skipping guild message β¦ reason="no-mention"
So in that channel/thread, mention the bot (or reply to one of its messages) when you ask it to run a command. Otherwise it may βdo workβ in the background / store context but not reply, which looks like βno outputβ.
2) Capture the exec result (stdout/stderr) β turn logs up to trace for one repro
On the gateway host:
openclaw config set logging.level trace
openclaw gateway restart
Now reproduce with something guaranteed to print:
cmd.exe /c echo HELLO_EXEC
Then pull the surrounding log lines by toolCallId (replace with your call id):
Select-String -Path \tmp\openclaw\openclaw-2026-02-16.log `
-Pattern "call_function_4so4mywj51co_1|tool=exec|stdout|stderr|exitCode" `
-Context 0,30
If stdout/stderr are truly empty in the trace logs for echo HELLO_EXEC, thatβs a real Windows exec capture bug.
3) If it is a real Windows bug: best workaround right now
Native Windows is the least-tested environment (WSL2 is the recommended path). The most reliable workaround is to run the Gateway inside WSL2 (Ubuntu) so exec is Linux-native. Docs: https://docs.openclaw.ai/platforms/windows