OpenClaw Browser Automation Not Working After Update? Here's Why
I updated OpenClaw last week and suddenly my browser automation workflows stopped working completely. No errors, no warnings - just silence. After hours of debugging, I discovered the update completely removed the extension relay architecture.
The Problem: Extension Relay Is Gone
When I ran my automation scripts after the update, they just hung there. No browser window opened, no errors, nothing. I checked the logs and found nothing useful.
Then I stumbled upon a Reddit thread that explained everything:
“The legacy chrome extension relay is gone in this update. completely removed.”
“If config uses
driver: "extension"orbrowser.relayBindHost, those settings do nothing now”
That’s when I realized: the entire architecture changed. OpenClaw no longer uses a Chrome extension to control browsers. Instead, it now uses Chrome DevTools Protocol (CDP) to connect to an already-running browser.
What Changed: Architecture Overview
Here’s how it worked before vs. now:
BEFORE (Extension Relay):┌─────────────┐ ┌──────────────────┐ ┌─────────────┐│ OpenClaw │─────▶│ Chrome Extension │─────▶│ Browser ││ (CLI/App) │ │ (Relay) │ │ (New Tab) │└─────────────┘ └──────────────────┘ └─────────────┘
AFTER (CDP Attachment):┌─────────────┐ ┌─────────────┐│ OpenClaw │──────────CDP────────────────▶│ Browser ││ (CLI/App) │ (Port 9222) │ (Already │└─────────────┘ │ Running) │ └─────────────┘The key differences:
- No more extension: OpenClaw doesn’t launch browsers through an extension anymore
- Existing-session attachment: You need to start Chrome FIRST, then OpenClaw connects to it
- Dedicated profile: OpenClaw now manages its own browser profile (
openclaw)
Step 1: Check Your Deprecated Config
First, I needed to see what was broken in my configuration:
# Check current configcat ~/.openclaw/config.yaml
# Find deprecated settingsgrep -E "driver:|relayBindHost" ~/.openclaw/config.yamlMy old config had these lines:
driver: "extension" # DEPRECATED - does nothing nowbrowser: relayBindHost: "127.0.0.1" # DEPRECATED - does nothing now relayBindPort: 9223 # DEPRECATED - does nothing nowAll three settings are now dead code. They don’t throw errors, they just do nothing.
Step 2: Update Configuration for CDP
I replaced my old config with the new CDP-based settings:
version: "2.0"
browser: control: "cdp" cdp: host: "127.0.0.1" port: 9222 timeout: 30000
profile: name: "openclaw" path: "$HOME/.config/openclaw-profile"
automation: retryAttempts: 3 retryDelay: 1000 screenshotOnError: trueThe critical changes:
control: "cdp"tells OpenClaw to use CDP instead of extensionhostandportspecify where to find the running browserprofilesettings define where OpenClaw stores browser data
Step 3: Launch Chrome with Remote Debugging
Now OpenClaw won’t start the browser for you. You need to start Chrome with CDP enabled FIRST:
#!/bin/bash# Start Chrome with remote debugging for OpenClaw
CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"PROFILE_DIR="$HOME/.config/openclaw-profile"CDP_PORT=9222
# Create profile directorymkdir -p "$PROFILE_DIR"
# Start Chrome with remote debugging"$CHROME_PATH" \ --remote-debugging-port=$CDP_PORT \ --user-data-dir="$PROFILE_DIR" \ --no-first-run \ --disable-default-apps \ --no-sandbox &
echo "Chrome started on port $CDP_PORT"echo "Profile: $PROFILE_DIR"For Linux:
#!/bin/bashgoogle-chrome \ --remote-debugging-port=9222 \ --user-data-dir=$HOME/.config/openclaw-profile \ --no-first-run \ --no-sandbox &Step 4: Verify CDP Is Working
Before running OpenClaw, I always verify the CDP connection works:
# Check if CDP is accessiblecurl http://localhost:9222/json/versionExpected output looks like:
{ "Browser": "Chrome/134.0.6998.89", "Protocol-Version": "1.3", "webSocketDebuggerUrl": "ws://localhost:9222/devtools/browser/xxx-xxx", "User-Agent": "Mozilla/5.0 ..."}If you get a connection refused error, Chrome isn’t running with the debugging port enabled.
Common Issues and Fixes
Issue 1: Port Already In Use
# Check what's using port 9222lsof -i :9222
# Kill existing Chrome debug instancespkill -f "remote-debugging-port=9222"Issue 2: Profile Locked
Chrome creates lock files that can prevent new instances:
# Remove lock filesrm -f ~/.config/openclaw-profile/SingletonLockrm -f ~/.config/openclaw-profile/SingletonCookierm -f ~/.config/openclaw-profile/SingletonSocketIssue 3: Connection Refused
Always check Chrome is running with CDP:
# Verify Chrome is running with debugging portps aux | grep "remote-debugging-port"
# Should see something like:# /Applications/Google Chrome.app/... --remote-debugging-port=9222Why This Change Was Made
After migrating, I realized the new approach is actually better:
-
No extension flakiness: Extensions face increasing browser security restrictions. The relay was constantly breaking.
-
Industry standard: CDP is the same protocol used by Puppeteer and Playwright. It’s battle-tested and well-documented.
-
Direct control: No intermediary layer means fewer things that can go wrong.
-
Better debugging: When something fails, I can inspect it directly through Chrome’s DevTools.
The Reddit thread confirmed this:
“Browser automation is more reliable with the new attachment model (no more flaky extension relay)“
Migration Checklist
□ 1. Backup old config: cp ~/.openclaw/config.yaml ~/.openclaw/config.yaml.bak□ 2. Remove deprecated settings: driver, relayBindHost, relayBindPort□ 3. Add new CDP settings: control, host, port□ 4. Create profile directory: mkdir -p ~/.config/openclaw-profile□ 5. Start Chrome with --remote-debugging-port=9222□ 6. Verify CDP: curl http://localhost:9222/json/version□ 7. Run OpenClaw automationSummary
The OpenClaw update removes the extension relay entirely. You must:
- Remove
driver: "extension"andrelayBindHostfrom config - Add CDP connection settings (
control: "cdp",host,port) - Start Chrome manually with
--remote-debugging-port=9222 - Use the dedicated
openclawprofile
The new approach is more reliable but requires changing your workflow. The extension relay is gone permanently, so migration is mandatory.
Final Words + More Resources
My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me
Here are also the most important links from this article along with some further resources that will help you in this scope:
Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!
Comments