前言¶
在 DeepSeek Harness(DSH)里谈需求、拆步骤、调工具,会话往往很长。若某一步更适合交给本机 OpenAI Codex CLI 在指定仓库里独立跑完——例如一次性改代码、查故障、扫目录——常见做法是切终端、手写 codex exec,再把输出贴回对话。上下文容易断,目录与安全边界也要自己记。
DSH Use Codex(dsh-use-codex)把这条链收成 DSH 里的一句自然语言委派:宿主按需调用插件工具,在本机启动非交互式 Codex,校验工作目录与白名单后执行,并把 stdout/stderr 摘要带回当前会话。维护者为 chaorenzeng,分类属于工作流;仓库标注为 experimental,许可证 MIT。
插件定位¶
一句话:为 DSH 注册一组工具,把独立任务委派给本机 Codex CLI,适合代码修改、故障排查、仓库分析和批量文件处理等一次性任务。
- 仓库:github.com/chaorenzeng/dsh-use-codex
- 社区目录:skillhub.cn 插件页(独立站点,与 DeepSeek / 幻方无从属关系)
- 当前版本(
package.json):0.4.2 - 运行:Node.js
>= 20;DSH 需支持 Cordis bundle patch 与工具注册(engines.dsh:>=0.2.1-rc.1 <0.3.0);Codex 需支持codex exec、-C、-s、--ephemeral - 系统:README 写明 macOS 或 Linux 可用,Windows 尚未验证
README 中已验证组合示例:DSH 0.2.1-rc.2、Node.js 22.x、Codex CLI 0.166.0。安装前可在终端确认 Codex:
codex --version
codex login status
若使用自定义 OpenAI-compatible provider,login status 显示未登录不一定表示不可用;以能否实际执行 codex exec 为准。
核心功能¶
下面只列资料中明确写出的能力。
自然语言与四个工具¶
- 在会话中说「让 Codex 做……」或「交给 Codex 执行……」,由 DSH 模型按需调用
codex_run。 - 四个内置工具:任务执行(
codex_run)、状态检查(codex_status)、危险模式开关(codex_danger)、即时启停(codex_switch)。
目录与安全¶
- 工作目录白名单
allowedRoots:Codex 只能在显式授权的真实目录中运行;cwd须为绝对路径,且解析软链后仍须在白名单内。 - 默认沙箱:默认使用 Codex 的
workspace-write;也可在调用时指定read-only、workspace-write或danger-full-access。 - 危险模式双重授权:
danger-full-access要求 profile 中allowDangerFullAccess: true,且运行时通过codex_danger打开;公共配置默认不允许。 - 其它:任务正文作为单个 argv 传递(无 shell 拼接);超时或取消时终止 Codex 进程组;stdout/stderr 有长度上限;状态文件只记开关与更新时间,不保存任务、目录或输出。
插件自身除 @deepseek-ai/schemastery 外无额外运行时 npm 依赖(相对「零运行时依赖」表述,以 package.json 为准)。
安装与启用¶
通过插件市场索引¶
在 DSH「发现 → 插件市场 → 添加索引源」中加入:
https://raw.githubusercontent.com/chaorenzeng/dsh-use-codex/main/market/index.json
搜索 DSH Use Codex 并安装。索引固定到不可变 Git 提交,安装来源仍指向上述仓库。
Profile 依赖与 bundle¶
若采用本地 file 依赖方式,需在目标 profile 的 package.json 中保留已有配置,并增加依赖与 bundle,例如 ~/.dsh/profiles/web/package.json:
{
"dependencies": {
"dsh-use-codex": "file:/absolute/path/to/dsh-use-codex"
},
"dsh": {
"profile": {
"bundles": [
"dsh-use-codex"
]
}
}
}
在对应 profile 目录执行依赖同步(示例为 pnpm):
cd ~/.dsh/profiles/web
pnpm install
若 profile 使用其他包管理器,用其等价命令。
本机配置¶
在目标 profile 的 cordis.patch.yml 中覆盖插件配置(路径与凭据勿提交到公开仓库):
- id: use-codex
name: dsh-use-codex
config:
enabled: true
bin: /absolute/path/to/codex
defaultCwd: /absolute/path/to/workspace
allowedRoots:
- /absolute/path/to/workspace
allowDangerFullAccess: false
timeoutSec: 900
maxOutputChars: 20000
公开仓库中的 cordis.patch.yml 以 /tmp 为占位且默认 enabled: false;应在个人 profile patch 里改为真实值。
| 配置项 | 默认值 | 说明 |
|---|---|---|
enabled |
false |
为 true 时 DSH 启动才注册工具 |
bin |
codex |
Codex 可执行路径,支持 ~ |
defaultCwd |
DSH 进程 cwd | 未传 cwd 时使用,须在白名单内 |
allowedRoots |
[defaultCwd] |
允许工作的真实目录列表 |
allowDangerFullAccess |
false |
是否允许选用 danger-full-access |
timeoutSec |
900 |
单次超时上限(1–3600 秒) |
maxOutputChars |
20000 |
stdout/stderr 各自保留字符上限 |
环境变量可选:CODEX_BIN、USE_CODEX_STATE、DSH_HOME(状态默认 ${DSH_HOME:-~/.dsh}/use-codex.json)。
重启与验证¶
重启 DSH 宿主使 profile 加载插件;必须新建会话,旧会话不会自动获得新工具。
在新建会话中发送:
让 Codex 做:只回复 USE_CODEX_OK,不要读取或修改任何文件。
返回 USE_CODEX_OK 表示插件、Codex CLI 与调用链正常。
典型用法¶
任务写清目标、范围、约束和验收标准,便于 Codex 独立完成。
自然语言委派:
让 Codex 做:检查当前仓库为什么测试失败,定位原因并修复;不要提交 commit。
交给 Codex 执行:分析 src 目录中的重复代码,先给出方案,不要直接修改。
指定目录与沙箱:
让 Codex 做:只读取这个仓库并总结架构。工作目录使用 /absolute/path/to/repo,使用 read-only 沙箱。
状态与开关:
检查 Codex 委派的状态。
关闭 Codex 委派。
关闭后 codex_run 会拒绝新任务;重新打开无需重启 DSH。
结构化参数示例(codex_run):
{
"task": "运行相关测试并修复失败原因,不要提交 commit。",
"cwd": "/absolute/path/to/repository",
"sandbox": "workspace-write",
"timeoutSec": 600
}
插件侧等价于在非交互场景调用带 -C、-s、--ephemeral 等的 codex exec;--ephemeral 表示不复用 Codex 会话,在 workspace-write 下仍可能修改允许目录内的文件。
适用场景与注意¶
适合:已在本地安装 Codex CLI、希望在 DSH 对话内完成「委派—执行—回传」闭环的开发者;一次性仓库级任务,且愿意用白名单收窄可写范围。
务必注意:
- 插件允许 DSH 启动本机会话内的 Codex,应把 DSH 视为具备受控本机执行能力;只装在可信本机,勿对不可信用户暴露 DSH。
- Codex 子进程继承 DSH 环境变量,可能含凭据;
workspace-write仍可改工作区,勿把敏感目录加入allowedRoots。 - 任务正文可能出现在 DSH 对话、宿主日志或 Codex 日志中;状态文件不存任务正文,但对话记录仍须自行管控。
- 除非宿主机另有隔离,不要开启
allowDangerFullAccess;打开codex_danger后,下一次默认沙箱可为无沙箱的danger-full-access。 - 安装与启用前请阅读仓库 README、SECURITY.md 与 LICENSE,按自身合规要求审查源码。
结尾¶
DSH Use Codex 把「在 Harness 里说需求」和「在本机 Codex 里落地执行」接到同一条会话里,并用白名单、沙箱与输出限长控制风险边界。需要细节时查 GitHub 仓库 与 SkillHub 目录页。