Install
openclaw skills install chromiumLaunch a persistent headless Chromium with remote debugging (CDP) for browser automation — page navigation, clicks, form filling, screenshots, and cookie import. Use when the user asks to open a website, browse, click, read page content, or work with a browser.
openclaw skills install chromium127.0.0.1 for browser tool integration.~/.openclaw/workspace/skills/chromium/scripts/start_chromium.sh
Environment variables (all optional):
| Variable | Default | Description |
|---|---|---|
CHROMIUM_PROFILE_DIR | $HOME/.openclaw/workspace/chromium-profile | User data directory |
CHROMIUM_DEBUG_PORT | 18801 | CDP remote debugging port |
CHROMIUM_LOG_FILE | $HOME/.openclaw/workspace/logs/chromium.log | Log file path |
CHROMIUM_BIN | auto-detect (chromium, chromium-browser, google-chrome) | Browser binary |
curl -s http://127.0.0.1:18801/json/version
If you get JSON with Browser and webSocketDebuggerUrl — it's ready.
browser navigate url=https://example.com
browser wait --load networkidle
browser snapshot
| Action | Command |
|---|---|
| Open page | browser navigate url=<URL> |
| Wait for load | browser wait --load networkidle |
| Read page content | browser snapshot |
| Click element | browser click ref=<ref> |
| Type text | browser type ref=<ref> text=<text> |
| Scroll to element | browser scrollintoview <ref> |
| Take screenshot | browser screenshot |
| Run JavaScript | browser evaluate --fn "document.title" |
Always use the default snapshot format (no extra parameters):
browser snapshot
Do NOT use:
refs=aria — returns accessibility tree without actionable refsdepth=2 or other depth limits — truncates DOM and hides contentThe default AI format returns full page text with refs (e12, e293, etc.) suitable for click/type.
Single-page apps (React, Next.js, etc.) continuously update the DOM. Refs become stale between snapshots.
After every navigation:
browser wait --load networkidle
browser snapshot
Before clicking:
browser scrollintoview <ref>
browser click <ref>
If click fails ("Element not found or not visible"):
browser snapshot — never reuse old refsbrowser screenshot to see the visual statebrowser evaluate --fn "document.querySelector('...').click()"To use a site that requires login, export cookies from a browser where you're already logged in and import them:
Step 1 — Export cookies (in your regular browser):
cookies.jsonscp cookies.json server:/tmp/Step 2 — Import:
python3 ~/.openclaw/workspace/skills/chromium/scripts/import_cookies.py \
/tmp/cookies.json \
--domain example.com
Step 3 — Verify by navigating to the site and checking if you're logged in.
| What | Path |
|---|---|
| Browser profile | $CHROMIUM_PROFILE_DIR (default: ~/.openclaw/workspace/chromium-profile) |
| Launch log | $CHROMIUM_LOG_FILE (default: ~/.openclaw/workspace/logs/chromium.log) |
If CDP doesn't respond within 3 seconds after launch, check the log:
cat ~/.openclaw/workspace/logs/chromium.log
Common issues:
pkill -f "chromium.*remote-debugging" manually.chromium binary — set CHROMIUM_BIN to the correct path (e.g., /usr/bin/google-chrome).