CLAUDE.md 写错一行:为什么 Agent 会全程跑偏

时间:2026-07-07 08:39:47 来源:互联网

许多人最初认为,AI Agent在项目中频繁改错文件、陷入测试循环,是模型本身不够智能。经过三天排查,我才发现真正根源,竟是CLAUDE.md中一行模糊规则引发的连锁反应。

CLAUDE.md 写错一行,为什么 Agent 会全程跑偏?

当时我正在重构一个视频项目的布局,为图省事,在项目主规则中写下:“优化整体界面排版,确保移动端显示正常”。

结果,仅喝杯茶的功夫,AI终端Agent(Claude Code)不仅修改了移动端布局,还自作主张重构了桌面端逻辑,改写了package.json引入新排版依赖,并将半个仓库的CSS全部改得面目全非。一运行构建,满屏报错。AI在终端里发了疯似的一边道歉,一边继续盲目修改,直至彻底耗尽我的Token额度。

【此处配图:一行红色的配置代码在IDE中高亮,下方指示箭头指向一个由齿轮和代码崩塌组成的废墟,代表一行配置错误导致的连锁跑偏】

作为一个每天依赖AI敲代码的独立开发者,我屡次遭遇Agent“鬼打墙”的困境。本文将抛开概念,专注实操:为何你写的规则文件总是适得其反?怎样通过项目规则、任务单和验收清单,有效驯服AI Agent?

一、 为什么你的 Agent 总是越改越乱?

大模型在执行Agent任务时,存在几个天然的心智弱点。若项目配置规则(.cursorrules / CLAUDE.md / AGENTS.md)书写不够严谨,它极易陷入以下三个泥潭:

1. 临时指令与长期规则混淆

许多程序员习惯在项目规则中写:“修复本模块的Timeout Bug,不要使用外部依赖。”这是一条典型的“临时指令”。一旦固化进项目规则,后续所有对话和开发任务中,Agent每次启动都会被强行灌入这条旧指令。这不仅严重污染上下文(Context),还会导致AI逻辑错乱,在执行其他任务时依然死磕旧模块。

2. 缺乏“物理边界”的约束

你对AI说:“帮我优化一下这个支付接口。”在AI的认知中,“优化”是一个没有物理边界的词。大模型为了让“代码看起来更好”,会去修改底层通用工具类、改动外部路由配置。因为你没有明确告知“只许修改 target_file 里的内容”,它便默认拥有全仓库的所有权,最终越界修改,导致无辜代码崩溃。

3. 没有“物理熔断”的验收标准

当AI修改完代码,发现编译报错时,其本能是自我纠错。它会在终端自动执行npm test,根据报错继续修改。但如果测试代码存在歧义,AI将在缺乏人类干预的情况下,陷入“修改-测试-报错-再修改”的无限死循环,直到Token彻底烧尽才会停下。

二、 避坑指南:三种写法的常见结果对比

在软件工程中,模糊的表达是Bug的温床。以下是实战中总结的规则写法对比:

错误写法常见跑偏结果正确工程做法
“帮我优化一下这个类”Agent自由发挥,越界重构半个项目给定具体执行任务单和物理边界
“直接读取全仓库找出Bug”Token快速烧光,AI注意力涣散并开始瞎猜先通过全局符号搜索,精简上下文
“做完在终端里告诉我一声”聊天框内虚报完成,本地无记录且无法追踪强制要求将任务结果以当前任务结果.md格式写入文件

三、 解决方案:一套可复制的防跑偏套件

要想让Agent规规矩矩工作,必须在项目根目录下配置以下三件套:

1. 项目主规则(以AGENTS.md为例)

主规则用于规定Agent的“人设”与“禁忌物理边界”。不写入具体业务逻辑,仅包含硬性准则:

# 核心执行准则
- 物理边界:除任务单指定的TargetFile外,禁止修改任何其他文件。
- 行为守则:禁止进行任何范围外的重构。发现无关Bug仅记录,严禁顺手修改。
- 终端限制:若连续3次跑测试报错且无法定位,必须立即停止执行并向用户报告,禁止空转。

2. 执行任务单

每次安排Agent任务时,须下发一份格式化、边界清晰的任务单。可将其保存在本地,让AI优先读取:

# 执行任务单
- 日期:2026-06-16
- 目标:修复登录超时无重试的Bug
- 指定对象(物理边界):`/src/auth/login.ts`
- 必须完成:在`login`函数内实现最多3次重试,每次间隔1000ms
- 禁止事项:严禁修改`/src/utils/http.ts`下的通用拦截器逻辑

3. 明确的验收清单

告知Agent,仅满足以下物理条件,任务才算真正结束:

## 验收清单
- [ ] `/src/auth/login.ts`代码无编译报错
- [ ] 本地运行`npm run test:auth`单测且100%通过
- [ ] 将改动点与测试输出记录至项目目录下的`当前任务结果.md`

四、 实战改造案例:从“越改越乱”到“一步到位”

改造前(聊天式无边界)

  1. 人类指令:“帮我优化下支付超时重试。”
  2. Agent动作:全仓库扫描 -> 发现http.ts命名不顺眼 -> 顺手重构通用HTTP类 -> 修改支付逻辑 -> 通用类重构导致全局路由崩塌 -> Agent陷入12轮循环调试 -> 烧掉25刀Token后宣告失败。

改造后(约束式任务单)

  1. 人类指令:“先确认项目根目录下的AGENTS.md。然后读取任务单.md,开始执行。”
  2. Agent动作:读取主规则(确立物理边界) -> 读取任务单(锁定仅可修改login.ts) -> 精准修改3行重试逻辑 -> 运行特定单测 -> 通过验收 -> 自动写入当前任务结果.md -> 提示用户检查后停止。全程耗时40秒,Token账单0.15刀。

五、 马上抄去用的 5 条落地动作

  1. 物理隔离规则:立即为.cursorrulesCLAUDE.md瘦身,删除具体“临时开发指令”,仅保留全局编码规范和物理隔离禁令。
  2. 锁死修改权限:给Agent的首条指令永远是:“除指定修改文件外,禁止触碰其他任何文件。”
  3. 设置单次步骤上限:调用Agent时设定最大运行步数限制,防止死循环跑单测烧钱。
  4. 测试闭环:让AI修改代码前,先要求它写出对应单元测试,通过测试约束其输出,而非用大白话辩论。
  5. 结果落到文件:避免Agent在聊天框发周报。强制要求将修改结果写入项目内可见的Markdown文件,便于随时Diff验收。

通过系统化配置规则、任务单与验收清单,你便能将AI Agent彻底“关进笼子”,让每一次代码修改都精准高效,彻底告别“鬼打墙”式的资源浪费。