SuperAPI AI 工具集

duplex

Duplex 是一款由人类与 AI 共享的浏览器,双方使用同一标签页和同一实时会话:人类看到渲染后的页面,AI 读取 DOM 与页面源码。它提供 24 个基于 Playwright 的 MCP 工具(快照、点击、输入、截图、标签页、标注等),支持内置模型或任意 MCP 客户端,并可通过紧急停止热键(默认 F2 / Ctrl+Shift+K)随时接管。

访问官网

工具介绍

Duplex 是一款由人类与 AI 共享的浏览器,核心理念是“同一个浏览器,人类看渲染页面,AI 读 DOM 与源码,同一标签页、同一实时会话、同时进行”。

用途

Duplex 让 AI 与人类在同一个真实浏览器会话中协作。与 browser-use / Playwright MCP 让 AI 替你跑完一个流程不同,Duplex 让 AI 与你一起使用浏览器——同一标签页、同一会话,当双方同时操作页面时,人类优先。

主要能力

  • 真实浏览器:标签页、带搜索的地址栏(百度 / 必应 / 谷歌)、前进 / 后退 / 刷新、加载状态、主题、壁纸起始页、可自定义键盘快捷键和完整书签管理器(文件夹、编辑、排序、搜索)。
  • 人类优先协作:AI 在绑定的标签页上工作,在你交互时继续读取,但暂停对该页面的修改,并逐个交还页面。
  • 24 个 MCP 工具,基于 Playwright:snapshot 将任意页面压缩为带 [eN] 引用的紧凑 DOM 大纲;点击、输入、拖拽和读取通过 Playwright 定位器执行(跨 DOM 变化稳定、支持 iframe 与开放 shadow DOM、等待可取消)。其余工具覆盖标签页、导航、上传、控制台日志、JS 求值和页面标注。
  • 零配置桥接:stdio MCP 桥接(mcp-bridge)在首次工具调用时自动启动浏览器,兼容 opencode、Claude Code 或任意 MCP 客户端。
  • 实时会话镜像:当 AI 通过 opencode 工作时,其回复、推理和工具调用卡片实时流入侧边面板;在面板中输入可向同一会话注入消息。
  • AI 动作可视化:半透明光标、元素高亮和状态栏(“AI 正在点击「…」— F2 接管”)绘制在 Shadow-DOM 覆盖层中。
  • 紧急停止:按下配置的紧急停止键(默认 F2 / Ctrl+Shift+K)或点击状态栏即可立即接管:运行中的工具调用被中止,从面板启动的外部进程被终止,待确认项被拒绝,排队消息被丢弃。暂停状态在重启后仍保留。
  • 页面标注:按 Ctrl+Shift+A(或工具栏 ✎ 按钮,或使用 annotation_mode)在任意页面绘制框 / 圆 / 箭头 / 点并附加问题。标注被编译为结构化文本简报(DOM 大纲 + 可见文本 + 选择器 + 几何信息)发送给 AI,带送达回执,过期标注会被拒绝。
  • 内置智能体(可选):连接任意 OpenAI 兼容 API(DeepSeek、Kimi、Qwen、GLM、Ollama 等),让浏览器自行驱动。提供商管理支持从 opencode 一键导入。
  • 对话历史与会话恢复:内置智能体会话本地保存,可随时重新打开;浏览器标签页和活动页面在重启后恢复。

使用方式

安装:从 Releases 下载最新安装包(Windows 的 Duplex Setup x.y.z.exe、macOS 的 .dmg(Apple Silicon / Intel)或 Linux 的 .AppImage),运行并启动 Duplex。也可使用便携 zip(解压后运行 Duplex.exe)。

从源码构建:若 Electron 二进制下载失败,可用 $env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"; node node_modules/electron/install.js 重试。若在已安装应用旁运行开发版,设置 DUPLEX_DATA_DIR 到另一目录以避免共享设置和本地端点。

连接 opencode(推荐):

  1. 安装镜像插件:将 integrations/opencode/plugins/cobrowse-mirror.ts 复制到全局 opencode 插件目录(~/.config/opencode/plugins/),或项目的 .opencode/plugins/。
  2. 在 opencode 配置(opencode.json)中注册 MCP 服务器,项目级或全局——参见 opencode.example.json。
  3. 在 opencode 中让 AI 浏览:“open example.com and describe the page”。浏览器在首次工具调用时自动启动。
  4. 在 Duplex 侧边面板选择 opencode 标签并选择要跟随的会话(或保持“Auto”)。

