Skip to content

dsh-codex-control

Verified

@sereinis/dsh-codex-control · v0.1.0 · MIT

让 DSH agent 直接遥控本机 Codex:列线程、续任意对话、在指定工作区跑任务(常驻 app-server,非一次性子 agent)。

Install

dsh plugin add @sereinis/dsh-codex-control

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Creators

Readme

@sereinis/dsh-codex-control

让 DSH agent 直接遥控本机 Codex:列出所有对话线程、续任意已有对话、在指定工作区开新对话并拿回结果。常驻 codex app-server,不是一次性子 agent。

它是什么 / 不是什么

是 一个 DSH 插件(cordis plugin,npm 包 + dsh.bundle.patch)
是 agent 自己身上的三个工具:codex_threads / codex_send / codex_interrupt
不是 MCP server(不经过 MCP 协议,直连 Codex 的 app-server JSON-RPC)
不是 subagent_codex 那种子 agent(那个每次开一次性 ephemeral 线程、不回 threadId、不能续)

DSH 自带的 subagent_codex 是"另起一个 agent 去干活";本插件是"让当前 agent 当遥控器,对着你机器上已有的 Codex 对话说话"。

安装

dsh plugin --profile <profile> add @sereinis/dsh-codex-control

包本身不带全局挂载行,工具只在你显式引用的 preset 里出现。在目标 preset 的 plugins 里加一行:

- id: codex-control
  name: '@sereinis/dsh-codex-control'

然后重启该 profile。这样群聊 / 其它会话的工具面不会被污染。

工具

工具 作用 关键参数
codex_threads 列出 Codex 本机线程(跨工作区) cwd? search? limit?
codex_send 发一条任务并等这一轮跑完;给 threadId 就续对话,不给就新建 text(必填)cwd? threadId? effort?
codex_interrupt 打断某条线程正在跑的那一轮 threadId

codex_send 返回 threadId 和 Codex 的最终回答;过程中的推理、工具调用、stderr、diff 都不会回到你的上下文(结果另外限长 8000 字,超出截断)。

配置

在 preset 行里:

- id: codex-control
  name: '@sereinis/dsh-codex-control'
  config:
    codexExecutable: 'C:\path\to\codex.exe'   # 省略则自动找
    allowedRoots:                              # 为空 = 不限制
      - 'D:\projects'
    defaultCwd: 'D:\projects\demo'             # 省略则用当前会话工作目录
    model: 'gpt-5-codex'                       # 省略用 Codex 原生配置
    turnTimeoutMs: 600000

codexExecutable 的自动发现顺序:codex 环境变量 → Codex 桌面版 %LOCALAPPDATA%\OpenAI\Codex\bin\<最新 hash>\codex.exe → PATH 上的 codex。

典型用法

用户:把昨天那个项目接着做,先把 TODO 清一下
agent:→ codex_threads { cwd: 'D:\projects\web' }
       ← 01a1… | D:\projects\web | 重构登录流程 | 2026-10-21 18:30
       → codex_send { cwd: 'D:\projects\web', threadId: '01a1…', text: '把未完成的 TODO 清掉,跑一遍测试' }
       ← threadId: 01a1… / 已完成:改了 3 个文件,测试通过

安全与权限

  • Codex 子进程以 approvalPolicy: never + danger-full-access 启动,能读写它工作区里的任何文件、跑任何命令。
  • 工具的作用域是"挂载它的 preset":只给可信的 agent 挂,别挂到群聊/多人会话上。
  • 强烈建议配置 allowedRoots,把 cwd 限制在项目目录内。
  • 本插件不创建账户、不登录、不改 Codex 配置;认证沿用你本机的 ~/.codex。

已知限制

  • 只在 Windows 上验证过(macOS/Linux 依赖 codexExecutable 或 PATH 上的 codex)。
  • 需要本机已安装并登录 Codex(桌面版或 CLI 均可)。
  • ephemeral 线程不会出现在 codex_threads 里。
  • 同一线程被 Codex 桌面端正在使用时,续对话可能冲突,建议先中断或等它空闲。

给插件作者的一个坑

第三方插件里 import { defineTool } from '@deepseek-ai/dsh-tools',必须在 package.json 的 peerDependencies 里声明它,否则 DSH 的 loader 会直接报 failed to import(宿主不会替你解析未声明的 @deepseek-ai/*)。本包已声明,可作参考。

卸载

dsh plugin --profile <profile> remove @sereinis/dsh-codex-control

并从 preset 里删掉那一行。

License

MIT