关于 Tabhand
Tabhand 是让编码 Agent 操作已登录 Chrome 的本地 MCP 服务,标签页在后台运行,不会抢占焦点。它为各 Agent 隔离标签页,并支持查看操作过程和暂停所有 Agent。
主要功能
- 01复用已登录的 Chrome
- 02在后台标签页操作网页
- 03隔离各 Agent 的标签页
- 04查看光标并一键暂停
- 05管理多个 Chrome 配置文件
适用场景
- 01让 Agent 访问已登录的邮件和控制面板
- 02在不切换前台的情况下处理网页
- 03并行运行多个 Agent 并隔离浏览器标签页
MCP 相关
Tabhand 通过 MCP 向 Agent 提供浏览器工具,包括导航、页面快照、点击、输入、截图和标签页管理。它在本机运行,并通过 Unix socket 连接 Chrome 扩展。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
13收录的工具列表 · 更新于 6 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 否 | 要加载的页面,例如 https://example.com。留空则打开空白标签页。 |
| profile | string | 否 | 要在哪个 Chrome 配置文件中打开标签页,可使用 browser_list_profiles 返回的名称或 ID。仅当用户在多个配置文件中安装了 Tabhand 时才需要。之后打开的标签页也会使用该配置文件。 |
详细介绍
Tabhand
让你的 AI Agent 使用已登录你账号的 Chrome,
在不会打断你的后台标签页中工作。
npx tabhand setup
兼容 Claude Code、Codex、Cursor、OpenCode、Gemini CLI、Copilot 等:总计支持 19 个 Agent,以及所有其他支持 MCP 的工具。
然后从 Chrome Web Store 添加扩展程序。设置过程会为你打开该页面。
为什么选择 Tabhand
- 使用你的登录状态,而不是空白浏览器。 Agent 在你常用的 Chrome 中工作,因此电子邮件、仪表盘和管理面板都能直接使用。你不必交出密码。
- 你可以继续工作。 每个 Agent 都有自己在后台打开的标签页,并按名称分组且设为静音。Chrome 不会跳到前台。
- 你的标签页始终属于你。 Agent 只能访问自己打开的标签页,不能访问你的标签页,也不能访问其他 Agent 的标签页。
- 你可以查看操作过程。 每个 Agent 都有自己的光标,可以移动、点击和输入;其标签页也会显示对应的图标。点击工具栏按钮即可同时暂停所有 Agent。
- 无需服务器。 Tabhand 完全在你的电脑上运行,不收集分析数据。页面只会发送给你正在运行的 Agent。请阅读隐私政策。
agent ──stdio──▶ tabhand mcp ──Unix socket──▶ native host ──native messaging──▶ extension ──chrome.debugger──▶ agent's tabs
- 默认在后台运行。 每个 Agent 会话都会在名为该 Agent 的标签组中打开自己的标签页,并将
active: false。焦点模拟会让这些标签页保持渲染状态,因此无需将其切换到前台,就能点击、输入和截屏。Agent 标签页会静音;页面可用后,Agent 就会继续操作,而不会等待所有视频加载完毕。 - 各个 Agent 各司其职。 扩展只允许某个会话访问该会话打开的标签页,以及这些页面打开的标签页和弹出窗口。你的标签页和其他 Agent 的标签页对它不可见。
- 与密码管理器兼容。 当页面显示其他扩展的界面(例如 iCloud Passwords 的自动填充菜单)时,Chrome 不允许 Tabhand 控制该页面。Tabhand 会从 Agent 标签页中移除这些界面,然后继续执行当前步骤。
- 不使用网络端口。 桥接程序通过 Unix 套接字通信,该套接字位于只有你能读取的目录中,每次运行都会使用新的令牌。网页和其他计算机都无法访问它。
- 不记录敏感信息,也不收集遥测数据。 桥接程序只记录连接和断开事件,不记录 URL、页面内容或输入的文本。
- 你可以查看操作过程。 Agent 在标签页中工作时,光标会停留在页面上,即使页面重新加载也会如此。它会滑向 Agent 点击的位置,每次点击时显示波纹,输入时显示输入指示点;当你切换到该标签页时会挥手,Agent 完成后则会淡出。只有在你查看时才会播放动画,而且 Agent 自己截取的屏幕截图中不会显示这些动画。
- Agent 标签页醒目易辨。 Agent 在标签页中工作时,该标签页的图标会变成 Agent 的箭头。Agent 完成后,网站原有的图标会恢复。
- 每个 Agent 都有自己的颜色。 Claude、Codex、OpenCode、Cursor、Gemini 和 Copilot 各自有专属的光标和标签组颜色;其他 Agent 则使用紫色光标,并显示自己的名称。使用
tabhand mcp --label <name> --theme <theme>可覆盖设置。 - 停止按钮。 点击工具栏图标,或点击 Chrome「已开始调试」提示栏中的「取消」,即可同时暂停所有 Agent。
- 支持多个 Chrome 配置文件。 如果多个配置文件(例如工作和个人配置文件)中都安装了 Tabhand,Agent 就能看到并选择其中任意一个,例如:「使用我的工作配置文件」。在某个配置文件中右键点击 Tabhand 图标,然后选择「为此配置文件命名」,即可为其设置 Agent 能识别的名称;也可以填写该配置文件的 Google 邮箱。如果未指定,Agent 会使用最先连接的配置文件。在某个配置文件中暂停 Tabhand 后,新任务会转到已启用 Tabhand 的配置文件。Agent 选定某个配置文件后会一直留在其中;如果你暂停了该配置文件,Agent 会收到通知,而不会转到其他位置登录。

