DSH Agent 纪律卫士:在 harness 边界强制四道闸门(循环熔断、Token 成本熔断、路由切换警示、计划审批卡),模型无法用文字绕过;🛡 芯片一键解除,daily 档对有缓存路由零打扰,把无缓存失控从每回合数百万 token 封顶到约 50 万。
安装
# Release 预构建包
dsh plugin --profile web add "https://github.com/haozheou/dsh-discipline-guard/releases/download/v1.0.0/dsh-discipline-guard-1.0.0.tgz"
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:haozheou/dsh-discipline-guard
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
你的 agent 曾在一场事故里 3 分钟烧穿整周 Token 配额,期间还礼貌地告诉你"快好了"。提示词里写一万遍"不要重复"都没用——因为模型可以无视文字。本插件挂在 harness 边界上,在工具派发之前、在模型请求发出之前拦截,没有商量余地。
四道闸门
| # | 闸门 | 默认 | 行为 |
|---|---|---|---|
| ① | 循环门 | 开 | 同名工具+完全相同参数连续计数:第 2 次注入可见预警;第 4 次起调用直接派发被拒(连续失败 2 次更快熔断)。用户任何新消息即解除。 |
| ② | 成本门 | 开·fail-closed | 用每步真实 usage 计量:净计费输入、缓存命中率、回合累计。命中"无缓存全价重发"模式(token-plan 类端点)先预警要求汇报,同回合再犯直接掐停回合。回复「继续/放行/别停/照常」赦免本回合。 |
| ③ | 路由门 | 开 | 会话中途切换模型端点且历史较长时,注入一次性警示:新端点可能把整个上下文按全价重发。 |
| ④ | 计划门 | 关 | 可选:每个用户回合的首个写/执行类工具调用走原生审批卡,批准一次放行本回合。 |
所有监听器内部 fail-open:卫士自己有 bug 也绝不拖垮宿主;而烧钱类判定 fail-closed:宁可停下来等你。
操控入口
- 主界面:会话标题区 🛡 芯片,一键武装/解除——逃生口永远一步可达。
- 设置 → 纪律卫士:每道门独立开关与阈值,三档预设:
off全关daily(推荐):按有缓存路由(每步净输入 1~5K)零打扰校准,同时把无缓存失控封顶在每回合约 50 万 tokenwild:只提示不打断,适合实验性重活
- 设置存于
~/.dsh/settings.yaml的discipline-guard命名空间,热加载,装好后日常改阈值无需重启。
解锁梯子(谁说了算:你永远说了算)
熔断发生 → 你看一眼 → 值得干:回「继续」放行本回合 / 不值得:你已经省下了一整场火
设计要点:放行不累积、不永久。这次「继续」不代表下次宽容,这次掐停也不代表下次聒噪——每回合都是新账。唯一需要自觉的是:关了 🛡 总闸,干完活记得开回来。
安装
需要 web profile 的 DSH(客户端 UI 目前仅支持 web;宿主闸门通用)。
A. 插件市场(收录后)
DSH → 插件市场 → 搜 "discipline guard" → 一键安装。
B. 手动安装
编辑 ~/.dsh/profiles/<profile>/package.json:
{
"dependencies": {
"dsh-discipline-guard": "github:haozheou/dsh-discipline-guard"
},
"dsh": {
"profile": {
"bundles": [
// ……已有 bundles……
"dsh-discipline-guard" // ← 加这一行
]
}
}
}
在 profile 目录执行 pnpm install,重启 DSH。插件自带的 cordis.patch.yml 会自动挂载组合行。
一开关切换"有缓存 / 无缓存"路由
成本门如何识别"无缓存全价重发",过去只看每步真实 usage 里的缓存命中率(auto 推断)。如果你知道自己当前用的是哪类端点,可直接告知卫士,判断更准、也不必靠命中率猜:
cached(有缓存):如 deepseek 官方等带提示缓存的端点。成本门不再因单步低缓存命中率误报(冷启动/长新话题也可能命中低),只保留回合计费预算硬顶。↓ 日常档对它"永远不响"。nocache(无缓存):如 token-plan / 套餐类全价重发端点。成本门从严:只要单步净计费输入 ≥costRequestInputMax且上下文 ≥costContextMin即判定为全价重发模式,不再附加命中率下限条件。auto(自动,默认):保持原行为,按缓存命中率高低推测。
设置在「设置 → 纪律卫士 → ② 成本门 → 当前路由缓存判定」,三档可一键切换,改动热加载,无需重启。
提醒:把
nocache路由标成cached会失去全价重发的拦截保护(只剩回合预算兜底)。请按你实际在用的端点如实标注。
阈值怎么调
实测基线(每步净计费输入):
- 有缓存路由(deepseek 类):1~5K,命中率 ~97% → 日常档永远不响
- 无缓存"套餐"路由:整上下文每步全价重发 → 成本门就是为它存在的
事故回放:16 步 × 36 万 = 574 万 token / 3 分钟。daily 档下执行止步约 55 万——省 90%,且现场留痕(预警卡 + 回合掐停都有明确原因)。
已知限制
- 客户端 UI 仅支持 web profile;桌面端只有宿主闸门(直接改
settings.yaml配置)。 - 计量按回合/会话进行;并行子代理的用量按 agent 各自计量,跨 agent 聚合留待 v2。
- 与内置
repeat-tool-reminder共存(它在 3/5/8 次提醒)。嫌两声提示吵可关掉内置那个。
致谢
- 循环计数的参数规范化思路致敬 DSH 内置
repeat-tool-reminder。 - 基于 Cordis / DeepSeek Harness 插件 API:
tools/pre-execute、tools/post-execute、agent/pre-step、session/event、approval、dsh-settings。
MIT © haozheou
链接
同类插件
bowenliang123/dsh-context★ 2079
DSH 上下文洞察面板:Context 仪表盘 + /context命令 + Context 浏览器,查看 Context的分类组成、内容详情、演进趋势、压缩/注入事件、统计等一站式 Context 全生命周期管理。
Han-1413141/dsh-cost-meter★ 408
会话与当日 API 费用统计、预算图框(已用%)、官方余额、历史看板,支持峰谷计价与官方价格一键同步。
wssfk12138/dsh-damage-pulse★ 263
在 DSH Web 界面追踪 DeepSeek Token 用量、单次与会话费用及账户余额,并显示缓存感知的扣费动画。
zh667/TokenLedger★ 202
侧边栏用量面板:把 Token 归属到实际服务该请求的中转站,站点从已有的 provider 配置中读出,无需额外配置;含今日/本月/累计三窗口、按站点与模型下钻、一年活跃度热力图,以及 New API / Sub2API / DeepSeek 余额。
Ychris12138/dsh-usage-stats★ 172
多供应商用量看板:按供应商/模型统计 Token 与日期下钻,统一展示账户余额,并追踪 OpenCode Go / Z.ai 订阅额度。
PolinniZhong/dsh-personal-center★ 118
DeepSeek Harness 个人中心:跨会话用量统计、按模型成本估算、全局自定义指令、外观全局字号、数据驱动的桌面宠物(位图/矢量皮肤)与会话状态概览,纯本地离线运行。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。