browser-control
让编码智能体通过 Shell 和 CDP 操控真实浏览器。
工具由显式 CLI 子命令驱动,默认无子命令不会执行标准输入,并说明本地套接字、跟踪文件、CDP 端点、云服务及其环境变量;这些为数据流和外部效果提供了较好可见性。扣分在于 eval、原始 CDP、上传、脚本执行、配置文件同步和云会话均是高权限能力,没有权限收窄、危险操作确认或通用恢复机制;API 密钥仅说明从环境变量读取,未见脱敏、日志隔离或凭据生命周期措施。依赖版本精确固定且声称提交 Cargo.lock,发布物带 SHA-256,但所给证据未包含锁文件、漏洞扫描、SBOM,工作流动作也只固定到主版本标签。来源列出了两个灵感项目,许可证归属为 Om Labs,但发布者身份与维护主体关系不够清楚。
README、Cargo 元数据、发布工作流和端到端测试脚本对二进制名称、Rust/CDP 架构和主要用法保持一致,故自洽性充分。依赖和运行前提写得较清楚,doctor 也用于发现 Chrome,但仍依赖近期 Chrome、固定 Rust 版本、外部云服务和平台发布资产,未见离线或服务中断策略。失败路径会返回命令错误、设置超时并保存紧凑跟踪,测试封装也保留 stdout/stderr;但未提供完整错误分类、稳定错误码或面向用户的修复指引目录。
目标受众明确为已有规划与重试循环的编码代理,并覆盖本地浏览器、远程 CDP、云提供商、引用/CSS/坐标选择器及脚本组合,场景说明充分。README 明确工具只是浏览器控制管道,不承担代理规划,同时 raw CDP 是有意的能力边界。触发语义精确:操作由子命令启动,标准输入执行需显式 --from-stdin,空调用报错。环境适配扣分在于预构建目标只展示 macOS/Linux,要求较新的 Chrome/Chromium 与 Rust 1.92,且测试脚本的默认 Chrome 路径偏向 macOS;未见 Windows 支持说明。
文档结构清晰,安装、要求、快速开始、命令、云端、观测性、架构和验证均有示例;crate 名与命令名差异也明确解释,命名较稳定。MIT 许可证文本与 Cargo 元数据一致,可给满分。已说明若干设计限制和守护进程行为,但没有集中列出安全限制、站点兼容性或不支持项。版本号和基于 v* 标签的发布路径存在,但没有变更日志、兼容策略或升级说明。仓库和版权主体可见,然而未给出明确维护者、支持渠道、响应承诺或发布责任分工,且发布者身份未知本身不作负面推断。
文本或 JSON 输出、稳定元素引用、事件/网络/控制台环以及失败跟踪均直接服务代理消费,输出可用性证据充分。相较手写选择器或绑定特定 SDK,shell 组合、稳定引用及 raw CDP 后备机制提供明显增量价值。单一 Rust 二进制和本地模式降低部署成本,但仍需要真实 Chrome,云模式可能产生外部费用,端到端代理测试还依赖 Claude Code;文档未量化性能、资源占用或云成本,因此成本收益未给满分。
主要功能主张能在 README 的命令接口、Cargo 配置、发布工作流和端到端测试源码中找到对应依据,但“tiny”“fast”“reproducible”等表述缺少所给材料中的尺寸、基准或构建产物证明。多个来源对名称、版本、构建和浏览器交互相互印证,测试还设计了独立状态校验;但没有测试运行结果,且 Cargo.lock、rust-toolchain.toml、verify.sh 和核心 src 实现未提供,无法完成强交叉核验。文档通常把设计选择与操作事实区分开,但部分营销性或可复现性结论超出了当前证据。
- eval 和原始 CDP 可在浏览器上下文中执行任意操作;应把该二进制及其调用代理视为具有完整浏览器会话权限。
- 同步本地配置文件或连接已登录浏览器可能暴露 Cookie、会话令牌、浏览历史和个人数据;材料未展示脱敏或最小化控制。
- cloud-start 会把会话数据交给外部提供商,并使用环境变量中的 API 密钥;使用前应单独审查提供商、数据驻留、日志和费用。
- 失败跟踪会写入 .browser-control/traces;网络、控制台或页面状态可能含敏感内容,必要时启用 BROWSER_CONTROL_NO_TRACE=1 并制定清理策略。
- 预构建安装示例通过 latest 下载并直接解压安装;应固定具体版本并在执行前核对发布的 SHA-256 校验值。
这个 Agent 能做什么,适合哪些场景?
browser-control 是一个面向编码智能体的轻量 Rust 命令行程序,通过 Chrome DevTools Protocol 驱动本地或远程真实浏览器。它不包含 LLM,也不要求 MCP 或特定智能体框架,而是把快照、点击、输入、脚本执行和原始 CDP 调用暴露为可组合的 Shell 子命令。`snapshot` 会输出可操作元素及稳定的 `@e1`、`@e2` 引用,命令也可以使用 CSS 选择器或屏幕坐标定位目标。后台 daemon 保存有限的 DOM 事件、网络请求和控制台消息记录,失败时可在 `.browser-control/traces/` 下生成诊断材料。工具既能启动本地 Chrome,也能连接现有 CDP 端点,或通过内置配置使用 Browser Use、Steel、Hyperbrowser 和 Browserbase 等云浏览器。它适合已经具备规划与重试逻辑、只需要浏览器执行与观察接口的编码智能体。
典型流程从 browser-control init 创建 .browser-control/ 工作区开始,随后用 launch <url> 启动 Chrome,或通过 BROWSER_CONTROL_CDP_URL、BROWSER_CONTROL_CDP_WS 连接已有浏览器。智能体调用 snapshot 或其别名 observe 读取页面上的可操作元素,并使用返回的 @eN 引用执行 click、fill、select、upload、drag、press 和滚动操作;也可改用 CSS 选择器或坐标。观察命令包括 page-info、text、events、network、console、frames、cookies 和 tabs,而 eval 与 cdp 分别执行页面 JavaScript 和原始 CDP 方法。它还能等待页面加载、网络空闲或元素出现,生成截图和 PDF,管理标签页、视口、下载目录与原生对话框。run 可执行位于工作区中的脚本,并向脚本提供 BROWSER_CONTROL_BIN 与 BROWSER_CONTROL_WORKSPACE;--from-stdin 则显式启用来自标准输入的 Shell 命令。隐藏 daemon 通过 .browser-control/daemon.sock 提供事件历史,在命令失败时将错误及可用的事件、网络和控制台上下文写入跟踪目录。
- 构建编码智能体的开发者,可让已有智能体通过 Shell 完成网页导航、表单填写和按钮操作,而无需引入浏览器 SDK。
- 调试网页流程的工程师,可结合
snapshot、events、network、console和失败跟踪定位自动化步骤为何失效。 - 需要操作 Canvas、地图或缺少稳定 DOM 节点页面的自动化作者,可在元素引用与 CSS 选择器之外使用坐标点击和拖拽。
- 在本地与云浏览器之间切换的团队,可保留相同命令,只替换 CDP 端点或云提供商配置。
- 需要复现浏览器操作的 CI 或测试维护者,可使用锁定的 Rust 依赖、Shell 脚本、截图、PDF 和
scripts/verify.sh建立可重复流程。
这个 Agent 有哪些优点和局限?
- Shell 原生接口输出紧凑文本或 JSON,不要求 SDK、常驻应用服务器、MCP 或特定编程语言。
snapshot生成面向智能体的稳定@eN引用,同时保留 CSS 选择器和坐标操作作为补充。eval与cdp提供底层逃生通道,辅助命令未覆盖的浏览器能力仍可通过 JavaScript 或原始 CDP 调用。- 同一套命令可连接本地 Chrome、已有 CDP 端点以及多个内置云浏览器提供商。
- daemon 记录事件、网络与控制台历史,命令失败时自动生成紧凑跟踪,有利于自动诊断。
- 必须具备可通过 CDP 访问的 Chrome 或 Chromium;它不是面向 Firefox 或 Safari 的通用浏览器驱动。
- 项目刻意不提供 LLM、规划、重试或完整智能体框架,采用者需要自行提供这些上层行为。
- 运行会使用
.browser-control/工作区、Unix socket、状态文件和跟踪文件,需要本地文件系统访问与清理策略。 - 远程云会话需要对应服务的 API 密钥;Browserbase 还需要项目 ID,自定义提供商则要配置 API、认证头、路径和 CDP 字段。
- 资料未记录 ChatGPT、Claude AI、OpenAI API 或 Claude API 的原生适配,接入这些平台需要由宿主智能体执行 Shell 命令。
如何安装或部署这个 Agent?
最直接的方式是安装 crates.io 包:
cargo install browser-control-cli
browser-control --version包名是 browser-control-cli,安装后的命令名是 browser-control。也可从 GitHub Releases 下载对应平台的预编译文件;macOS 或 Linux 示例:
curl -fsSL https://github.com/keon/browser-control/releases/latest/download/browser-control-aarch64-apple-darwin.tar.gz | tar xz
install -m 0755 browser-control /usr/local/bin/从源码构建时运行:
git clone [email protected]:keon/browser-control.git
cd browser-control
rustup toolchain install
cargo build --locked --release
install -m 0755 target/release/browser-control /usr/local/bin/
browser-control --version运行需要近期版本且可通过 CDP 访问的 Chrome 或 Chromium;源码构建还需要 rust-toolchain.toml 指定的 Rust 工具链。
如何使用这个 Agent?
本地首次运行可执行:
browser-control init
browser-control launch https://example.com
export BROWSER_CONTROL_CDP_URL=http://127.0.0.1:9222
browser-control doctor
browser-control snapshot
browser-control click @e1
browser-control eval 'document.title'
browser-control cdp Browser.getVersion若浏览器已开放 CDP,可跳过 launch,设置 BROWSER_CONTROL_CDP_WS 或 BROWSER_CONTROL_CDP_URL;短别名 BU_CDP_WS 和 BU_CDP_URL 也受支持。使用云浏览器时,例如 Steel:
export BROWSER_CONTROL_CLOUD_PROVIDER=steelexport STEEL_API_KEY=...
browser-control cloud-start其他内置提供商分别需要 BROWSER_USE_API_KEY、HYPERBROWSER_API_KEY,或 BROWSERBASE_API_KEY 与 BROWSERBASE_PROJECT_ID。cloud-start 输出需要导出的 CDP 端点,随后即可继续使用相同的 snapshot、动作和观察命令。
这个 Agent 与同类方案有什么区别?
项目说明其灵感来自 Vercel 的 agent-browser 和 Browser Use 的 browser-harness。browser-control 对自身的定位是更小的 Shell 原生 Rust CLI:把 CDP、页面快照、脚本和浏览器状态作为通用机制暴露出来,把规划、重试和文件编辑留给外部编码智能体;来源没有提供与这两个项目的功能或性能对照数据。
常见问题
它是否内置大模型,或必须部署 MCP 服务?
能否使用已经运行的浏览器?
BROWSER_CONTROL_CDP_WS 或 BROWSER_CONTROL_CDP_URL 指向现有 CDP 端点即可跳过 launch。命令失败后能获得哪些诊断信息?
.browser-control/traces/<timestamp>/ 下写入错误,以及当时可用的 daemon 状态、事件、网络和控制台历史;设置 BROWSER_CONTROL_NO_TRACE=1 可关闭。云浏览器是否限定单一厂商?
是否必须从源码编译?
cargo install browser-control-cli 安装,也可使用 GitHub Releases 的预编译二进制;只有源码构建需要 Rust 工具链。