Browser Harness ♞
来源: https://github.com/browser-use/browser-harness
日期: 2026-05-05
评分: ⭐⭐⭐⭐⭐
一句话版本
Browser Harness 是一个极简的浏览器控制工具(不到 600 行 Python),让 AI 代理(如 Claude Code、Codex)通过 Chrome 的原生调试协议(CDP)直接、无中介地操控你的浏览器。它的核心理念和普通 AI 浏览器框架完全相反:不给 AI 预定义任何点击/输入/滚动函数,让 AI 自己写需要的东西。
基本信息
- 开发者: Browser Use (Gregor Zunic)
- 发布: 2026 年 4 月
- Stars: 10,600+
- Forks: 962
- 许可证: MIT
- 语言: Python 100%
- 核心文件: run.py (13行) + helpers.py (192行) + daemon.py (220行) + SKILL.md
这是什么?
Browser Harness 是一个"自我修复的浏览器控制系统"。它通过一条 WebSocket 直连 Chrome,让 AI 代理直接用原生的 Chrome DevTools Protocol (CDP) 命令操控浏览器。不是又一个包装好的框架——而是一个让 AI 能自己编写操控逻辑的工具。
架构
Chrome / Browser Use Cloud → CDP WebSocket → daemon.py → IPC → run.py
- daemon.py: 保持长连接,管理 CDP WebSocket
- run.py: 加载 helpers 并执行 Python 代码
- helpers.py: CDP 的薄封装(192行),AI 可以编辑
- agent-workspace/agent_helpers.py: AI 自己写的辅助函数
- agent-workspace/domain-skills/: 社区贡献的站点专用技能
两种浏览器连接方式
1. Way 1(真实浏览记录):勾选 chrome://inspect/#remote-debugging 的复选框,用你平时用的 Chrome 配置文件,继承所有登录态、插件
2. Way 2(隔离环境):启动 Chrome 时加 --remote-debugging-port=9222 参数,使用独立的配置文件,无弹窗干扰
3. 云浏览器:Browser Use Cloud 免费层(无需信用卡),内置反检测、代理、验证码识别
核心哲学:Agent Harness 的苦涩教训
这个项目建立在一篇深度博客《The Bitter Lesson of Agent Harnesses》的核心理念之上:
> "不要包装 LLM。也不要包装它的工具。你的辅助函数(helpers)本身就是抽象——删掉它们。让 AI 自己写需要的东西。"
传统框架的做法:
- 预定义大量点击、输入、滚动、选择等函数
- 构建 watchdog 监控各种 Chrome 崩溃场景(标签页崩溃、目标分离、OOM 等)
- 每个处理程序都需要与 Chrome 内部逻辑保持同步
Browser Harness 的反直觉做法:
- LLM 本身就在训练数据中见过海量的 CDP 命令(
Page.navigate、DOM.querySelector、Runtime.evaluate) - 不给 AI 任何预定义的点击/输入函数
- 当 AI 遇到问题时(比如需要上传文件但没有
upload_file()函数),它直接用代码编辑能力把它写进 helpers.py - Chrome 崩溃?AI 读取错误、重新连接、重试——它见过成千上万个 Chrome 崩溃的讨论
自我修复循环
Agent 需要上传文件
→ 发现 helpers.py 中没有 upload_file()
→ 搜索 helpers.py,确认缺失
→ 写入 upload_file() 函数(使用 DOM.setFileInputFiles)
→ 运行成功
这个循环不是硬编码的。AI 只是自然地把"缺函数"当成"修 import 错误"来处理。
实际案例
| 场景 | 过程 |
|---|---|
| **文件上传** | 遇到 ``,发现无现成函数,自己写了一个 DOM.setFileInputFiles 封装 |
| **大文件分块上传** | 上传 12MB 文件时发现 CDP WebSocket 有 ~10MB 限制,自动切换成分块上传模式 |
| **Gusto 员工生日导入日历** | 导航到员工页面 → 从 DOM 提取生日 → 创建 Google Calendar 事件 |
| **Azure 管理面板** | Azure 的 iframe 套 iframe 架构,用坐标点击(Input.dispatchMouseEvent)在合成器层级穿透 |
与我们项目的关联
这个项目对我们有几个直接的意义:
1. Browser Use 在思考方式上的演进是一个路线图信号:从"写复杂的框架给 AI 用"到"让 AI 自己写工具"——这种思路转变对任何 AI 工具链设计都有参考价值
2. SKILL.md 模式:Browser Harness 的核心文件之一就是 SKILL.md,告诉 AI 如何使用它——和我们自己团队使用的 skill 架构异曲同工
3. 自我修复的 Web 代理概念:如果我们需要让 AI 代理操纵任何网页,Browser Harness 的"不到 600 行"和"AI 自己写 helper"的设计比传统的 Playwright/Selenium 框架灵活得多
4. Domain Skills 社区:AI 运行后自动生成的站点技能文件,可以共享给社区——和我们的 skill 分享理念一致
评分
| 维度 | 分数 | 说明 |
|---|---|---|
| 创新性 | ⭐⭐⭐⭐⭐ | 与主流框架完全相反的哲学,但被实践验证有效 |
| 代码简洁度 | ⭐⭐⭐⭐⭐ | 不到 600 行核心代码,没有多余的抽象层 |
| 实用性 | ⭐⭐⭐⭐⭐ | 实际案例证明了在复杂场景下的可用性 |
| 文档质量 | ⭐⭐⭐⭐⭐ | README + install.md + SKILL.md 结构清晰 |
| 与我们契合度 | ⭐⭐⭐⭐ | 和我们的 skill 体系理念一致,可直接借鉴 |
思考
"不要包装 LLM,也不要包装它的工具"——这句话值得反复琢磨。如果 Browser Harness 证明了什么,那就是:AI 不需要你替它想好每一步该怎么做,你需要做的是移除所有障碍,然后相信它能搞定。
这也是第一个真正意义上实践了"The Bitter Lesson"(Richard Sutton 的经典文章,核心理念是让计算自己去学习,而不是用人类知识去约束它)的 AI 工具项目。不是概念层面,而是在代码层面——删到只剩一条 WebSocket 直通 Chrome,剩下的让 AI 自己写。