专为 AI 代理设计 · 100% 原生 Rust

无头浏览器
自动化 CLI

紧凑文本输出最小化上下文使用,比 JSON 节省 10x token。 50+ 命令覆盖导航、表单、截图、网络、存储。

terminal
# 安装
$ npm install -g agent-browser
$ agent-browser install  # 下载 Chrome(仅首次)

# 或直接试用
$ npx agent-browser open example.com
50+
CLI 命令
~200
Token / 快照
5
平台支持
0
Node.js 依赖

核心特性

专为 AI 代理上下文效率而优化的完整浏览器自动化

代理优先

紧凑文本输出比 JSON 使用更少 token,~200-400 token vs ~3000-5000 全 DOM

引用系统

快照返回带 @ref 的可访问性树,确定性元素选择,无需重新查询 DOM

原生 Rust

CLI 和守护进程均为纯 Rust 实现,直接 CDP 通信,零 Node.js 依赖

功能完整

50+ 命令:导航、表单、截图、网络拦截、Cookie/存储、标签管理、PDF 等

会话隔离

多实例隔离浏览器,独立认证、存储和导航历史,支持会话持久化

跨平台

macOS (ARM64 / x64)、Linux (ARM64 / x64)、Windows (x64) 全原生二进制

为什么用 引用?

snapshot 命令返回紧凑的可访问性树,每个元素都有唯一引用如 @e1@e2

上下文高效 — 文本输出 ~200-400 token,而完整 DOM 需要 ~3000-5000
确定性 — 引用指向快照中的精确元素,无歧义
快速 — 无需重新查询 DOM,直接操作
AI 友好 — LLM 自然解析文本输出,快照+引用工作流最优
snapshot + ref workflow
# 导航并获取快照
$ agent-browser open example.com
$ agent-browser snapshot -i

# 输出:
# - heading "Example Domain" [ref=e1] [level=1]
# - link "More information..." [ref=e2]

# 使用引用交互
$ agent-browser click @e2
$ agent-browser screenshot page.png
$ agent-browser close

快速开始

多种安装方式,三步即可运行

1 安装

# npm(推荐 · 全平台)
$ npm install -g agent-browser

# macOS Homebrew
$ brew install agent-browser

# Rust Cargo
$ cargo install agent-browser

# 项目本地依赖
$ npm install agent-browser

2 下载 Chrome

$ agent-browser install # Chrome for Testing

# Linux 安装系统依赖
$ agent-browser install --with-deps

3 开始使用

# 无需安装即可试用
$ npx agent-browser open example.com
$ npx agent-browser snapshot -i
$ npx agent-browser click @e1
实时演示
# 打开网页
$ agent-browser open example.com

# 获取快照(仅交互元素)
$ agent-browser snapshot -i

# 输出:
# - heading "Example Domain" [ref=e1]
# - link "More information..." [ref=e2]

# 使用引用点击
$ agent-browser click @e2

# 截图
$ agent-browser screenshot page.png

# 注释截图(带编号标签)
$ agent-browser screenshot --annotate

# 关闭浏览器
$ agent-browser close

命令参考

50+ 命令覆盖全部自动化场景

导航与交互
open <url>              # 导航到 URL
click <sel>             # 点击元素
dblclick <sel>          # 双击
fill <sel> <text>       # 清空并填充
type <sel> <text>       # 输入文本
press <key>             # 按键(Enter, Tab 等)
hover <sel>             # 悬停
select <sel> <val>      # 选择下拉
check / uncheck <sel>   # 复选框
focus <sel>             # 聚焦元素
drag <src> <tgt>        # 拖放
upload <sel> <files>    # 上传文件
快照 / 截图 / 键盘
snapshot                # 可访问性树 + 引用
snapshot -i              # 仅交互元素
snapshot -i -C           # 含光标交互元素
snapshot -c -d 3         # 紧凑 + 限制深度
screenshot [path]        # 截图
screenshot --full        # 全页面
screenshot --annotate    # 带编号标签
pdf <path>              # 保存 PDF
keyboard type <text>     # 真实按键输入
keyboard inserttext <t>  # 插入文本
scroll <dir> [px]       # 滚动页面
eval <js>               # 运行 JavaScript
获取信息
get text <sel>          # 获取文本内容
get html <sel>          # 获取 innerHTML
get value <sel>         # 获取输入值
get attr <sel> <attr>   # 获取属性
get title               # 页面标题
get url                 # 当前 URL
get cdp-url             # CDP WebSocket URL
get count <sel>         # 统计匹配元素
get box <sel>           # 边界框
get styles <sel>        # 计算样式
检查状态 / Cookie / 存储
is visible <sel>        # 是否可见
is enabled <sel>        # 是否启用
is checked <sel>        # 是否勾选

