ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AGENTS.md:给AI编码助手写一份项目入职手册,解决上下文失忆

AGENTS.md:给AI编码助手写一份项目入职手册,解决上下文失忆 直接说结论如果你正在用 Cursor、Claude Code 或者 Copilot 做 daily coding每天花在“让 AI 理解这个项目”上的时间超过你写代码的时间那你大概率还没建 AGENTS.md。这文件就是 Vibe Coding 工作流里最容易被忽略、但收益最高的一步——给 AI 队友写一份入职手册。我前段时间接手一个 FastAPI React 的老项目AI 改个分页逻辑能把整个路由文件重写一遍问它项目里用没用 SQLAlchemy 它答“看起来可能用了”。原因不复杂AI 每次对话都是新上下文它对这个项目的记忆接近于零。你指望一个“新员工”第一天就写对业务代码又不给它项目文档那不现实。AGENTS.md 干的就是这件事——把项目背景、技术栈约束、目录结构、常用命令、编码规范一次性写清楚让 AI 每次进入项目时都有一份可靠的“交接文档”。这篇文章我会把 AGENTS.md 从位置、语法到内容结构、落地步骤全部拆一遍附上一个可以直接抄的模板再聊一聊团队协作场景下怎么管理这份文件。适合两类人一类是个人开发者正在用 AI 编程助手但总觉得“AI 不太懂我的项目”另一类是技术负责人想让团队在 Vibe Coding 模式下产出更稳定、更少返工。1. AGENTS.md 是什么AI 编码协作里的“新员工入职手册”1.1 为什么 AI 编码助手总是“记不住”你的项目先明确一个概念Vibe Coding 不是说把键盘扔掉而是用自然语言作为主要编程接口人类用意图驱动开发AI 负责把意图翻译成代码。听起来很美好实际用起来你会发现一个核心痛点——上下文失忆。你上午让 Cursor 帮你完成了用户认证模块下午新开一个会话让它加个重置密码接口它大概率不知道你已经写好了 Token 刷新逻辑甚至不知道项目里用的数据库 ORM 是什么。这不是模型能力不行而是产品形态决定的大模型的上下文窗口虽然越来越长但每次会话仍然是从零开始的“冷启动”。你早上聊的那 30 轮对话关掉窗口就没了你项目里那 300 个文件AI 打开项目时也不可能全部读进上下文。拿人类来类比这就好比团队里每天来一个新实习生他聪明、执行力强但对你项目的历史一无所知。你每天都要重新给他解释一遍“我们项目用什么框架、代码放哪里、测试怎么跑、命名习惯是什么”。如果把这些内容写在一份文档里第一天就丢给他他第二天开始就能独立干活。AGENTS.md 就是给 AI 实习生准备的这份文档。1.2 从 Claude 的 CLAUDE.md 到 AGENTS.md 的演进你可能听过 Claude Code 里的 CLAUDE.md或者 Cursor 里的 .cursorrules这两个都是早期各工具各自定义项目级指令的做法。问题在于它们是割裂的你用 Cursor 写的一套规则切到 Claude Code 就不认了团队成员有的人用 Cursor有的人用 Windsurf规则散落在不同文件里维护成本很高。AGENTS.md 的思路是做一个跨工具的通用约定。把项目的行为规范写在一个名字统一、位置统一一般是仓库根目录、格式统一的 Markdown 文件里让不同的 AI 编码工具都能读取并遵循。现在 Claude Code、Cursor、Windsurf、Codex 等主流工具已经陆续支持这个约定社区里也给 AGENTS.md 提供了标准的组织规范比如 agents.md 这个开源项目定义的格式标准。这背后其实是一个很明显的行业趋势AI 编码助手正在从“对话框里的聊天机器人”进化成“常驻仓库的协作 Agent”。既然是协作者就需要一份结构化的约定来管理它的行为——这个约定不能只存在于你的脑子里也不能只存在于某个工具的私有配置里它应该像 README 一样成为仓库的一部分跟着代码走。2. 动手写 AGENTS.md 之前先解决几个关键问题2.1 文件放哪里根目录唯一生效第一个现实问题AGENTS.md 到底放哪个目录才能被 AI 工具自动加载最保险的做法是放在仓库根目录。Cursor 和 Claude Code 默认会递归查找项目根目录下的 AGENTS.md把它作为全局的项目指令。如果你的项目是 monorepo不同子项目有各自约束可以在子目录里也放一份 AGENTS.md母目录的全局规则会被继承子目录的规则优先级更高。有一点要注意不要同时在多个层级放多个 AGENTS.md除非你明确知道工具的优先级逻辑。我实测过有些工具对嵌套 AGENTS.md 的加载逻辑是“只取最近的目录”有些是“全部加载然后去重”规则一旦冲突行为就不可预测。最简单的策略单仓库单文件除非项目确实大到需要按模块拆分。2.2 语法选择纯 Markdown 还是带 FrontmatterAGENTS.md 目前有两种写法一种是纯 Markdown 描述自然语言写规则另一种是带 YAML Frontmatter在文件头部用结构化字段定义元信息。我的建议是初期用纯 Markdown不要急着上 Frontmatter。原因很简单不同的 AI 工具对 Frontmatter 字段的解析规则并不完全一致你写了model: claude-sonnet-4-5这个字段Cursor 可能不认识甚至可能干扰其他工具的解析。纯 Markdown 的兼容性最好任何工具都能读AI 模型对自然语言的理解能力也足够覆盖大部分场景。Frontmatter 唯一值得用的场景是你需要精确控制 AI 模型的版本选择、温度参数或者要声明该文件适用的 Agent 角色这时候结构化字段才体现价值。先把纯文本版本跑通再逐步加结构这是风险最低的路径。2.3 语言选择中文还是英文不建议用纯中文写 AGENTS.md也不建议用纯英文。原因很实际目前最强的编码模型比如 Claude、GPT 系列在英文指令遵循上仍然比中文更稳定尤其在涉及代码风格、路径名、命令拼写的时候英文表达的歧义更少。但是纯英文对中文开发团队的维护成本高团队成员阅读容易产生理解偏差。我采用的策略是“结构用英文解释用中文”。命令、目录路径、代码规范这些需要被严格执行的字段用英文原样写说明性的文字用中文写清楚为什么。这样既保证了 AI 执行准确又照顾了团队可读性。3. 直接抄作业一个经过验证的 AGENTS.md 模板3.1 完整模板示例下面这个模板是我在多个项目里实际使用后不断精简出来的直接复制到你的仓库根目录按自己的项目改一下占位符就能用。我解释一下每个部分为什么这么写。# AGENTS.md ## Project Overview This is a FastAPI React application for team collaboration and task management. ## Tech Stack - Backend: Python 3.11, FastAPI, SQLAlchemy 2.0, PostgreSQL - Frontend: React 18, TypeScript, Vite, Tailwind CSS - Task Queue: Celery Redis ## Project Structurebackend/ app/ api/ # FastAPI routers models/ # SQLAlchemy models services/ # business logic layer schemas/ # Pydantic schemas frontend/ src/ components/ # React components pages/ # page-level components hooks/ # custom hooks## Common Commands - Run backend: cd backend uvicorn app.main:app --reload - Run frontend: cd frontend npm run dev - Run tests: cd backend pytest - Run linter: cd backend ruff check . - Migration: cd backend alembic upgrade head ## Coding Guidelines - Backend: use SQLAlchemy models, do NOT write raw SQL except for complex queries - Frontend: use TypeScript, strict mode enabled, do not use any - All API endpoints must be prefixed with /api/v1 - Keep functions small and pure; move business logic to services/ layer - Use existing patterns in codebase when adding new features ## Important Constraints - Do NOT modify files in backend/app/models/ without confirming with the user - Do NOT write to frontend/src/__generated__/ — it is auto-generated - Do NOT install new dependencies unless the user explicitly asks - If a file exceeds 300 lines, split it into smaller modules ## Workflow Preferences - When fixing a bug, first explain the root cause, then show the fix - When adding a feature, follow the existing file structure, do not create new top-level folders - Before running heavy commands (migrations, builds), confirm with the user - Prefer readable code over clever one-liners然后我在下面逐一解释写法背后的逻辑。3.2 为什么要这样设计模板Project Overview 必须控制在三行以内。我看到很多人把项目介绍写成四五百字的散文AI 加载后注意力全被稀释了。一句话讲清楚“这个项目是什么、用什么技术、解决什么问题”就够了你的目的不是让 AI 写周报而是让它对项目有个基本定位。Tech Stack 要写关键版本不要写全量依赖清单。AI 读懂了 Python 3.11 FastAPI SQLAlchemy 的组合就能推断出很多编码范式不需要你事无巨细地列 requirements.txt。版本号建议写大版本写得太细比如SQLAlchemy2.0.25反而容易因为升版导致规则过时。Common Commands 是整个文件里性价比最高的一段。我见过太多人抱怨“AI 让我装了一堆没用的包”根因就是 AI 不知道项目里已经有现成的 lint 工具和测试命令。你把pytest、ruff、alembic upgrade head这些命令写清楚AI 就不会自己脑补出npm run build这种它以为“应该存在”的指令了。命令写法要遵循一个原则能跑通写之前自己先执行验证一遍。Coding Guidelines 写“约定”不写“废话”。像“代码要写注释”“变量命名要有意义”这种空话别写进去AI 模型本来就会遵循这些通用代码规范写进去只会抢占上下文窗口。真正有价值的是你这个项目独有的约定比如“API 路径必须以 /api/v1 开头”“业务逻辑放 services 层不放进 router”。“如果文件超过 300 行就拆分”这种约束只有你这个项目的维护者才知道AI 不可能自己推断出来这就是 AGENTS.md 能帮你守住项目风格的关键。Important Constraints 里有个容易忽略的技巧约束要带“正例”。比如我们写“Do NOT write tofrontend/src/__generated__/”同时补充说明“它是自动生成的”——AI 理解了这个目录是自动生成的之后它才会真正意识到“这不是我可以随便改的地方”而不是一条冷冰冰的禁令。同理写“不要安装新依赖”时应该同时给一个默认行为“除非用户明确要求”否则 AI 可能走到另一个极端——明明需要装一个库来处理合理需求却因为这条约束卡住不敢动。AGENTS.md 里的每条规则都要让 AI 能推导出“那我应该怎么做”而不是只告诉它“不要做什么”。4. 老项目落地实操从 0 到 1 写出你的第一份 AGENTS.md4.1 第一步花 30 分钟做项目调研接手老项目时别急着写 AGENTS.md先花 30 分钟做调研。按这个顺序读README、配置文件pyproject.toml / package.json / go.mod、目录树、路由文件。调研的核心任务是回答四个问题这个项目用哪些技术栈版本号是多少测试命令、lint 命令、构建命令分别是什么代码目录的职责边界在哪里哪些目录是自动生成的不能动项目里反复出现的模式是什么比如“所有接口都要做权限校验”“所有新增功能都要写单元测试”这些问题不需要你一行一行读代码而是通过读配置文件和扫描目录树就能得到答案。我一般用tree -L 2快速扫一眼目录结构再用编辑器全局搜索几个高频关键词比如TODO、FIXME、中间件、装饰器就能大致摸清项目的编码风格。4.2 第二步先写“最痛的三件事”不要试图第一次就把 AGENTS.md 写完先想清楚你过去两周让 AI 干活时最抓狂的三类问题是什么。大概率是这三类第一类AI 命令跑错了。它总是猜测试命令是npm test而你们的项目实际用的是pytest。把 Common Commands 写死这个痛点在 10 分钟内解决。第二类AI 文件位置放错了。让它新增一个接口它直接塞进main.py而不是放在api/路由目录里。把 Project Structure 写清楚让它开工前先看目录约束。第三类AI 改了不该改的文件。在某个业务模块旁边做小重构它却顺手改了models/里的表结构。写进 Important Constraints明确告诉它哪些目录是只读的。写这“最痛的三件事”时有一个原则能少写就少写。AGENTS.md 不是越长越好指令过多会稀释每条规则的权重AI 反而会“选择性失明”。实测下来一个项目的 AGENTS.md 控制在 50 行以内、列出 5 到 8 条最关键的约束是效果最好的区间。4.3 第三步用一次真实对话验证 AGENTS.md 是否生效写完文件不要直接开干先用一个测试任务验证 AGENTS.md 是否被正确加载和遵循。我常用的验证方法是随便让 AI 做一件简单的事比如“帮我在项目里找一下用户登录接口的实现”然后观察它是否能立刻给出正确路径且不会提出“我需要先了解项目结构”这类要求。还有一个细节如果你用的是 Cursor写完 AGENTS.md 后要确认 Cursor 的 Rules 设置里把路径指对了。Cursor 读取 AGENTS.md 有两种方式一种是在Settings Rules里手动添加另一种是它会扫描项目根目录的 AGENTS.md 文件。不同版本的 Cursor 行为略有差异最稳妥的做法是打开 Cursor 的设置页确认一下“项目规则”里能看到你的 AGENTS.md 内容。Claude Code 则是自动读取的不需要额外配置。如果测试发现 AI 完全无视 AGENTS.md优先检查三个方向文件是否在根目录文件编码是否 UTF-8是否在 IDE 设置里被其他规则覆盖了优先级。排查完再跑一遍八成能解决。5. 常见问题与避坑指南5.1 高频问题速查表我把过去踩过的坑整理成一张表方便你遇到问题时直接对号入座。问题现象可能原因解决方案AI 完全不遵守 AGENTS.md文件不在项目根目录或 IDE 未配置读取路径移到根目录检查 IDE 设置里的 Rules 路径AI 遵守了一部分规则忽略另一部分指令过多上下文权重稀释精简到 5-8 条最关键约束删除空洞废话路径策略错误AI 老是找错文件目录结构描述不清晰或没有给典型文件路径示例用 glob 通配符如**/api/*.py给一两个示例路径AI 在多个 AGENTS.md 之间困惑多层级文件规则冲突或加载逻辑不明确统一为单仓库单文件模式AGENTS.md 里的命令跑不通命令写错了或依赖环境变量没写把文件里每条命令都手敲执行一遍确保真实可用AI 把 AGENTS.md 的约束当成“建议”而非“规则”措辞模糊用了 “should”“maybe” 这类词改成 “Do NOT”“Always” 这类强指令语气5.2 几个容易忽略的实战细节路径一律用 glob 风格或 Unix 风格别用反斜杠。这是跨平台兼容性的基本要求。Windows 下的backend\app\models到了 Mac 上的 AI 工具里直接失效写成backend/app/models或**/models/*.py才是通用写法。AGENTS.md 里不要出现“保持代码整洁”这种话。我在前面提过这个坑但值得放在问题章节再强调一次——通用性越强的规则AI 本身就越会自觉遵守写了等于没写白白占用上下文窗口。AGENTS.md 的价值在于写“这个项目特有的规则”不是教 AI 怎么写代码。把 AGENTS.md 当成代码来维护而不是文档。项目技术栈升级了、目录重构了、命令变了记得同步更新 AGENTS.md。我见过不少团队写了 AGENTS.md 后半年没动过里面的命令早就失效了AI 照着执行只会把事情搞砸最终团队成员得出结论“AGENTS.md 没用”。这不是工具的问题是维护的问题。注意剪贴板和聊天记录的干扰。有些 AI 编码工具会把你的聊天记录也作为上下文的一部分。如果你在对话里说过和你 AGENTS.md 里互相矛盾的指示比如“这次不用管测试命令”AI 可能会优先执行当前对话的指令。遇到这种情况直接在新会话里重新明确“以 AGENTS.md 为准”即可。5.3 一个曾经让我崩溃的真实案例我记忆很深的一次事故是用 Cursor 改一个异步任务队列明明 AGENTS.md 里写了“Do not modify files inbackend/app/models/”AI 还是把一个 model 的字段给改了。排查了半天发现原因是我把 AGENTS.md 放在docs/子目录下而 Cursor 只认根目录的文件。当时以为 Cursor 会递归检索结果工具根本没读到这个文件。这件事给我的教训是AGENTS.md 的位置选项看似很多但根目录永远是最稳的选择。除非你的工具文档明确支持子目录加载否则不要为了“根目录干净”这种审美偏好把文件藏到别处。这也是为什么我在第 2 章花了那么大力气讲位置问题——位置错了后面写得再好都等于零。6. 团队协作与治理让 AGENTS.md 成为仓库的一部分6.1 把 AGENTS.md 纳入 Code Review如果你在团队里推广 Vibe CodingAGENTS.md 就不只是个人的快捷配置它是团队的协作规范应该像 README、CONTRIBUTING 一样被正式管理。我的建议是把它纳入 Code Review 流程。任何对 AGENTS.md 的修改都要走 PR和改代码一样经过评审。评审的关注点不是“语法对不对”而是“这条规则是否真的必要”“会不会和现有项目的其他约束冲突”“表述是否足够明确不会被 AI 误解”。这样做的直接好处是当团队里有人发现 AI 反复犯同一个错误时他会主动把它写进 AGENTS.md而不是在聊天窗口里一次次重复同样的抱怨。6.2 多项目维护做一个模板仓库当你的团队有多个项目需要维护 AGENTS.md 时可以做一个模板仓库把通用的规则抽取出来各项目按需引用。比如“Do not modify auto-generated files”这类所有项目都适用的约束放在模板里而“API 路径格式”这种项目特有的规则留给各项目自行补充。还有一种做法是把 AGENTS.md 的公共部分通过软链接引入子项目但我的经验是不要过度设计——你团队里大部分项目不是 monorepo一个模板文件加几行说明文档比搞一套“规则中央仓库”更实用。模板的价值在于降低新项目的启动成本而不是造一个规则引擎。6.3 定期复盘 AI 的“违纪记录”最后分享一个我一直在用的方法每两周翻一次 AI 近期犯的错误记录找找共同点。比如某段时间 AI 频繁在新功能里忘记加await或者反复在 CRUD 接口里漏掉分页——那你就知道 AGENTS.md 里缺了什么规则。把这些高频错误提炼成一条约束写进 AGENTS.md下一轮迭代就能看到明显改善。这个方法本质上是用“错误驱动”的方式维护 AGENTS.md让规范文件始终跟着实际痛点走而不是拍脑袋写得又多又虚。7. 写在最后AGENTS.md 是你对 AI 队友的第一笔投资我自己的体会是AGENTS.md 是一个投入产出比极高的小文件。花一个下午写清楚之后每次 AI 帮你干活都等于有一个“知晓项目背景的老同事”在旁边把关。我自己维护的几个项目里写完 AGENTS.md 之后AI 一次跑通测试的概率明显提升我只需要做 review 和微调而不是反复纠正那些“它不该犯的低级错误”。最后再分享一个小技巧很多开发者第一次写 AGENTS.md 时会忍不住把“理想中的规范”全部塞进去我的建议是反向操作——只写“现在最痛的 5 条”跑两周再补充。让 AGENTS.md 跟随你项目的真实节奏进化它才会真正成为你和 AI 之间的默契而不是一个写完就没人看的文档。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进