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