DeepSeek Harness (DSH) 提供了基於插件和 Profile 的架構,官方的 dsh-headless 模式是一次性提交任務並退出,適合腳本調用。dsh-cli-interactive 是一個 out-of-tree 的 Profile Bundle,疊加在官方 dsh-base 之上,複用 DSH 的核心能力(Agent 循環、會話持久化、工具調用),將 headless 的“提交即退出”替換爲持久化的交互式終端 (REPL)。它不掛載 Host / HTTP / 瀏覽器插件,保持純粹的終端形態。
核心功能¶
該插件提供以下功能:
- 交互式終端 (REPL):輸入即消息,Agent 回覆採用流式輸出。
- 會話持久化:每輪結束後將會話落盤到
$DSH_HOME/sessions/*.jsonl。 - 恢復舊會話:使用
--resume參數恢復歷史會話繼續對話。 - 終端審批應答:在終端直接對權限請求進行
y/n確認。 - Slash 命令:支持
/help、/sessions、/model、/permission、/cancel、/session、/workspace、/exit等指令。 - 輸入歷史與補全:輸入歷史保存至
$DSH_HOME/cli.history,支持 Tab 補全。 - 零工具鏈構建:僅需 Node.js 22+,無需額外構建工具。
- 無網絡插件:不掛載 Host、HTTP 或瀏覽器插件。
安裝與啓用¶
使用前需滿足以下條件:
* Node.js 版本 >= 22。
* 已全局安裝 @deepseek-ai/dsh。
安裝插件到 cli Profile:
dsh plugin --profile cli add file:$PWD/dist
安裝後可使用 dsh --profile cli --dump-config 驗證組合層。
典型用法¶
進入 REPL:
dsh --profile cli
先跑一輪任務,然後進入 REPL:
dsh --profile cli "先 review 一下代碼庫"
跑一輪即退出(腳本友好模式):
dsh --profile cli --once "先 review 一下代碼庫"
恢復舊會話:
dsh --profile cli --resume session-xxxx
切換模型:
dsh --profile cli --model deepseek-v4-pro
管道輸入:
echo "任務" | dsh --profile cli --once
適用場景與注意¶
適用場景:需要長時間、多輪對話的代碼審查、調試或工作流值守。
已知限制:
1. 單 Agent 單進程:一個 CLI 進程僅支持一個會話。多會話需開啓多個進程。
2. 內存中會話:會話僅存在於運行中的進程內存裏,進程結束後需依賴磁盤日誌配合 --resume 恢復。
3. 無 Web 功能:不支持瀏覽器 UI 或 API 接口。
4. 審批依賴終端:無人值守的自動化場景下,審批請求會卡住等待輸入,建議使用 /permission never 或環境變量 DSH_PERMISSION_MODE=danger-full-access 預置策略。
5. 非 TTY 限制:在管道模式下不繪製 spinner 或活動行,僅輸出文本與輪末摘要。
6. 同步契約:插件 apply() 方法必須同步執行,否則會導致死鎖。
總結¶
dsh-cli-interactive 將 DSH 的底層能力封裝爲一個類 Claude Code 的 CLI 界面。它通過持久化 REPL、會話管理和終端審批,解決了從腳本化調用向交互式協作切換的需求。開發者可以通過簡單的 Profile 安裝快速接入。
- 項目目錄:dsh-cli-interactive
- 源碼倉庫:GitHub