#Fix the config

187 messages · Page 1 of 1 (latest)

flat cliff
#

I am getting an error saying that - browser.profiles.openclaw.color: Invalid input: expected string, received undefined
When i attempt to restart the openclaw gateway. how do i fix it?
The error is:
PS C:\Windows\system32> openclaw gateway restart
Invalid config at F:\openclaw-state\openclaw.json:\n- browser.profiles.openclaw.color: Invalid input: expected string, received undefined

🦞 OpenClaw 2026.4.9 (0512059) — WhatsApp automation without the "please accept our new privacy policy".

Config invalid
File: F:\openclaw-state\openclaw.json
Problem:

  • browser.profiles.openclaw.color: Invalid input: expected string, received undefined

Run: openclaw doctor --fix
Gateway aborted: config is invalid.
browser.profiles.openclaw.color: Invalid input: expected string, received undefined
Fix the config and retry, or run "openclaw doctor" to repair.

I have already ran 'openclaw doctor --fix' but i am getting the following error:
Error: Failed to parse cron store at F:\openclaw-state\cron\jobs.json: SyntaxError: JSON5: invalid character '\n' at 21:0

oblique bridgeBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> ✅ Mark Solution

storm pawnBOT
strong meadowBOT
#

browser.profiles.openclaw.color is required now, and yours is missing or set to undefined.

Fix F:\openclaw-state\openclaw.json, find the browser.profiles.openclaw entry, and make it look like this:

browser: {
  profiles: {
    openclaw: {
      cdpPort: 18800,
      color: "#FF4500"
    }
  }
}

If you already have color: there, replace whatever is after it with a real hex string like "#FF4500".

#

Why doctor --fix failed: it also tried to read your cron store, and F:\openclaw-state\cron\jobs.json is malformed around line 21. That file supports JSON5, so comments/trailing commas are fine, but something in there is still syntactically broken, usually a missing comma/bracket or a half-written value.

Fastest path:

  1. Fix openclaw.json first
  2. Open F:\openclaw-state\cron\jobs.json and inspect lines ~15-25
  3. Fix the syntax there, or if you do not care about existing cron jobs, move that file aside as a backup and rerun doctor
  4. Run:
    openclaw doctor --fix
    openclaw gateway restart
    

Docs:

#

If you paste:

  • the browser: section from openclaw.json
  • lines 1-30 of cron\jobs.json

I can point to the exact broken line. Glad that helped if this fixes it, please right-click the solution message → Apps → ✅ Mark Solution, so Answer Overflow can index it.

flat cliff
#

i just have the following error from 'openclaw doctor --fix':

Restarted Scheduled Task: OpenClaw Gateway
Invalid config:

  • browser.profiles.openclaw: Profile must set cdpPort or cdpUrl

  • Found 2 session lock files. |
    | - F:\openclaw-state\agents\headhunter\sessions\9f0f49f8-6dfe-4669-96f6-efd8d4e29ce1.jsonl.lock |
    | pid=6028 (dead) age=15m3s stale=yes (dead-pid) [removed] |
    | - F:\openclaw-state\agents\main\sessions\085d60d1-123c-4028-b39e-047e3b850fa3.jsonl.lock |
    | pid=6028 (dead) age=8m28s stale=yes (dead-pid) [removed] |
    | - Removed 2 stale session lock files.

Config invalid; doctor will run with best-effort config.

strong meadowBOT
#

Nice, that means the first error is fixed. Now it’s complaining that the openclaw browser profile is incomplete.

Right now your profile is probably effectively this:

openclaw: {
  color: "#FF4500"
}

It also needs either cdpPort or cdpUrl.

Most likely fix:

browser: {
#
  defaultProfile: "openclaw",
  profiles: {
    openclaw: {
      cdpPort: 18800,
      color: "#FF4500"
    }
  }
}

If you attach to an already-running browser instead, use cdpUrl instead of cdpPort, for example:

openclaw: {
  cdpUrl: "http://127.0.0.1:9222",
#
  color: "#FF4500"
}

So your options are:

  1. You want browser support
    Add cdpPort: 18800 to browser.profiles.openclaw
    → this is the one I’d try first.

  2. You do not use browser at all
    Remove that openclaw profile, and if browser.defaultProfile is "openclaw", change/remove that too, or set browser.enabled: false.

The stale .lock files being removed is fine, that part is not the problem.

Docs/examples:

flat cliff
#

"browser": {
"profiles": {
"openclaw": {
"color": "#FF4500"
},
"linkedin": {
"driver": "existing-session",
"attachOnly": true,
"userDataDir": "C:\Users\glysh\AppData\Local\BraveSoftware\Brave-Browser\User Data",
"color": "#FF4500"
}
}
},

strong meadowBOT
#

Yep, that snippet shows the problem exactly.

Your openclaw profile only has:

"openclaw": {
  "color": "#FF4500"
}

That profile must also have cdpPort or cdpUrl, unless it’s an existing-session profile.

Easiest fix, if you only want the linkedin profile

Remove openclaw, and set defaultProfile to linkedin if you want that one as default:

#
"browser": {
  "defaultProfile": "linkedin",
  "profiles": {
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
  }
}

If you want to keep openclaw

Add a port to it:

#
"browser": {
  "profiles": {
    "openclaw": {
      "cdpPort": 18800,
      "color": "#FF4500"
    },
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
  }
}
#

Then run:

openclaw doctor --fix
openclaw gateway restart

If browser.defaultProfile is set somewhere else to "openclaw", change that too if you remove the openclaw profile.

If you paste the full browser block including any defaultProfile, I can give you the exact final version to drop in.

flat cliff
#

why am i seeing the below error in the gateway:

00:47:49 [tools] browser failed: Error: Chrome CDP websocket for profile "openclaw" is not reachable after start. raw_params={"action":"start"}
00:47:52 [ws] ⇄ res ✓ sessions.list 170ms conn=e0c4f6cf…5d6f id=808badad…f995
00:47:52 [ws] ⇄ res ✓ sessions.list 186ms conn=4e8477eb…9bba id=79067a9b…df02
00:47:55 [tools] browser failed: timed out. Restart the OpenClaw gateway (OpenClaw.app menubar, or openclaw gateway). Do NOT retry the browser tool — it will keep failing. Use an alternative approach or inform the user that the browser is currently unavailable. raw_params={"action":"profiles"}

strong meadowBOT
#

That’s a different error now, it means the config is valid enough to load, but the managed openclaw browser profile cannot actually start.

Chrome CDP websocket for profile "openclaw" is not reachable after start

means OpenClaw tried to launch the openclaw profile, then could not connect to its DevTools socket.

Given your config, the most likely reason is:

  1. something is still using openclaw as the default profile, and
  2. you actually want to use your linkedin Brave profile instead.

What I’d do first

If linkedin is the one you want, make it the default and stop using openclaw:

#
"browser": {
  "defaultProfile": "linkedin",
  "profiles": {
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
  }
}

Then restart the gateway.

Why this happens

#

openclaw is a managed browser profile. It tries to launch a Chromium browser itself. That fails if:

  • no usable Chrome/Brave/Edge executable is found
  • browser.executablePath is wrong or missing when auto-detect fails
  • the browser launches but CDP never comes up
  • you meant to use an existing-session profile instead

If you actually want to keep openclaw

Then keep it, but point OpenClaw at a real browser binary on Windows, for example Brave:

"browser": {
  "executablePath": "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe",
  "defaultProfile": "openclaw",
  "profiles": {
#
    "openclaw": {
      "cdpPort": 18800,
      "color": "#FF4500"
    },
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
  }
}

Important note for linkedin

flat cliff
#

why is the we socket not reachable?
thing is, i would like to have the profile "openclaw" because that way I can have an isolated browser that is purely handling my cronjob requests.

strong meadowBOT
#

In this case, “websocket not reachable” usually means OpenClaw launched the managed browser process, but the DevTools endpoint never came up on the expected CDP port, so there was nothing for OpenClaw to attach to.

For the isolated openclaw profile, the common causes are:

  1. wrong browser binary chosen

    • auto-detect picked the wrong thing, or a non-Chromium default browser
  2. CDP port conflict

    • something else is already using 18800
  3. browser starts, then exits immediately

    • Windows policy / security software / broken browser launch

If you want to keep the isolated managed openclaw profile, I’d make it explicit instead of relying on auto-detect:

#
"browser": {
  "enabled": true,
  "defaultProfile": "openclaw",
  "executablePath": "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe",
  "profiles": {
    "openclaw": {
      "cdpPort": 18800,
      "color": "#FF4500"
    },
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
#
  }
}

Then restart the gateway.

If it still fails, the next thing I’d suspect is port 18800 is already taken. In that case, change it to something else, for example:

"openclaw": {
  "cdpPort": 18810,
  "color": "#FF4500"
}

Then restart again.

#

So short version: the websocket is not reachable because the managed browser for openclaw is not exposing CDP successfully, not because WebSockets are globally broken.

If you want, I can help you do a tight 2-step check next:

  1. verify the Brave path
  2. verify whether port 18800 is already in use

Docs: https://docs.openclaw.ai/tools/browser

flat cliff
#

