让 Claude Code 去"看一下后台还有哪些工单没处理",它多半第一步就卡住:它开的是一个新的自动化浏览器,哪个网站都没登录。你的 Cookie、SSO 会话、过了二次验证的账号,都在你现在开着的那个 Chrome 里。
chrome-use 解决的就是这个问题。它是一个开源的 CLI 兼 MCP 服务器(Apache-2.0),让 Claude Code、Codex、Cursor 或者你自己的脚本直接操作你正在用的 Chrome。连接走 Chrome 商店扩展加原生消息(native messaging),不开远程调试端口,也不会弹"是否允许远程调试"。
agent 的浏览器为什么没登录
大多数浏览器自动化会新建一个浏览器上下文。新上下文没有 Cookie,网站把它当陌生人:跳登录页、出验证码,有的还会发一封"新设备登录"邮件。
Playwright 和 Puppeteer 本身支持持久化 profile,也能连已有浏览器,问题出在连接方式上。它们通过 DevTools 协议跟 Chrome 通信,而 Chrome 136 起,默认 profile 不再接受 --remote-debugging-port。换一个独立 profile 能跑,但那个 profile 里又得重新登录一遍。
Chrome 144 在 chrome://inspect 加了远程调试开关,Chrome DevTools MCP 的 --autoConnect 用的就是它。开关一打开,这个 profile 的所有窗口都对工具可见,连接时还要在弹窗里点允许。
chrome-use 走的是另一条路。
连接方式
perl
agent(Claude Code / Codex / 脚本)
│ shell: chrome-use open, snapshot, click ...
▼
chrome-use CLI ──原生消息──▶ chrome-use 扩展 ──chrome.debugger──▶ 你的标签页
CLI 和扩展之间用的是 Chrome 原生消息,一条本机进程间通道,没有网络端口、没有 token、不经过远程服务器。扩展用 chrome.debugger 操作 agent 指定的标签页,再把结果交回 CLI,整个过程都在本机。
用下来能感觉到的几点:
- 登录态是你自己的。你在哪个 profile 登录了什么,agent 看到的就是什么。
- 只装一次。之后每次调用都不再弹确认。
- 不碰你的标签页。每个
--session有自己的彩色标签组,几个 agent 共用一个 Chrome 也互不干扰,你自己开的标签不会被动。 - 随时能接手。agent 在你看得见的窗口里操作,碰到二次验证或者它过不去的验证码,你在同一个窗口里把这一步做完,它接着往下跑。
有一点要提前说:扩展用的是 chrome.debugger,agent 的标签页被挂上时,Chrome 会在顶部显示正在调试此浏览器的提示条。chrome-use extension connect --silent 会带 --silent-debugger-extension-api 重启一次 Chrome 把它去掉,标签页和登录态会恢复。
三步装好
1. 装 CLI
macOS / Linux:
bash
curl -fsSL https://raw.githubusercontent.com/leeguooooo/chrome-use/main/install.sh | sh
Windows(PowerShell):
powershell
irm https://raw.githubusercontent.com/leeguooooo/chrome-use/main/install.ps1 | iex
脚本从 GitHub Release 下载对应平台的预编译二进制,不走 npm,不需要 token。Windows 下装到 %LOCALAPPDATA%\Programs\chrome-use,不要管理员权限,安装前会校验 sha256。
2. 装扩展,注册本地桥
先从 Chrome 商店添加 chrome-use 扩展(扩展 ID knfcmbamhjmaonkfnjhldjedeobeafmk),再注册一次原生消息宿主:
bash
chrome-use extension install # 一次性:注册本地桥
chrome-use doctor # 自检:环境、Chrome、daemon、配置
macOS 上 extension install 可能会提供一个配置描述文件,用来给所有 profile 强制安装扩展。装了它,Chrome 会进入"由你的组织管理"状态,"使用安全 DNS"设置会被锁住。不想要的话用 chrome-use extension install --no-profile,然后在每个 profile 里从商店手动加扩展。Windows、Nix、指定版本这些装法见安装指南。
doctor 通过只说明环境没问题,看不出你在哪个网站登录的是哪个账号,这个要到页面上确认。
3. 给 agent 装技能
安装脚本已经往 Claude Code、Codex、Cursor 和 ~/.agents/skills 里放了一个入口技能。想用插件管理的话:
Claude Code 插件市场(全局生效,自动更新):
bash
/plugin marketplace add leeguooooo/plugins
/plugin install chrome-use@leeguooooo-plugins
支持 skills.sh 的其他工具(需要 Node):
bash
npx skills add leeguooooo/chrome-use -g
这个技能会让 agent 去读 chrome-use skills get core。内容由二进制自己输出,跟你装的版本永远一致。
用 Codex 的要多加一行。Codex 自带浏览器插件,浏览器任务默认交给它。文档里记录过,在装了很多技能的机器上,Codex 会把技能描述截到几乎没有,技能抢不到路由,在提示词里点名 chrome-use 也没用。有效的做法是在项目的 AGENTS.md 里写:
rust
Use the `chrome-use` CLI from the shell for every browser task; start with `chrome-use skills get core`.
Do not use the built-in Chrome plugin for browser work here.
只支持 MCP、不能跑 shell 的客户端(比如 Claude Desktop),按 stdio 服务器配置:
json
{
"mcpServers": {
"chrome-use": { "command": "chrome-use", "args": ["mcp"] }
}
}
跑一个只读任务
先别让它碰重要的东西。把下面这段原样交给 Claude Code 或 Codex:
perl
用 chrome-use 打开 https://github.com/leeguooooo/chrome-use/issues,
搜索 is:issue daemon。先读 chrome-use skills get core。
使用 first-task 专用 session;用 snapshot -i 获取当前 refs,
填入 Search issues 输入框,再用 --observe 提交搜索。
检查结果 URL 中的查询条件,读取列表,返回三个匹配的标题和链接。
不要新建或修改 issue。遇到登录、权限或人工验证,让我处理。
你的 Chrome 里会多出一个标签组,能看到 agent 在 GitHub 搜索框里打字。判断成没成功看两处:结果 URL 里有 q=is%3Aissue+daemon,agent 返回的标题和链接确实是从页面上读到的。命令返回 success 不算数。
想看 agent 底下跑了哪些命令,可以手动走一遍:
bash
chrome-use --session demo open https://github.com/leeguooooo/chrome-use
chrome-use --session demo snapshot -i # 可交互元素,带 @eN 引用
chrome-use --session demo get title
snapshot -i 从无障碍树里取出可交互元素,每个配一个 @e12 这样的短引用。agent 对引用执行 click @e12、fill @e7 "文本",再 snapshot 一次确认页面变了没有。
几个 agent 同时用一个 Chrome 也是这套机制。每个 --session 对应一个彩色标签组,命令只作用在本组的标签上。不写 --session 时,chrome-use 会从支持的运行环境 ID 推出一个稳定的会话名,比如 Codex 的 CODEX_THREAD_ID,所以不同的 Codex 线程默认各有自己的 session,不会共用一个标签组。显式传的 --session 或环境变量 AGENT_BROWSER_SESSION 优先级最高。命名、session list 和交接的细节见会话文档。
这一步跑通,再去试需要登录的页面。建议挑一个你自己的后台,先只读,确认页面上显示的账号对了再往下做。
跟其他方案比
选型页列了十几种方案。目标是"让 agent 用我已登录的 Chrome"的话,最接近的是下面三个。各行内容来自对方官方文档,核对日期 2026-10-27:
| 怎么连浏览器 | 用谁的登录 | 哪些 agent 能用 | 需要装 / 授权 | |
|---|---|---|---|---|
| chrome-use | 商店扩展 + 原生消息,不开远程调试 | 你正在用的 Chrome,可选 profile | 任意 agent:CLI / MCP / HTTP | 一行安装 + 商店扩展 |
Chrome DevTools MCP(--autoConnect) |
Chrome 144+ 远程调试开关 | 默认 profile 的所有窗口 | 任意 MCP 客户端,也有 CLI | chrome://inspect 打开远程调试 + 弹窗允许;默认上报使用统计 |
Playwright 扩展模式(Playwright MCP --extension、playwright-cli) |
Playwright Extension(商店) | 你挑选的现有标签 | 任意 MCP 客户端,或 playwright-cli | 每次连接需批准(可配 token 免批) |
| Claude in Chrome | Anthropic 商店扩展 | 你的 Chrome / Edge | 只有 Claude:侧栏、Claude Code --chrome、Cowork |
Claude Pro / Max / Team / Enterprise |
怎么选:做前端调试和性能分析,用 Chrome DevTools MCP,它就是为这个做的。已经在用 Playwright MCP,扩展模式改动最小。只用 Claude 又有付费订阅,可以用官方的 Claude in Chrome,按它的文档,碰到登录和验证码会暂停交给你。想让 Claude Code、Codex、Cursor 或脚本都能在你登录好的 Chrome 里干活,不开远程调试,还可能几个 agent 同时跑,这是 chrome-use 的场景。
反检测:数字是自测的
驱动真实 Chrome,指纹本来就是真的,这点所有同类工具都一样。区别在自动化本身留下的痕迹,chrome-use 在这块做了这些事:
- 连真实 Chrome 时注入的 JS 补丁数为零。
Runtime.enable默认关闭。Runtime 域处于开启状态本身就是可检测的 CDP 信号,只有你要抓控制台或报错时才打开。- 不往 DOM 写标记。定位元素用节点句柄,不加临时属性,页面的 MutationObserver 看不到。
--humanize让鼠标走曲线、落点在元素内随机偏移、打字间隔有快有慢。遇到 Akamai、PerimeterX、DataDome 保护的页面会自动切到完整的拟人模式。- 验证码:普通易盾拼图用
solve-slider,可读的图标点选按截图点击,解不了再交给你。
反检测页给出的是项目自己在真实 Chrome 上测的结果:
scss
CreepJS 0% stealth · 0% headless
bot.incolumitas all checks OK
bot.sannysoft all green
BrowserScan Webdriver · User-Agent · CDP all clean
Cloudflare managed challenge (scrapingcourse.com) passed
文档自己也写明了,这是特定环境下的测量,不承诺不被识别,也不保证账号安全。选型页还写道,2026 年的独立测试发现:有头模式下这些指纹检测页几乎分不出工具之间的差别,裸 Playwright 也能过,真正拉开差距的是行为和运行环境。验证码没有工具能保证不出。普通验证码(易盾拼图、可读的图标点选)agent 会先试着解,解不了或遇到登录、二次验证就停下来交给你。
当前状态可以自己查:
bash
chrome-use stealth status
相关文档
- 安装指南:Windows、Nix、锁定版本、macOS 配置描述文件
- 已登录浏览器指南:第一个任务的完整步骤
- 选型对比:完整矩阵,包括 OpenCLI、ego(lite)、browser-use、Stagehand 和云端浏览器
- 反检测:测试条件和每一层做了什么
源码在 github.com/leeguooooo/...。装的时候卡在哪一步,可以提 issue,附上系统、CLI 版本和脱敏后的报错,别贴 Cookie、token 和私有页面内容。