ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

AI Native团队开发手册:CLAUDE.md与Plan Mode实战指南

AI Native团队开发手册:CLAUDE.md与Plan Mode实战指南 1. 从“用AI写代码”到“AI Native 团队”到底差在哪这两年我见过太多团队号称自己在做 AI 研发实际拆开一看无非是给编辑器装了个补全插件或者让某个成员用对话工具生成几段样板代码然后手动复制粘贴回项目里。这种模式我一般叫它“AI 辅助”本质上人还是唯一的执行主体AI 只是个高级点的输入法。而AI Native 团队是另一回事它把 AI 当成团队里真正干活的“执行单元”人退到编排、审核和决策的位置上。这个差别听起来像文字游戏但落到日常协作里是两套完全不同的工作流。我拿一个真实场景对比。传统模式下你接到“给订单模块加一个超时自动取消”的需求流程是自己读代码、想方案、写实现、写测试、提 PR、等 review。AI Native 模式下你先把需求拆成可验证的任务描述交给一个Agent去读代码库、产出方案、写实现和测试你只负责在关键节点做判断。前者你的时间花在“敲”上后者你的时间花在“判断”上。这就是为什么热词里反复出现SDLC软件开发生命周期——AI Native 不是换个工具而是把整个研发生命周期的每个环节重新分配给人还是机器。那CLAUDE.md和Plan Mode为什么会被反复提起因为它们解决的是同一个核心矛盾AI 执行单元没有长期记忆也没有对项目约定的天然认知。CLAUDE.md 这类文件本质上是给 AI 看的“项目说明书”把代码规范、目录结构、构建命令、禁忌事项一次性写清楚让每次对话不用重复交代背景。Plan Mode 则是把“先想后做”固化成流程——AI 先输出一份可审阅的计划人确认后再进入执行避免它一上来就乱改一通。这两个东西看着简单但它们是 AI Native 团队能不能稳定跑起来的地基。这篇文章适合谁看如果你是小团队的技术负责人正在纠结要不要把研发流程往 AI Native 方向改如果你是独立开发者想让 AI 真正帮你扛下一部分开发量而不是当玩具如果你是刚接触 Agent 开发、想知道一套完整落地手册长什么样的工程师——那这篇就是写给你的。我会按“整体设计思路 → 核心细节 → 实操落地 → 问题排查”的顺序把一套能直接抄作业的 AI Native 团队开发手册拆开讲中间会穿插我自己踩过的坑和实测有效的参数配置。2. 整体设计与思路拆解为什么是这套组合拳2.1 先想清楚AI Native 团队的三个角色分工很多团队一上来就堆工具结果越堆越乱。我的经验是先把角色分清楚工具自然就选出来了。AI Native 团队里其实只有三类角色编排者人、执行单元Agent、约束层规则文件与流程。编排者负责拆需求、定验收标准、做最终判断执行单元负责读代码、写实现、跑测试、产出可审阅的变更约束层负责让执行单元的行为可预测、可复现。这个分工决定了你不能让 Agent 去做它不擅长的事。比如“这个需求到底要不要做”是编排者的活Agent 做不了价值判断“这段代码符不符合团队规范”可以交给约束层去卡“把这个函数重构成三个小函数”才是执行单元的强项。我见过有人让 Agent 直接对接产品经理的需求文档结果它把模糊需求理解成了完全不同的东西返工成本比人写还高。所以第一原则是模糊的、需要价值判断的环节留给人明确的、可验证的环节交给 Agent。2.2 为什么选 CLAUDE.md 作为约束层的核心约束层的实现方式有很多为什么我最终把CLAUDE.md这类项目级说明文件放在核心位置因为它解决了一个非常具体的问题上下文成本。你每次和 Agent 对话如果都要重新告诉它“我们用 pnpm 不用 npm”“测试文件放在tests目录”“不要动 migrations 文件夹”那这些重复的 token 消耗是巨大的而且人总会漏说。把这些约定固化成一个文件Agent 每次启动自动读取相当于给团队里每个新来的“AI 同事”发了一本员工手册。我实测下来一个写得好的 CLAUDE.md 能把 Agent 首次产出可用代码的比例从大概三成提到七成以上。这个提升不是玄学是因为它消除了大量“猜”的成分。文件里我一般会写这几块项目一句话定位、技术栈与版本、目录结构说明、常用命令构建、测试、lint、代码风格要点、明确的禁忌清单。禁忌清单特别重要比如“不要修改 package.json 里的依赖版本”“不要删除任何已有的测试用例”这些是 Agent 最容易好心办坏事的地方。2.3 Plan Mode 的价值把“先想后做”变成硬约束Plan Mode是我认为最被低估的一个机制。它的逻辑很简单Agent 接到任务后不直接改代码而是先输出一份计划说明它打算改哪些文件、每个文件改什么、为什么这么改。人看完确认了它才进入执行。为什么这个机制重要因为 AI 执行单元最大的风险不是写得慢而是写错方向还一路写到底。你让它加个功能它可能顺手把旁边的代码也“优化”了等你发现时已经改了几十个文件。Plan Mode 把风险控制点前移了。审一份计划只要一两分钟但审一堆错误的代码变更可能要半小时。我在团队里推这个机制时一开始有人嫌麻烦觉得多了一步。但跑了两周之后大家发现返工率明显下降反而更快了。这里有个细节计划不用写得太细重点看它“打算动哪些文件”和“有没有动不该动的地方”。如果计划里出现了 migrations 或者配置文件基本就要打回去重问。2.4 工具选型的取舍逻辑工具这块我不推荐具体品牌因为迭代太快今天推荐的明天可能就变了。但选型逻辑是稳定的我一般按三条标准筛能不能读整个代码库、能不能被规则文件约束、能不能产出可审阅的 diff。第一条决定了它能不能理解上下文只能读单个文件的工具基本没法做跨模块任务第二条决定了行为可预测性第三条决定了你能不能高效审核。那些只能对话、不能直接操作代码库的工具适合做方案讨论不适合做执行单元。而能直接改代码但不受规则约束的工具风险太高我一般只在隔离环境里用。真正能进日常流程的是那种“能读全库 认规则文件 改动以 diff 形式呈现”的组合。这个标准听起来朴素但能同时满足的其实不多这也是为什么 CLAUDE.md 这类约定会成为事实标准——它给了工具一个统一的约束接口。3. 核心细节解析与实操要点手册里到底写什么3.1 CLAUDE.md 的写法从“能看懂”到“不会做错”写 CLAUDE.md 最大的误区是把它写成项目介绍文档。它不是给人看的 README是给 AI 看的操作手册所以重点不是“这个项目多牛”而是“在这个项目里干活要遵守什么”。我一般按固定结构写实测这个结构 Agent 理解得最好。第一块是项目定位与边界一两句话说明这个项目是干什么的、不干什么。比如“这是一个面向内部使用的订单服务不处理支付支付由独立服务负责”。这句话能防止 Agent 把支付逻辑也塞进来。第二块是技术栈与版本精确到主版本号因为不同版本的 API 差异会让 Agent 写出跑不通的代码。第三块是目录结构用列表说明每个目录放什么特别是那些名字不直观的目录。第四块是常用命令构建、测试、lint、类型检查一条条列清楚。这块的价值在于 Agent 可以自己跑测试验证不用你手动跑。第五块是代码风格要点只写那些和默认习惯不一样的比如“我们不用分号”“组件文件用 PascalCase”。第六块是禁忌清单这是重中之重我一般会写不要改依赖版本、不要动数据库迁移文件、不要删除已有测试、不要改 CI 配置、不要引入新的第三方库除非明确要求。提示CLAUDE.md 要定期更新。我一般每两周回顾一次把最近 Agent 犯过的错补进禁忌清单。这个文件是活的不是写完就扔那。3.2 Plan Mode 的实操怎么审计划才有效Plan Mode 用起来简单但审计划是有技巧的。我总结了一个“三看”原则。一看文件范围计划里要动的文件是不是都在预期内如果任务只是改一个工具函数计划里却出现了路由文件那就要问为什么。二看改动意图每个文件的改动理由是不是和任务直接相关有些 Agent 会夹带私货比如“顺便优化了一下命名”这种要警惕。三看验证方式计划里有没有说明怎么验证改动是对的如果它打算跑测试那很好如果它说“改完应该没问题”那就要打回去让它补验证步骤。审计划的时候不要陷入细节。你不需要看懂它每一行打算怎么写那是执行阶段的事。你只需要判断方向对不对、范围对不对、验证方式靠不靠谱。我见过有人审计划时逐行抠代码风格结果审了二十分钟比直接写还慢。计划是方向性的不是实现性的这个度要把握好。3.3 Agent 任务的拆解粒度多大算合适任务拆得太粗Agent 容易跑偏拆得太细你又变成了人肉调度器失去了 AI Native 的意义。我实测下来一个合适的任务粒度大概是“一个可独立验证的功能点或修复点”。比如“给用户列表接口加分页参数”是合适的“重构整个用户模块”就太粗“把第 42 行的变量名改一下”又太细。判断标准是这个任务能不能用一句话说清验收条件如果能就合适。比如“加分页参数”的验收条件是“传 page 和 pageSize 能返回对应数据不传时默认第一页每页 20 条”。这个条件清晰可验证Agent 做完你跑一下就知道对不对。如果验收条件说不清说明任务本身还没想清楚这时候不该交给 Agent该先自己想明白。3.4 上下文管理别让 Agent 在信息过载里迷路Agent 的上下文窗口是有限的塞太多东西进去反而会让它抓不住重点。我的做法是分层给上下文CLAUDE.md 提供全局约定任务描述提供本次目标相关文件按需引用。不要一上来就把整个代码库丢给它那样它反而不知道看哪。具体操作上我会在任务描述里明确说“参考 xxx 文件的实现方式”而不是让它自己去猜。如果任务涉及多个模块我会先让它读相关文件确认它理解了再进入 Plan Mode。这个“先读后做”的顺序很重要能避免它基于错误理解产出计划。另外长对话要及时开新会话把已经确认的结论沉淀到 CLAUDE.md 或任务描述里不要让上下文无限膨胀。4. 实操过程与核心环节实现从零跑通一个 AI Native 任务4.1 环境准备与规则文件初始化假设你手上有一个中等规模的项目想开始跑 AI Native 流程。第一步不是急着让 Agent 干活而是先把约束层搭好。我会先花半小时写一份 CLAUDE.md结构按前面说的六块来。写的时候有个技巧先让 Agent 自己读一遍代码库然后让它总结出项目约定你再基于它的总结修改。这样比你自己从零写快而且能发现一些你习以为常但没意识到的约定。初始化完成后我会跑一个“空任务”测试让 Agent 读一遍 CLAUDE.md然后问它“在这个项目里哪些文件是你不能改的”。如果它能准确说出禁忌清单里的内容说明规则文件生效了。这个测试花不了几分钟但能避免后面很多低级错误。我见过有人跳过这步结果 Agent 第一次干活就把 CI 配置改了排查半天才发现是规则文件没被正确读取。4.2 一个完整任务的执行记录我拿一个真实任务走一遍给一个 Node.js 项目的用户服务加“按邮箱域名筛选用户”的功能。任务描述我这么写“在用户列表查询接口增加 emailDomain 参数传入时只返回邮箱域名匹配的用户不传时行为不变。参考现有 status 参数的实现方式。验收传 emailDomainexample.com 返回对应用户不传返回全部。”进入 Plan Mode 后Agent 输出的计划是修改 userController 的查询参数解析、修改 userService 的查询构造、在 userRepository 加一个条件、补一个测试用例。我审了一下文件范围合理验证方式写了跑测试通过。执行阶段它改了四个文件产出了 diff。我重点看了 repository 那部分因为查询条件构造是最容易出错的地方。确认逻辑没问题后跑测试通过。整个过程大概十分钟其中我花在审计划和审 diff 上的时间不到三分钟。这里有个细节值得说我在任务描述里特意写了“参考现有 status 参数的实现方式”。这句话让 Agent 不用自己发明模式直接复用项目里已有的写法产出的代码风格和现有代码一致review 起来很顺。如果不写这句它可能会用另一种查询构造方式虽然也能跑但风格不统一后面维护会别扭。4.3 验证环节怎么确认 Agent 干得对验证不能只看“测试通过”。测试通过只说明它没破坏已有功能不说明新功能真的对。我一般做三层验证。第一层是自动化测试让 Agent 自己跑这是底线。第二层是边界检查手动试几个边界情况比如 emailDomain 传空字符串、传不存在的域名、传大小写混合的域名。第三层是代码审查重点看它有没有引入不必要的复杂度比如为了一个简单筛选加了一堆抽象。边界检查这层最容易被跳过但恰恰是 Agent 最容易翻车的地方。它写的代码在正常路径上通常没问题但边界处理经常想当然。比如大小写问题它可能直接做了精确匹配但实际业务里邮箱域名应该是不区分大小写的。这种问题测试用例不一定覆盖得靠人手动试。我一般会在任务描述里就把边界条件写清楚比如“域名匹配不区分大小写”减少返工。4.4 把成功经验沉淀回规则文件任务做完不是结束我会花两分钟回顾这次 Agent 哪里做得好、哪里差点出错。如果发现某个约定没写进 CLAUDE.md就补进去。比如上面那个任务如果我发现 Agent 差点在 repository 里写了原生 SQL 而不是用现有的查询构造器我就会在禁忌清单里加一条“查询构造统一用 xxx 方式不要写原生 SQL”。这个沉淀动作看着小但积累下来Agent 的首次产出质量会越来越高。我团队里有个习惯每周五花二十分钟做“规则文件回顾”把这周 Agent 犯的错归类能写成规则的写成规则不能写成规则的就在任务描述模板里加提示。这个习惯坚持两个月后我们统计了一下Agent 首次产出可用代码的比例从最初的不到四成提到了接近八成。提升主要来自规则文件的完善而不是换了什么更强的工具。5. 常见问题与排查技巧实录5.1 Agent 不遵守规则文件怎么办这是最常见的问题。表现是 CLAUDE.md 里明明写了“不要改依赖版本”Agent 还是改了。排查思路分三步。先确认规则文件有没有被正确读取有些工具需要显式指定规则文件路径不是自动读的。再确认规则表述是不是有歧义比如“尽量不要改依赖”这种模糊表述Agent 可能理解成“可以改但要谨慎”。最后确认规则有没有被后续对话覆盖如果你在对话里说了“需要的话可以加个库”那它可能就认为禁忌解除了。我的经验是规则要写得绝对用“不要”“禁止”而不是“尽量”“最好”。同时规则文件要放在工具默认读取的位置不要放在子目录里指望它自己找。如果确认都做对了它还是不遵守那可能是工具本身对规则文件的支持有问题换个支持更好的工具比死磕划算。5.2 Plan Mode 输出的计划太粗或太细计划太粗比如只说“修改用户模块”这种没法审要打回去让它细化到文件级别。计划太细比如把每一行代码都写出来这种审起来累而且执行时它可能死板地按计划走遇到实际情况也不调整。我的处理方式是给计划定一个粒度标准到文件级别说明每个文件改什么不写具体代码。如果它超出这个粒度我会在对话里明确说“计划只需要到文件级别不用写具体实现”。这个标准要在第一次用 Plan Mode 时就立好不然 Agent 会按自己的理解来。我一般会在 CLAUDE.md 里加一条“Plan Mode 输出到文件级别即可”这样每次它都知道该写多细。5.3 任务执行到一半报错终止热词里有个“agent execution terminated due to error”这个我遇到过几次。常见原因有三个上下文超限、工具调用失败、任务本身有矛盾。上下文超限的表现是它改到一半突然不说话了这时候要开新会话把已完成的部分和剩余任务重新描述清楚。工具调用失败通常是网络或权限问题重试一般能解决。任务矛盾比较隐蔽比如你让它“保持接口不变”又让它“增加一个必填参数”这两个要求冲突它执行到一半发现走不通就停了。排查顺序我建议先看错误信息再看它最后一步在干什么最后回头看任务描述有没有自相矛盾。大部分终止都能通过重新描述任务解决真正需要换工具的情况很少。5.4 多个 Agent 并行时互相冲突当团队规模上来可能会让多个 Agent 同时处理不同任务。这时候最大的风险是两个 Agent 改了同一个文件合并时冲突。我的做法是按文件边界分配任务一个文件同一时间只让一个 Agent 碰。如果两个任务确实要改同一个文件就串行执行或者先让一个 Agent 做完另一个基于结果继续。这个约束要写进任务分配流程里不能靠 Agent 自己协调。我见过有人让两个 Agent 同时重构同一个模块的不同部分结果两边都改了公共依赖合并时一团糟。文件级互斥是最简单也最有效的防冲突手段比事后解决冲突省事得多。5.5 常见问题速查表问题表现可能原因排查动作解决方式不遵守规则文件未读取或表述模糊确认读取路径与规则措辞规则写绝对放默认位置计划太粗/太细粒度标准未立检查是否约定文件级在规则文件里定粒度执行中途终止上下文超限/任务矛盾看错误信息与最后一步开新会话重述任务多 Agent 冲突文件边界重叠检查任务分配文件级互斥串行执行产出风格不一致未指定参考实现看任务描述有无参考明确“参考 xxx 文件”边界处理想当然边界条件未写清手动试边界情况任务描述里写明边界6. 我踩过的坑和几条实在建议先说一个我印象最深的坑。早期我图省事没写 CLAUDE.md直接让 Agent 干活。结果它每次都要重新理解项目结构产出质量忽高忽低同一个约定这次遵守下次就忘。我以为是工具不行换了两三个工具都一样。后来才想明白问题不在工具在于我没给它稳定的约束。补上规则文件之后同样的工具产出质量立刻上了一个台阶。这件事让我意识到AI Native 的地基不是模型能力是约束层的建设。第二个坑是任务拆解。我一开始喜欢把大任务直接丢给 Agent觉得它能自己拆。实测下来它拆出来的子任务经常偏离我的预期因为它不知道哪些是重点。后来我改成自己拆到“可独立验证的功能点”这个粒度再交给它执行返工率大幅下降。拆任务这件事目前还是人的活别指望 Agent 替你想清楚要做什么。第三个坑是验证偷懒。有次 Agent 说测试通过了我就直接合并结果上线后发现一个边界情况没处理。后来我定了规矩Agent 跑完测试我必须手动试至少三个边界情况。这个规矩救过我好几次。自动化测试覆盖的是你想到的情况边界情况往往是你没想到的而 Agent 也想不到。最后分享一个我觉得很值的小技巧给 Agent 的任务描述里永远加一句“如果发现任务描述有歧义或信息不足先提问再执行”。这句话能让它在动手前把疑问抛出来而不是自己猜。我加了这个之后因为理解偏差导致的返工少了很多。它提问的成本很低猜错的成本很高这个交换很划算。这套流程跑下来我的体会是 AI Native 不是让 AI 替你做所有事而是让你把精力从执行挪到判断上。判断力才是这个模式里最稀缺的东西规则文件和流程都是为了保护你的判断力不被琐事消耗。至于工具够用就行别追新把约束层和流程跑顺了普通工具也能出好活。
RELATED READING

延伸阅读

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