Win11 Visible Browser Automation
Use this skill when OpenClaw runs in WSL2/Linux but should work in a visible Windows 11 Edge/Chrome browser that the human can watch, use, and take over.
This is for legitimate assisted browsing in a normal visible browser session. Do not use it to bypass site protections, automate prohibited activity, or hide automation from the user.
Safety gate
Before state-changing actions, state what/where/risk/rollback and wait for explicit confirmation. State-changing actions include editing OpenClaw config, creating Scheduled Tasks, changing Windows firewall/portproxy, starting/stopping browser processes, writing scripts outside the workspace, sending forms/messages, purchases, or account actions.
Positioning
Prefer visible browser automation when the task benefits from:
- existing tabs already open in the user's browser;
- cookies, logins, extensions, and normal browser state;
- visible step-by-step human oversight;
- manual human help for login, captcha, 2FA, consent screens, account pickers, file dialogs, or sensitive approvals;
- sites that do not work well through
web_fetchor a fresh/headless browser.
Use safe wording: this skill gives the agent access to a normal visible browser while keeping the human in the loop. It does not try to bypass anti-bot systems.
Recommended architecture
Use a dedicated Windows browser profile by default. Use the user's personal browser profile only when the user explicitly wants existing personal cookies/logins/tabs.
OpenClaw Gateway in WSL2
→ OpenClaw browser profile (example: win-edge)
→ http://WINDOWS_WSL_GATEWAY_IP:9223
→ Windows portproxy/firewall relay
→ 127.0.0.1:9222
→ visible Windows 11 Edge/Chrome profile
Recommended defaults:
- OpenClaw browser profile:
win-edgeorwin-chrome - Windows CDP local port:
9222 - WSL-visible relay port:
9223 - Dedicated browser profile:
C:\ProgramData\OpenClaw\browser-profile - Startup/repair task:
OpenClaw-Start-Windows-Browser-CDP
For implementation details, read {baseDir}/references/setup.md.
Diagnose first
Run read-only checks before repair:
openclaw browser profiles
openclaw browser --browser-profile win-edge doctor
WIN_IP=$(ip route | awk '/default/ {print $3; exit}')
curl -sS --max-time 5 "http://$WIN_IP:9223/json/version"
Or use the bundled helper:
{baseDir}/scripts/check-win11-visible-browser.sh win-edge
If CDP works, smoke-test real browser control:
openclaw browser --browser-profile win-edge open https://example.com
openclaw browser --browser-profile win-edge snapshot --format aria
Repair order
Repair in layers and stop when the layer works:
- Confirm Windows Edge/Chrome is installed and can run visibly.
- Start the browser with CDP on Windows localhost, usually
127.0.0.1:9222. - Expose it to WSL with a Windows relay/portproxy, usually
0.0.0.0:9223 → 127.0.0.1:9222. - Restrict Windows firewall to the current WSL/Hyper-V CIDR, not the whole LAN or Internet.
- Configure an OpenClaw browser profile with
cdpUrlpointing to the WSL-visible Windows endpoint andattachOnly: true. - Reload/restart Gateway if the profile is not visible.
- Run doctor and a page/snapshot smoke test.
The bundled Windows repair script is {baseDir}/scripts/start-win11-browser-cdp-for-openclaw.ps1. Treat it as a template: review paths, profile name, browser path, ports, and firewall rule names before installing or running it.
Common blockers
No supported browser found: WSL cannot launch Windows Edge/Chrome as a local Linux browser; use remote CDP.- Windows CDP works but WSL curl times out: fix portproxy/firewall/WSL subnet.
- Browser profile not found: OpenClaw config not loaded; reload/restart Gateway.
- WSL gateway IP changed: update
browser.profiles.<name>.cdpUrlor rerun the documented repair flow. - Existing tabs/logins are missing: you are probably using a dedicated profile, not the user's real profile. Ask before switching profiles.
Evidence to report
When done, report:
- browser profile name and CDP URL tested;
openclaw browser --browser-profile <profile> doctorresult;/json/versionresult from WSL;- Windows task/log status if relevant;
- smoke-test URL opened and snapshot result;
- any remaining manual human step needed.