前言¶
在 DeepSeek Harness 里做 agent,常见需求是让模型能操作浏览器或本机应用。常见做法是再接一套 Playwright、Selenium 或单独的 RPA 栈,环境、权限和调用规范都要自己维护。若本机已经安装了 ChatGPT / Codex 桌面端,它自带一套 computer use 运行时(cua-repl、Chrome 扩展与 Sky 原生辅助功能通道),但 DSH 的 agent 默认不会自动接上这条链路。
下面介绍社区插件 dsh-codex-cua(维护者 16601134718,分类:工作流):安装后把 codex-cua 技能与客户端写入 DSH 的 skills 目录,agent 即可通过 cuad.py 驱动 Chrome 与 macOS 原生应用,走本机已有运行时,无需启动 ChatGPT 应用,也不向 OpenAI 发送请求(cua-repl 为本地进程)。
这是什么¶
dsh-codex-cua 是 DeepSeek Harness 的 bundle 插件(npm 包名 dsh-codex-cua,当前版本 0.1.0,MIT 许可证)。挂载时 lib/index.js 的 apply(ctx) 读取包内 assets/,幂等地写入 ~/.dsh/skills/codex-cua/(含 SKILL.md、cuad.py 与 docs/)。卸载插件不会删除已写入的技能文件;若要彻底清理可手动删除该目录。
插件与 OpenAI 无关联;强依赖桌面端内部实现,仅支持 macOS,使用前需自行合法安装并授权 ChatGPT / Codex 桌面端,相关风险见仓库免责声明。
核心功能¶
- 浏览器自动化:通过
cua.getBrowser、createBrowserTab、getTab等 API 读页面、点元素、填表;可与 Playwright 式evaluate配合。 - 原生应用操作:通过 bundle id(如
com.apple.finder)获取应用对象,读取辅助功能树、点击、输入。 - 常驻会话与低延迟:
cuad.py与本地cua-repldaemon 通信;daemon 常驻后热调用延迟约 0.09–0.14 s(README 实测),node_repl上下文跨多次send保留变量。 - 自检与排障:
python3 ~/.dsh/skills/codex-cua/cuad.py doctor检查运行时目录、扩展服务、Sky 服务、状态目录与扩展连接。
技能文件 SKILL.md 已写明调用规范、踩坑清单与延迟基线,agent 加载技能后可直接按文档调用,无需额外口头指导。
安装与启用¶
环境要求:macOS;已安装 ChatGPT / Codex 桌面端并在 Chrome 中装好对应扩展;Python 3.9+。Node 引擎要求 >=20(插件包本身)。不满足时 doctor 会逐项说明缺什么。
通过插件市场:在 DSH 插件市场搜索 dsh-codex-cua 安装;文档表格中对应命令为 dsh plugin add dsh-codex-cua(写入 skills 目录)。
从 GitHub 安装(无需等 npm 发布):
dsh plugin --profile <你的 profile> add github:16601134718/dsh-codex-cua
可锁定提交:github:16601134718/dsh-codex-cua#<sha>。
从 npm 安装(发布后可用):
dsh plugin --profile <你的 profile> add dsh-codex-cua
装完确认:
python3 ~/.dsh/skills/codex-cua/cuad.py doctor
典型用法¶
将客户端路径设为环境变量便于复用:
CUAD=~/.dsh/skills/codex-cua/cuad.py
浏览器:读标题
python3 $CUAD send --ms 90000 '
const b = await cua.getBrowser("1");
const t = await cua.createBrowserTab("1", "https://example.com");
globalThis.CUATAB = await cua.getTab(t.id, { browser: "1" });
nodeRepl.write(await CUATAB.playwright.evaluate(() => document.title));
'
原生应用:读取辅助功能树片段
python3 $CUAD send --ms 90000 '
const app = await cua.getApp("com.apple.finder");
nodeRepl.write((await app.getAXState()).slice(0, 400));
'
一次 send 里建立的绑定(如 CUATAB)在后续 send 中仍可用。超时 --ms 未返回则结果为 unknown,且不会自动重放。
工作原理(简述)¶
DSH agent 加载 codex-cua 技能并调用 cuad.py;无状态客户端通过 ~/.cuad/ 下的 req.jsonl / res.jsonl 与常驻的 node cua-repl.mjs 通信,daemon 再连 Chrome 扩展宿主与 Sky 服务。ChatGPT 桌面端退出后扩展宿主与 Sky 仍可能由系统托管继续运行。崩溃后下一次 send 会尝试重新拉起 daemon。
常用环境变量(资料原文):DSH_HOME(默认 ~/.dsh)、CUA_RUNTIME_DIR、CUA_BROWSER_SERVICE_DIR、CUAD_STATE_DIR(默认 ~/.cuad)。
使用规范与注意¶
技能内约定包括:观察默认用差分输出;不要在 getAXState / getScreenshot 前自行 setTimeout;结果未知时重新观察、不重发写操作;优先元素索引,坐标作兜底。细节见安装目录下 docs/pitfalls.md。
权限与安全:插件能力等同于当前用户权限;send 在本机执行任意 JavaScript。DSH 加载技能后 agent 会自行调用,安装前请阅读源码与 MIT 许可证,并确认接受该行为。默认 policy manual 下服务端审批需显式应答;policy auto-safe 并非完整安全模式。
适用谁:需要在 DSH 工作流里统一驱动 Chrome 与 macOS 原生 UI、且本机已具备 Codex 桌面端运行时的开发者。不适合非 macOS 环境或无法安装官方桌面端与扩展的场景。
故障时先跑 doctor,并查看 .cuad/daemon.log;README 故障表对 extension: 0、unknown、Debugger unattached 等有对应说明。
结尾¶
dsh-codex-cua 把「装技能 + 常驻客户端」打包成一条 DSH 插件安装路径,让 agent 复用本机 Codex computer use 栈,而不是在 Harness 里再搭一套平行自动化环境。
- 社区目录页:https://www.skillhub.cn/plugins/16601134718/dsh-codex-cua
- 源码与完整文档:https://github.com/16601134718/dsh-codex-cua
社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库当前信息为准。