如果你也在考虑精简自己的 AGENTS.md,很推荐读一下
@mattpocockuk 的这篇文章,里面还附了一个可以直接让 Agent 帮你重构 AGENTS.md 的 Prompt:
看完以后,我觉得其中有几个观点特别值得分享。
1. 尽量不要用 /init 自动生成 AGENTS.md
这一点是我过去没有意识到的。
自动生成往往会追求“全面”,把项目结构、命令、技术栈、代码路径、实现方式等大量信息都塞进去。
其中很多内容 Agent 本来就可以自己从代码和配置文件中发现,还有一些会随着项目演进很快过时。
一旦这些过期信息长期存在于 AGENTS.md 里,每次任务都会进入上下文,反而可能干扰 Agent 的判断。
2. 不要重复 Agent 可以轻易发现的信息,也尽量避免维护容易过时的实现细节
比如具体代码在哪个目录、某个模块目前位于哪个文件、某项功能当前由哪个 Service 实现。
代码一直在变化,这类信息很容易失效。
更值得写进去的,是一些稳定、重要,同时又很难单纯从代码里推断出来的信息:
项目目标、关键约束、特殊工具链,以及几乎所有任务都应该遵守的原则。
那些 Agent 可以通过搜索代码找到的信息,就让它在真正需要时再去探索。
3. 一个很重要的原则是 Progressive Disclosure,也就是渐进式披露
不要试图把所有规则都塞进根目录的 AGENTS.md。
测试规范、TypeScript 约定、API 设计、数据库规则、Git Workflow 等,都可以拆到独立文档或 Skills 中。
根目录的 AGENTS.md 更适合做一个很薄的“入口”和“路由器”:
做什么事情时,应该去哪里读取对应的规则和上下文。
这样 Agent 只有在真正需要的时候才会加载那部分内容,可以减少上下文噪音,也能降低不同指令互相干扰的概率。
Monorepo 还可以进一步使用不同目录下的 AGENTS.md,让规则跟着作用域走。
--------
这篇文章也让我重新理解了 AGENTS.md 的定位。
以前很容易把它当成一份“尽可能完整的项目说明书”,什么都想往里面加。
现在我更倾向于把它看成:
Agent 每次开始工作时都会读取的一组高优先级上下文。
既然它会影响几乎每一次任务,那么每增加一条内容,都值得问一句:
这条信息真的值得在每一次任务里占用 Agent 的注意力吗?
如果答案是否定的,就可以考虑把它交给代码本身、独立文档、Skills、Hooks,或者其他按需加载的机制。
所以,AGENTS.md 值得认真写,也值得定期删。
精简它的意义也不只是节省 Token。
更重要的是管理 Agent 的注意力,以及有限的 Instruction Budget。
很多时候,少一点,Agent 反而工作得更好。