入门 📋 6 个步骤 第 366 / 470 篇

上下文工程实战:写好 AGENTS.md / CLAUDE.md,让编程 Agent 一次就懂你的项目

2026 年用好编程 Agent 的最高杠杆动作不是换更强模型,而是写好上下文文件。本教程手把手教你用 AGENTS.md + CLAUDE.md + SKILL.md 三层结构,让 Agent 每次开口就懂项目约定,返工率从 3-5 次降到 0-1 次。

2026.09.02· 16 分钟阅读· 约 1993 字· 🤖 Claude Code / 💻 Codex

你有没有发现:同一个 Claude Code / Cursor,别人用起来「一次就写好」,你用起来「改了五遍还不对」?问题往往不在模型,而在上下文。每次新开会话,Agent 都是一张白纸——它不知道你用 pnpm 还是 npm、不知道哪个文件夹是 API 层、不知道团队约定「禁止用 print 调试」。于是你每轮都要重复解释,返工 3-5 次是常态。2026 年各家共识已经很明确: Intelligence is not the bottleneck — context is(瓶颈不是智力,是上下文)。本教程教你怎么用三个文件,把项目约定「写一次、处处生效」,让 Agent 开口就懂你的项目。

🗂️ 本教程适合:正在或准备用 Claude Code / Codex / Cursor / Copilot 做开发的人。不需要任何编程框架基础,照着抄模板就能用。花 1 小时写一次,之后每次会话、每个并行 Agent、每个队友都继承同一份基线。

Step 1:为什么「多写点上下文」反而更糟

1 先搞懂:上下文窗口不是免费仓库

一个重要反直觉事实:往上下文里塞得越多,Agent 表现越差。多项研究(Chroma 的 context rot、苏黎世联邦理工的 AGENTS.md 评估)都验证过——把整段对话历史塞进去,准确率能掉 30%;自动生成的上下文文件甚至比「没有文件」还差 3%。原因很简单:模型的注意力是有限的,废话越多,关键指令的信号越被稀释。所以我们要的不是「多写」,而是「在最对的时间,给最少的、最高信号的信息」。这正是「上下文工程(Context Engineering)」的核心。

新手最常踩的坑:把 AGENTS.md 写成项目说明书,几百行堆满目录结构、依赖列表——这些 Agent 自己看代码就能知道。真正该写的是「只有你团队知道、模型猜不到的隐性约定」。

Step 2:认识三个文件,各管一摊

2 AGENTS.md + CLAUDE.md + SKILL.md 三层架构

2026 年形成了一套事实标准,三个文件,三种作用域,按需加载:

文件谁读它什么时候加载放什么
AGENTS.md所有 Agent(Codex/Cursor/Copilot/Claude 都认)每次会话、常驻项目级、工具无关的通用约定
CLAUDE.md仅 Claude Code每次会话、常驻Claude 专属行为 + 一行 @AGENTS.md
SKILL.md按需触发特定任务才加载冷门、情景化的操作知识

关键思路是渐进式披露:常驻文件只放高频规则,把「数据库迁移怎么写」「部署流程」这种偶发知识拆到 SKILL.md,等 Agent 真碰到迁移任务时才加载。这样每一次对话的上下文都精简,但信息一个不少。

Step 3:写一份能直接抄的 AGENTS.md

3 复制即用模板(控制在 150 行内)

把下面这份贴到项目根目录的 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
💡 检验标准:对每一行问「删了它,Agent 会不会犯一个原本不会犯的错?」不会,就删。目标是不超过 150 行;小仓库 30-50 行足矣。

Step 4:接上 Claude Code(和其他 Agent)

4 一份 AGENTS.md,全员通用

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

5 别让每次会话都为用不上的知识买单

「数据库迁移规范」「部署到预发环境的 12 步」这种低频但高价值的操作,不该常驻在每次对话里。把它们写成 .claude/skills/数据库迁移/SKILL.md 这类技能文件,Agent 只有在真的碰到相关任务时才会加载。好处是双重的:常驻上下文更干净,且每条技能可以写得很细(200 行都不嫌多),反正不占日常额度。

# .claude/skills/数据库迁移/SKILL.md(按需加载,不占日常上下文)
触发:涉及 migration / schema 变更时
步骤:
1. 读当前 schema,确认命名规范
2. 只加不减,向后兼容
3. 生成迁移文件 → 跑 pnpm test
4. 在 PR 描述里写明回滚方案
🔑 学到的心法:AGENTS.md 当「索引」用,指向详细文档,而不是把详细文档本身塞进来。Agent 需要细节时会自己读,平时不被噪音干扰。

Step 6:用「返工次数」验证,并定期审计

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、苏黎世联邦理工等公开研究,属学界观察,具体数值随模型与任务而异。写入项目的任何约定请以你团队的真实代码规范为准,切勿照搬网络模板。

← 返回教程中心