dsh-advisors
v0.3.0
Published
Advisor models plugin for DeepSeek Harness — a background reviewer model watches the main agent's turns and injects severity-graded notes (nit / concern / blocker) back into the session.
Maintainers
Readme
dsh-advisors
DeepSeek Harness(dsh)的 advisor 插件:一个独立的后台审阅模型观察主 agent 的每一轮工作,把按严重级别分类的审阅意见注入会话,让主 agent 在代价变大之前纠正方向。
展示效果
审阅意见以「上下文注入」消息的形式出现在对话流中——没有独立面板,有意见时才出现,审阅结论正常时完全静默:

上图中 advisor 发现一处「类型签名与运行行为不符」的缺陷并给出 concern 级意见,主 agent 随后采纳修正。nit 级意见则以旁注形式注入,不打断当前工作。
工作原理
主 agent turn 完成 (turn/end · completed)
│
▼
截取上次审阅以来的会话事件 ──► 渲染成 transcript
│
▼
每个启用的 advisor 用独立 LLM 调用审阅
(可选 read / grep / glob 只读调查工具,最多 toolRounds 轮)
│
▼
解析 JSON 结论 {"notes": [{severity, note}]}
│
▼
按严重级别路由回主会话:
nit → agent.inject() 不打断的旁注,下一个安全边界生效
concern → agent.steer() 引导仍在进行的工作转向
blocker → agent.steer() 空闲时会开启新的一轮,触发修正防震荡机制:
- 免疫窗口:一次 steer 之后
immuneTurns(默认 3)个主 agent turn 内,concern/blocker 降级为旁注; - 去重:同一 session 内内容重复的 note 会被抑制;
- 防自激:只审阅包含真实用户消息的区间,advisor 自己的意见触发的 turn 不会被再次审阅;
- 只审阅顶层 agent,subagent 会话不审。
安装
版本要求:dsh ≥ 0.2.2-rc.1;当前适配基线:DSH 0.2.2-rc.1 / Cordis 4.1.0。 安装时通过
engines.dsh检查内核版本;插件导出完整配置 Schema,校验类型、整数范围与只读工具授权。本插件使用自有 message source kind、增量session/event读取及SettingsForms;不支持 0.1.x profile,如需旧版请用 0.1.7。
已发布到 npm(dsh-advisors),用 dsh plugin 安装到目标 profile:
dsh plugin --profile web add dsh-advisors # Web GUI
dsh plugin --profile headless add dsh-advisors # headless包声明了 dsh.bundle.patch,安装后会自动成为 bundle 层被加载。重启 profile 生效。
配置
Web 端可在 设置 → 顾问 里改常用开关与路由,通过 DSH 原生配置编辑能力保存到当前 profile,校验或保存失败会明确报错。普通配置更新遵循 Loader 重载规则;专家名册 advisors[] 仍可使用配置文件 / 名册文件。旧 ~/.dsh/advisors/config.json 不再自动覆盖配置,设置页提供显式确认导入,原文件保留。
Web 端对话框工具栏的「顾问」chip 控制当前会话,但不能绕过全局关闭。关闭会取消在途审阅、清空待审阅内容并丢弃迟到结果;重新开启只审阅之后的新工作。覆盖状态仅保存在内存中,会话结束或插件重载即消失。已发出的模型请求仍可能计费。
工具栏显示当前审阅状态;设置页可手动刷新各会话状态、最近完成时间、错误及累计 token。统计仅保留当前运行期间,不保存历史或估算金额。长 transcript 优先保留用户要求、最终回答与验证证据,按时间顺序输出并标明省略内容。
也可以继续用配置文件控制(~/.dsh/profiles/<profile>/cordis.patch.yml 中按 id: advisors 覆盖,或 $DSH_HOME/cordis.patch.yml 全局覆盖)。没有 slash command——开关就是 enabled 或整条 disabled: true。
- id: advisors
config:
# 总开关(默认 true);false 则插件加载但从不审阅
enabled: true
# 审阅模型路由:留空 = 沿用被审 agent 自己的 provider/model
provider: ''
model: '' # 也支持 "provider/model" 单字符串写法
reasoningEffort: ''
# 追加给每个 advisor 的共享指导
instructions: ''
# 是否加载 ADVISORS.md 指导文件(默认 true)
guidance: true
# 一次 steer 后的免疫 turn 数(默认 3),期间 concern/blocker 降级为旁注
immuneTurns: 3
# 每次审阅喂给 advisor 的 transcript 字符上限(默认 12000)
maxTranscriptChars: 12000
# 调查工具轮数上限(默认 2;0 = 只看 transcript)
toolRounds: 2
# advisor 单次请求的输出 token 上限(默认 4096)
reviewMaxTokens: 4096
# 诊断日志文件(JSONL,记录 trigger/verdict/deliver/error);默认关闭
debugLog: ''
# headless 等短生命周期 profile 建议 true:进程退出前的 session flush
# 会等待在途审阅完成(上限 30s),否则最终审阅可能来不及落盘。
# 长运行的 web profile 保持 false(默认)
awaitReviewOnFlush: false
# 专家名册;为空 = 使用名册文件 / 单个默认 advisor
advisors: []
# 是否发现名册文件(默认 true;仅当 advisors 为空时生效)
roster: true名册(roster)条目
advisors:
- name: Security # 必填,显示名兼去重标识
enabled: true # 默认 true;false 保留条目但暂停
model: 'anthropic/claude-sonnet-4-5' # 可覆盖插件级路由
instructions: | # 该 advisor 的专长方向
重点关注注入风险、硬编码密钥、不安全的文件写入。
tools: [read, grep, glob] # 默认全部三个只读工具;[] 或 false = 无工具工具授权是安全边界:read/grep/glob 均为只读且限制在工作区内,插件不提供任何写工具。
名册文件(WATCHDOG.yml / ADVISORS.yml)
当 patch 配置里没有显式 advisors 名册时,插件会发现名册文件;一旦发现任何条目,名册即取代单个默认 advisor。四种文件名都会被识别:WATCHDOG.yml、WATCHDOG.yaml、ADVISORS.yml、ADVISORS.yaml。
发现路径(所有可读文件都参与):
$DSH_HOME/(默认~/.dsh/)——用户级名册;- 工作区目录及其每级父目录(直到 Git 根,无 Git 时到家目录)的同名文件,以及各自的
.dsh/子目录。
合并语义:
- 顶层
instructions跨文件累积(用户级在前,项目文件由外向内); - advisor 条目按名字 slug 去重:内层(更贴近工作区)条目替换同名的祖先/用户条目;
- YAML 非法或结构非法的文件会被跳过并打日志,不影响主会话;
- 名册文件在每次审阅时重新读取,编辑后无需重启。
# WATCHDOG.yml
instructions: |
优先选择不破坏公开 API 的修复;测试保持聚焦。
advisors:
- name: Architecture
enabled: true
model: anthropic/claude-sonnet-4-5 # 可省略,沿用插件级/主 agent 路由
tools: [read, grep, glob]
instructions: |
关注模块边界与依赖方向。
- name: Security
tools: [] # 无调查工具,只看 transcript
instructions: |
关注注入、密钥泄露与不安全写入。ADVISORS.md 项目指导
把「只给审阅者看的项目约定」写进 ADVISORS.md。发现路径:
$DSH_HOME/ADVISORS.md(用户级,默认~/.dsh/ADVISORS.md);- 工作区目录的
ADVISORS.md与.dsh/ADVISORS.md; - 向上每级父目录的同名文件,直到 Git 根(无 Git 仓库时到家目录)。
所有可读文件都会参与:外层指导在前、最贴近工作区的指导在最后(最突出)。
# 审阅重点
- 绕过 `src/jobs/` 持久队列的写操作
- 未转义渲染的用户可控文本
- 没有向后兼容方案的 schema 变更隐私与成本
- 开启 advisor 会把会话材料(你的提示、主 agent 输出与工具结果)发送给 advisor 模型的提供商;调查工具还可能读取项目文件内容一并发送。
- advisor 使用独立模型调用、独立计费。例行小改动可临时
enabled: false,或换用更便宜的审阅模型。
开发
pnpm install
pnpm build # 构建 Host 与 Web client
pnpm typecheck
pnpm test # 完整构建 + unit / service / RPC 回归检查License
MIT