设置(macOS、Google Chrome)
npx tabhand setup
仅此而已:
- 它会将 Tabhand 安装到
~/.tabhand,并将其连接到 Chrome。 - 它会将 Tabhand 添加到检测到的所有 Agent,并覆盖你的所有项目。每个新会话都会获得浏览器工具,服务端的说明会告知 Agent 何时使用这些工具。
- 修改前会征求你的许可。如果某个 Agent 有自己的
mcp add命令,设置程序就会使用该命令。否则,它会直接编辑 Agent 的设置文件,保留注释,并将原文件备份到~/.tabhand/backups。 - 它会在 Chrome 网上应用店中打开 Tabhand 页面,供你添加扩展(只需添加一次),并等待 Chrome 连接。
支持的 Agent:
- Claude Code、Codex、OpenCode、Cursor、Gemini CLI、Qwen Code、VS Code(Copilot)、Copilot CLI、Kiro、Amp、Factory Droid、Warp、Junie、Antigravity
- Devin Desktop(Windsurf)、Claude Desktop、Cline、Zed
若要只添加到部分 Agent,请运行 npx tabhand setup --harness claude,codex。
tabhand status 会检查安装状态、Chrome 连接状态以及各个 Agent。tabhand remove 会撤销所有更改。再次运行 npx tabhand@latest setup 即可更新。
任何其他 MCP 客户端都可以自行运行 ~/.tabhand/bin/tabhand mcp。
使用 Tabhand
npm install
node bin/tabhand.mjs setup # builds dist/tabhand.mjs and installs it from this checkout
node bin/tabhand.mjs reload # after changing the extension's code
从代码检出版本开始使用时,需要以未打包扩展的方式加载扩展(先开启“开发者模式”,然后点击“加载已解压的扩展程序”),而不是从 Chrome 网上应用店添加。
安装过程会复制一个打包好的文件(dist/tabhand.mjs,由 npm run build 构建),因为 macOS 不允许 Chrome 子进程读取“文稿”“桌面”或“下载”文件夹。Agent 和 Chrome 都会通过 ~/.tabhand/bin/tabhand 启动它。该启动器会记住运行安装程序时使用的 Node.js,因为 Agent 应用无法使用 shell 的 PATH。如果之后移除了该 Node.js,它会查找其他版本。如果 Chrome 始终无法连接,桥接程序的日志 ~/Library/Application Support/tabhand/host.log 会说明原因。
工具
| 工具 | 功能 |
|---|---|
browser_open_tab | 在 Agent 的标签页组中打开后台标签页,可选择加载 URL,并在指定的 Chrome 配置文件中打开 |
browser_navigate | 在会话的某个标签页中加载 URL |
browser_snapshot | 将页面作为无障碍大纲读取;可操作的元素(包括页面通过普通元素实现可点击效果的元素)会获得类似 e123 的引用 |
browser_click | 按引用或元素显示的文本点击元素 |
browser_type | 在字段中输入内容,可选择先清除内容并在之后按 Enter,也可按文本选择下拉选项 |
browser_press_key | 按下按键或组合键,例如 Shift+Tab |
browser_scroll | 向上或向下滚动 |
browser_upload_file | 将计算机上的文件附加到文件字段,或通过打开文件选择器的按钮附加(不会出现系统对话框) |
browser_handle_dialog | 接受或关闭页面打开的确认或提示对话框(警告框会自动关闭) |
browser_screenshot | 对标签页截图,即使该标签页在后台也可以 |
browser_list_tabs | 列出所有 Chrome 配置文件中的会话标签页 |
browser_list_profiles | 按名称列出已安装 Tabhand 的 Chrome 配置文件,并显示各配置文件处于开启还是暂停状态 |
browser_close_tab | 关闭会话中的某个标签页 |
测试
npm test会运行以下所有测试,但不包括冒烟测试。node test/setup.mjs会在包含现有 Agent 配置的临时主目录中运行安装、状态检查和移除操作。它会检查 Tabhand 是否已添加、注释和其他设置是否保留、第二次运行是否没有任何更改,以及启动器是否能提供 MCP 服务。node test/package.mjs会打包 npm 包、安装 tarball,并从中运行安装程序。node test/profiles.mjs会针对名为 “Work” 和 “Personal” 的模拟扩展运行两个桥接程序。它会检查 Agent 是否能按名称看到两个配置文件并选择其中一个、所选配置文件是否保持不变,以及暂停一个配置文件后新任务是否会转到另一个配置文件。node test/profile-name.mjs会在扩展的“Name this profile”页面上为临时 Chrome for Testing 配置文件命名,并检查 Agent 是否能看到该名称。npm run test:e2e会启动临时 Chrome for Testing 配置文件,并行运行两个 Agent,并检查它们是否无法访问彼此的标签页,以及浏览器是否始终不会切换到前台。node test/new-tabs.mjs会检查来自 Agent 标签页的链接、window.open()和弹出窗口是否不会接管你的标签页,以及 Agent 是否会获得新标签页。node test/upload.mjs会检查文件是否通过文件字段或按钮打开的文件选择器逐字节传送到页面,包括超过 Chrome 1 MB 消息上限的文件。node test/foreign-frames.mjs会使用模拟扩展检查 Agent 是否能处理密码管理器的自动填充菜单弹出的页面。npm run test:smoke会针对当前已打开的 Chrome 运行简短检查。node test/cursor-presence.mjs会检查光标和标签页徽标是否在首次操作前显示、在页面加载后仍保留,并在 Agent 完成后消失。node test/load-speed.mjs [--real]会比较 Agent 等待页面加载的时长与普通标签页的加载时长。node test/cursor-gallery.mjs会并排展示所有光标主题,node test/badge-preview.mjs会展示所有标签页徽标。
路线图
- 按网站审批:Agent 首次使用网站前会先询问
- 发送、购买或删除前进行确认
- 从密码管理器填入登录信息,AI 不会看到密码
- 下载内容和 iframe
- Windows 和 Linux
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。