browser-cdp connects directly to your local Chrome via Chrome DevTools Protocol (CDP), giving the AI agent:
text
Chrome (remote-debugging-port=9222)
↓ CDP WebSocket
CDP Proxy (cdp-proxy.mjs) — HTTP API on localhost:3456
↓ HTTP REST
OpenClaw AI Agent
bash
# macOS — must use full binary path (not `open -a`)
pkill -9 "Google Chrome"; sleep 2
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--remote-debugging-port=9222 \
--user-data-dir=/tmp/chrome-debug-profile \
--no-first-run &
Verify:
bash
curl -s http://127.0.0.1:9222/json/version
bash
node ~/.openclaw/skills/browser-cdp/scripts/cdp-proxy.mjs &
sleep 3
curl -s http://localhost:3456/health
# {"status":"ok","connected":true,"sessions":0,"chromePort":9222}
bash
# List all tabs
curl -s http://localhost:3456/targets
# Open URL in new tab
curl -s "http://localhost:3456/new?url=https://example.com"
# Execute JavaScript
curl -s -X POST "http://localhost:3456/eval?target=TARGET_ID" \
-d 'document.title'
# JS click (fast, preferred)
curl -s -X POST "http://localhost:3456/click?target=TARGET_ID" \
-d 'button.submit'
# Real mouse click
curl -s -X POST "http://localhost:3456/clickAt?target=TARGET_ID" \
-d '.upload-btn'
# Screenshot
curl -s "http://localhost:3456/screenshot?target=TARGET_ID&file=/tmp/shot.png"
# Scroll (lazy loading)
curl -s "http://localhost:3456/scroll?target=TARGET_ID&direction=bottom"
# Navigate
curl -s "http://localhost:3456/navigate?target=TARGET_ID&url=https://..."
# Close tab
curl -s "http://localhost:3456/close?target=TARGET_ID"
ScenarioUseReasonPublic pages (GitHub, Wikipedia, blogs)agent-reachFast, low token, structuredSearch results (Bing/Google/YouTube)**browser-cdpagent-reach blockedLogin-gated content****browser-cdpNo cookies in agent-reachJS-rendered pagesbrowser-cdp**Reads rendered DOMSimple automation, isolated screenshotsagent-browserNo Chrome setupLarge-scale parallel scrapingagent-reach + parallelbrowser-cdp gets rate-limited
Decision flow:
text
Public content → agent-reach (fast, cheap)
Search results / blocked → browser-cdp
Still fails → agent-reach fallback + record in site-patterns
/tmp/chrome-debug-profile)open -abash
~/.openclaw/skills/browser-cdp/references/site-patterns/ # per-domain experience
~/.openclaw/skills/browser-cdp/references/usage-log.md # per-use tracking
Adapted from eze-is/web-access (MIT) for OpenClaw.
A bug in the original ( require() in ES module, reported here) is fixed in this version.