Oct 22, 2026

用 stop-that-shit 拦住 coding agent 的多余动作

stop-that-shit 把一个负责判断的 Skill 和一个运行时 Guard 配成一对,一起拦住 AI coding agent 的范围膨胀、没人读取的校验和、意图越界和任务打转——并为 Claude Code、Codex、OpenCode、Hermes Agent CLI、Pi 和 Oh My Pi 记载了安装路径。

#tutorial#agent-tools#best-practices

你只让 agent 导出一个文件,它顺手算了份没人读取的 SHA-256,说是"以防万一"。你让它 Review,它找到问题就开始改。3k 星的 lennney/stop-that-shit 仓库——README 以中文为主,另有英文和韩文版本——交付一个 Skill 加一个 Guard,专治这个:帮 AI coding agent 停止无用防御和任务越界,覆盖 Codex、Claude Code、OpenCode、Hermes Agent CLI 和 Pi。

为什么这个 Skill 重要

README 点名四种行为,并把它们叫作 SHIT:Scope creep 范围膨胀(修一个问题,顺手重构无关模块)、Hashing & hypothetical hardening 无用防御(没人读取的 checksum、为想象中的未来搭的兼容层)、Intent violation 意图越界(说了只读 Review,文件还是被改了)、Task thrashing 任务打转(没有新问题或变化,读过、测过、审过的又来一遍)。另一面说得同样直白:把当前责任承担完整——需要多改几个文件、补齐迁移或跑跨组件测试,就做完整。

两半分工明确。Skill 负责工程判断,按五步顺序走(当前要交付什么、已有能力够用吗、还有什么具体缺口、这层防御起什么作用、结果验证完成了吗)。Guard 在受支持的工具调用前检查明确边界。README 的前后对比只差一行:

await writeFile("report.csv", csv);
await writeFile("report.csv.sha256", createHash("sha256").update(csv).digest("hex"));

下游没有任何环节读取这份摘要,按 STS 的判断只剩 await writeFile("report.csv", csv);——README 紧接着补上另一面:如果发布流程会读取 checksum 并在不一致时拒绝使用文件,就保留,用 hash=allow 放行。

安装

README 为六种宿主记载了安装路径;一般宿主需要 Node.js 18+(Pi 0.84.4 自身要求 Node.js 22.19+)。Claude Code 的做法是下载并解压 0.2.5 源码,在仓库根目录执行:

claude plugin validate .
claude plugin marketplace add ./
claude plugin install stop-that-shit@stop-that-shit

重启 Claude Code 或执行 /reload-plugins。Codex 用户是两条命令,codex plugin marketplace add lennney/stop-that-shit --ref 0.2.5 再加 codex plugin add stop-that-shit@stop-that-shit——README 指出 --ref 把安装固定到版本 tag,不跟随可变的 main,并要求你在 /hooks 下对照打包的 Hook 清单检查后再信任命令。OpenCode 1.18.18 或更高版本用 opencode plugin github:lennney/stop-that-shit -g 全局安装,该命令只装 Guard;内置 Skill 和可选的 /sts 别名不会自动注册。只想用规则、不需要执行拦截,README 的 INSTALL.md 记载了只装 Skill 的方式。

实战:一次保持只读的 Review

把一条指令放在消息首个非空行,不要包在引用或代码块里,用 -- 分隔任务正文。在 Codex 或支持宿主无关指令的 prompt 中:

$stop-that-shit review -- Review this diff. Report findings; do not edit.

Claude Code 插件里同一条指令写作 /stop-that-shit:stop-that-shit review -- ...;Pi Skill 用 /skill:stop-that-shit。指令表有六行:review(审查并报告问题)、answer、monitor(持续检查和报告)、change(允许完成任务需要的修改)、watch(观察动作,不阻断)、status / runtime(查看当前状态和本地记录)。

Guard 启用后,README 的表格写明默认处理:在 review、answer 或 monitor 中写文件,停止;添加依赖,询问(deps=allow 放行);启动 subagent,超出 agents=N 预算时停止;添加可识别的 hash 操作,停止(hash=allow 放行);写入 files= 之外的路径,停止。需要更具体的边界时加参数——lock change files=src/config.cjs|test/config.test.cjs、change deps=allow、change hash=allow、change agents=1。README 自己的提醒是:还不知道全部受影响文件,就别急着锁 files=,先沿调用链查清楚。

技巧

  • 安装后默认是 OBSERVING / unconfirmed;显式使用 review、answer、monitor 或 change 后,Guard 才进入 ARMED。watch 始终只观察。这就是 FAQ 对"刚装上,为什么还没拦?"的回答。
  • Guard 不会看到 cache、retry 或 migration 就替你断定它们多余——它检查授权,具体用途仍要根据任务判断。
  • 仓库公开了 18 个 Bad/Good 判定用例,覆盖只读审查、必要调用方、已发布数据迁移、发布校验和,以及文件、依赖和 subagent 边界;EVIDENCE.md 记录测试和历史 Codex / GPT-5.6 运行,包括没有差异的结果。
  • 可选的第二个 Skill——Stop That Shit Slop(STSS)——删掉文字里的防御性废话:rewrite 是默认模式,audit 只报告问题和最小修改建议。它可以单独安装、不需要 Hook,在仓库根目录执行 npx skills add ./skills/stss --global。
  • 按 FAQ 的说法,Runtime 事件不保存代码或对话正文;会话状态另存显式路径、关联 ID 和指令错误——分享插件数据前先检查它。

何时不用这个 Skill

只装 Skill 没有执行拦截;想要红章,就为你的宿主装上 Guard。而红章是一次拒绝,不是证明:FAQ 说 permission_deny_returned 表示 Guard 返回了拒绝响应,宿主最终是否执行要单独观测(Runtime 将其记为 hostEffect: unobserved),安全隔离由宿主 sandbox 负责。如果你的 agent 已经足够自律,问题出在缺少规格说明而不是多做了事,一个边界 Guard 不会替你把规格写出来。


查看 排行榜 了解更多 skill。