前言¶
在 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 目錄頁。