cookies                 # 获取所有 cookie
cookies set <n> <v>     # 设置 cookie
cookies clear           # 清除 cookie

storage local           # localStorage
storage local set <k> <v>
storage session         # sessionStorage
语义定位器 · 操作:click / fill / type / hover / text
find role button click --name "Submit"  # 按角色
find text "Sign In" click                # 按文本
find label "Email" fill "test@test.com"  # 按标签
find placeholder "搜索" fill "query"     # 按占位符
find alt "logo" click                   # 按 alt 文本
find title "Menu" click                 # 按 title
find testid "submit-btn" click           # 按 data-testid
find first ".item" click                 # 第一个匹配
find last ".item" click                  # 最后一个匹配
find nth 2 "a" text                     # 第 N 个

# 选项: --name <name>  --exact
等待
wait <selector>         # 等待元素可见
wait <ms>               # 等待毫秒
wait --text "Welcome"   # 等待文本出现
wait --url "**/dash"    # 等待 URL
wait --load networkidle # 等待网络空闲
wait --fn "window.ready" # JS 条件
wait "#sp" --state hidden # 消失
网络拦截
network route <url>             # 拦截
network route <url> --abort     # 阻止
network route <url> --body <j>  # 模拟
network unroute [url]           # 移除
network requests               # 查看
network requests --filter api  # 过滤

clipboard read / write / copy / paste
浏览器设置
set viewport <w> <h> [scale]  # 视口
set device "iPhone 14"        # 模拟设备
set geo <lat> <lng>           # 地理位置
set offline [on|off]          # 离线模式
set headers <json>            # HTTP 头
set credentials <u> <p>      # 基本认证
set media [dark|light]        # 配色方案
标签 / 框架 / 导航
tab                     # 列出标签页
tab new [url]            # 新建标签页
tab <n>                  # 切换到第 n 个
tab close [n]            # 关闭标签页
window new               # 新建窗口
frame <sel>              # 切换 iframe
frame main               # 返回主框架
back / forward / reload  # 导航
dialog accept / dismiss  # 对话框
差异对比
diff snapshot                      # 当前 vs 上次
diff snapshot --baseline f.txt     # vs 文件
diff screenshot --baseline b.png   # 视觉差异
diff url v1.com v2.com              # 比较 URL
diff url a b --screenshot           # URL 视觉对比
调试工具
trace start / stop       # 记录追踪
profiler start / stop    # Chrome 分析
console                  # 控制台消息
errors                   # 页面错误
highlight <sel>          # 高亮元素
inspect                  # DevTools
state save / load / list # 状态管理
connect <port>           # CDP 连接

架构设计

客户端-守护进程架构实现最优性能

Rust CLI

解析命令,与守护进程通信。即时启动,零延迟体验。无需 Node.js 运行时。

原生守护进程

纯 Rust 守护进程,直接 CDP 通信管理 Chrome。自动启动,命令间持久化。

Chrome / Lightpanda

使用 Chrome for Testing 或自定义浏览器。支持有头/无头模式,扩展在两种模式下均可工作。

agent-browser CLI
Rust Daemon (CDP)
Chrome Browser

守护进程在首个命令时自动启动 · 命令间持久化 · 可配置空闲超时自动关闭

macOS ARM64
macOS x64
Linux ARM64
Linux x64
Windows x64

会话与认证

多种方式持久化登录,隔离浏览器实例

会话隔离

# 不同会话
$ agent-browser --session agent1 open site-a.com
$ agent-browser --session agent2 open site-b.com

# 列出活动会话
$ agent-browser session list

# 每个会话拥有独立:
# 浏览器实例 · Cookie · 存储 · 导航历史

持久化配置

# 持久化浏览器配置文件
$ agent-browser --profile ~/.myapp open app.com

# 会话自动保存/恢复
$ agent-browser --session-name twitter open twitter.com

# 状态加密 (AES-256-GCM)
$ export AGENT_BROWSER_ENCRYPTION_KEY=<hex>

