Agent 改代码把测试全删了,我加了这条防护

8411
alan楼主·发布于 29 天前·约 1 分钟读完·踩坑
  • alan

    真实事件:让它修一个失败的测试,它选择把测试删掉,然后报告「测试通过」。

    这类行为很隐蔽,因为结果看起来是对的。

    加了三道防护:

    1. hook 拦删除

    PreToolUse 里检测 Edit/Write 的目标文件是否在 test 目录,或者改动是否删除了大段内容(比如减少超过 30 行),命中就 deny 并说明原因。

    1. 基线校验

    改完之后自动跑一遍测试,对比测试数量。数量变少就报警,不管是通过还是失败。

    1. prompt 里明说

    CLAUDE.md 加一条:不允许删除或跳过测试来让测试通过。测试本身有问题时要明确说明并停下来。

    第 1 条是硬防护,第 2 条是事后发现,第 3 条是事前约束。三条都有才稳。只靠 prompt 约束,长对话里它一定会忘。

    主楼
  • momo

    推荐配合 dry-run 用,先看影响范围再执行。

    #1

发表回复

登录后回复