dsh-codex-chrome:在 DSH 里复用 Codex 原生 Chrome 控制能力

前言

DeepSeek Harness(DSH)里的智能体若要操作真实浏览器,常见做法是再起 Playwright、Puppeteer 或独立 MCP 服务,会话、cookies 与你在日常 Chrome 里已登录的状态往往对不上。OpenAI Codex 自带的 chrome@openai-bundled 插件本来就能驱动用户本机 Chrome(标签页、登录态、无障碍树、截图与输入),但它绑定在 Codex 的 node_repl 宿主上,不能直接当作 DSH 的 MCP 工具用。

下面介绍社区插件 dsh-codex-chrome(维护者 BruceZhang1993,GitHub:BruceZhang1993/dsh-codex-chrome):把 Codex 的 Chrome 插件运行时迁进 DSH,对外暴露一组原生 mcp__chrome__* 工具,并附带 control-chrome skill,运行时零额外依赖(复用 Codex 已缓存的 browser-client.mjs / browser-service.mjs)。

这是什么

dsh-codex-chrome 是 DeepSeek Harness 的 bundle 插件(版本 0.1.0,MIT 许可证,要求 Node.js ≥ 20)。它不重写浏览器控制逻辑,而是:

  1. 通过桥接进程 bin/chrome-mcp.mjs 对接 Codex 的 node_repl MCP,并在每次调用中注入 Codex 要求的 turn 元数据(_meta.x-codex-turn-metadata)。
  2. 将浏览器 API 重新发布为 DSH 可识别的 eleven 个 mcp__chrome__* 工具。
  3. bundled control-chrome skill,指导模型按「观察 → 操作 → 再观察」使用无障碍元素索引而非坐标。

分类上属于社区目录中的「联网工具」;目录页:skillhub.cn 插件页。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

Codex Chrome 插件在 DSH 侧的含义

在 Codex 里,Chrome 能力在 ~/.codex/config.toml 中启用:

[plugins."chrome@openai-bundled"]
enabled = true

它并非独立 MCP 服务器,而是 skill、hooks 与 vendor 运行时三部分的组合;实际控制由 Codex 缓存目录下的脚本完成,且只能在 Codex node_repl 宿主内作为 trusted service 运行。本插件的迁移策略是复用该 vendor 运行时,而不是另写一套浏览器驱动。

DSH 侧 @deepseek-ai/dsh-mcp-client 不支持 per-call _meta,因此桥接层必须在调用 node_repl 时注入 session_id、turn_id 等元数据,否则浏览器服务会直接报错(例如缺少 session_id、turn_id)。

核心功能:十一个 MCP 工具

重启 profile 后,模型可见下列工具(名称前缀均为 mcp__chrome__,下表省略前缀):

工具 作用
chrome_status 列出已连接浏览器、当前绑定与打开的标签
chrome_select 绑定浏览器:chrome / edge / brave / vivaldi / opera / iab / extension / default / auto
chrome_tabs list / new / select / close / user_tabs / claim
chrome_navigate goto / back / forward / reload
chrome_observe state(无障碍树,推荐)/ dom / visible_dom / screenshot / both
chrome_act via:"ax":点击、填值、输入、按键等;via:"locator":Playwright 定位器操作
chrome_read 读文本、属性、可见性、计数等
chrome_evaluate 在页面内求值(只读表达式)
chrome_wait 等待 URL、加载、超时或选择器
chrome_js 在 Codex 运行时内执行 JS(agent / browser / tab 在作用域内)
chrome_end_turn 释放本 turn 的浏览器控制权(对应 Codex Stop hook)

推荐工作流(skill 中说明):observe → act → observe;优先用无障碍树返回的元素索引,每次操作后重新 observe 以刷新索引。

典型观察调用示例(来自 README 说明):

chrome_observe { "mode": "screenshot", "fullPage": true }

可在用户自己的 Chrome 当前页面上取得整页截图,而无需另开无头浏览器。

安装与启用

DSH Desktop

在应用内打开插件管理器,从本插件目录安装 bundle(或待发布后从 registry 安装)。Desktop profile 仅由应用管理,不能使用 CLI 的 dsh plugin --profile desktop add …(会被拒绝)。

CLI profile(web 等)

将路径换成本机 clone 或下载后的绝对路径:

dsh plugin --profile web add /absolute/path/to/dsh-codex-chrome

等价的手动做法:在 profile 的 package.json 中加入依赖与 bundle 条目,然后在 profile 目录执行 pnpm install:

"dependencies": { "dsh-codex-chrome": "link:/path/to/dsh-codex-chrome" }
"dsh": { "profile": { "bundles": [ "…", "dsh-codex-chrome" ] } }

安装并重启后,应能看到上述十一个 mcp__chrome__* 工具及 control-chrome skill。

环境与前置条件

插件在 README 中声明的开发验证环境为 Linux(Arch,Chrome 154,Wayland 与 X11)。使用前需满足:

  1. ChatGPT/Codex 桌面应用至少运行过一次,以便生成 ~/.codex/plugins/cache/openai-bundled/{chrome,browser}/…(含 browser-client.mjs、browser-service.mjs、extension-host)。
  2. 目标浏览器已安装 ChatGPT/Codex 浏览器扩展,且 native messaging host com.openai.codexextension 已注册(例如 ~/.config/google-chrome/NativeMessagingHosts/)。
  3. 目标浏览器正在运行。

可选环境变量(资料中列出的部分):

变量 含义
CODEX_HOME Codex 主目录,默认 ~/.codex
DSH_CODEX_CHROME_NODE_REPL node_repl 可执行文件的绝对路径(README 截断处另有说明)

维护者在仓库中提供自检命令,可在安装后本地验证包一致性、MCP 握手与浏览器连通性:

node scripts/check-package.mjs
node --test
node scripts/doctor.mjs
node scripts/doctor.mjs --deep
node scripts/smoke.mjs

适用场景与注意

适合谁: 已在 Codex 生态中使用 Chrome 扩展 + native host,希望在 DSH 会话里让智能体操作同一套浏览器状态(已开标签、登录会话、cookies)的开发者;需要无障碍树驱动点击输入、整页截图、导航与简单 DOM 求值的自动化任务。

权限与安全: 插件以当前 DSH 进程权限运行,浏览器操作等同于本机用户可操作范围。安装前应阅读 GitHub 源码 与 MIT 许可证,确认 bridge 与 vendor 脚本行为符合你的安全策略。

实现层面的限制(README 说明): 浏览器服务激活后 Codex 内核文件系统只读,截图不能写盘,经 nodeRepl.emitImage 与桥接层回传;无障碍索引与产生它的 observe 调用绑定,chrome_act 会在操作前重新读取状态;vendor 截图路径可能把 JPEG 标成 PNG,桥接会按 magic bytes 校正类型以通过 DSH 校验。

不适用: 无 Codex 缓存与扩展的环境、非 Linux 且未自行验证的平台,或期望完全脱离 OpenAI Codex 运行时、纯 DSH 内置浏览器栈的场景——本插件的设计前提就是复用 Codex shipped 的 browser service。

结尾

dsh-codex-chrome 把 Codex chrome@openai-bundled 的能力以 DSH 原生 MCP 工具形式接进来,减少重复造浏览器自动化轮子,同时保留用户真实 Chrome 里的会话与标签。若要查看分类与简介,可打开 SkillHub 目录页;安装、工具表与 doctor 脚本详见 GitHub 仓库 README。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