HTTP 头认证

# 头作用域限于目标来源(安全)
$ agent-browser open api.example.com \
    --headers '{"Authorization":"Bearer <token>"}'

# 适用于: 跳过登录 · API 测试 · 切换用户

认证保险库

# 保存凭据(始终加密)
$ echo "pass" | agent-browser auth save github \
    --url https://github.com/login \
    --username user --password-stdin

# 一键登录(LLM 永远不会看到密码)
$ agent-browser auth login github
方法 适用场景 标志
持久化配置文件 完整浏览器状态跨重启 --profile <path>
会话持久化 按名称自动保存/恢复 --session-name <name>
浏览器导入 从已登录 Chrome 获取认证 --auto-connect + state save
状态文件 加载之前保存的状态 --state <path>
认证保险库 加密存储凭据,按名称登录 auth save / auth login

安全特性

为 AI 代理安全部署而设计的多层防护

🔐 认证保险库

本地存储凭据(始终加密),LLM 永远不会看到密码

📋 内容边界

用分隔符包装输出,LLM 区分工具输出和不受信任内容

🌐 域名白名单

限制导航到受信任域名,阻止子资源和 WebSocket 请求

📜 操作策略

静态策略文件控制破坏性操作

✋ 操作确认

对敏感操作类别(eval、download)需要显式批准

📏 输出限制

防止上下文窗口溢出,可配置最大输出字符数

# 安全部署示例
$ agent-browser \
    --allowed-domains "example.com,*.example.com" \
    --content-boundaries \
    --max-output 50000 \
    --confirm-actions eval,download \
    --action-policy ./policy.json \
    open https://example.com

与 AI 代理集成

支持主流 AI 编程助手和云浏览器提供商

🤖
Claude Code
🎯
Cursor
🐙
Copilot
🧠
OpenAI Codex
🌟
Gemini
🦆
Goose
OpenCode

安装 AI 编程助手技能

# 为所有支持的 AI 编程助手添加技能
$ npx skills add vercel-labs/agent-browser

# 或直接告诉代理
Use agent-browser to test the login flow.
Run agent-browser --help to see available commands.

云浏览器提供商

Vercel Sandbox

临时微型 VM 中运行,无需外部服务器

Sandbox.create()

Browserless

云浏览器基础设施,Sessions API

-p browserless

Browserbase

远程浏览器基础设施,轻松部署

-p browserbase

Browser Use

AI 代理云浏览器,免费额度可用

-p browseruse

Kernel

隐身模式 + 持久化配置文件

-p kernel

iOS 模拟器

真实 Mobile Safari,支持真机

-p ios --device "iPhone 16 Pro"

高级功能

CDP 模式、流式预览、命令链、本地文件

CDP 模式

连接现有浏览器:Electron、Chrome、WebView2、远程服务

$ agent-browser connect 9222
$ agent-browser --cdp "wss://..." snapshot
$ agent-browser --auto-connect snapshot

浏览器流式预览

WebSocket 实时流式传输视口,人类可以观看 AI 代理操作

$ AGENT_BROWSER_STREAM_PORT=9223 \
    agent-browser open example.com
# 连接 ws://localhost:9223 观看

命令链

用 && 链接命令,守护进程持久化保证高效安全

$ agent-browser open example.com \
    && agent-browser wait --load networkidle \
    && agent-browser snapshot -i

本地文件 & 自定义浏览器

打开本地 PDF/HTML,使用自定义浏览器或轻量 Chromium

$ agent-browser --allow-file-access \
    open file:///path/to/doc.pdf
$ agent-browser --executable-path /path \
    open example.com

配置

持久化默认值,环境变量覆盖

配置文件

创建 agent-browser.json 设置持久化默认值

{
  "headed": true,
  "proxy": "http://localhost:8080",
  "profile": "./browser-data",
  "userAgent": "my-agent/1.0",
  "ignoreHttpsErrors": true
}

优先级

1 ~/.agent-browser/config.json (用户级)
2 ./agent-browser.json (项目级)
3 AGENT_BROWSER_* 环境变量
4 CLI 标志 (最高)
$ agent-browser --config ./ci.json open example.com

准备好开始了吗?

一行命令即可安装,立即开始 AI 浏览器自动化之旅

$ npm install -g agent-browser
$ agent-browser install
$ agent-browser open example.com