PS C:\Windows\system32> openclaw gateway restart
Failed to read config at F:\openclaw-state\openclaw.json SyntaxError: JSON5: invalid end of input at 390:1
at syntaxError (F:\npm-global\node_modules\openclaw\node_modules\json5\lib\parse.js:1110:17)
at invalidEOF (F:\npm-global\node_modules\openclaw\node_modules\json5\lib\parse.js:1059:12)
at Object.afterPropertyValue (F:\npm-global\node_modules\openclaw\node_modules\json5\lib\parse.js:915:19)
at Object.parse (F:\npm-global\node_modules\openclaw\node_modules\json5\lib\parse.js:32:32)
at Object.loadConfig (file:///F:/npm-global/node_modules/openclaw/dist/io-CNTgoVgA.js:18660:24)
at readCliBannerTaglineMode (file:///F:/npm-global/node_modules/openclaw/dist/banner-DRvsS64z.js:13:51)
at resolveTaglineMode (file:///F:/npm-global/node_modules/openclaw/dist/banner-DRvsS64z.js:291:9)
at formatCliBannerLine (file:///F:/npm-global/node_modules/openclaw/dist/banner-DRvsS64z.js:300:9)
at emitCliBanner (file:///F:/npm-global/node_modules/openclaw/dist/banner-DRvsS64z.js:328:15)
at applyCliExecutionStartupPresentation (file:///F:/npm-global/node_modules/openclaw/dist/command-execution-startup-DN83UKee.js:250:2) {
lineNumber: 390,
columnNumber: 1
}

🦞 OpenClaw 2026.4.12 (1c0672b) — One CLI to rule them all, and one more restart because you changed the port.

Config observe anomaly: F:\openclaw-state\openclaw.json (missing-meta-vs-last-good, gateway-mode-missing-vs-last-good)
Config invalid
File: F:\openclaw-state\openclaw.json
Problem:

  • <root>: JSON5 parse failed: SyntaxError: JSON5: invalid end of input at 390:1

Run: openclaw doctor --fix
Gateway aborted: config is invalid.
<root>: JSON5 parse failed: SyntaxError: JSON5: invalid end of input at 390:1
Fix the config and retry, or run "openclaw doctor" to repair.

strong meadowBOT
#

This one is simpler, but annoying: your openclaw.json is now truncated / missing closing syntax.

JSON5: invalid end of input at 390:1 means the parser hit the end of the file while it was still expecting more, usually:

  • a missing }
  • a missing ]
  • or the file got cut off during editing

The extra hint:

  • missing-meta-vs-last-good
  • gateway-mode-missing-vs-last-good

strongly suggests the file is missing some top-level config at the end, not just the browser block.

Fastest recovery

#

Look for the automatic backups in the same folder:

  • F:\openclaw-state\openclaw.json.bak
  • F:\openclaw-state\openclaw.json.bak.1
  • F:\openclaw-state\openclaw.json.bak.2

You can list them with:

Get-ChildItem F:\openclaw-state\openclaw.json.bak* | Sort-Object LastWriteTime -Descending

If one looks recent/good, restore it over openclaw.json, then re-apply just the browser change.

If you want to inspect manually

Open the bottom of F:\openclaw-state\openclaw.json and check whether the file ends with the right closing braces.

#

A valid config should usually end something like:

  }
}

If your last edit inserted the browser block and accidentally removed a closing } later, this exact error happens.

Best next step

Please paste:

  1. the last 40 lines of F:\openclaw-state\openclaw.json
  2. or the output of the backup file list above

and I can tell you exactly whether to restore a backup or add the missing closing braces.

flat cliff
#

still getting this error after i changed the config and restart:
e8affd1ba state=processing age=125s queueDepth=0
01:33:37 [tools] browser failed: Error: Chrome CDP websocket for profile "openclaw" is not reachable after start. raw_params={"action":"start","profile":"openclaw"}
01:33:39 [ws] ⇄ res ✓ sessions.list 154ms conn=214b2ba3…a073 id=ad05c26e…ff18
01:33:39 [ws] ⇄ res ✓ sessions.list 186ms conn=6d70fae7…1508 id=d9e40ee7…fef2
01:33:40 [browser/chrome] 🦞 openclaw browser started (custom) profile "openclaw" on 127.0.0.1:18800 (pid 2428)
01:33:46 [ws] ⇄ res ✓ sessions.list 732ms conn=214b2ba3…a073 id=48fa2add…ce1e
01:33:46 [ws] ⇄ res ✓ sessions.list 568ms conn=6d70fae7…1508 id=4dbefab5…2f8d
01:33:46 [sessions/store] session maintenance would evict active session; skipping enforcement
01:33:46 [ws] ⇄ res ✓ node.list 85ms conn=214b2ba3…a073 id=cbeb2c35…10e5
01:33:48 [ws] ⇄ res ✓ sessions.list 669ms conn=214b2ba3…a073 id=95a134e4…b96b
01:33:48 [tools] browser failed: Error: Chrome CDP websocket for profile "openclaw" is not reachable after start. raw_params={"action":"start"}
01:33:49 [ws] ⇄ res ✓ ses

strong meadowBOT
#

The new log is actually useful.

This line:

[browser/chrome] openclaw browser started (custom) profile "openclaw" on 127.0.0.1:18800

means the browser process did launch.

But this line:

Chrome CDP websocket for profile "openclaw" is not reachable after start

means the DevTools endpoint never became reachable, so OpenClaw could not attach to it.

#

So the problem is not “browser won’t start”, it’s “browser starts, but CDP never comes up”.

Most likely causes

  1. Port 18800 conflict
  2. Browser binary launches, but does not expose CDP correctly
  3. Browser opens and exits/crashes immediately

Best next check

Temporarily make the managed browser easier to debug:

"browser": {
  "enabled": true,
  "defaultProfile": "openclaw",
#
  "executablePath": "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe",
  "headless": false,
  "profiles": {
    "openclaw": {
      "cdpPort": 18810,
      "color": "#FF4500"
    },
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
  }
}
#

A few reasons I changed that:

  • 18810 avoids a possible 18800 conflict
  • headless: false lets you actually see whether the isolated browser opens and stays open
  • explicit executablePath removes auto-detect ambiguity

Then restart the gateway.

What to look for

After restart:

  • does a separate Brave window appear?
  • does it stay open?
  • while it’s open, does this work in a browser?
#
http://127.0.0.1:18810/json/version

If that URL does not load, then Brave is not exposing CDP on that port, which explains the websocket error exactly.

If it does load, then we’ve narrowed it down a lot and I can help with the next step.

And yes, you’re thinking about this right: keeping openclaw as the isolated browser for cron jobs is the right profile choice.

Docs: https://docs.openclaw.ai/tools/browser

flat cliff
#

openclaw returned the following issues:

  1. Browser Profile Failing (critical for job scrapers)

• Chrome CDP websocket for profile "openclaw" is NOT reachable
• Tried to start browser → timed out → never recovers
• This breaks the job scraping since it relies on browser automation
• Error: Chrome CDP websocket for profile "openclaw" is not reachable after start

  1. MiniMax API Token Returning 401 (auth failure)

• Token became unusable around 9:36 AM today
• Error: HTTP 401 authentication_error: token is unusable
• The system failed over to MiniMax-M2.7-highspeed as a fallback
• This caused sub-agent runs to stall/fail

  1. Gateway Instability

• Port 18789 shows as "already in use" (pid 5136 is the gateway itself — seems like a double-start or ghost process)
• Subagent announce failures: gateway timeout after 10000ms
• chat.history unavailable during gateway startup — the gateway was restarting when subagents tried to report back

  1. Module Not Found (cleanup error)

• Subagent registry file missing: subagent-registry.runtime.js
• This caused the earlier spawned sub-agent to fail to clean up properly

