AGENTS.md 完整指南
学习如何优化 AGENTS.md 文件以服务 AI 编码智能体。掌握渐进式披露,聚焦指令,并最大化智能体性能。
本页目录
你是否曾担心自己的 AGENTS.md 文件太大?
也许你确实应该担心。糟糕的 AGENTS.md 文件会让 Agent 困惑,演变成维护噩梦,还会在每次请求中消耗你的 tokens。
因此,你最好了解如何修复它。
什么是 AGENTS.md?
一个 AGENTS.md 文件是提交到 Git 的 markdown 文件,用于定制 AI 编码 Agent 在仓库中的行为。它位于会话历史顶部,紧跟在 系统提示词.
可以把它看作 Agent 基础指令与实际代码库之间的一层配置。文件中可以包含两类指导:
- 个人范围:你的提交风格偏好、偏爱的编码模式
- 项目范围:项目用途、使用的包管理器、架构决策
这个 AGENTS.md 文件是一项开放标准,受到许多工具支持,但并非所有工具都支持。
CLAUDE.md
需要注意的是,Claude Code 不使用 AGENTS.md ,而是使用 CLAUDE.md 。你可以在两者之间创建符号链接,让所有工具以相同方式工作:
# Create a symlink from AGENTS.md to CLAUDE.mdln -s AGENTS.md CLAUDE.md
想继续深入: 加入“面向真正工程师的 AI 编码”候补名单
为什么超大型 AGENTS.md 文件会成为问题
存在一种自然的反馈循环,会让 AGENTS.md 文件膨胀到危险的程度:
- Agent 做了你不喜欢的事情
- 你添加一条规则来阻止它
- 几个月内重复数百次
- 文件变成一团“泥球”
不同开发者加入彼此冲突的意见,却没有人进行完整的风格梳理。结果是什么?一个无法维护的烂摊子,而且它会真正损害 Agent 的表现。
另一个罪魁祸首是自动生成的 AGENTS.md 文件。绝不要使用初始化脚本自动生成你的 AGENTS.md。它们会向文件中塞入大量“对多数场景都有用”的内容,而这些内容本应通过渐进式披露按需提供。生成式文件追求面面俱到,却缺乏克制。
指令预算
Humanlayer 的 Kyle 在 文章 中提到了“指令预算”这个概念:
前沿推理 LLM 大约能以合理的一致性遵循 150–200 条指令。小模型能够关注的指令少于大模型,非推理模型能够关注的指令也少于推理模型。
你的 AGENTS.md 文件中的每个 token 都会在 每一次请求中加载,无论它是否相关。这就形成了一个硬性的预算问题:
| 场景 | 影响 |
|---|---|
小而聚焦的 AGENTS.md | 可为任务专用指令留下更多 tokens |
庞大臃肿的 AGENTS.md | 实际工作可用的 tokens 更少;Agent 也会困惑 |
| 不相关的指令 | 浪费 token + 分散 Agent 注意力 = 表现更差 |
综合来看,这意味着 理想的 AGENTS.md 文件应该尽可能小。
陈旧文档会污染上下文
大型 AGENTS.md 文件的另一个问题是内容容易过时。
文档很快就会过时。对人类开发者而言,陈旧文档虽然令人厌烦,但人通常拥有足够的既有记忆,会对糟糕文档保持怀疑。可对每次请求都会阅读文档的 AI Agent 而言,过时信息会主动 污染 上下文。
记录文件系统结构时,这个问题尤其危险。文件路径不断变化。如果你的 AGENTS.md 写着“身份验证逻辑位于 src/auth/handlers.ts”,而该文件后来被重命名或移动,Agent 就会信心满满地去错误位置查找。
不要记录结构,而要描述能力。可以提示相关内容 可能 位于何处,并说明项目的整体形态。让 Agent 在规划期间自行生成即时文档。
领域概念(例如“organization”“group”和“workspace”的区别)比文件路径更稳定,因此记录起来更安全。但在快速演进的 AI 辅助代码库中,即使这些概念也可能漂移,所以仍要保持克制。
精简过大的 AGENTS.md 文件
必须严格筛选放入其中的内容。可以把下面几项视为绝对最低要求:
- 一句话项目描述 (作用类似基于角色的 Prompt)
- 包管理器 (如果不是 npm;也可以使用
corepack提供警告) - 构建/typecheck 命令 (如果不是标准命令)
说真的,只需要这些。其他所有内容都应该放到别处。
一句话项目描述
这一句话会告诉 Agent 为什么 要在这个仓库中工作的原因,并为它作出的每项决策提供锚点。
示例:
This is a React component library for accessible data visualization.
这就是基础。现在 Agent 已经理解了自己的工作范围。
指定包管理器
如果这是一个 JavaScript 项目,而你使用的不是 npm,请明确告诉 Agent:
This project uses pnpm workspaces.
如果不说明,Agent 可能会默认使用 npm ,并生成错误命令。
Corepack 也很好用
你也可以使用 corepack 让系统自动处理警告,从而节省宝贵的指令预算。
使用渐进式披露
不要把所有内容都塞进 AGENTS.md,而要使用 渐进式披露:只向 Agent 提供当前所需内容,并在必要时将它指向其他资源。
Agent 很擅长快速浏览文档层级,也能充分理解上下文,找到自己需要的内容。
把语言专用规则移到独立文件
如果你的 AGENTS.md 目前写着:
Always use const instead of let.Never use var.Use interface instead of type when possible.Use strict null checks....
请把这些内容移到独立文件中。然后在根目录的 AGENTS.md:
For TypeScript conventions, see docs/TYPESCRIPT.md
注意这里语气很轻:没有“始终”,没有全大写的强制命令,只有一句对话式引用。
这样做的好处包括:
- 只有当 Agent 编写 TypeScript 时,才加载 TypeScript 规则
- 其他任务(CSS 调试、依赖管理)不会浪费 tokens
- 文件保持聚焦,并能适应模型更替
嵌套渐进式披露
还可以继续深入。你的 docs/TYPESCRIPT.md 可以引用 docs/TESTING.md。由此创建一棵易于发现的资源树:
docs/├── TYPESCRIPT.md│ └── references TESTING.md├── TESTING.md│ └── references specific test runners└── BUILD.md└── references esbuild configuration
你甚至可以链接到外部资源,例如 Prisma 文档、Next.js 文档等。Agent 能够高效浏览这些层级。
使用 Agent Skills
许多工具支持“Agent Skills”——Agent 可以调用的命令或工作流,用来学习如何完成某项具体工作。这也是另一种 渐进式披露:Agent 只在需要时才拉取相关知识。
我们会在另一篇文章中深入介绍 Agent Skills。
优秀的 AGENTS.md 只是第一步
看看我在自己的 AGENTS.md 之上运行哪些 Skills,把文件中的指导转化为真正交付的成果。
AGENTS.md 在 Monorepo 中的用法
你不必局限于根目录中的单个 AGENTS.md 。你可以在子目录中放置 AGENTS.md 文件,它们会 与根目录级别的文件合并.
这对 Monorepo 非常有用:
各层应该放什么
| 级别 | 内容 |
|---|---|
| 根目录 | Monorepo 用途、如何浏览各个包、共享工具(pnpm workspaces) |
| 包目录 | 包的用途、特定技术栈、包专用约定 |
根目录 AGENTS.md:
This is a monorepo containing web services and CLI tools.Use pnpm workspaces to manage dependencies.See each package's AGENTS.md for specific guidelines.
包级 AGENTS.md (位于 packages/api/AGENTS.md):
This package is a Node.js GraphQL API using Prisma.Follow docs/API_CONVENTIONS.md for API design patterns.
不要让任何一层承载过多内容。 Agent 会在上下文中看到所有已经合并的 AGENTS.md 文件。每一层都只应聚焦与该层范围相关的内容。
修复失控的 AGENTS.md :使用这个 Prompt
如果你开始担心 repo 中的 AGENTS.md 文件,并希望使用渐进式披露原则重构它,可以尝试把下面这段 Prompt 复制到编码 Agent 中:
I want you to refactor my AGENTS.md file to follow progressive disclosure principles.Follow these steps:1. **Find contradictions**: Identify any instructions that conflict with each other. For each contradiction, ask me which version I want to keep.2. **Identify the essentials**: Extract only what belongs in the root AGENTS.md:- One-sentence project description- Package manager (if not npm)- Non-standard build/typecheck commands- Anything truly relevant to every single task3. **Group the rest**: Organize remaining instructions into logical categories (e.g., TypeScript conventions, testing patterns, API design, Git workflow). For each group, create a separate markdown file.4. **Create the file structure**: Output:- A minimal root AGENTS.md with markdown links to the separate files- Each separate file with its relevant instructions- A suggested docs/ folder structure5. **Flag for deletion**: Identify any instructions that are:- Redundant (the agent already knows this)- Too vague to be actionable- Overly obvious (like "write clean code")
不要堆出一团泥球
准备向 AGENTS.md添加内容时,先问问自己它应该放在哪里:
| 位置 | 适用情况 |
|---|---|
根目录 AGENTS.md | 与 repo 中的每一项任务都相关 |
| 独立文件 | 只与某个领域相关(TypeScript、测试等) |
| 嵌套文档树 | 内容可以按层级组织 |
理想的 AGENTS.md 应该小而聚焦,并指向其他资源。它只向 Agent 提供足以开始工作的上下文,同时留下通往更详细指南的线索。
其他所有内容都放在渐进式披露体系中:独立文件、嵌套的 AGENTS.md 文件或 Skills。
这样可以高效利用指令预算,让 Agent 保持专注,并使整套配置能够适应工具与最佳实践的持续演进。