当 AI 编程工具越来越像“能干活的同事”时,很多团队会遇到一个真实问题:
它明明会写代码,但总是不按你项目的方式写。
例如:
- 你们统一用
pnpm,它却先来一句npm install - 你们的 API 客户端返回
Result对象,它却上来就是一层try/catch - 某些目录只能读不能改,它却直接动手
- Monorepo 里明明有模块边界,它却按“全仓库一锅炖”的方式处理
这些问题本质上都不是模型“不聪明”,而是它缺少项目上下文。
这也是为什么越来越多团队开始认真对待这类文件:
AGENTS.mdCLAUDE.md- Cursor Rules
- Copilot instructions
它们看起来像“提示词文件”,但本质不是为了炫技、也不是为了堆 prompt,而是为了给 AI 一个稳定、低歧义、可长期维护的项目入口。
参考:OpenAI Developers
一、上下文文件到底解决了什么问题?
结论先行:
上下文文件不是给 AI 补基础知识,而是告诉它“这个项目有哪些它自己不容易推断出来的规则”。
模型本身已经知道大量通用软件工程知识。它知道测试、lint、前后端组织方式,也知道常见框架默认套路。
但它不知道你们团队的“隐性约定”:
- 为什么包管理器必须是
pnpm - 哪些命令是 CI 对齐的标准命令
- 哪些目录是生成物,不能改
- 哪些调用约定是反直觉的
- 哪些操作必须先确认
- 哪些行为永远不能做
这些内容很多时候不会直接写死在代码里,或者即使能推断,也要绕很多步才能猜出来。
一旦 AI 在这些地方猜错,后续所有工作都会跑偏。
参考:OpenAI Developers
所以,上下文文件真正作用不是“解释项目是什么”,而是:
告诉智能体,进入这个仓库后,哪些规则必须先知道。
二、AGENTS.md 是什么?为什么它现在很重要?
AGENTS.md 可以理解为:
写给 AI 编程智能体看的项目说明书。
公开信息里,OpenAI 在介绍 Codex 时明确提到会读取仓库中的 AGENTS.md 获取项目级指导;随后又推动其走向更中立的开放标准。AGENTS.md 生态正在扩大,关键意义在于:
- 它不再只是某个工具私有技巧
- 它正在成为跨工具可读的约定
- 你不需要为每个 AI 工具从零设计规则体系
简单说,AGENTS.md 越来越像“AI 时代的项目协作文档入口”。
三、常见误区:不要把所有工具当成同一种机制
很多文章会粗暴地说:
- 启动时扫描全盘
- 把所有规则统一注入
- 和系统提示词同级
- 所有工具都遵循同样优先级
这种说法容易误导。
更准确的理解是:
不同工具都支持“持久化指导信息”,但发现路径、加载层级、作用范围并不完全一样。
例如:
- Codex:有自己的
AGENTS.md读取逻辑 - Claude Code:有
CLAUDE.md/ rules / memory 体系 - Cursor:有 Rules,也支持
AGENTS.md - GitHub Copilot:有仓库级、路径级 instructions,并在部分场景支持 agent instructions
共同目标类似,实现方式不同。
参考:OpenAI Developers
团队落地时,最稳做法不是死背“注入原理”,而是:
写跨工具都成立的规则,少写依赖某工具私有细节的描述。
四、Codex 里的 AGENTS.md:重点不是“全盘扫描”,而是“分层读取”
Codex 的关键点不是“启动时全吞所有规则”,而是分层组合:
- 全局说明
- 项目说明
- 更接近当前工作范围的局部说明
- 最终按层级生成当前任务可用指导信息
这会直接影响文件组织方式。
如果你把所有规则都塞进根目录一个超长 AGENTS.md,当然能用,但会出现:
- 维护成本持续上升
- 关键规则被噪声淹没
- 模块差异难表达
更工程化的方式通常是:
根目录放全局,子目录放局部。
参考:OpenAI Developers
五、Claude Code 里的 CLAUDE.md:不是单文件,而是“项目记忆体系”
CLAUDE.md 更像一套分层记忆体系,而非孤立文件。文档提到可结合:
- 用户级记忆
- 项目级记忆
- 路径作用域规则
@导入其他文件.claude/rules/细粒度规则
这套机制很适合三类信息:
- 个人长期偏好(命令风格、输出风格、默认协作方式)
- 团队共享规范(脚本、确认边界、风格底线)
- 模块局部差异(如
/apps/web与/apps/api完全不同)
如果团队主要使用 Claude Code,更高效的方式不是“一个 500 行大文件”,而是:
拆分共享规则与路径差异。
参考:Claude Code Docs
六、GitHub Copilot、Cursor 也支持,但别想当然
GitHub Copilot
GitHub Copilot 已支持多种自定义指令来源,例如:
.github/copilot-instructions.md- 路径级 instructions
- 部分 surface 下的 agent instructions(如
AGENTS.md、CLAUDE.md、GEMINI.md)
关键细节:
不同 surface 能力不完全一样。
不能简单说“只影响 Chat”或“全场景都生效”。
Cursor
Cursor 已把 Rules 与 AGENTS.md 都纳入持久化指导体系。不是“二选一”,而是定位不同、可配合使用。
实践建议:
多工具共存是现实,但不要为了兼容所有工具维护多套独立大文档。
否则很容易规则漂移、彼此冲突。
七、研究提醒:上下文不是越多越好
ETH Zurich 在 2026 年发布的《Evaluating AGENTS.md》给出重要结论:
- 上下文文件常带来额外推理成本
- AI 自动生成的低质量上下文,可能降低任务成功率
- 人工编写的高价值上下文,在部分场景更有效
- 问题往往不在“模型没看规则”,而在“规则写得冗余、模糊、重复”
这直接打破常见错觉:
“AI 需要上下文,所以给得越多越好。”
真正有效的上下文应当是:
- 简洁
- 明确
- 可执行
- 非冗余
- 对决策有真实影响
八、最实用的判断标准
如果只记一句话,就记这句:
这条信息,AI 能不能比较容易从代码库本身推断出来?
- 能推断:先别写
- 不能推断且会直接影响行为质量:值得写
参考:OpenAI Developers
这个标准能快速过滤低价值内容。
九、真正应该写进 AGENTS.md / CLAUDE.md 的内容
下面这些通常才是高价值内容。
1)非标准工具链约定
Package manager
-
Use
pnpmonly. -
Never use
npmoryarn. -
CI uses
pnpm install --frozen-lockfile.
这类规则看似简单,但非常关键,因为它会直接影响智能体执行命令的方式。
2)反直觉架构约定
API behavior
-
api()andapiVoid()do not throw on business failure. -
They return a result object.
-
Do not add
try/catcharound normal calls unless handling transport/runtime failure.
这类规则价值很高,因为它往往是“代码里不明显,但错了会整片跑偏”的点。
3)精确命令,而不是模糊描述
Useful commands
-
Run one test file:
pnpm vitest run src/path/to/file.spec.ts -
Run tests by name:
pnpm vitest run -t "test name" -
Run lint:
pnpm lint
给完整命令,比告诉 AI“记得跑测试”有效得多。
4)操作权限边界
Safety rules
-
You may read files, edit source code, run lint, typecheck, and targeted tests.
-
Ask before installing/removing dependencies.
-
Ask before deleting files or editing CI config.
-
Never commit secrets or
.envfiles. -
Never force-push protected branches.
对代理式工具来说,这种边界定义通常比“风格建议”更重要。
5)小而准的代码示例
// ✅ preferred
export function useUserProfile() {}
// ❌ avoid
export default function useUserProfile() {}
如果某条规范容易被误解,短代码示例通常比抽象说明更有效。
十、不建议写进去的内容
这部分经常被忽视。
1)项目介绍型内容
适合放在 README,不适合放进上下文规则文件。
2)代码目录导览
AI 可以自己看目录、搜索文件。复制大段目录结构,通常只会增加 token 成本。
3)通用工程口号
例如“写清晰代码”“注意可维护性”“尽量复用逻辑”。这些话本身没错,但过于通用,不够具体,对实际任务路径帮助有限。
4)README 已经写清楚的基础信息
如果原样重复到上下文文件里,增益通常很低。
十一、Monorepo 怎么设计最合理?
如果你是 Monorepo,不建议只靠根目录一个大文件。
更推荐的结构是:
repo-root/
├── AGENTS.md
├── apps/
│ ├── web/AGENTS.md
│ └── api/AGENTS.md
├── packages/
│ ├── ui/AGENTS.md
│ └── utils/AGENTS.md
└── CLAUDE.md
核心思路:
- 根目录:写全局规则
- 子应用:写模块差异
- 特定工具:补少量专属文件
这样做的好处:
- 文件不会膨胀成一坨
- 局部规则更容易维护
- AI 在模块内工作时更容易拿到高相关信息
十二、多工具团队怎么落地才不会乱?
如果每个工具都写一套完整规则,最后很容易出现:
- 文档越来越多
- 内容逐渐不一致
- 某条规则改了,只改了其中两份
- 团队没人知道哪份是准的
更实用的方法是:
确定一个单一事实来源,再给少量工具做适配层。
推荐方案:
方案一:AGENTS.md 作为跨工具基础文件
把多数团队共通规则放进去:
- 工具链
- 命令
- 边界
- 非标准约定
方案二:工具专属能力单独补
例如:
- Claude Code:补
CLAUDE.md、.claude/rules/ - Cursor:补 Rules
- Copilot:补
.github/copilot-instructions.md
这样做的优点:
- 大部分内容只维护一份
- 工具专属部分不会污染通用规则
- 成本可控,后期容易演化
十三、Hooks 的位置:规则负责“说明”,Hook 负责“执行”
很多团队写了很多规则,但仍不放心,原因很简单:
规则本质上是语言描述,不是强制执行。
这时 Hooks 才是关键补位。
你可以这样理解:
AGENTS.md / CLAUDE.md:告诉 AI 应该怎么做- Hooks:真正拦住“不能这么做”的行为
例如:
- 文档里写“不要 force push”
- Hook 里真正拦截危险命令
这种组合会比单纯堆 prompt 靠谱得多。
参考:Claude Code Docs
十四、别一上来写大文档,最好的方式是“从摩擦点迭代”
很多人第一次写这类文件时,容易犯一个错误:
想一口气写出一份“完美 AI 项目规范”。
实际往往适得其反。
更好的方式是:
第一步:先写极简版本,只写最关键几条
- 包管理器
- 核心命令
- 危险边界
- 反直觉约定
第二步:观察 AI 的真实错误
例如:
- 总是用错命令
- 总爱加不该加的
try/catch - 总想改生成目录
- 总是绕过统一封装层
第三步:把高频错误转成规则
不是“可能会错”就写,而是“已经反复出错了”再写。
第四步:定期删减
如果某条规则不再必要,就删掉。
核心原则:
上下文文件应该克制、聚焦、基于真实摩擦,而不是预设一切。
十五、一个更推荐的 AGENTS.md 模板
# AGENTS.md
## Required workflow
- Use `pnpm` for all package management commands.
- Before finishing, run:
- `pnpm lint`
- `pnpm test`
## Non-obvious project rules
- `api()` and `apiVoid()` do not throw on business failure.
- They return a result object.
- Do not wrap normal calls in `try/catch` unless handling transport/runtime failure.
## Safe operations
- You may read files, edit source code, run lint, typecheck, and targeted tests.
- Ask before installing/removing dependencies.
- Ask before deleting files, editing CI config, or changing production infrastructure.
## Never do
- Do not commit secrets, `.env` files, or private keys.
- Do not force-push protected branches.
## Useful commands
- Run one test file: `pnpm vitest run path/to/file.spec.ts`
- Run tests by name: `pnpm vitest run -t "test name"`
这份模板最大优点不是“完整”,而是:
- 容易开始
- 容易迭代
- 不会一开始就变成一本手册
十六、最后总结
AI 协作时代,真正重要的不是 prompt 技巧,而是项目约定的工程化表达。
很多人讨论 AI 编程时,会把注意力放在:
- 模型强不强
- 会不会自动改代码
- 能不能多轮规划
- 会不会调用工具
这些当然重要。
但当 AI 真正进入日常开发流程后,最影响体验的往往是:
它有没有理解你这个项目到底该怎么工作。
而 AGENTS.md、CLAUDE.md、Rules、Instructions 这类文件,正是在解决这个问题。
它们不是为了让 AI 更像魔法,而是为了让它更像一个知道你团队规矩的协作者。
(参考:OpenAI Developers)
所以最好的实践不是写得多,也不是写得玄,而是做到三点:
- 只写 AI 不容易自己推断的内容
- 只保留真正影响行为质量的规则
- 随着真实摩擦不断迭代,而不是一开始追求“完美规范”
这比任何“万能 Prompt 模板”,都更接近长期可用的工程方案。
参考资料
- OpenAI Codex:AGENTS.md Guide
- OpenAI:Introducing Codex
- AGENTS.md 官网
- OpenAI / Linux Foundation:Agentic AI Foundation 相关说明
- Claude Code Docs:Memory
- Claude Code Docs:Hooks
- GitHub Docs:Custom instructions support for GitHub Copilot
- Cursor Docs:Rules / AGENTS.md
- ETH Zurich:Evaluating AGENTS.md