DSH Use Codex:在 Harness 里用一句话把任务交给本机 Codex CLI

前言

在 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 对话内完成「委派—执行—回传」闭环的开发者;一次性仓库级任务,且愿意用白名单收窄可写范围。

务必注意:

  1. 插件允许 DSH 启动本机会话内的 Codex,应把 DSH 视为具备受控本机执行能力;只装在可信本机,勿对不可信用户暴露 DSH。
  2. Codex 子进程继承 DSH 环境变量,可能含凭据;workspace-write 仍可改工作区,勿把敏感目录加入 allowedRoots。
  3. 任务正文可能出现在 DSH 对话、宿主日志或 Codex 日志中;状态文件不存任务正文,但对话记录仍须自行管控。
  4. 除非宿主机另有隔离,不要开启 allowDangerFullAccess;打开 codex_danger 后,下一次默认沙箱可为无沙箱的 danger-full-access。
  5. 安装与启用前请阅读仓库 README、SECURITY.md 与 LICENSE,按自身合规要求审查源码。

结尾

DSH Use Codex 把「在 Harness 里说需求」和「在本机 Codex 里落地执行」接到同一条会话里,并用白名单、沙箱与输出限长控制风险边界。需要细节时查 GitHub 仓库 与 SkillHub 目录页。

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

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

Xiaoye