给 AI agent 一个它能驱动的浏览器:vercel-labs/agent-browser 用 Rust 把无障碍树变成了 agent 的操作台
来源: vercel-labs/agent-browser · Rust · 今日 Stars: 914 · 协议: Apache-2.0
一句话: 一个原生 Rust CLI,让 AI agent 用一条条短命令驱动浏览器——snapshot 把页面压缩成带 ref 的文本,agent 点 ref、看结果、再循环
一个场景
你让 AI agent 去 GitHub 上给你的项目点个 star。
传统做法是给 agent 一个 Playwright 脚本,或者让它截屏看页面、然后用坐标点击。前者需要提前写好选择器,页面一变就废;后者 token 消耗惊人,一张截图几千 token,点错了还得重来。
agent-browser 给了第三条路:
agent-browser open github.com/vercel-labs/agent-browser
agent-browser snapshot -i # 返回交互元素列表,每个带 ref
agent-browser click @e3 # 点 star 按钮
agent-browser get url # 确认结果
agent-browser close
snapshot -i 返回的不是 HTML,不是截图,是一个精简的无障碍树(accessibility tree),每个可交互元素带一个 @e1、@e2 这样的 ref。agent 只需要读文本、点 ref、再读文本——一个循环就完成了浏览器操作。
为什么是"无障碍树"
浏览器自动化有三种主流路线:
- CSS 选择器 / XPath:Playwright、Selenium 的路线。精确,但脆弱——页面结构一变选择器就废了,而且 agent 需要提前知道选择器是什么
- 视觉 + 坐标:截屏让多模态模型看,然后用坐标点击。灵活,但 token 消耗巨大,一张截图几千 token,而且视觉模型对"小按钮被遮挡"这类情况判断不准
- 无障碍树:浏览器为屏幕阅读器维护的页面结构化表示,天然就是文本,每个元素有 role、name、state
agent-browser 选了第三条路。snapshot 命令把页面输出成这样的文本:
- link "Learn more" [ref=e1]
- button "Submit" [ref=e2]
- textbox "Search" [ref=e3]
agent 读这段文本,知道页面有什么、每个元素的类型和名字、对应的 ref 是什么。然后 click @e2 就完事了。
这比 HTML 精简一个数量级——没有 div 嵌套、没有 class 名、没有样式代码。也比截图省 token——几十个元素的页面,snapshot 可能就几百 token。
Rust 原生 + 守护进程
agent-browser 不是 Node.js 包里包了个 Playwright。它是一个原生 Rust 二进制,通过 Chrome DevTools Protocol(CDP)直接控制浏览器。
架构上有一个细节值得注意:浏览器在命令之间保持打开。
传统 CLI 浏览器自动化工具每次命令都启动新浏览器实例。agent-browser 的做法是第一次命令时启动一个后台守护进程,守护进程持有浏览器实例。后续每条命令发给守护进程,浏览器状态保持连续。
这意味着 agent 可以:
open打开页面snapshot看元素click点按钮snapshot看结果fill填表单submit提交
每一步都是一条短 shell 命令,不需要在一个长脚本里维护状态。守护进程默认 1 小时无命令后自动关闭。
为 agent 生态设计
agent-browser 不只是个 CLI,它还自带了"技能系统":
agent-browser skills get core # 核心循环:snapshot → act → check
agent-browser skills get core --full # 完整命令参考
agent-browser skills list # 专门技能:electron、slack 等
这些 skills 是给 AI agent 的"使用说明书"。agent 第一次用 agent-browser 时,跑 skills get core 就能学会怎么用——不需要人类写 prompt 教。
它还支持 MCP(Model Context Protocol):
agent-browser mcp # 启动 MCP server over stdio
这意味着任何支持 MCP 的 agent 客户端(Claude Desktop、Cursor 等)都能直接调用 agent-browser。
命令一览
agent-browser 的命令分组很清晰:
| 组 | 命令 | 用途 |
|---|---|---|
| 导航和读取 | open back forward reload read snapshot get is |
打开页面、读内容 |
| 交互 | click dblclick fill type press hover select check scroll drag upload |
操作元素 |
| 等待 | wait |
等条件满足 |
| 捕获 | screenshot pdf record download diff |
截图、录屏、对比 |
| 页面状态 | cookies storage network set clipboard eval |
Cookie、存储、网络 |
| 标签页和框架 | tab frame dialog |
多标签、iframe、弹窗 |
| 调试 | console errors highlight inspect trace profiler vitals react a11y |
调试和性能 |
| 会话和认证 | session state auth profiles confirm deny |
会话持久化、认证 |
| Agent 集成 | skills mcp webmcp flow chat batch plugin |
与 agent 框架集成 |
有个细节:click 命令在目标被隐藏、禁用、在视口外、被遮挡(比如 cookie 同意横幅盖住了)时会报告失败而不是假装成功。这对 agent 很重要——它需要知道"我点成功了吗"。
引擎和云浏览器
默认用 Chrome for Testing,但也支持其他引擎:
- Lightpanda:一个为 AI agent 优化的浏览器引擎
- Obscura:另一个可选引擎
- CDP 模式:连接到已运行的 Chrome 实例
- iOS Simulator:驱动 Mobile Safari
- 云浏览器:Browserbase、Browserless、Browser Use、Kernel、AgentCore
这意味着 agent-browser 不只是一个浏览器工具,而是一个"浏览器抽象层"——agent 用同一套命令操作不同的浏览器后端。
为什么值得关注
2025-2026 年浏览器自动化赛道很热:browser-use、Stagehand、Ego、BrowserForge 都在做。但大多数方案要么是 Python 库(需要在一个进程里跑),要么是 SaaS(数据走云端)。
agent-browser 的独特之处在于:
- Rust 原生:启动快、内存占用低,适合在 agent 的工具链里作为常驻工具
- CLI 优先:不是 SDK,是命令行工具。任何能调 shell 的 agent 都能用,不绑定编程语言
- 守护进程模式:浏览器状态在命令间保持,agent 不需要在一个长脚本里管理状态
- Skills 系统:agent 自带使用说明书,不需要人类写 prompt 教
- MCP 原生支持:直接接入 MCP 生态
Vercel Labs 出品也意味着它和 Next.js 生态、Vercel 的 AI SDK 有天然的协同效应。如果你在构建 AI agent,需要让它能操作浏览器,agent-browser 目前是最"agent-native"的选择。
链接
讨论回复
加载中...正在加载回复...
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。