CLAUDE.md写满规则Agent仍不听话?四层核心卡点一次性讲透
文章目录
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01
前言
你有没有遇到过这种情况?
你花了整整一个周末,给项目写了CLAUDE.md,拆了八条rule,挂了三个MCP,还配了两个skill。结果Agent该犯的错照样犯,定下的规矩当没看见。
这时候你盯着屏幕,感觉像养了只猫。你贴了一墙"禁止抓沙发"的告示,猫看了一眼,转身把沙发抓成了流苏款。
问题出在哪?不是你不努力,是你把四件事当成一件事干了。
写了规矩不等于听了规矩
很多人以为,知识库配好了,Agent就会自动遵守。这就像你以为把钥匙挂在门边,室友就会记得锁门。
实际上,从"你写了文件"到"Agent照做",中间隔着四道关:
关联 ≠ 加载 ≠ 读到 ≠ 遵守
任意一环断掉,结果都是"规矩没生效"。但断在哪一环,排查方式完全不同。
这四件事,就像你点外卖。商家接单了≠骑手取餐了≠送到你手上了≠你吃了觉得好吃。每一环都能出问题,而且出的问题还不一样。
知识库是怎么接进来的
Claude Code和Codex各有一套机制,大体上能一一对上。但别看它们名字差不多,进上下文的方式可差远了。
CLAUDE.md / AGENTS.md:那个32KB的遗嘱
这是最主要的入口。Claude Code叫CLAUDE.md,Codex叫AGENTS.md。
官方文档说得很客气:这是context,不是enforced configuration。翻译成人话就是:你写的是建议书,不是圣旨。
更坑的是,Codex的AGENTS.md有个32KB上限,代码里叫AGENTS_MD_MAX_BYTES。超了直接截断,不是警告,是直接砍。你写了一本《如何当好Agent》的巨著,Agent只读了封面和目录,正文全被扔了。
这就像你给女朋友写了三千字道歉信,结果她只看了前一百字,后面全被微信折叠了。你问她看了吗?她说看了。但你那些掏心窝子的话,她一个字没见到。
.claude/rules/:按路径触发的暗号
这个机制更精细。你可以按文件路径写规则,比如"只要改src目录下的文件,就遵守这套规范"。
但问题是,如果这次会话Agent根本没碰那个目录,这条规则就一直在冷宫里待着。你写了十条路径规则,Agent只用了两条,剩下八条等于没写。
这就像你在公司不同部门贴了不同的规章制度。结果今天来的实习生只在财务部待着,你贴在技术部的"禁止穿拖鞋"对他毫无约束力。不是规矩错了,是人没来。
skill:相亲先看简历
skill的设计很省token。开机只进元数据——名字加description。正文要等被触发才加载。
这意味着什么?意味着你的description就是相亲简历。写不好,Agent连正眼都不瞧,正文一个字都进不去。
你skill正文写得再好,description里没写清楚"什么时候用",Agent就觉得"这跟我没关系"。就像你简历里没写会Python,HR直接把你筛了,哪怕你其实是Python大神。
而且description加when_to_use合起来超过1536字符会被截断。又是截断。AI世界怎么到处都是截断?
MCP:请了一堆外援占座位
MCP是外部工具和数据源。工具定义开机就进上下文,但每个工具都要占token。
你挂了十个MCP,每个MCP有二十个工具,光是介绍这些工具就占了几千token。Agent还没开始干活,先交了一大笔"座位费"。
这就像你请了一堆专家来开会,结果会议前两小时全在介绍专家头衔。真正讨论问题的时间被压缩了,而且有些专家你根本用不上。
四道关,道道要人命
第一关:关联
文件放进了.claude/或AGENTS.md该在的位置。但这只是"关联"上了。
放错目录、压根没被发现——放了≠会进窗口。就像你把简历投错了邮箱,投得再准也白搭。
第二关:加载
这次会话真把它拼进了上下文窗口。但加载也有坑。
子目录懒加载没碰到、AGENTS.md超32KB被截、skill只进了元数据。就像快递到了驿站,但驿站没给你发短信,你根本不知道它到了。
第三关:读到
模型在当前这一步真的把它纳入了判断。但读到也有读到的问题。
skill的description没把它路由进来,正文一字没用上。Agent看了,但看了个寂寞。就像你上课带了书,但老师讲的是另一本。
第四关:遵守
模型照着它做了。但context是建议不是强制,写"务必/绝不"也可能不听。
这就像你跟朋友说"务必别迟到",朋友嘴上答应,第二天还是迟到。不是没听见,是听见了但觉得"这次情况特殊"。
怎么确认它真读到了
说了这么多,怎么排查?分两层:静态看进没进上下文,动态看实际跑了什么。
静态检查:/context是你的快递单号
Claude Code里有/context命令,能看当前上下文里到底装了什么。System prompt占多少、Memory files占多少、Skills占多少,一目了然。
这就像查快递单号。你买了东西,不知道到哪了,查一下就知道卡在哪个中转站。
Context Usage
Opus 4.8 153k/1m tokens (15%)
System prompt: 4.4k (0.4%)
Memory files: 18.9k (1.9%)
Skills: 11.1k (1.1%)
Messages: 110.5k (11.1%)
Free space: 813.9k (81.4%)
动态检查:权限和hook是硬约束
前三关都是软约束——你把规矩送进上下文,指望模型自觉照做。但想要确定性,得用第四关的硬约束。
权限(deny/ask/allow)和PreToolUse hook,是在工具真正执行前拦截,不经过模型的意愿。这就像给熊孩子装了个智能门锁,不管他想不想,就是出不去。
所以记住:CLAUDE.md里的话是给模型看的建议;权限和hook是替你拦动作的闸。想要"一定",得用后者。
最后说句人话
别再以为写个CLAUDE.md就万事大吉了。Agent不是故意不听话,是它可能根本没收到、没读懂、或者收到了但觉得"这次例外"。
你要做的,不是写更多规矩,而是确保规矩真的进了它的脑子,而且进了之后出不来。软的不行来硬的,建议不行上权限。
毕竟,养猫的人都知道:贴告示没用,装门禁才有用。
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01
更多推荐



所有评论(0)