前言¶
DeepSeek Harness(dsh)是 DeepSeek AI 开源的 agent harness,目前仍处于开发者预览阶段。它的核心设计是「一切皆插件」:模型、工具、会话、沙箱、UI 都可以在不改框架源码的前提下挂载或替换。官方仓库在 deepseek-ai/deepseek-harness。
社区里已经有独立站点在收录这类插件,例如 DeepSeek Harness 插件目录。需要先说清楚:该目录是社区站点,与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。安装任何第三方插件前,都应该自己核对源码和许可证。
用 dsh 跑长任务时,主模型一边执行一边自检,很容易漏掉「和用户指令矛盾」「原地打转」「方向已经偏了」这类问题。dsh-advisor 做的事情比较克制:再挂一个独立的评审模型,只看主会话记录,按严重度往会话里塞一条建议。它不批准动作,也不代替主 agent 发命令。
这是什么¶
dsh-advisor 是社区维护的「模型与提供方」类插件,维护者是 omdsh-dev,许可证 MIT,主要语言 TypeScript。GitHub 仓库当前版本为 0.2.1(package.json,2026-08-17),Node 要求为 ^22.19 || >=24。目录页于 2026-08-09 收录该插件。
仓库 README 写明:它把 omp(oh-my-pi)里的 advisor 子系统,移植成独立的 dsh 插件组合包。每个会话有一个独立评审模型,观察主 transcript,用显式配置的 provider 与 model 评审每个已完成的 stepped turn,再把按严重度排序的建议(nit / concern / blocker)注入回去。advisor 自己的消息会被排除在后续 delta 之外,因此它不会递归评审自己。
插件以纯挂载方式安装:bundle 插入、Web 设置页的 Advisor 卡片、自有 gateway 通道,以及 /advisor 指令。不打 dsh 补丁,也没有 postinstall 改宿主。两个前端都可以用:
- web profile:设置 → 插件配置 → Advisor 卡片
- dsh-tui 终端 profile:
/advisor与/advisor config;TUI 的/settings里编辑 Advisor 分节需要 dsh-tui ≥ v0.8.0
README 也强调了能力边界:仅作建议。advisor 从不批准或否决主 agent 的动作,也绝不会像主 agent 那样发出命令。行为异常的评审者会受到 emission guard、immuneTurns 冷却和 failure policy 约束,避免卡住或污染主循环。当前 MVP 有意没有做到与 omp advisor 完全对等,下文会单独列出已公开的差距。
核心功能¶
根据仓库 README 与 docs/configuration.md,已经核实的能力如下。
1、每个会话一个独立评审者
评审走独立的模型调用,只观察主 transcript,并在每个 stepped 主 turn 结束后评审增量。advisor 消息不会被渲染进后续 advisor delta,因此它读不到自己刚写的建议。
2、三级严重度,每次评审最多一条 note
送达的消息带 [advisor:{severity}] 前缀,内容是自我描述的 advisory 文本,例如:
[advisor:concern] extract the helper into a module and unit-test it
三个等级的含义和送达方式不同:
nit:轻微的样式、清晰度或质量建议。经非唤醒的agent.inject送达,在下一个 pre-step 边界消费。concern:继续之前值得权衡的重大风险,或明显更优的方向。经唤醒的agent.steer送达,并受immuneTurns冷却约束。blocker:继续下去明显是在浪费工作,例如与显式用户指令矛盾、原地打转、根本性不可行。同样经agent.steer送达。
immuneTurns 默认是 3:一条 concern / blocker 真正 steer 过之后,接下来若干个已完成的主 turn 必须走完,另一条打断性 note 才能再次 steer;窗口内的打断性 note 会降级为 inject。
3、显式模型门禁
enabled 默认是 false。打开之后,provider 与 model 都是必填。只写 enabled: true、却缺其中一个时,插件不会发起任何模型调用,状态会报告带原因的禁用(disabled-with-reason)。未知配置键会被拒绝。
4、零工具、失败不卡主循环
评审者只是一次独立的模型调用,没有 advisor tools,除了 advisory 消息之外不能对会话做别的事。失败或额度耗尽时,它只丢弃自己有界的 backlog,不会把主循环停住。额度耗尽(quota_exhausted)没有自动恢复定时器,需要 /advisor on 手动恢复;永久性模型错误(例如凭据无效)会把该会话的 advisor 标为 halted,再用 /advisor on 重建。
5、会话级开关不改持久化配置
/advisor on|off|toggle 只翻转当前会话的 override,不会改磁盘上的配置。持久化配置走 Settings 卡片、TUI /settings 或 $DSH_HOME/settings.yaml。
安装与启用¶
目录详情页给出的安装命令如下,在 DeepSeek Harness 终端中运行即可:
dsh plugin add github:omdsh-dev/dsh-advisor
如需可复现安装,目录页建议固定 commit 哈希:
dsh plugin add github:omdsh-dev/dsh-advisor#2ee9844dd1920d024dbcc85c2fa4dc96a45ce698
上面的哈希对应仓库 main 在 2026-08-17 的提交(发布说明为 v0.2.1)。使用前请再到 GitHub 核对是否仍是你想锁定的版本。
仓库 README 另外给出了按 profile 安装的写法,适合已经分好 web / 终端前端的环境:
dsh plugin --profile web add dsh-advisor # web profile(设置 → Advisor 卡片)
dsh plugin --profile dsh-tui add dsh-advisor # dsh-tui 终端 profile
registry 安装可以钉版本,例如 dsh-advisor@0.2.1。安装文档说明:registry 拉取的是已发布 tarball,自带 lib/ 与 cordis.patch.yml,目标机不必再构建;运行时依赖声明为 peerDependencies,由当前 dsh 安装解析。
安装完成后,可用下面的命令确认插件层已经出现:
dsh --profile web --dump-config
输出里应能看到带 advisor 配置行的 # == dsh-advisor 层。web profile 安装后需要重启 dsh 会话;启动后,Web 设置页的「插件配置」会渲染 Advisor 卡片。
卸载对应为:
dsh plugin --profile web remove dsh-advisor
dsh --profile web --dump-config
dsh-tui profile 把上面的 --profile web 换成 --profile dsh-tui 即可。卸载后同样需要重启会话。
配置与典型用法¶
advisor 默认关闭。要真正跑起来,需要在全局设置文档(默认 $DSH_HOME/settings.yaml,跨 profile 共享)里写 advisor: 分节,并显式打开开关。README 中的示例如下:
advisor:
enabled: true # 总开关(默认 false)——需显式打开后生效
provider: deepseek-official # enabled: true 时必填
model: deepseek-v4-flash # enabled: true 时必填
systemPrompt: "" # 可选;空字符串表示使用内置评审 prompt
immuneTurns: 3 # 整数 ≥ 0,默认 3
maxDeltaMessages: 60 # 整数 ≥ 0,默认 60;0 表示不截断
provider 与 model 必须改成你当前 dsh 环境里已经配置好的供应商和模型。Web 卡片的下拉框只会列出系统内已配置的 provider 及其模型;上面 YAML 里的 deepseek-official / deepseek-v4-flash 只是文档示例,不是所有环境都自带。
同一组键有三条编辑路径,后一层覆盖前一层:
- 插件行 config:profile 补丁层(例如
$DSH_HOME/profiles/web/cordis.patch.yml)里id: advisor那一行,这是合成的 base。 - Web「插件配置」页的 Advisor 卡片,或 dsh-tui ≥ v0.8.0 的
/settings→ Advisor 分节。这两处都写入同一个 user layer($DSH_HOME/settings.yaml),保存后对新会话立即生效,不必重启。TUI 里不能编辑systemPrompt(单行控件会截断多行文本),需要改 prompt 时走 Web 卡片或直接改 yaml。 /advisor指令:只改当前会话,不写回磁盘。
Web 卡片在 enabled: true 且必填字段为空时会阻止保存。TUI /settings 没有这项跨字段校验,有可能写出「已启用但 provider/model 为空」的配置;运行时门禁仍会把它解析成 disabled-with-reason,不会发起模型调用。用 /advisor status 或 /advisor config 可以看到原因。
安装并启用后,在已经组合 command registry 的会话里可以用:
/advisor 切换当前会话的 advisor
/advisor on 为当前会话启用
/advisor off 为当前会话关闭
/advisor status 查看状态、模型、运行状态、待处理数量、最近活动
在 dsh-tui 里还有只读的 /advisor config,用来回读合成后的配置,并提示真正的写路径。这些指令会出现在 TUI 的 / 菜单里,并带子命令补全(需要随 dsh-tui 组合包提供的 dsh-tui-command-trees 行)。
适用场景与注意事项¶
比较适合这些情况:
- 长会话编码或重构,主 agent 容易偏离用户原话,需要另一侧模型在旁提醒。
- 希望审查意见进入主 transcript,而不是另开一个互不通信的评审窗口。
- 同时使用 Web UI 和 dsh-tui,希望同一套
advisor:配置跨 profile 共享。
不适合、或目前做不到的事情,以仓库「限制与路线图」为准,不要按完整 omp advisor 去预期:
- 每个会话只有一个 advisor,没有并行评审组,也没有 WATCHDOG 式文件发现。
- 评审者没有工具,不能自己读文件、跑测试来核验主张。
- 没有会话内 advisor 面板;建议只以带标签的注入消息出现。Web Advisor 卡片是配置面,不是会话视图。
- 没有 transcript 持久化,也没有成本统计。
maxDeltaMessages会截断长会话窗口,compaction 之后早期上下文可能丢失。- 落后很多的 advisor 不会追赶等待主循环,积压有界且会被丢弃,note 有可能在下一轮主 turn 已经开始之后才到达。
安全方面有两点必须单独说。
第一,插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查 源代码仓库 和 MIT 许可证;如需可复现安装,请固定 commit 哈希或 registry 版本号。
第二,README 写明:delta 内容目前没有密钥混淆,transcript 里出现的 secrets 可能到达 advisor 模型;请只配置你信任的评审模型。另外,行为异常的 note 可能携带指令性文本,插件不会隔离不安全输出,JSON 帧校验和 advisory-only 框架是目前仅有的缓解手段,note 会原样送达主 transcript。
小结¶
dsh-advisor 给 DeepSeek Harness 加的不是第二个执行者,而是一个默认关闭、必须显式指定模型的旁观评审者。它按 nit / concern / blocker 往会话里注入建议,失败时丢掉自己的积压,不打断主循环。当前仍是 MVP:没有工具、没有会话内面板、也没有和 omp 的完整对等。若你已经在用 dsh 跑长任务,又希望多一双只说话、不下手的眼睛,可以按目录页命令安装后再打开配置。
- 目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-advisor/
- GitHub:https://github.com/omdsh-dev/dsh-advisor
- DeepSeek Harness 官方仓库:https://github.com/deepseek-ai/deepseek-harness