你有没有发现:同一个 Claude Code / Cursor,别人用起来「一次就写好」,你用起来「改了五遍还不对」?问题往往不在模型,而在上下文。每次新开会话,Agent 都是一张白纸——它不知道你用 pnpm 还是 npm、不知道哪个文件夹是 API 层、不知道团队约定「禁止用 print 调试」。于是你每轮都要重复解释,返工 3-5 次是常态。2026 年各家共识已经很明确: Intelligence is not the bottleneck — context is(瓶颈不是智力,是上下文)。本教程教你怎么用三个文件,把项目约定「写一次、处处生效」,让 Agent 开口就懂你的项目。
Step 1:为什么「多写点上下文」反而更糟
一个重要反直觉事实:往上下文里塞得越多,Agent 表现越差。多项研究(Chroma 的 context rot、苏黎世联邦理工的 AGENTS.md 评估)都验证过——把整段对话历史塞进去,准确率能掉 30%;自动生成的上下文文件甚至比「没有文件」还差 3%。原因很简单:模型的注意力是有限的,废话越多,关键指令的信号越被稀释。所以我们要的不是「多写」,而是「在最对的时间,给最少的、最高信号的信息」。这正是「上下文工程(Context Engineering)」的核心。
新手最常踩的坑:把 AGENTS.md 写成项目说明书,几百行堆满目录结构、依赖列表——这些 Agent 自己看代码就能知道。真正该写的是「只有你团队知道、模型猜不到的隐性约定」。
Step 2:认识三个文件,各管一摊
2026 年形成了一套事实标准,三个文件,三种作用域,按需加载:
| 文件 | 谁读它 | 什么时候加载 | 放什么 |
|---|---|---|---|
AGENTS.md | 所有 Agent(Codex/Cursor/Copilot/Claude 都认) | 每次会话、常驻 | 项目级、工具无关的通用约定 |
CLAUDE.md | 仅 Claude Code | 每次会话、常驻 | Claude 专属行为 + 一行 @AGENTS.md |
SKILL.md | 按需触发 | 特定任务才加载 | 冷门、情景化的操作知识 |
关键思路是渐进式披露:常驻文件只放高频规则,把「数据库迁移怎么写」「部署流程」这种偶发知识拆到 SKILL.md,等 Agent 真碰到迁移任务时才加载。这样每一次对话的上下文都精简,但信息一个不少。
Step 3:写一份能直接抄的 AGENTS.md
把下面这份贴到项目根目录的 AGENTS.md,按你的项目填空。每条都遵循「命令先于解释、显式约束、给反例、附命令速查」的原则:
# AGENTS.md(项目通用约定,所有 AI 编程 Agent 都读)
## 技术栈与命令
- 包管理:pnpm(禁 npm/yarn)
- 启动:pnpm dev | 构建:pnpm build | 测试:pnpm test -- --tb=short
- 代码风格:Prettier + ESLint,提交前必跑 pnpm lint
## 必须遵守的约定(Do)
- 业务逻辑放 internal/,可复用组件放 pkg/
- 数据库只用参数化查询,禁止字符串拼 SQL
- 错误处理:捕获具体异常,禁止裸 except/ catch (Exception)
## 禁止做的事(Don't)
- 禁止直接改 generate/ 下的生成文件
- 禁止为一次性逻辑抽公共函数(用一次不算复用)
- 禁止把密钥写进源码,统一走环境变量
## 常见任务怎么下手
| 任务 | 动作 |
|------|------|
| 加 API 端点 | 写 handler → 校验入参 → 写单测 → 更新 OpenAPI |
| 加数据库表 | 写迁移 → 改 repository → 加集成测试 |
## 细节文档(按需取,别全塞进来)
- 架构图与决策记录 → docs/ARCHITECTURE.md
- 接口契约 → specs/README.md
Step 4:接上 Claude Code(和其他 Agent)
AGENTS.md 是开放标准,Codex、Cursor、Copilot、Claude Code 都会自动读。唯一例外是 Claude Code 默认读 CLAUDE.md——解决办法就一行,让它在 CLAUDE.md 里引用 AGENTS.md,避免维护两份:
# CLAUDE.md(Claude 专属,放根目录)
@AGENTS.md
## Claude 专属补充说明
- destructive 命令(rm -rf / git push --force)执行前必须先问我
- 偏好用 rg 搜索而非 grep
如果你在多台机器开发,还可以放一份全局 ~/.claude/CLAUDE.md,写「跨所有仓库都成立的个人偏好」(比如默认编辑器、提交信息风格)。层级是:全局 → 项目 → 子目录/per-area,越具体越优先,Agent 会自动向上合并。
别直接 /init 然后把生成文件原样提交!各家的 init 会吐出一堆「标准目录结构」这种模型自己能看出来的废话。苏黎世联邦理工的研究显示,自动生成的上下文文件可能让任务成功率再降 3%、成本涨 20%+。一定人工过一遍再提交。
Step 5:把冷门知识拆进 SKILL.md
「数据库迁移规范」「部署到预发环境的 12 步」这种低频但高价值的操作,不该常驻在每次对话里。把它们写成 .claude/skills/数据库迁移/SKILL.md 这类技能文件,Agent 只有在真的碰到相关任务时才会加载。好处是双重的:常驻上下文更干净,且每条技能可以写得很细(200 行都不嫌多),反正不占日常额度。
# .claude/skills/数据库迁移/SKILL.md(按需加载,不占日常上下文)
触发:涉及 migration / schema 变更时
步骤:
1. 读当前 schema,确认命名规范
2. 只加不减,向后兼容
3. 生成迁移文件 → 跑 pnpm test
4. 在 PR 描述里写明回滚方案
Step 6:用「返工次数」验证,并定期审计
不需要复杂指标,盯住一个最直观的:每个任务你需要返工/纠正几次。如果你还在说「我明明告诉过你别用 print」「你该写个测试」,说明这条规则该进文件。典型收益对比:
| 指标 | 写之前 | 写好之后 |
|---|---|---|
| 无需纠正直接完成的任务 | ~30% | 80-90% |
| 每任务返工次数 | 3-5 次 | 0-1 次 |
| 每会话改错的文件数 | 2-4 个 | 0 个 |
| 审 Agent 产出耗时 | 10-20 分钟 | 2-5 分钟 |
最后给两条维护纪律:① 5% 规则——常驻上下文(AGENTS+CLAUDE)别超过有效窗口的 5%(200K 窗口下约 1 万 token / 500 行是红线);② 定期审计——每个 sprint 或每月过一遍,把 Agent 反复犯的错提进规则、把过时的删掉。上下文文件是「活文档」,不是一次性产物。
上手清单:① 项目根目录新建 AGENTS.md,套用本文模板填空;② 写一行 @AGENTS.md 的 CLAUDE.md;③ 把低频操作移到 .claude/skills/;④ 提交进仓库(它也是给人看的约定文档);⑤ 一周后回看返工率是否下降。做完这五步,你和团队就拥有了一套「一次写、永久省」的 AI 协作基线。
注意:本文引用的「上下文越多表现越差」「自动生成上下文文件可能降效」等结论来自 Chroma、苏黎世联邦理工等公开研究,属学界观察,具体数值随模型与任务而异。写入项目的任何约定请以你团队的真实代码规范为准,切勿照搬网络模板。