dsh-subagent-codex:在 DeepSeek Harness 裏把任務委派給本機 Codex CLI

前言

DSH 的理念是「一切皆插件」,主 agent 可以通過 subagent 機制把任務拆給子 agent。但普通的 subagent 跑在 DSH 內部,和主對話用的是同一套環境;如果你想讓某塊工作交給 OpenAI Codex 完成——用 Codex 自己的模型和工具鏈、在與主對話隔離的進程裏跑——手動切終端、執行、再把結果貼回會話,流程很割裂。

dsh-subagent-codex 補的就是這一環。下面介紹它的定位、實現方式和用法。

這是什麼

dsh-subagent-codex(當前版本 0.1.1)由 mjylfz 維護,採用 MIT 許可證。安裝後,DSH 會話裏會註冊一個 subagent_codex 工具:你或主 agent 把任務描述交給它,插件在本機啓動一次獨立的 Codex CLI 任務去執行,結束後把最終輸出帶回主對話。任務在 Codex 的環境裏完成,與 DSH 主對話完全隔離——概括地說,DSH 負責統籌,Codex 負責幹活。

實現上,插件遵循 DSH 的 SubagentProvider 接口(@deepseek-ai/dsh-subagent 的 out-of-process 契約),註冊名爲 codex 的 provider。

工作機制

一次調用對應一次獨立任務

subagent_codex 是 one-shot 工具,每次調用都會 spawn 一次:

codex exec -- --skip-git-repo-check <prompt>

插件解析 Codex 輸出的 JSONL 事件流,取最後一條 agent_message 的文本作爲最終輸出,返回給委派方。

結果永遠返回終態

插件支持取消(AbortSignal 觸發時對進程發 SIGKILL)、超時和輸出截斷。無論正常結束、被中止還是執行失敗,結果都會解析爲終態返回,不會把異常拋進主對話。主 agent 拿到的是可處理的返回值,而不是一次中斷。

每次運行都有完整記錄

插件啓動 Codex 時不帶 --ephemeral,每次調用都會把完整會話寫入磁盤:

~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-<timestamp>-<session-id>.jsonl

文件裏是這次任務的完整對話:輸入、Codex 的中間過程、最終輸出。事後可以用 codex resume 找回該會話繼續,或用 codex archive 歸檔。

配置

provider 行支持的配置項如下:

- id: subagent-codex
  name: 'dsh-subagent-codex'
  config:
    command: codex            # codex CLI 可執行文件(PATH 名或絕對路徑)
    cwd: /path/to/workdir     # 可選,子任務工作目錄(缺省繼承父會話 workspace)
    model: o3                 # 可選,指定模型(codex exec -m)
    sandbox: workspace-write  # 可選:read-only | workspace-write | danger-full-access
    timeoutMs: 600000         # 單次任務超時(毫秒),默認 600000
    maxOutputChars: 40000     # 返回給委派方的輸出上限,默認 40000

其中 command 和 sandbox 值得多看一眼:command 決定插件去哪裏找 codex 可執行文件;sandbox 控制 Codex 執行任務時的文件系統權限級別。

安裝與啓用

先確認三個前提:

  1. Node >= 20;
  2. 已安裝 DeepSeek Harness;
  3. 已安裝 Codex CLI 並登錄(~/.codex/auth.json 存在)。不需要安裝 Codex 桌面 app,插件直接調用 codex CLI。

然後執行安裝命令:

dsh plugin --profile web add dsh-subagent-codex

也可以用本地 tgz 安裝:

dsh plugin --profile web add file:/path/to/dsh-subagent-codex-0.1.1.tgz

插件通過 dsh.bundle 聲明(cordis.patch.yml)自動把自己加進 bundle 棧。裝好後重啓 DSH,新開一個會話即可使用,工具名是 subagent_codex。

典型用法

直接在會話裏說,例如:

讓 codex 調研一下大語言模型推理加速的最新論文進展,整理成一篇帶對比的綜述

或者「讓 codex 子 agent 做 XX」。幾個典型場景:

  • 競品調研:讓 codex 對比 3 款主流筆記軟件的定價、功能、優缺點,給出選型建議和彙報材料;
  • 學習:讓 codex 把「什麼是區塊鏈」拆成 5 個遞進小問題,多來源交叉驗證,輸出帶 FAQ 的學習文檔;
  • 內容策劃:讓 codex 策劃小紅書爆款筆記,給出 3 個選題方向、標題、開頭鉤子、正文大綱和 5 條支撐素材;
  • 開發改造:讓 codex 把用戶認證從 JWT 遷移到 OAuth2,改鑑權中間件、補遷移腳本、寫單測和集成測試,並整理提交說明。

這類任務的共同點是成塊交付、一次調用拿回成品,適合丟給 Codex 獨立完成。

適用場景與注意事項

適合:一次性、可獨立完成的任務(調研、綜述、方案、一次完整改造),且你希望借 Codex 的模型與工具鏈來幹。

不適合:需要在 DSH 內部完成的任務——比如要調用 DSH 的記憶、會話歷史或其他 DSH 工具。這類活兒交給普通 subagent。

使用前注意幾點:

  1. 外部進程的能力邊界。provider 不聲明任何 start 能力(NO_START_CAPABILITIES),外部 CLI 無法強制執行 outputSchema / maxDepth / toolFilter / persona。
  2. DSH 側邊欄看不到 codex 子 agent 的運行記錄。外部進程 provider 不創建 DSH 會話,要查看運行過程,去 ~/.codex/sessions/ 目錄。
  3. 額度消耗。每次調用都用 ~/.codex 登錄的賬號跑 Codex,消耗對應的 OpenAI/Codex token 額度。
  4. 找不到 codex 命令(spawn ENOENT)。先執行 codex --version 確認安裝;如果裝在非默認位置,把配置裏的 command 指向絕對路徑,如 command: /path/to/codex。

最後,和所有 DSH 插件一樣,插件以當前 dsh 進程的權限運行。安裝前建議先閱讀源碼與許可證(本項目爲 MIT),確認符合自己的安全要求。

小結

dsh-subagent-codex 做的事情很單一:把 DSH 會話裏的任務委派給本機 Codex CLI,再把結果可靠地帶回來。one-shot 語義、終態返回、磁盤上的完整會話記錄,讓主 agent 可以放心把成塊的工作外包出去。

  • GitHub:https://github.com/mjylfz/dsh-subagent-codex
  • 社區插件目錄:https://www.skillhub.cn/plugins/mjylfz/dsh-subagent-codex
羽毛球分组比赛记分
小程序二维码

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

小夜