前言¶
在 DSH(DeepSeek Harness)里跑智能体时,模型默认倾向完整句子和铺垫,长对话里 token 消耗快、阅读也慢。若只想在终端 TUI 或 Web 界面里把根智能体的回复压成短句、保留技术事实,又不想改 dsh 核心或 fork,社区里有一条纯插件路径:把上游 caveman 的 voice skills 打进 Cordis 服务,用 /caveman 开关和 TUI 角标控制。下面介绍维护者 farchanjo 发布的 caveman-plugin-dsh(GitHub:farchanjo/caveman-plugin-dsh,SkillHub 分类:客户端)。
这是什么¶
caveman-plugin-dsh 是一个 plugin-only 的 DSH 插件:不 patch 核心、不额外 npm 依赖、无构建步骤。它随包带上 caveman / ultracave / megacave 三套 skills、常驻 system-prompt 片段、/caveman 命令,以及在 TUI 上的状态角标(Web 侧无 tuiStatus,无角标)。子智能体(subagent) deliberately 不受 voice 影响,委派出去的报告仍是正常 prose。
宿主需 dsh 0.17+(插件 manifest v0.15)。代码为纯 ESM,lib/index.js 约 270 行;manifest 声明 commands.dsh/v1alpha1#Command 与 commands.invoke 权限,无需 grants 文件。
核心功能¶
简短回复与档位¶
开启后,根智能体倾向用片段式表达、去掉 fluff,技术事实保留。档位可通过命令或菜单选择:
caveman/ultracave/megacave(对应 bundled 的skills/*/SKILL.md)
/caveman 命令与口语切换¶
直接动词示例:
/caveman on # 从此简短
/caveman off # 恢复正常文风
/caveman status # 当前模式
/caveman caveman|ultracave|megacave
不带斜杠的口语也可触发(如 “stop caveman”、”talk like caveman”);模糊句子在开启决策模型时会先分类再执行。
页脚菜单(TUI)¶
输入 /caveman 或 /caveman help 会在 footer 打开数字向导,选数字只改本地状态、不发给模型;q 关闭。菜单 120 秒后过期。完整选项见仓库 README 表格(含 jev 开关、密钥、模型列表等)。
可选决策模型 Jev¶
默认关闭;/caveman jev on 开启后,松散措辞由 Jev 决策模型做 typed 分类(带 confidence),不做文本生成。Provider 含 typesafe(默认)、openrouter,以及用会话模型的 main。密钥存在状态文件 ~/.config/caveman-plugin-dsh/config.json,不进环境变量。分类失败、超时、401 等会被吞掉,不阻塞本轮对话。
持久化与 profile 配置¶
模式、档位、jev 开关等写入 config.json(目录 0700,文件 0600)。profile 行可选 config:
| Key | 默认 | 含义 |
|---|---|---|
alwaysOn |
true |
首次创建状态文件时的初始 voice |
decision.timeoutMs |
1500 |
单次分类硬超时 |
decision.apiKey |
– | 内联 OpenRouter key(如 CI),优先于文件 |
commands |
true |
注册 /caveman |
status |
true |
显示 TUI badge |
调试:CAVE_DEBUG=1 会把 scope/classify 决策追加到 $TMPDIR/caveman-plugin-dsh.log。
兼容性说明¶
| Host | 状态 |
|---|---|
dsh tui 0.17 |
voice、命令、角标可用 |
dsh web |
voice、命令可用;无角标 |
| subagents | 设计上排除,保持长文 |
本插件只移植 caveman 的 voice 半部分;上游「读更少」的 input-compression proxy 目前没有 dsh 插件 seam,未包含。
安装与启用¶
Requires dsh 0.17+。按 README,先取得仓库本地路径,再按使用的 profile 添加(安装后需重启 dsh):
git clone https://github.com/farchanjo/caveman-plugin-dsh.git
dsh plugin --profile tui add ./caveman-plugin-dsh # terminal UI
dsh plugin --profile web add ./caveman-plugin-dsh # web UI
移除:dsh plugin --profile <p> remove caveman-plugin-dsh。
插件以当前 dsh 进程权限运行;安装前请自行审阅源码与许可证(插件代码 MIT;skills 与 activation rule 为 Apache-2.0,组合为 MIT AND Apache-2.0)。Node 引擎要求见 package.json:^22.19 || >=24,peer @deepseek-ai/cordis ^4.0.1。
典型用法¶
- 安装并重启 dsh 后,默认
alwaysOn: true时首次运行会创建状态文件并开启简短模式(可在 profile config 里设alwaysOn: false)。 - 临时关闭:
/caveman off;恢复:/caveman on。 - 需要菜单调档位或 jev:
/caveman,按 footer 提示输入数字。 - 若常用自然语言切换,可
/caveman jev on并配置 provider/key(见 README「Decision model」「Keys and thresholds」)。
profile 示例:
- id: caveman-plugin-dsh
config:
alwaysOn: false
适用场景与注意¶
适合:长期在 TUI/Web 里用 DSH、希望根会话省 token、又需要随时切回正常 prose 的开发者。不适合指望子智能体也变成 caveman 文风——设计上子 agent 保持完整报告。
开启 Jev 时,候选用户消息与 on/off 状态会发往所选 provider(main 则走会话 LLM);离线或低 confidence 时回退启发式。OpenRouter 与 TypeSafe 的 confidence 门限刻度不可直接对比,换模型宜重调。
DSH 生态强调「一切皆插件」;SkillHub(目录页)是社区目录,与 DeepSeek / 幻方无官方从属关系。
结尾¶
caveman-plugin-dsh 用零依赖 Cordis 插件把 caveman voice 接到 dsh 的 tui 与 web profile:/caveman、TUI 角标与可选 Jev 分类,改的是根智能体表达方式,不动核心。详情与 issue 见 GitHub 仓库,插件索引见 SkillHub 目录页。