# dsh-benign-exit [English](README.md) | **简体中文** **让 DeepSeek Harness 的模型少"空转"、少烧 token 的插件。实测在"反复验证"类任务上能省约 38% 的输入 token,整体约 20%。** ## 它解决什么问题? DeepSeek Harness 会给模型一条指令: > "检查每个退出码,遇到失败先调查再继续。" 这句话的问题是——**grep 搜不到东西,返回的退出码也是 1**。这是正常结果,不是报错。 于是模型经常陷入这个循环: 1. 用 grep 搜"某个函数存不存在" 2. 没搜到 → 看到退出码 1 3. 按指令当"失败"去调查 → 反复验证、越搜越广 4. 白白多烧一轮又一轮 token **而这个插件做的事,就是在模型看到的结果上加一行说明**,告诉它"这个退出码是正常含义,报告结果就行,不用再调查": ``` (no output) (exit 1 = no matching lines — 这是 grep 的正常含义,报告即可,不用再调查) [exit code: 1] ``` 真实运行里模型会直接复述这行标注(而不是空转):*"harness wrapper 标注了这个退出码是正常的"* —— 说明它真的读到了,也读懂了。 ## 实测能省多少? 2026-08-17 用同一个模型(`deepseek-v4-flash`)、同一批任务,只差开不开这个插件,真实跑了 before/after: | 场景 | 不开插件 | 开插件 | 省 | |---|---|---|---| | 让模型反复用 shell 验证"某东西不存在"的任务 | 57 万 token | 36 万 token | **约 38%** | | 全部 4 个任务合计(24 次运行) | 113 万 token | 90 万 token | **约 20%** | - **最典型的"反复验证"场景省得最多**:输入 token 省约 38%,耗时也省了约四分之一。 - **轻量任务基本没差别**(一两步就结束的,本来就没得空转)。 - **真实项目能省多少,取决于你让模型干多少这种验证类的活**。 > 说明:这组数字来自 4 个专门设计的"找不到/无匹配"型任务,样本刻意往这个场景靠,所以它更像**这个机制的天花板**,而不是每个项目的平均值。装上看你自己的任务——凡是"验证某东西在不在、有没有变化"的活,大概率能明显感觉到变快、变省。 ## 会有安全风险吗? - **不会,机制是确定的,不是玄学**:它改的是模型**真实看到的文本**,并已用真实 bash 进程跑通验证(模型确实读到并正确理解),不是"也许模型会收敛"。 - **很保守,不会掩盖真错误**:只有"命令本身是已知工具 + 退出码是该工具的正常含义"才标注。`sudo` 被拒、重定向失败、管道、后台任务、超时、被杀进程——这些一律不碰,绝不把真错误标成正常。 - **测试齐全**:35 个单元测试 + 10 个集成测试 + 6 个真实 bash 端到端测试,全绿。 - **装一行、卸一行**,随时可回退。 ## 安装 ```bash git clone https://github.com/sunruize93-cmyk/dsh-benign-exit cd dsh-benign-exit && pnpm install dsh plugin --profile web add . # 重启 profile 生效 ``` headless 模式一样用: ```bash dsh plugin --profile headless add . dsh --profile headless "搜一下 getLegacyConfig 存不存在" ``` 验证是否生效:`dsh --profile web --dump-config | grep benign-exit`,或者在 agent 里跑一次"搜不到东西"的 grep,看结果上方有没有那行标注。 ## 配置(可选,默认零配置) | 参数 | 默认 | 作用 | |---|---|---| | `annotate` | 开 | 给正常退出码加标注 | | `promptSection` | 开 | 给模型补充"良性退出码"常识 | | `extraRules` | 空 | 让你自己的命令也能标注 | 完整配置示例见 [英文 README](README.md)。 ## 实验数据与报告 24 次运行的原始数据(jsonl、完整输出、分析脚本、诚实版报告)都在 [`results/experiment-20260817/`](results/experiment-20260817/report.md),随时可以自己复现、自己验证。 MIT 协议,随便用。