前言¶
DeepSeek Harness (DSH) 的核心设计理念是「一切皆插件」。在实际开发和使用中,Agent 往往容易在输出承诺上夸大其词,或在工具调用时执行危险操作。dsh-agent-governor 是一个安装在 DSH 上的自定义插件,它通过增加两层可独立开关的拦截层,降低 Agent 的错误率。
插件定位¶
- 名称:dsh-agent-governor
- 仓库:https://github.com/kxdyh/dsh-agent-governor
- 作者:kxdyh
- 类别:工作流
- 许可证:MIT
核心功能¶
该插件包含两个独立的拦截层:
- DOL 层(通信语义治理):管理 Agent「说什么」。将道义规则(许可/禁止/义务/豁免)注入系统提示,并审计可见输出。对于没有证据的完成性断言、凭据外泄、绝对化承诺进行标记,并要求模型在下一步进行自我纠正。
- Sentinel 层(工具执行治理):管理 Agent「做什么」。在工具调用执行前校验参数。对于破坏性命令和无依据的数值参数进行拦截,并将结构化的重试反馈交还给模型。
安装与启用¶
插件是一个声明了 bundle 的 npm 包,使用 DSH 自带的安装器即可安装。
# 使用本地绝对路径安装
dsh plugin add /absolute/path/to/dsh-agent-governor
安装后,插件会写入当前 profile 的 bundle 列表并立即生效。客户端部分需要刷新页面(F5)以加载新的头部控件。注意:改动宿主规则(index.js)后必须重启应用才生效。
使用方式¶
插件的开关和统计信息位于会话标题栏右侧。
控件说明¶
- 盾牌图标:收纳两个拦截层的开关。
- 状态指示:灰=全关,橙=只开一层,绿=两层都开。拦截发生时图标会短暂脉冲。
- 拦截总数:自本次启动以来的拦截总数(Sentinel 拦截 + DOL 标记)。
- 面板交互:点击盾牌图标展开面板(带缩放、淡入、上浮动画)。点击面板外或按 Esc 收起。
- 影子模式:该层只记录、不拦截,用于在正式启用前校准规则。
- 统计行:显示该层真实计数(如 Sentinel 的检查/拦截/证据条数;DOL 的审计/标记/纠正)。
- 清零统计:只清计数,不改变开关和证据缓存。
删除防护¶
在 Sentinel 层的详情中,删除防护有三个强度档位:
* 关注:只记录,不拦截。命中的记录带影子标记。
* 拦截:拦截未被点名、也不是本会话自己创建的递归强制删除(如 rm -rf)。单文件删除不受限。
* 严格:连单文件删除也要先有点名或属于自己创建。保留对 tmp/cache 等临时目录的豁免。
日志与状态¶
- 拦截记录:点击盾牌右侧的账本图标查看。每行包含时间、层标签、规则名、步骤。支持筛选(全部/工具拦截/输出标记),最多保留 80 条。日志文件位于
<dsh-home>/storages/agent-governor-log.json。 - 状态持久化:开关状态保存在
<dsh-home>/storages/agent-governor.json。
规则详解¶
Sentinel 层(工具调用执行前)¶
sentinel.destructive-delete(禁止):拦截rm -rf /、mkfs、diskpart等破坏性删除。sentinel.system-control(禁止):拦截关机、重启、注销本机等系统控制命令。sentinel.history-rewrite(禁止):拦截git push --force、git reset --hard等历史重写操作。sentinel.data-destroy(禁止):拦截DROP TABLE、TRUNCATE TABLE等数据销毁操作。sentinel.pipe-to-shell(禁止):拦截curl ... | bash、iwr ... | iex等管道到 Shell 的命令。sentinel.unrequested-delete(义务):根据强度控制删除操作的权限。sentinel.evidence-gap(义务):拦截参数中未出现在本会话已验证证据中的具体数值(≥100 且非整十)。sentinel.repeat-loop(义务):同名同参数的成功调用超过阈值后拒绝(默认阈值 0 = 关闭)。
DOL 层(消息/输出侧)¶
dol.credential-leak(禁止):拦截输出中的私钥、sk-key、AWS/GitHub/Slack/Google 令牌、JWT。dol.completion-claim(义务):拦截本回合没有任何成功工具结果却声称”已完成/已通过/已修复”的输出。dol.absolute-claim(禁止):拦截 “100%/绝对/保证” 等无法兑现的表述。dol.number-grounding(义务):拦截输出中缺乏证据来源的具体数值。
配置与豁免¶
可以在 profile 的补丁层中配置规则覆盖和豁免:
- id: agent-governor
name: '@kxdyh/dsh-agent-governor'
config:
dol: true
sentinel: true
repeatLimit: 5
ruleOverrides:
dol.absolute-claim: true
sentinel.evidence-gap: false
dispensations: ['sentinel.history-rewrite']
注意事项¶
- 拦截范围:插件不拦截每一个 LLM 请求。请求侧仅将治理规则追加进系统提示。真正能硬阻断的是工具调用(
tools/pre-execute)和Agent 步骤(agent/pre-step)。 - 输出侧机制:输出侧的治理主要依靠“下一步纠正”,而非硬阻断。
- 依赖重启:修改宿主规则(
index.js)后必须重启应用,否则配置不生效。 - 生态归属:该插件为社区维护项目,与 DeepSeek / 幻方无官方从属关系。