Skip to content

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" or browser.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:

Architecture Comparison
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:

  1. No more extension: OpenClaw doesn’t launch browsers through an extension anymore
  2. Existing-session attachment: You need to start Chrome FIRST, then OpenClaw connects to it
  3. 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-config.sh
# Check current config
cat ~/.openclaw/config.yaml
# Find deprecated settings
grep -E "driver:|relayBindHost" ~/.openclaw/config.yaml

My old config had these lines:

old-config.yaml
driver: "extension" # DEPRECATED - does nothing now
browser:
relayBindHost: "127.0.0.1" # DEPRECATED - does nothing now
relayBindPort: 9223 # DEPRECATED - does nothing now

All 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:

~/.openclaw/config.yaml
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: true

The critical changes:

  • control: "cdp" tells OpenClaw to use CDP instead of extension
  • host and port specify where to find the running browser
  • profile settings 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:

start-chrome-cdp.sh
#!/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 directory
mkdir -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:

start-chrome-cdp-linux.sh
#!/bin/bash
google-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:

verify-cdp.sh
# Check if CDP is accessible
curl http://localhost:9222/json/version

Expected output looks like:

cdp-response.json
{
"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

fix-port-in-use.sh
# Check what's using port 9222
lsof -i :9222
# Kill existing Chrome debug instances
pkill -f "remote-debugging-port=9222"

Issue 2: Profile Locked

Chrome creates lock files that can prevent new instances:

fix-profile-lock.sh
# Remove lock files
rm -f ~/.config/openclaw-profile/SingletonLock
rm -f ~/.config/openclaw-profile/SingletonCookie
rm -f ~/.config/openclaw-profile/SingletonSocket

Issue 3: Connection Refused

Always check Chrome is running with CDP:

check-chrome-process.sh
# Verify Chrome is running with debugging port
ps aux | grep "remote-debugging-port"
# Should see something like:
# /Applications/Google Chrome.app/... --remote-debugging-port=9222

Why This Change Was Made

After migrating, I realized the new approach is actually better:

  1. No extension flakiness: Extensions face increasing browser security restrictions. The relay was constantly breaking.

  2. Industry standard: CDP is the same protocol used by Puppeteer and Playwright. It’s battle-tested and well-documented.

  3. Direct control: No intermediary layer means fewer things that can go wrong.

  4. 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

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 automation

Summary

The OpenClaw update removes the extension relay entirely. You must:

  1. Remove driver: "extension" and relayBindHost from config
  2. Add CDP connection settings (control: "cdp", host, port)
  3. Start Chrome manually with --remote-debugging-port=9222
  4. Use the dedicated openclaw profile

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