Summary: The gateway is running but unstable. The browser automation is broken (Chrome can't start), and the MiniMax token had a brief auth hiccup. Both issues together killed the job scraper runs.

strong meadowBOT
#

That summary is mostly right, but I’d split it into root causes vs downstream noise.

Root causes

1. Browser is still the main blocker

This is the real scraper-breaker.

You now have evidence that:

  • the browser process starts
  • but CDP on the managed openclaw profile never becomes reachable

So the issue is specifically:

  • bad browser launch target
  • CDP port conflict
  • or the launched browser exits / never exposes DevTools
#

I’d keep focusing there first.

2. MiniMax 401 is a separate auth problem

token is unusable is not related to the browser issue.

That usually means the MiniMax token/oauth session is bad, expired, or revoked. If it keeps happening, refresh/reconfigure MiniMax auth and verify with:

openclaw models status

Docs: https://docs.openclaw.ai/providers/minimax

Probably downstream symptoms, not primary causes

3. Port 18789 already in use

If PID 5136 is the gateway itself, that is usually not a ghost process. It just means something tried to start a second gateway while the first one was already bound.

#

So I would not treat that as the root issue.

4. Subagent announce failures / chat.history unavailable

Those are very likely fallout from the gateway restarting while subagents were trying to report back.

5. subagent-registry.runtime.js missing

That one worries me a bit more. If it happens again on 2026.4.12, that smells like a bad/incomplete install rather than a config issue.

If it repeats, I’d do a clean reinstall of the CLI + service, not keep chasing subagent symptoms.

My recommended order

  1. Fix the managed openclaw browser profile first
    • explicit browser.executablePath
    • try a different cdpPort like 18810
    • set headless: false temporarily
    • check whether http://127.0.0.1:18810/json/version responds
#
  1. Then fix MiniMax auth

    • refresh token / reconfigure provider
    • verify with openclaw models status
  2. If subagent-registry.runtime.js comes back, reinstall OpenClaw cleanly

    • I’d use pnpm, not keep layering restarts on top of a possibly broken install

So short version: I would not debug all four at once. The browser CDP failure is the thing killing the job scraper right now.

If you want, paste your current full browser block again and I’ll sanity-check it one more time before the next restart.

flat cliff
#

let's tackle one by one, where cna i find the current full browser block

strong meadowBOT
#

Yep, one by one is the right move.

Your current browser block is in:

F:\openclaw-state\openclaw.json

Easiest way

Open that file in an editor, then search for:

"browser":

Copy from:

#
"browser": {

down to the matching closing } for that section.

Quick Windows options

Notepad

notepad F:\openclaw-state\openclaw.json

Then search for browser.

VS Code

#
code F:\openclaw-state\openclaw.json

Then search for "browser": {.

What to paste here

Please paste:

  • the line with "browser": {
  • everything under it
  • until the next top-level section starts

Usually that’s about 20 to 60 lines.

If you want, you can also just paste the chunk around it and I’ll tell you exactly where the browser block starts/stops.

flat cliff
#

"browser": {
"enabled": true,
"defaultProfile": "openclaw",
"executablePath": "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe",
"headless": false,
"profiles": {
"openclaw": {
"cdpPort": 18810,
"color": "#FF4500"
},
"linkedin": {
"driver": "existing-session",
"attachOnly": true,
"userDataDir": "C:\Users\glysh\AppData\Local\BraveSoftware\Brave-Browser\User Data",
"color": "#FF4500"
}}},

strong meadowBOT
#

That browser block looks basically fine to me. I do not see an obvious schema/config problem there anymore.

So this has moved from config error to runtime browser/CDP error.

What this means

Your config now says:

  • use the managed isolated openclaw profile
  • launch Brave explicitly
  • use CDP port 18810
  • run non-headless so we can see it

That’s a good debug setup.

Next check, one step only

#

After restarting the gateway, check these two things:

  1. Does a separate Brave window appear for the openclaw profile?
  2. While it is open, does this respond?
    http://127.0.0.1:18810/json/version
    

If that URL does not respond, then the problem is exactly this:

Brave is launching, but it is not exposing DevTools/CDP on 18810

and that is why OpenClaw says the websocket is unreachable.

So for the next reply, send me just one of these:

  • “a Brave window opens” / “no Brave window opens”
#
  • and whether http://127.0.0.1:18810/json/version loads or fails

That will tell us whether the next move is:

  • browser launch/path
  • CDP port conflict
  • or Brave refusing the debugging endpoint

We’re close, this is the right level now.

flat cliff
#

a browser opened but then immediately closed right after.
in the gateway, i see:
10:12:45 [tools] browser failed: Error: Chrome CDP websocket for profile "openclaw" is not reachable after start. raw_params={"action":"start","profile":"openclaw"}

strong meadowBOT
#

Good, that narrows it down a lot.

If the window opens and then immediately closes, the next likely cause is:

  • Brave is failing very early
  • or the managed profile launch args/profile dir are the thing causing it

Next step, one test only

Run Brave manually with a clean temporary profile and a debug port:

& "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" `
  --remote-debugging-port=18810 `
  --user-data-dir="$env:TEMP\openclaw-brave-test" `
  about:blank
#

Then check:

http://127.0.0.1:18810/json/version

What this tells us

  • If Brave stays open and /json/version works, then Brave itself is fine, and the next suspect is OpenClaw’s managed browser profile/data dir
  • If Brave also closes immediately, then this is a Brave / Windows / policy / launch-flag problem, not really an OpenClaw config problem anymore

So for the next reply, just tell me which happened:

  1. manual Brave stays open + /json/version works
  2. manual Brave closes too
  3. manual Brave stays open but /json/version fails
#

That will tell us the exact next move.

flat cliff
#

where do i run that prompt?

strong meadowBOT
#

Run it in Windows PowerShell, on the same Windows machine where Brave is installed.

The easiest place is the same kind of window where you ran:

openclaw gateway restart

So:

  • open PowerShell or Windows Terminal
  • paste the command there
  • do not run it in the browser address bar

If multiline is annoying, here it is as a single line:

#
& "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --remote-debugging-port=18810 --user-data-dir="$env:TEMP\openclaw-brave-test" about:blank

Then, after Brave opens, check this in your browser:

http://127.0.0.1:18810/json/version

Send me what happens after that.

flat cliff
#

{
"Browser": "Chrome/147.0.7727.56",
"Protocol-Version": "1.3",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"V8-Version": "14.7.173.16",
"WebKit-Version": "537.36 (@d491a927d068805831350ec9d7e5afda454e83c)",
"webSocketDebuggerUrl": "ws://127.0.0.1:18810/devtools/browser/80380811-a0c9-490d-85f5-4cb5224e0da2"
}

strong meadowBOT
#

Perfect, that tells us a lot.

Since manual Brave + clean temp profile works, the browser binary and CDP port are fine.

So the next suspect is OpenClaw’s managed openclaw profile state/data dir, not Brave itself.

Next step

Use the built-in profile reset for the isolated managed browser:

openclaw browser --browser-profile openclaw stop
openclaw browser --browser-profile openclaw reset-profile
openclaw gateway restart

Why this is the right next move:

#
  • your manual test proved Brave can expose CDP on 18810
  • OpenClaw’s managed profile is likely carrying bad/stale state
  • reset-profile is the documented safe way to clear that managed profile

Docs: https://docs.openclaw.ai/cli/browser

After that, try the scraper/browser flow again and tell me one thing only:

  • does the openclaw browser now stay open, or does it still open and immediately close?

If reset-profile itself errors, paste that exact output.

flat cliff
#

still crashing, and seeing the below error in gateway:

10:38:36 [tools] browser failed: Error: Chrome CDP websocket for profile "openclaw" is not reachable after start. raw_params={"action":"start","profile":"openclaw"}

strong meadowBOT
#

Okay, that means:

  • Brave + CDP work
  • resetting the OpenClaw profile did not fix it

So the biggest difference left is likely the profile data directory location.

Your working manual test used %TEMP% on C:, but OpenClaw’s managed profile lives under your OpenClaw state on F:\openclaw-state.

Next test, one thing only

Run Brave manually again, but this time use a fresh folder on F: as the user-data-dir:

& "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --remote-debugging-port=18810 --user-data-dir="F:\openclaw-browser-test" about:blank
#

Then check:

http://127.0.0.1:18810/json/version

Why this matters

If this also crashes/closes, then the problem is very likely the F: drive / profile-dir location, not OpenClaw’s browser logic itself.

If this stays open and works, then we know the remaining issue is something more specific to the managed OpenClaw profile setup.

So just send me which happened:

  1. stays open + /json/version works
  2. closes/crashes
  3. stays open but /json/version fails
#

That’ll tell us the next exact move.

flat cliff
#

closes and crashes

strong meadowBOT
#

Good, we found the real problem.

If Brave works with a temp profile on C:, but crashes when the user-data-dir is on F:, then the blocker is very likely:

Chromium does not like your managed profile/state living on F:\openclaw-state

That’s why the managed openclaw profile keeps dying. It stores its browser data under the OpenClaw state dir, and on your machine that path is the bad part.

Recommended fix

Move your OpenClaw state + config to a local path on C:, then restart/reinstall the gateway so it uses that new state dir.

Docs for the env vars:
https://docs.openclaw.ai/help/environment

Practical path

#

I’d use something like:

C:\openclaw-state

Safe sequence

First make a copy of your current state:

Copy-Item "F:\openclaw-state" "C:\openclaw-state" -Recurse

Then in PowerShell set the new paths:

#
$env:OPENCLAW_STATE_DIR = "C:\openclaw-state"
$env:OPENCLAW_CONFIG_PATH = "C:\openclaw-state\openclaw.json"

Then reinstall the gateway task from that same shell so it picks up the new state/config location:

openclaw gateway uninstall
openclaw gateway install --force
openclaw gateway start

After that

Keep your browser block the same for now, and leave:

#
"headless": false

just long enough to verify the isolated openclaw browser stays open.

Once it works, you can flip it back to true for cron use.

If you want, paste the output from those 3 gateway commands after moving to C:\openclaw-state, and I’ll sanity-check the next step.

flat cliff
#

so you are asking me to move everything from F drive to C drive, but i do not want my openclaw stuff to be on C drive because of disk size matter. I would like to keep my openclaw stuff under F drive, what's the workaround?

strong meadowBOT
#

Yep, you do not need to move all of OpenClaw to C:.

The clean workaround is:

keep OpenClaw state on F:, but put only the managed browser profile directory on a local NTFS path that Chromium likes.

That could be:

  • C:\openclaw-browser\openclaw
  • or any other local NTFS volume/folder you have, it does not have to be C specifically

Best workaround: junction just the browser profile dir

OpenClaw likely wants the managed profile under:

#
F:\openclaw-state\browser\openclaw

You can redirect just that folder to a working local path.

Suggested flow

  1. Stop the gateway
  2. Create a small local target folder
  3. Make F:\openclaw-state\browser\openclaw a junction to that target
  4. Reset the profile again
  5. Start the gateway

Example

#
openclaw gateway stop
New-Item -ItemType Directory -Force -Path "C:\openclaw-browser\openclaw"
Rename-Item "F:\openclaw-state\browser\openclaw" "openclaw.old" -ErrorAction SilentlyContinue
New-Item -ItemType Junction -Path "F:\openclaw-state\browser\openclaw" -Target "C:\openclaw-browser\openclaw"
openclaw browser --browser-profile openclaw reset-profile
openclaw gateway start

Why this works

  • OpenClaw still lives on F:
  • only the Chromium profile data is redirected
  • Chromium gets a local profile path that does not crash

Important note

#

If F:\openclaw-state\browser\openclaw does not exist yet, skip the Rename-Item line.

If you want, I can rewrite those commands for a different target path, for example a small folder on another drive instead of C:.

flat cliff
#

ok that's done now, what should i do next?

strong meadowBOT
#

Nice. Next, verify that the managed profile works through the new junction.

Run these in PowerShell:

openclaw browser --browser-profile openclaw reset-profile
openclaw gateway restart
openclaw browser --browser-profile openclaw start

What should happen

  • the isolated openclaw browser opens
  • it stays open
  • no more CDP websocket ... not reachable after start

Then send me just one result:

#
  1. it stays open
  2. it still closes/crashes
  3. reset-profile or start returns an error

If it works, we can flip headless back to true for cron after that.

flat cliff
#

i ran the command and saw the below error in powershell, but i am testing if the CDP browser still crashes now:

PS C:\Windows\system32> openclaw browser --browser-profile openclaw reset-profile

openclaw gateway restart
openclaw browser --browser-profile openclaw start

🦞 OpenClaw 2026.4.12 (1c0672b) — Somewhere between 'hello world' and 'oh god what have I built.'

|
o
Error: gateway closed (1006 abnormal closure (no close frame)): no close reason
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: F:\openclaw-state\openclaw.json
Bind: loopback

🦞 OpenClaw 2026.4.12 (1c0672b) — Your task has been queued; your dignity has been deprecated.

Restarted Scheduled Task: OpenClaw Gateway
o
Error: gateway timeout after 30000ms
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: F:\openclaw-state\openclaw.json
Bind: loopback

strong meadowBOT
#

That error is from the gateway restarting underneath the browser commands, not necessarily from the browser itself.

So this part:

  • gateway closed (1006 abnormal closure)
  • gateway timeout after 30000ms

means the CLI lost the WebSocket while the gateway was bouncing.

Do it in 3 separate steps

Run these one at a time, and wait between them:

openclaw browser --browser-profile openclaw reset-profile
#

then:

openclaw gateway restart

then wait until this looks healthy:

openclaw gateway status

You want it to show the gateway is up again before continuing.

Then run:

#
openclaw browser --browser-profile openclaw start

Important bit

Do not start the browser immediately after restart until openclaw gateway status says it’s back.

So the next thing I need is just:

  • what openclaw gateway status says after the restart
  • and whether openclaw browser --browser-profile openclaw start still crashes once the gateway is fully back

We’re debugging the right thing, the last output was mostly timing noise from the restart.

flat cliff
#

when i reset-profile, i see the below error:

PS C:\Windows\system32> openclaw browser --browser-profile openclaw reset-profile

🦞 OpenClaw 2026.4.12 (1c0672b) — Your personal assistant, minus the passive-aggressive calendar reminders.

|
do
GatewayClientRequestError: browser.request cannot mutate persistent browser profiles

strong meadowBOT
#

Ah, got it. That means reset-profile is blocked in your current browser route, likely because it’s treating the profile as a persistent/proxied one.

That’s annoying, but we can sidestep it.

Manual reset workaround

Since you already made the junction, just reset the target folder directly.

If your junction target is:

C:\openclaw-browser\openclaw

run this in PowerShell:

#
openclaw gateway stop
Rename-Item "C:\openclaw-browser\openclaw" "openclaw.old" -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Force -Path "C:\openclaw-browser\openclaw"
openclaw gateway start
openclaw browser --browser-profile openclaw start

If you used a different target path

Do the same thing, just replace:

C:\openclaw-browser\openclaw

with whatever folder you used for the junction.

#

Why this works

That folder is the managed browser profile now, because the F: path points into it.
So renaming/recreating it is basically a manual reset-profile.

Send me one result after that:

  1. browser stays open
  2. browser still closes
  3. one of those commands errors

If it stays open, we’ve finally got the isolated openclaw browser back.

flat cliff
#

the 'C:\openclaw-browser\openclaw' path is empty right now, explain to me why is this target path needed and what's supposed to be in it?

strong meadowBOT
#

Totally fair question.

That target path is needed because we’re using a junction as a workaround:

  • OpenClaw still thinks the managed browser profile lives under F:\openclaw-state\browser\openclaw
  • but Windows silently redirects that folder to C:\openclaw-browser\openclaw

So the purpose of that target path is:

store only the Chromium/OpenClaw-managed browser profile on a local path that does not crash

Why it’s empty right now

That’s actually normal if the browser has not successfully initialized yet.

It will stay empty when:

#
  • you just reset/recreated it
  • or the browser crashes before it can finish creating its profile files

What is supposed to appear there

Once the managed browser starts successfully, that folder should begin filling with browser profile data, not normal OpenClaw app data.

Typically things like:

  • user-data\
  • Default\
  • Local State
  • cache / GPU / crashpad folders
  • temporary DevTools / lock files

So in plain English:

#
  • OpenClaw config/sessions/logs stay on F:
  • only the isolated browser profile files go into that target path
  • the folder being empty means the managed browser still hasn’t completed startup

Why we introduced it at all

Because you proved:

  • browser profile on %TEMP% / local path works
  • browser profile on F: crashes

So the target path is just the “safe place” for the browser profile to live.

If you want, next I can help you verify whether the junction itself is pointing where we expect before we do anything else.

flat cliff
#

when i restarted the gateway just now:

Restarted Scheduled Task: OpenClaw Gateway

🦞 OpenClaw 2026.4.12 (1c0672b) — I'll butter your workflow like a lobster roll: messy, delicious, effective.

|
o
Error: gateway closed (1006 abnormal closure (no close frame)): no close reason
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: F:\openclaw-state\openclaw.json
Bind: loopback

strong meadowBOT
#

That 1006 right after gateway restart is usually just the old WebSocket connection getting cut while the task restarts.

So by itself, that output does not prove the gateway is still broken.

Next step

Wait a few seconds, then run:

openclaw gateway status

That’s the real check now.

What I want to know

Please paste the result of openclaw gateway status.

#

If that looks healthy, then the next command is:

openclaw browser --browser-profile openclaw start

So right now:

  1. ignore the immediate 1006 from the restart itself
  2. run openclaw gateway status
  3. paste that output here

That’s the clean next signal.

flat cliff
#

PS C:\Windows\system32> openclaw gateway status

🦞 OpenClaw 2026.4.12 (1c0672b) — Shell yeah—I'm here to pinch the toil and leave you the glory.

|
o
Service: Scheduled Task (registered)
File logs: ~\AppData\Local\Temp\openclaw\openclaw-2026-04-14.log
Command: C:\Program Files\nodejs\node.exe F:\npm-global\node_modules\openclaw\dist\index.js gateway --port 18789
Service file: F:\openclaw-state\gateway.cmd
Service env: OPENCLAW_STATE_DIR=F:\openclaw-state OPENCLAW_CONFIG_PATH=F:\openclaw-state\openclaw.json OPENCLAW_GATEWAY_PORT=18789

Config (cli): F:\openclaw-state\openclaw.json
Config (service): F:\openclaw-state\openclaw.json

Gateway: bind=loopback (127.0.0.1), port=18789 (service args)
Probe target: ws://127.0.0.1:18789
Dashboard: http://127.0.0.1:18789/
Probe note: Loopback-only gateway; only local clients can connect.

Runtime: running (last run 267009, last run time 4/14/2026 9:45:11 PM)
RPC probe: ok

Listening: 127.0.0.1:18789
Troubles: run openclaw status
Troubleshooting: https://docs.openclaw.ai/troubleshooting
PS C:\Windows\system32> openclaw browser --browser-profile
error: option '--browser-profile <name>' argument missing

strong meadowBOT
#

Nice, that status looks healthy.

  • Runtime: running
  • RPC probe: ok

So the gateway is up now.

The last error was just because the command was incomplete, you stopped after --browser-profile.

Run this exact command now

openclaw browser --browser-profile openclaw start

Then tell me one thing only:

#
  1. it stays open
  2. it opens and closes again
  3. it prints a new error

We’re finally back to the actual browser test.

flat cliff
#

it opens and closes again.
error shown in gateway:

21:49:34 [plugins] embedded acpx runtime backend ready
21:55:33 [browser/service] Browser control service ready (profiles=3)
21:55:48 [browser/chrome] 🦞 openclaw browser profile decorated (#FF4500)
21:55:49 [browser/chrome] 🦞 openclaw browser started (custom) profile "openclaw" on 127.0.0.1:18810 (pid 7604)
21:55:58 [ws] ⇄ res ✗ browser.request 26533ms errorCode=UNAVAILABLE errorMessage=Error: Chrome CDP websocket for profile "openclaw" is not reachable after start. conn=3faf3937…8373 id=790797bc…e0fc

strong meadowBOT
#

Okay, since it still opens and closes after the junction workaround, I’d stop burning time on the managed openclaw launcher.

You have two paths now:

1. Recommended, fastest: use an externally launched isolated browser

This still gives you an isolated scraper browser, but OpenClaw attaches to it instead of launching it.

Config

Change your browser block to something like:

"browser": {
  "enabled": true,
  "defaultProfile": "scraper",
  "profiles": {
    "scraper": {
#
      "cdpUrl": "http://127.0.0.1:18810",
      "attachOnly": true,
      "color": "#FF4500"
    },
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
  }
}

Launch Brave separately

Use the command that already worked for you:

#
& "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --remote-debugging-port=18810 --user-data-dir="$env:TEMP\openclaw-brave-test" about:blank

Or point --user-data-dir at your small local browser folder.

Why I recommend this

  • keeps OpenClaw state on F:
  • still gives you an isolated scraper browser
  • avoids the part that is crashing, OpenClaw’s managed launcher

The tradeoff is OpenClaw won’t own the browser process lifecycle.


2. Keep debugging the managed launcher

At this point that’s more of a bug hunt. Since:

#
  • manual CDP launch works
  • managed OpenClaw launch still dies

that starts to smell like an OpenClaw launcher/profile handling bug.

If you want to go that route, I’d recommend filing a GitHub issue with the evidence you gathered:
https://github.com/openclaw/openclaw/issues

My recommendation

I’d switch to option 1 now so your scraper works, then circle back on the managed launcher later if you still care.

If you want, I can rewrite your exact current browser block into the attachOnly scraper version so you can paste it directly.

flat cliff
#

i am trying out option 1, just changed my profile, what do i do to test the browser now?

strong meadowBOT
#

Nice. To test option 1, do this in order.

1. Restart the gateway

openclaw gateway restart

2. Launch the isolated browser manually

Use the same browser/CDP command that worked before, but point it at your isolated scraper profile dir:

& "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --remote-debugging-port=18810 --user-data-dir="C:\openclaw-browser\scraper-user-data" about:blank

Keep that browser window open.

3. Sanity check CDP

#

Open this in a browser:

http://127.0.0.1:18810/json/version

If that loads, CDP is up.

4. Ask OpenClaw to attach

If your profile name is scraper, run:

openclaw browser --browser-profile scraper start
openclaw browser --browser-profile scraper tabs

5. Optional real test

#

If that works, try:

openclaw browser --browser-profile scraper open https://example.com

What success looks like

  • manual Brave window stays open
  • /json/version works
  • openclaw browser --browser-profile scraper start does not error
  • tabs returns a tab list

If your profile is still named openclaw instead of scraper, just replace scraper with openclaw.

If you want, paste your exact updated browser block and I’ll confirm which profile name you should test.

storm pawnBOT
lament sparrow
#

Hi! I'm getting "gateway closed (1008): pairing required" error when trying to use sessions_spawn from agent sessions.

Environment:

  • OpenClaw 2026.4.10
  • Gateway bind: lan
  • Gateway auth: token
  • Config: agents.defaults.subagents.allowAgents: ["*"]

The error happens for all agents when calling sessions_spawn. Gateway is running and reachable, but agent sessions can't authenticate to spawn sub-agents.

Found similar issue #66558 on GitHub. Is this fixed in 2026.4.14? Or is there a workaround?

Thanks!

strong meadowBOT
#

agents.defaults.subagents.allowAgents: ["*"] is not the auth piece here.

gateway closed (1008): pairing required means the caller/device/session is not approved for the needed operator role/scopes. In practice, sessions_spawn usually needs operator.write.

So I’d treat this as a device pairing / scope-upgrade problem, not a subagent config problem.

What I’d do

  1. Upgrade first
    You’re on 2026.4.10, and there have been a bunch of gateway/auth fixes since then. I can’t confirm #66558 specifically from here, but I would absolutely test on latest before going deeper.

  2. Check pending approvals

    openclaw devices list
    
  3. If you see a pending request, approve it:

#
   openclaw devices approve <requestId>
  1. If the device is paired but missing write scope, rotate/reissue the operator token with write scope:

    openclaw devices rotate --device <deviceId> --role operator --scope operator.read --scope operator.write
    
  2. Reconnect the client/session, then retry sessions_spawn.

Why I think this

Docs map PAIRING_REQUIRED to exactly this flow:

  • openclaw devices list
  • openclaw devices approve <requestId>
flat cliff
#

PS C:\Windows\system32> openclaw browser --browser-profile scraper open https://example.com

🦞 OpenClaw 2026.4.12 (1c0672b) — Pairing codes exist because even bots believe in consent—and good security hygiene.

|
gfo
GatewayClientRequestError: Navigation blocked: strict browser SSRF policy requires an IP-literal URL because browser DNS rebinding protections are unavailable for hostname-based navigation

strong meadowBOT
#

Good news, that means the browser attach is working now. The new error is a different layer.

example.com got blocked by the browser SSRF policy, not by CDP.

Quick test

Try an IP-literal URL first:

openclaw browser --browser-profile scraper open http://93.184.216.34

If that opens, your attachOnly setup is basically fine.

For real hostname-based sites

Add an allowlist under browser.ssrfPolicy, then restart the gateway.

Example:

#
"browser": {
  "ssrfPolicy": {
    "hostnameAllowlist": ["example.com", "*.example.com"],
    "allowedHostnames": ["example.com"]
  }
}

Then:

openclaw gateway restart
openclaw browser --browser-profile scraper open https://example.com

What to put there for your actual scraper

flat cliff
#

PS C:\Windows\system32> openclaw browser --browser-profile scraper open http://93.184.216.34

🦞 OpenClaw 2026.4.12 (1c0672b) — I read logs so you can keep pretending you don't have to.

|
o
GatewayClientRequestError: Browser attachOnly is enabled and profile "scraper" is not running.

strong meadowBOT
#

Yep, that just means the external Brave process is not running right now.

With attachOnly: true, OpenClaw will never launch it for you. It only attaches to an already-running browser.

Do this in order

1. Start Brave manually

& "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --remote-debugging-port=18810 --user-data-dir="C:\openclaw-browser\scraper-user-data" about:blank

Keep that window open.

2. Verify CDP is live

Open this:

#
http://127.0.0.1:18810/json/version

3. Attach OpenClaw to it

openclaw browser --browser-profile scraper start

4. Then test navigation again

openclaw browser --browser-profile scraper open http://93.184.216.34

If step 3 fails, paste that output.
If step 3 works but step 4 fails, paste that output.

#

You’re close now, this is just the attachOnly lifecycle doing exactly what it says.

flat cliff
#

failed at step 3:
PS C:\Windows\system32> openclaw browser --browser-profile scraper start

🦞 OpenClaw 2026.4.12 (1c0672b) — If you can describe it, I can probably automate it—or at least make it funnier.

|
o
GatewayClientRequestError: Browser attachOnly is enabled and profile "scraper" is not running.

strong meadowBOT
#

I think Brave is probably reusing an existing normal Brave process, so your --remote-debugging-port=18810 launch isn’t actually taking effect.

That would explain this perfectly.

Try this exactly

1. Fully close Brave first

Make sure all Brave windows are closed.

Also check Task Manager and make sure there are no lingering brave.exe processes.

2. Launch the isolated instance again

& "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --remote-debugging-port=18810 --user-data-dir="C:\openclaw-browser\scraper-user-data" about:blank

3. Before touching OpenClaw, verify CDP directly

#

In a second PowerShell window:

Invoke-WebRequest http://127.0.0.1:18810/json/version | Select-Object -ExpandProperty Content

Important

If step 3 does not return JSON, then OpenClaw is not the problem yet, Brave never exposed CDP.

If step 3 does return JSON, then run:

openclaw browser --browser-profile scraper tabs

and paste the output.

#

So the next thing I need is the result of:

Invoke-WebRequest http://127.0.0.1:18810/json/version | Select-Object -ExpandProperty Content

That’ll tell us immediately which layer is still failing.

flat cliff
#

PS C:\Windows\system32> Invoke-WebRequest http://127.0.0.1:18810/json/version | Select-Object -ExpandProperty Content
Security Warning: Script Execution Risk
Invoke-WebRequest parses the content of the web page. Script code in the web page might be run when the page is
parsed.
RECOMMENDED ACTION:
Use the -UseBasicParsing switch to avoid script code execution.

  Do you want to continue?

[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y
{
"Browser": "Chrome/147.0.7727.56",
"Protocol-Version": "1.3",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"V8-Version": "14.7.173.16",
"WebKit-Version": "537.36 (@d491a927d068805831350ec9d7e5afda454e83c)",
"webSocketDebuggerUrl": "ws://127.0.0.1:18810/devtools/browser/0558a010-5f17-43d2-8db6-3354fba116c5"
}

PS C:\Windows\system32> openclaw browser --browser-profile scraper tabs

🦞 OpenClaw 2026.4.12 (1c0672b) — Hot reload for config, cold sweat for deploys.

|
o
No tabs (browser closed or no targets).

strong meadowBOT
#

That’s actually good news.

OpenClaw can reach the CDP endpoint now, so the attachOnly setup is basically alive.

No tabs (browser closed or no targets) is much less bad than the earlier errors. It usually just means there isn’t a normal page target yet.

Next test

Option A, easiest

In the manually launched Brave window, type this directly in the address bar:

http://93.184.216.34

Then run:

#
openclaw browser --browser-profile scraper tabs

Option B, let OpenClaw create the tab

Now that CDP is up, retry:

openclaw browser --browser-profile scraper open http://93.184.216.34

Then:

openclaw browser --browser-profile scraper tabs
#

My read so far

  • CDP is up ✅
  • browser is reachable ✅
  • managed-launch problem is bypassed ✅
  • now we’re just checking whether OpenClaw can see/create a page target

Also, for future PowerShell checks, use:

Invoke-WebRequest http://127.0.0.1:18810/json/version -UseBasicParsing | Select-Object -ExpandProperty Content

Paste whichever of those two next commands gives you output.

flat cliff
#

PS C:\Windows\system32> openclaw browser --browser-profile scraper open http://93.184.216.34

🦞 OpenClaw 2026.4.12 (1c0672b) — I'm the assistant your terminal demanded, not the one your sleep schedule requested.

|
xo
GatewayClientRequestError: Browser attachOnly is enabled and profile "scraper" is not running.

strong meadowBOT
#

Ah, that’s actually a very useful clue.

If this works:

http://127.0.0.1:18810/json/version

but OpenClaw still says:

profile "scraper" is not running

then the problem is almost certainly a config mismatch, not the browser itself.

What I suspect

#

Your scraper profile is probably not actually pointing at http://127.0.0.1:18810, or it’s still using the wrong driver.

For this setup, scraper should look roughly like this:

"browser": {
  "enabled": true,
  "defaultProfile": "scraper",
  "profiles": {
    "scraper": {
      "cdpUrl": "http://127.0.0.1:18810",
      "attachOnly": true,
      "color": "#FF4500"
    }
  }
}
#

Important

For this remote/externally launched setup, scraper should not be:

"driver": "existing-session"

That’s a different mode.

Next step

Please paste the exact browser block from F:\openclaw-state\openclaw.json.

That’ll let me spot the mismatch fast.

If you don’t want to paste the file manually, this is also fine:

#
Get-Content F:\openclaw-state\openclaw.json

Just paste the browser section only. I think we’re one config line away now.

flat cliff
#

"browser": {
"enabled": true,
"defaultProfile": "scraper",
"profiles": {
"scraper": {
"cdpUrl": "http://127.0.0.1:18810",
"attachOnly": true,
"color": "#FF4500"
},
"linkedin": {
"driver": "existing-session",
"attachOnly": true,
"userDataDir": "C:\Users\glysh\AppData\Local\BraveSoftware\Brave-Browser\User Data",
"color": "#FF4500"
}
}
},

strong meadowBOT
#

That profile block actually looks right.

The missing piece is probably the browser SSRF policy for the local CDP endpoint itself.

I’ve seen this exact localhost attach case need both hostnameAllowlist and allowedHostnames for 127.0.0.1 and localhost, otherwise OpenClaw’s own CDP probe treats the profile as “not running”.

Try this browser block

"browser": {
  "enabled": true,
  "defaultProfile": "scraper",
  "ssrfPolicy": {
    "hostnameAllowlist": ["127.0.0.1", "localhost"],
    "allowedHostnames": ["127.0.0.1", "localhost"]
  },
#
  "profiles": {
    "scraper": {
      "cdpUrl": "http://127.0.0.1:18810",
      "attachOnly": true,
      "color": "#FF4500"
    },
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
  }
}
#

Then do this in order

  1. restart gateway
openclaw gateway restart
  1. start Brave manually again
& "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --remote-debugging-port=18810 --user-data-dir="C:\openclaw-browser\scraper-user-data" about:blank
  1. verify CDP
Invoke-WebRequest http://127.0.0.1:18810/json/version -UseBasicParsing | Select-Object -ExpandProperty Content
#
  1. test OpenClaw
openclaw browser --browser-profile scraper tabs

If that works, then try:

openclaw browser --browser-profile scraper open http://93.184.216.34

I think this is the missing config bit.

flat cliff
#

PS C:\Windows\system32> Invoke-WebRequest http://127.0.0.1:18810/json/version -UseBasicParsing | Select-Object -ExpandProperty Content
{
"Browser": "Chrome/147.0.7727.56",
"Protocol-Version": "1.3",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"V8-Version": "14.7.173.16",
"WebKit-Version": "537.36 (@d491a927d068805831350ec9d7e5afda454e83c)",
"webSocketDebuggerUrl": "ws://127.0.0.1:18810/devtools/browser/78bcebb9-939a-4bd6-9255-be5b19841e93"
}

PS C:\Windows\system32> openclaw browser --browser-profile scraper tabs

🦞 OpenClaw 2026.4.12 (1c0672b) — Greetings, Professor Falken

|
o
Error: gateway timeout after 45000ms
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: F:\openclaw-state\openclaw.json
Bind: loopback

strong meadowBOT
#

Okay, we’ve moved again.

At this point:

  • direct CDP on 127.0.0.1:18810 is up ✅
  • your scraper config looks sane ✅
  • the thing failing now is the gateway browser request itself, which is hanging until the CLI times out

So the next useful signal is the gateway log right after the timeout.

Do this

  1. run the failing command again:
openclaw browser --browser-profile scraper tabs
#
  1. immediately after it times out, run:
Get-ChildItem "$env:LOCALAPPDATA\Temp\openclaw\openclaw-*.log" |
  Sort-Object LastWriteTime -Descending |
  Select-Object -First 1 |
  ForEach-Object { Get-Content $_.FullName -Tail 80 }

Paste that output.

That should show whether the gateway is:

  • hanging on the CDP websocket attach
  • blocking on SSRF policy
  • or crashing/stalling inside the browser service

We’re past the generic config stuff now, this needs the log line.

flat cliff
#

{"0":"\u001b[38;2;226;61;45mError: gateway timeout after 45000ms\u001b[39m\n\u001b[38;2;226;61;45mGateway target: ws://127.0.0.1:18789\u001b[39m\n\u001b[38;2;226;61;45mSource: local loopback\u001b[39m\n\u001b[38;2;226;61;45mConfig: F:\openclaw-state\openclaw.json\u001b[39m\n\u001b[38;2;226;61;45mBind: loopback\u001b[39m","_meta":{"runtime":"node","runtimeVersion":"24.13.1","hostname":"LPA","name":"openclaw","date":"2026-04-14T16:25:50.419Z","logLevelId":5,"logLevelName":"ERROR","path":{"fullFilePath":"file:///F:/npm-global/node_modules/openclaw/dist/subsystem-CSBs8ZPt.js:161:68","fileName":"subsystem-CSBs8ZPt.js","fileNameWithLine":"subsystem-CSBs8ZPt.js:161","fileColumn":"68","fileLine":"161","filePath":"/F:/npm-global/node_modules/openclaw/dist/subsystem-CSBs8ZPt.js","filePathWithLine":"/F:/npm-global/node_modules/openclaw/dist/subsystem-CSBs8ZPt.js:161","method":"console.error"}},"time":"2026-04-15T00:25:50.423+08:00"}
{"0":"\u001b[38;2;226;61;45mError: gateway timeout after 45000ms\u001b[39m\n\u001b[38;2;226;61;45mGateway target: ws://127.0.0.1:18789\u001b[39m\n\u001b[38;2;226;61;45mSource: local loopback\u001b[39m\n\u001b[38;2;226;61;45mConfig: F:\openclaw-state\openclaw.json\u001b[39m\n\u001b[38;2;226;61;45mBind: loopback\u001b[39m","_meta":{"runtime":"node","runtimeVersion":"24.13.1","hostname":"LPA","name":"openclaw","date":"2026-04-14T16:33:29.932Z","logLevelId":5,"logLevelName":"ERROR","path":{"fullFilePath":"file:///F:/npm-global/node_modules/openclaw/dist/subsystem-CSBs8ZPt.js:161:68","fileName":"subsystem-CSBs8ZPt.js","fileNameWithLine":"subsystem-CSBs8ZPt.js:161","fileColumn":"68","fileLine":"161","filePath":"/F:/npm-global/node_modules/openclaw/dist/subsystem-CSBs8ZPt.js","filePathWithLine":"/F:/npm-global/node_modules/openclaw/dist/subsystem-CSBs8ZPt.js:161","method":"console.error"}},"time":"2026-04-15T00:33:29.935+08:00"}

strong meadowBOT
#

Yep, that log is still only the CLI timeout, not the gateway’s internal browser logs.

At this point I’d stop fighting the Scheduled Task wrapper and run the gateway in the foreground once. That should tell us immediately whether this is a browser-service hang or a service-wrapper/session issue.

Do this

Window 1, stop the service and run gateway directly

openclaw gateway stop
openclaw gateway run --verbose

Leave that window open.

Window 2, reproduce the browser call

#
openclaw browser --browser-profile scraper tabs

Then paste the lines from Window 1

I want the browser/gateway lines that appear right when you run tabs.

Why this helps

Right now we know:

  • Brave CDP is alive on 127.0.0.1:18810
  • config looks right
  • the RPC call is hanging inside the gateway path somewhere

Running openclaw gateway run --verbose should expose the exact stuck step.

When you’re done testing, you can go back to the normal service with:

#
# Ctrl+C the foreground gateway
openclaw gateway start

Paste the verbose output and I’ll read it with you.

flat cliff
#

handshake=pending endpoint=127.0.0.1:55140->127.0.0.1:18789
00:40:40 [bonjour] watchdog detected non-announced service; attempting re-advertise (gateway fqdn=LPA (OpenClaw)._openclaw-gw._tcp.local. host=openclaw.local. port=18789 state=unannounced)
00:40:49 [bonjour] restarting advertiser (service stuck in probing for 8488ms (gateway fqdn=LPA (OpenClaw)._openclaw-gw._tcp.local. host=openclaw.local. port=18789 state=probing))
00:40:51 [plugins] embedded acpx runtime backend registered (cwd: F:\openclaw-state\workspace-main)
00:40:51 (node:6656) [DEP0190] DeprecationWarning: Passing args to a child process with shell option true can lead to security vulnerabilities, as the arguments are not escaped, only concatenated.
(Use node --trace-deprecation ... to show where the warning was created)
00:40:51 [browser/server] Browser control listening on http://127.0.0.1:18791/ (auth=token)
00:40:52 [heartbeat] started
00:40:52 [hooks/boot-md] boot-md skipped for agent startup run
00:40:52 [hooks/boot-md] boot-md skipped for agent startup run
00:40:52 [hooks/boot-md] boot-md skipped for agent startup run
00:40:52 [hooks/boot-md] boot-md skipped for agent startup run
00:40:52 [hooks/boot-md] boot-md skipped for agent startup run
00:40:52 [hooks/boot-md] boot-md skipped for agent startup run
00:40:52 [telegram] [default] starting provider (@glyclawdbot)
00:40:52 [telegram] autoSelectFamily=true (default-node22)
00:40:52 [telegram] dnsResultOrder=ipv4first (default-node22)
00:40:52 [routing] resolveAgentRoute: channel=telegram accountId=default peer=none guildId=none teamId=none bindings=0
00:40:53 [skills] Sanitized skill command name "node-connect" to "/node_connect".
00:40:53 [skills] Sanitized skill command name "skill-creator" to "/skill_creator".
00:40:53 [skills] Sanitized skill command name "taskflow-inbox-triage" to "/taskflow_inbox_triage".
00:40:53 telegram: command menu unchanged; skipping sync
00:40:56 [plugins] embedded acpx runtime backend ready

strong meadowBOT
#

Thanks, that’s helpful, and it also shows the problem: that paste is still mostly gateway startup, not the browser request itself.

The bonjour stuff and the DEP0190 warning are noise here.

Let’s do one cleaner capture

Window 1

Run the gateway like this:

openclaw gateway stop
openclaw gateway run --verbose --ws-log full

Wait until startup settles, specifically until after:

#
[plugins] embedded acpx runtime backend ready

Then wait another 5 seconds.

Window 2

Now run:

openclaw browser --browser-profile scraper tabs

What to paste

From Window 1, paste only the new lines that appear right after you run tabs.

That should finally show whether the request is:

#
  • reaching the gateway and stalling in browser control
  • being rejected before dispatch
  • or hanging on the CDP attach step

Right now, we’re very close, we just still don’t have the actual request-time log lines yet.

flat cliff
#

01:33:05 [ws] ← open remoteAddr=127.0.0.1 remotePort=55195 localAddr=127.0.0.1 localPort=18789 endpoint=127.0.0.1:55195->127.0.0.1:18789 conn=b0649ac6…29c7
01:35:50 [ws] closed before connect conn=b0649ac6-87d1-4cdb-8459-02cde17a29c7 peer=127.0.0.1:55195->127.0.0.1:18789 remote=127.0.0.1 fwd=n/a origin=n/a host=127.0.0.1:18789 ua=n/a code=1006 reason=n/a
01:35:50 [ws] → close code=1006 durationMs=165264 handshake=pending endpoint=127.0.0.1:55195->127.0.0.1:18789 conn=b0649ac6…29c7
01:35:50 [telegram] fetch fallback: enabling sticky IPv4-only dispatcher (codes=UND_ERR_SOCKET)

strong meadowBOT
#

That last log is the important one.

handshake=pending for minutes, then closed before connect, means the request is stalling at the gateway WebSocket/RPC layer before it ever gets to real browser work.

So at this point:

  • the original browser.profiles.openclaw.color error is fixed ✅
  • Brave CDP on 127.0.0.1:18810 is live ✅
  • your scraper profile shape looks correct ✅
  • the remaining failure is now a gateway-side hang / bug, not the browser config

My recommendation

1. Try the simplest service refresh once

openclaw gateway stop
#
openclaw gateway install --force
openclaw gateway start

Then retest:

openclaw browser --browser-profile scraper tabs

2. If it still hangs, treat it as bug territory

At that point I’d file a GitHub issue with these exact facts:

  • http://127.0.0.1:18810/json/version works
  • browser.profiles.scraper uses:
#
  {
    "cdpUrl": "http://127.0.0.1:18810",
    "attachOnly": true,
    "color": "#FF4500"
  }
  • browser.ssrfPolicy includes 127.0.0.1 and localhost
  • openclaw browser --browser-profile scraper tabs hangs
  • gateway verbose log shows:
    • handshake=pending
    • closed before connect
    • code=1006

Issue tracker:
https://github.com/openclaw/openclaw/issues

#

If you want, I can help you write the exact issue body so you can paste it cleanly.

flat cliff
#

PS C:\Windows\system32> openclaw browser --browser-profile scraper tabs

🦞 OpenClaw 2026.4.12 (1c0672b) — I've seen your commit messages. We'll work on that together.

|
o

  1. about:blank
    about:blank
    id: C20C9BC3F48422C2022257A33E48C525
  2. about:blank
    about:blank
    id: D04CF5011334ABB410AC4A1930148644
  3. 93.184.216.34
    http://93.184.216.34/
    id: BDB9036365E72B0EAE11BBC124AC0208
  4. 127.0.0.1:18810/json/version
    http://127.0.0.1:18810/json/version
    id: 715C825FF4810936C475EE6C28430513
  5. 127.0.0.1:18810/json/version
    http://127.0.0.1:18810/json/version
    id: 141607577ED56DC12C588BCE19E98785
strong meadowBOT
#

Nice, that means the browser side is working now 🎉

OpenClaw can see the scraper profile and its tabs, so we’re past the browser/CDP blocker.

What this means

  • original browser.profiles.openclaw.color issue: fixed
  • scraper attachOnly profile: working
  • Brave on 127.0.0.1:18810: working

Next blocker

The remaining issue from your original thread is the broken cron store:

F:\openclaw-state\cron\jobs.json

Next step

Please paste that file so we can repair it:

#
Get-Content F:\openclaw-state\cron\jobs.json

If you want, just paste the first ~40 lines.

Also, if you’re going to scrape real hostnames next, we’ll need to add those domains to browser.ssrfPolicy, but the core browser path is finally good now.

And if this solved the browser half, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow can index it.

flat cliff
#

PS C:\Windows\system32> Get-Content F:\openclaw-state\cron\jobs.json
{
"version": 1,
"jobs": [
{
"id": "f1a3c9e7-2b4d-4e6f-8a1c-3d5e7f9a2b4c",
"agentId": "headhunter",
"name": "jobs-main-jobsdb",
"enabled": true,
"createdAtMs": 1775282700000,
"updatedAtMs": 1776135904007,
"schedule": {
"kind": "cron",
"expr": "50 10 * * *",

strong meadowBOT
#

Yep, that file is just truncated. It ends in the middle of the first job, so the parser never had a chance.

Best option, restore the cron backup

OpenClaw keeps a .bak when it rewrites the cron store.

Check for it

Get-ChildItem F:\openclaw-state\cron\

If you see jobs.json.bak, inspect it:

Get-Content F:\openclaw-state\cron\jobs.json.bak

If it looks complete, restore it:

#
Copy-Item F:\openclaw-state\cron\jobs.json.bak F:\openclaw-state\cron\jobs.json -Force

Then run:

openclaw doctor --fix

Fallback if there is no usable backup

We can replace it with a clean empty store:

{
  "version": 1,
#
  "jobs": []
}

That will get OpenClaw healthy again, but you’ll lose the saved cron definitions and need to recreate them.

My recommendation

Try the .bak restore first.

Paste the output of:

Get-ChildItem F:\openclaw-state\cron\

and if jobs.json.bak exists, we’ll use that.

storm pawnBOT
flat cliff
#

My openclaw reported the below issue just now, and I am wondering if the fixes are logical at all.
What is 'attachonly: true' for?

| 8:04 AM | Brave (PID 9832) started by OpenClaw with --remote-debugging-port=18810 |
| 8:04 AM | lockfile created in profile dir |
| 8:07 AM | Last Browser written |
| 8:11 AM | BrowserMetrics folder updated |
| 8:12 AM | scout-1-lead-extraction cron fires → tries to use openclaw profile → no attachOnly → tries to launch new Brave → profile locked → "Browser startup timed out" |
| 8:12 AM | CDP technically reachable (:18810 responds to /json) but OpenClaw couldn't route to it via its openclaw profile |

───

Fixes Needed (Priority Order)

  1. Restart the gateway — openclaw gateway restart. This fixes the Apr 17 timeout issue (gateway is hung).
  2. Add attachOnly: true to the openclaw profile — so OpenClaw connects to the existing CDP instead of launching a new browser:"openclaw": {
    "cdpPort": 18810,
    "attachOnly": true, // ← add this
    "userDataDir": "F:\openclaw-state\browser\openclaw\user-data"
    }
  3. Reduce api-trace.jsonl size — rotate/delete the 798MB log file at C:\Users\glysh.openclaw\logs\api-trace.jsonl. This is degrading gateway performance.
  4. Consider consolidating browser profiles — you currently have 3 Brave instances competing. Pick one primary managed profile and one existing-session profile for your personal logged-in session.
strong meadowBOT
#

Short version: partly logical, but a bit mixed up.

What attachOnly: true is for

It means:

Do not launch a browser yourself. Only attach to one that is already running.

That’s useful when you start Brave externally, or some other process keeps it alive, and OpenClaw should just connect to its CDP endpoint.

Docs summary:

  • attachOnly: true = never launch, only attach
  • good for external/raw CDP setups
  • not the normal mode for an OpenClaw-managed browser

My read on those proposed fixes

#

1. openclaw gateway restart

Reasonable as a recovery step for a hang.
Good temporary action, not the root fix.

2. Add attachOnly: true to the openclaw profile

Only logical if you intentionally want that profile to become externally managed.

If your goal is:

  • OpenClaw owns the isolated cron browser
  • OpenClaw starts/stops it itself

then I would not call that the “real fix”.

If your goal is:

  • pre-launch Brave yourself
#
  • OpenClaw just reuses it

then yes, attachOnly: true is the right behavior.

So this is more of a workaround / mode switch than a true fix.

3. Rotate/delete api-trace.jsonl

Reasonable housekeeping if it’s ~800MB.
Could help general I/O/perf.
Probably not the direct cause of the profile-lock/browser-launch behavior.

4. Consolidate browser profiles

Also sensible.
Multiple Brave/CDP modes can absolutely make this messier.
Good hygiene, secondary fix.

What I’d recommend

#

If you want the clean architectural answer

Keep the openclaw profile as a managed profile, and treat “tries to launch a second Brave against a locked profile” as the actual bug.

If you want the practical stable answer today

Use an attachOnly external profile for cron scraping, exactly like the scraper workaround we got working.

That’s the mode where attachOnly: true really makes sense.

So, directly answering you

  • What is attachOnly: true for?
    It tells OpenClaw to attach to an already-running browser instead of launching one.

  • Are those fixes logical?

    • restart gateway: yes
    • clean giant trace log: yes, as maintenance
    • consolidate profiles: yes
    • add attachOnly: true to openclaw: only if you intentionally want openclaw to stop being managed and become attach-only
#

If you want, paste your current browser block and I’ll tell you which profile should be managed vs attach-only.

flat cliff
#

this is my current browser block:
"browser": {
"executablePath": "C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe",
"enabled": true,
"defaultProfile": "openclaw",
"profiles": {
"openclaw": {
"cdpPort": 18810,
"color": "#FF4500"
},
"scraper": {
"cdpUrl": "http://127.0.0.1:18810",
"attachOnly": true,
"color": "#FF4500"
},
"linkedin": {
"driver": "existing-session",
"attachOnly": true,
"userDataDir": "C:\Users\glysh\AppData\Local\BraveSoftware\Brave-Browser\User Data",
"color": "#FF4500"
}
}
}

strong meadowBOT
#

Yep, I see the problem.

Right now you have two different profile modes pointing at the same browser:

  • openclaw = managed, via cdpPort: 18810
  • scraper = attach-only, via cdpUrl: "http://127.0.0.1:18810"

That’s the conflict.

My recommendation

scraper

Keep this as the attach-only cron/scraping profile.

linkedin

Keep this as the existing-session personal browser.

#

openclaw

Do not leave this as the default if it points at the same port/browser as scraper.

Best practical fix

If the working setup is the externally launched Brave on 18810, make that the default:

"browser": {
  "executablePath": "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe",
  "enabled": true,
  "defaultProfile": "scraper",
  "ssrfPolicy": {
    "hostnameAllowlist": ["127.0.0.1", "localhost"],
    "allowedHostnames": ["127.0.0.1", "localhost"]
  },
#
  "profiles": {
    "scraper": {
      "cdpUrl": "http://127.0.0.1:18810",
      "attachOnly": true,
      "color": "#FF4500"
    },
    "linkedin": {
      "driver": "existing-session",
      "attachOnly": true,
      "userDataDir": "C:\\Users\\glysh\\AppData\\Local\\BraveSoftware\\Brave-Browser\\User Data",
      "color": "#FF4500"
    }
  }
}
#

If you want to keep openclaw

Only keep it if it is a separate managed browser on a different port.
I would not keep it sharing 18810 with scraper.

So the clean rule is:

  • scraper = attach-only external isolated browser
  • linkedin = existing-session personal browser
  • openclaw = either remove it, or move it to a different port and use it only as a truly separate managed profile

Direct answer

So yes, in your current config, adding attachOnly: true to openclaw would be a band-aid, but the cleaner fix is actually:

stop having openclaw and scraper both represent the same browser

If you want, I can rewrite your exact final browser block for either:

#
  1. simple/stable, scraper as default
  2. dual-mode, scraper default + separate managed openclaw on another port
flat cliff
#

just updated the browser, and here are some new issues now:

Root Cause

The pre-restart gateway process (PID 3568, 1.3 GB RSS) is still running.

After you manually restarted, the old process didn't fully die — it's still consuming resources and possibly intercepting or blocking CLI commands.

Timeline

| Time | Event |
| 2:46 PM | PID 3568 started — pre-restart openclaw.exe / gateway node process (1.3 GB RAM, 723s CPU) |
| ~2:53 PM | You manually restarted the gateway |
| 3:09 PM | New gateway child processes started (PIDs 11308, 11420 — 588 MB RAM combined) |
| 3:14 PM | Even more node processes spawned (PIDs 5128, 5924, 2980 — 750 MB RAM combined) |
| 3:15 PM | api-trace.jsonl rotated — was 776.5 MB, now 8.2 MB |

What's Failing & Why

| Command | Behavior | Likely Reason|
| openclaw status | SIGKILL after timeout | Old gateway (PID 3568) still alive, competing/blocking|
| openclaw cron list | SIGKILL after timeout | Same — CLI routed to stale process|
| openclaw gateway status | SIGKILL | Same|
| openclaw help | SIGKILL | Same|
| Other exec commands | Mostly SIGKILL | Host exec subsyste overloaded — old + new processes both running |
| python sync_emails.py | ✅ Worked fine | Direct script execution, no CLI routing needed|
| sessions_list | ✅ Worked fine | Uses internal IPC, not openclaw CLI|

Key Evidence

Node processes currently alive:

PID MemMB CPU(s) Started
3568 1347.7 723 2:46 PM ← OLD gateway, still alive!
11308 588.3 290 3:09 PM ← NEW gateway children
11420 45.5 2 3:09 PM
5128 671.1 64 3:14 PM
5924 53.5 2 3:14 PM
2980 35.0 0 3:15 PM

strong meadowBOT
#

Parts of that diagnosis are logical, but I would not trust all of it.

What seems logical

  • a stale old gateway process could absolutely cause weird restart behavior
  • a huge api-trace.jsonl can worsen disk / I/O pressure
  • too many browser/profile modes can make the setup confusing

What does not quite add up

This part is overconfident:

openclaw help fails because the old gateway is intercepting it

openclaw help is a local CLI command. It should not depend on the gateway routing path the way openclaw browser ... or openclaw cron list might.

So if even openclaw help is getting SIGKILL, I’d suspect:

  • host/runtime pressure
#
  • a wedged CLI / node process
  • or a broader local process mess

not just “old gateway intercepting commands”.

Also, multiple Node processes are not automatically wrong in OpenClaw. Some sidecars / helpers are normal. The real question is whether you have multiple gateway masters or just normal children.

My practical read

  • stale old gateway process: plausible
  • “that explains every SIGKILL”: not proven
  • attachOnly / browser profile conflict: separate issue, and your browser config cleanup still matters

What I’d do next

  1. openclaw gateway stop
  2. In Task Manager, end only the clearly stale OpenClaw gateway process(es)
    • don’t kill random node.exe blindly
    • only kill ones whose command line points to OpenClaw gateway
#
  1. start one clean gateway
    openclaw gateway start
    
  2. then re-test:
    openclaw gateway status
    

If you want, I can give you the exact PowerShell to list only the node.exe / openclaw.exe processes whose command line contains openclaw or gateway, so you can safely identify which one is the stale master.

flat cliff
#

In Task Manager, where can i find the clearly stale OpenClaw gateway process(es) to end them?

strong meadowBOT
#

Yep. The best place is Task Manager → Details.

What to do

1. Stop the gateway first

openclaw gateway stop

That makes the next step much safer.

2. Open Task Manager

  • press Ctrl + Shift + Esc
  • go to Details tab

3. Add the useful columns

Right-click the column header row, then Select columns, and enable:

#
  • PID
  • Command line
  • CPU time
  • Memory (active private working set) or similar memory column
  • Start time

4. What to look for

Look for processes named:

  • node.exe
  • possibly openclaw.exe

Then focus on the ones whose Command line contains something like:

openclaw ... gateway
#

or

node.exe ...\openclaw\dist\index.js gateway --port 18789

How to tell which one is stale

After openclaw gateway stop, any process still matching that gateway command line is suspicious.

Usually the stale one will also have:

  • the older Start time
  • large memory usage
  • lots of accumulated CPU time

What not to kill blindly

Don’t just kill every node.exe.

#

Only end the ones whose Command line clearly shows OpenClaw gateway.

Then

After ending the stale gateway process(es), start clean:

openclaw gateway start
openclaw gateway status

If you want, I can also give you a single PowerShell command that lists only the node.exe / openclaw.exe processes whose command lines contain openclaw or gateway, which is even easier than hunting in Task Manager.

flat cliff
#

i don't see any node.exe and openclaw.exe under the 'Details' section in the task manager

strong meadowBOT
#

That actually tells me we should stop trusting the earlier PID list blindly.

If you don’t see node.exe / openclaw.exe there, the “stale gateway process” may already be gone, or that earlier snapshot was stale.

Let’s check the gateway by port instead of by process name.

Run this

Get-NetTCPConnection -LocalPort 18789 -State Listen | Select-Object OwningProcess, LocalAddress, LocalPort, State

If it returns a PID

Then run:

Get-CimInstance Win32_Process | Where-Object { $_.ProcessId -eq <PID> } | Select-Object ProcessId, Name, CreationDate, CommandLine | Format-List
#

Replace <PID> with the number from the first command.

If it returns nothing

Then there is no gateway currently listening on 18789, and we should stop chasing zombie processes and just do:

openclaw gateway start
openclaw gateway status

Paste the output of the Get-NetTCPConnection command first. That’s the cleanest next signal.

flat cliff
#

PS C:\Users\glysh> Get-NetTCPConnection -LocalPort 18789 -State Listen | Select-Object OwningProcess, LocalAddress, LocalPort, State
Get-NetTCPConnection : No matching MSFT_NetTCPConnection objects found by CIM query for instances of the
ROOT/StandardCimv2/MSFT_NetTCPConnection class on the CIM server: SELECT * FROM MSFT_NetTCPConnection WHERE
((LocalPort = 18789)) AND ((State = 2)). Verify query parameters and retry.
At line:1 char:1

  • Get-NetTCPConnection -LocalPort 18789 -State Listen | Select-Object O ...
  •   + CategoryInfo          : ObjectNotFound: (MSFT_NetTCPConnection:String) [Get-NetTCPConnection], CimJobException
      + FullyQualifiedErrorId : CmdletizationQuery_NotFound,Get-NetTCPConnection
strong meadowBOT
#

Perfect, that’s clear.

There is nothing listening on 18789 right now, so this is not a stale gateway process blocking the port.

So we can stop chasing zombie processes.

Next step

Start the gateway cleanly:

openclaw gateway start

Then after a few seconds: