/install brave-browser-agent
Brave Browser Agent
Attach to the user's daily Brave Browser via CDP on port 9222. The browser has all login sessions and bookmarks. Agents only attach — never start, restart, or kill the browser.
Critical Rules
⚠️ 绝对禁止启动/重启/关闭浏览器! 浏览器由用户手动管理,agent 只 attach。 ⚠️ 绝对不要使用
--restart参数! 除非用户明确要求。
Multiple agents share the same browser instance (port 9222), which has all user login states.
- Port: 9222 — Brave's remote debugging port (non-configurable)
- Do NOT start/restart/kill browser — Browser is manually managed by user, agents only attach
- Do NOT use
openclaw browser start— Will crash Gateway - Do NOT use
openclaw gateway restart— Will crash Gateway - Do NOT use
--restartparameter — Strictly prohibited unless explicitly requested - Read-first preference — Use
evalto extract content, avoid modifying page state - If 9222 doesn't respond, tell user: "Brave Browser 未启动远程调试,请手动开启" — do NOT auto-start
Quick Start
Diagnostic Health Check (Recommended)
# Full check: CDP connection, tabs, script syntax, SKILL.md health
python3 {{SKILL_DIR}}/scripts/check_cdp.py
# Quick check (connection only)
python3 {{SKILL_DIR}}/scripts/check_cdp.py --quick
# JSON output for debugging
python3 {{SKILL_DIR}}/scripts/check_cdp.py --json
Check Browser Status (Legacy)
python3 {{SKILL_DIR}}/scripts/check_brave.py
List Tabs
python3 {{SKILL_DIR}}/scripts/cdp_exec.py list
Open a Page
python3 {{SKILL_DIR}}/scripts/cdp_exec.py open "https://example.com"
Execute JavaScript
python3 {{SKILL_DIR}}/scripts/cdp_exec.py eval \x3Ctab_id> "document.title"
Take Screenshot
python3 {{SKILL_DIR}}/scripts/cdp_exec.py screenshot \x3Ctab_id> output.png
Smart Interaction (Anti-Detection)
For anti-bot sites (Xiaohongshu, etc.), use CDP native mouse events instead of JS .click():
# Click element — real mouse events, isTrusted=true
python3 {{SKILL_DIR}}/scripts/cdp_exec.py interact \x3Ctab_id> --selector "button.submit"
# Type text into focused element
python3 {{SKILL_DIR}}/scripts/cdp_exec.py type \x3Ctab_id> "search query" --human
# Press a key
python3 {{SKILL_DIR}}/scripts/cdp_exec.py key \x3Ctab_id> Enter
Framework-Aware Click (React/Vue/Angular SPAs)
For SPA sites where standard CDP clicks fail (React/Vue/Angular), use multi-strategy auto-fallback:
# Multi-strategy click (auto: CDP native → React Fiber → Vue emit → dispatchEvent → Enter)
python3 {{SKILL_DIR}}/scripts/cdp_exec.py click-smart \x3Ctab_id> --selector "button.submit"
# Or find by text content
python3 {{SKILL_DIR}}/scripts/cdp_exec.py click-smart \x3Ctab_id> --text "发布"
# Detect which JS framework the page uses
python3 {{SKILL_DIR}}/scripts/cdp_exec.py detect-framework \x3Ctab_id>
# Deep-analyze a button (debugging)
python3 {{SKILL_DIR}}/scripts/cdp_exec.py analyze-button \x3Ctab_id> --selector "button.submit"
What click-smart Does (Strategy Order)
- Editor sync — Auto-syncs rich text editors before clicking (CKEditor 4/5, Lexical, ProseMirror, Quill, 语雀, iframe editors). Critical for Vue/React editors where content is not synced to framework state
- Hit-test check — ScrollIntoView + elementFromPoint (ensures element is visible and uncovered)
- CDP native click — Input.dispatchMouseEvent with complete event sequence
- React Fiber invocation — Calls React's
onClickhandler via__reactProps$. Fallback: React 18 root container event delegation for ByteUI/headless UI - Vue emit invocation — Enhanced Vue 2/3 detection: component tree traversal,
$emit,$listeners, setupState handlers, vnode event walk - dispatchEvent — Creates a native
MouseEvent(isTrusted=true)and dispatches it - Enter key — Focus + Enter key + form submit (for form buttons)
Publish Validation (auto): After all strategies, detects success via toast messages, URL changes, modal state, and button state. Reports errors if found.
Returns JSON showing which strategy succeeded and debugging info.
New Standalone Commands
# Validate if publish was successful (after clicking)
python3 {{SKILL_DIR}}/scripts/framework_click.py publish-validate \x3Ctab_id>
# Sync editor data without clicking
python3 {{SKILL_DIR}}/scripts/framework_click.py editor-sync \x3Ctab_id>
Platform-Specific Notes
| Platform | Framework | Known Issue | Solution |
|---|---|---|---|
| 掘金 | Vue 2 | 发布弹出层按钮 CDP 点击无效 | click-smart auto-syncs editor → tries Vue enhanced click |
| CSDN | Vue 3 + CKEditor iframe | 字数统计更新但按钮无反应 | editor-sync fires CKEditor change:data + iframe input event |
| 头条号 | React ByteUI | onClick 调用成功但无变化 | click-smart tries React 18 root delegation + deep fiber traversal |
| 阿里云开发者 | 语雀编辑器 | 非 contenteditable,注入困难 | editor-sync triggers lake-editor input events |
| 百家号 | Lexical | contenteditable 注入 | editor-sync calls lexical update + dispatchCommand |
Framework Detection Commands
# Quick framework detection
python3 {{SKILL_DIR}}/scripts/cdp_exec.py detect-framework \x3Ctab_id>
# Deep button analysis (for debugging)
python3 {{SKILL_DIR}}/scripts/cdp_exec.py analyze-button \x3Ctab_id> --selector "button.submit"
python3 {{SKILL_DIR}}/scripts/cdp_exec.py analyze-button \x3Ctab_id> --selector "button.submit" --index 0
Click Strategy Quick Reference
| Task | Command | Why |
|---|---|---|
| Simple click (known site) | interact |
Lightweight, uses CDP native events |
| Click on React/Vue SPA | click-smart |
Auto-tries 6 strategies + diagnostics |
| Click keeps failing | detect-framework + analyze-button |
Debug overlay/modals/disabled state |
| Form button that won't click | click-smart |
Auto-tries Enter key + form submit |
Wait for Page State
# Wait for page load
python3 {{SKILL_DIR}}/scripts/cdp_exec.py wait \x3Ctab_id> --page-load --timeout 10
# Wait for element to appear
python3 {{SKILL_DIR}}/scripts/cdp_exec.py wait \x3Ctab_id> --selector ".result" --timeout 10
# Wait for network idle
python3 {{SKILL_DIR}}/scripts/cdp_exec.py wait \x3Ctab_id> --network-idle --timeout 15
Page State Analysis
# List interactive elements (useful for exploring unknown pages)
python3 {{SKILL_DIR}}/scripts/cdp_exec.py elements \x3Ctab_id>
# Check page load status
python3 {{SKILL_DIR}}/scripts/cdp_exec.py page-status \x3Ctab_id>
# Detect pagination buttons
python3 {{SKILL_DIR}}/scripts/cdp_exec.py pagination \x3Ctab_id>
# Count elements matching selector
python3 {{SKILL_DIR}}/scripts/cdp_exec.py count \x3Ctab_id> --selector ".item"
# Smooth scroll (triggers lazy loading)
python3 {{SKILL_DIR}}/scripts/cdp_exec.py scroll \x3Ctab_id> --direction down --steps 3
# Highlight element for screenshot debugging
python3 {{SKILL_DIR}}/scripts/cdp_exec.py highlight \x3Ctab_id> --selector "#target"
When to Use What
| Task | Command | Why |
|---|---|---|
| Read content | eval |
No interaction needed |
| Simple click | eval "el.click()" |
Trusted sites |
| Anti-detection click | interact |
isTrusted=true |
| Fill form (anti-bot) | type --human |
Char-by-char |
| Fill form (fast) | type |
Bulk insert |
| Wait for content | wait |
Dynamic pages |
| Infinite scroll | scroll |
Lazy loading |
| Explore page | elements |
Unknown structure |
Command Reference
All commands go through cdp_exec.py:
| Command | Description |
|---|---|
list |
List open tabs |
status |
Check browser status |
open \x3Curl> |
Open URL in new tab |
close \x3Ctab_id> |
Close tab |
eval \x3Ctab_id> \x3Cjs> |
Execute JavaScript |
screenshot \x3Ctab_id> [file] |
Take screenshot |
interact \x3Ctab_id> |
CDP native mouse click |
type \x3Ctab_id> \x3Ctext> |
Type text |
key \x3Ctab_id> \x3Ckey> |
Press keyboard key |
wait \x3Ctab_id> |
Wait for page state |
scroll \x3Ctab_id> |
Smooth scroll |
elements \x3Ctab_id> |
List interactive elements |
page-status \x3Ctab_id> |
Page load status |
pagination \x3Ctab_id> |
Detect pagination buttons |
count \x3Ctab_id> |
Count elements by selector |
locate \x3Ctab_id> |
Get element coordinates |
highlight \x3Ctab_id> |
Highlight element outline |
snapshot \x3Ctab_id> |
Lightweight DOM snapshot |
click-smart \x3Ctab_id> |
Multi-strategy click (React/Vue auto-fallback) |
detect-framework \x3Ctab_id> |
Detect JS framework on page |
analyze-button \x3Ctab_id> |
Deep-analyze a button element |
Common Patterns
For detailed usage patterns and workflows, see references/PATTERNS.md.
For site-specific anti-detection strategies (Xiaohongshu, SPA pages, etc.), see references/site-patterns.md.
For React/Vue/Angular framework-aware clicking and platform-specific strategies (头条号, 掘金, CSDN, etc.), see references/framework-publish.md.
Troubleshooting
| Problem | Fix |
|---|---|
CDP HTTP error |
Check Brave is running with curl -s http://localhost:9222/json/version. If not, ask user to restart Brave with --remote-debugging-port=9222 |
Tab not found |
Run cdp_exec.py list to get current tab IDs |
JS Error |
Check if page loaded; add --await-promise for async ops |
websockets not installed |
pip3 install websockets |
| Brave won't respond | Ask user to restart Brave. DO NOT kill the process yourself. |
| Click not working | Use interact instead of eval ".click()" for anti-bot sites |
| Element not found | Use elements to check page structure; wait before interacting |
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install brave-browser-agent - 安装完成后,直接呼叫该 Skill 的名称或使用
/brave-browser-agent触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Brave Browser Agent 是什么?
Control Brave Browser via CDP for web browsing, content extraction, screenshots, and JavaScript execution. Use when needing browser automation, web scraping,... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 40 次。
如何安装 Brave Browser Agent?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install brave-browser-agent」即可一键安装,无需额外配置。
Brave Browser Agent 是免费的吗?
是的,Brave Browser Agent 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Brave Browser Agent 支持哪些平台?
Brave Browser Agent 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Brave Browser Agent?
由 mayf3(@mayf3)开发并维护,当前版本 v1.0.0。