使用内置模型(无需 opencode):面板 → 内置标签 → 模型设置 → 添加 OpenAI 兼容提供商(base URL、API key、模型名),或点击“从 opencode 导入”复用现有配置。本地模型将 base URL 指向 Ollama,例如 http://localhost:11434/v1。

适用场景

  • 需要 AI 与人类在同一浏览器会话中协作完成网页任务,如搜索、播放视频、填写表单、浏览信息并总结。
  • 通过 opencode、Claude Code 或任意 MCP 客户端让 AI 驱动真实浏览器,同时人类可随时观察和接管。
  • 使用页面标注向 AI 提问,即使纯文本 AI 也能“看到”所指内容。
  • 内置智能体可连接多种 OpenAI 兼容 API,适合希望浏览器自行驱动的场景。

限制

  • 安全边界:Duplex 让 AI 驱动你的真实浏览器会话,包括登录状态、Cookie 和本地数据。错误的 AI 操作可能触及真实账户和数据(发送消息、提交表单、修改或删除内容),可能造成严重后果。不要在登录敏感账户的环境中让智能体无人值守运行。紧急停止热键是最后的人类刹车,不能替代你对 AI 可触碰范围的判断。
  • 当你在页面上交互时,AI 输入是合成的 DOM 事件(isTrusted=false);依赖真实键鼠事件、contenteditable 或自定义控件的网站可能需要手动协调,且已产生的副作用无法撤销。
  • 取消粒度:进行中的 Playwright 调用受 200–250 毫秒轮询限制——已完成的操作(点击、提交、写入)无法回滚。
  • evaluate 会清理其作用域内的定时器 / RAF / fetch,但无法撤销在别处注册的回调(例如通过 document.defaultView);高级用法正在进一步约束。
  • 元素引用是快照作用域的:导航或大幅 DOM 变化后需重新快照(过期引用会以明确消息失败,而不是点击错误元素)。
  • 直接 MCP 客户端共享默认调用者身份;计划在 0.3.0 引入显式任务开始 / 结束 / 交接协议。
  • opencode 消息去重依赖插件;若断开时间超过租约,已接受但未确认的消息可能被投递两次——精确去重需要上游消息 ID。
  • 没有结构化启动身份的自定义 CLI 仅在出现唯一新记录时被接受;模糊情况会被拒绝而非猜测。
  • 内置多模态图像上下文、站点特定自定义控件和跨平台交互尚未完全验证。
  • 内置智能体是便利选项:本地 / 较小模型在长工具使用链上明显不如完整 opencode 设置可靠。
  • 通过操作系统打开页面的 CLI 工具(Claude Code、Codex 等)遵循系统默认浏览器。要将其路由到 Duplex,需在操作系统设置中选择 Duplex 一次——⋯ → 设为默认浏览器… 会打开该页面(绝不强制)。从 Duplex 启动的 CLI 和命令也会获得 BROWSER=duplex-open 垫片,覆盖遵循 $BROWSER 的工具。

架构说明

Electron 主进程在 127.0.0.1 上提供一个小型本地 HTTP API,由每次启动的 bearer token 保护(端点信息写入 ~/.cobrowse/endpoint.json)。dist-bridge/index.cjs 是一个 stdio MCP 服务器,将工具调用代理到该 API,并在应用未运行时自动启动它。页面自动化是 Playwright 通过浏览器自身的 Chromium:应用读取 DevToolsActivePort,将 targetId 匹配到每个标签页,并驱动定位器、iframe、开放 shadow DOM、可取消等待和脚本求值——即你正在看的同一页面,而非单独的自动化实例。协作层将每个任务绑定到其标签页,序列化同页写入,监视真实人类输入(滚轮 / 触摸 / 键盘 / 焦点)并按页面暂停 AI 修改;状态栏反映此状态并提供每页一键恢复。外部脚本也可向会话推送消息:POST /api/chat { "text": "..." }。