团队共享CLAUDE.md:统一AI编程协作与代码风格 把CLAUDE.md纳入版本管理是我这个“AI编程技巧”系列里踩坑最多、收益也最大的一步。事情的起因很普通我带的小组四个人都在用Claude Code写同一个数据分析平台按理说工具一样、模型一样生成的代码应该差不多。结果一提交PR风格五花八门有人让AI写class有人让AI写函数式有人让AI随便用any有人让AI定义几十个interface。最后发现问题不在AI而在每个人本地的CLAUDE.md——那玩意写得完全不一样。AI不知道听谁的自然各显神通。这篇是系列第四篇聊聊怎么用一份共享的团队CLAUDE.md给整个项目造一个统一的“智能指南”。适合带小团队、维护开源项目、或者单纯觉得AI代码风格控不住的人读。1. 为什么团队需要一份共享的CLAUDE.mdAI协作的“记忆断层”1.1 没有CLAUDE.md时AI的“失忆症”有多烦Claude Code这类终端AI编程工具的会话默认是没有长期记忆的。每次开一个新终端窗口它知道你当前目录里有几个文件名但不知道这个项目是干什么的、用了什么技术栈、代码结构怎么组织、有哪些必须遵守的约定。你让它“加一个分页接口”它可能把控制器、服务、仓储全部塞进一个文件里或者用了一个项目里根本没安装的库。说白了每次会话都是一次“临时工入职第一天”不是能力不行是没人给它交底。我刚开始用Claude Code写个人项目的时候觉得这个问题没那么严重。反正项目就我一个人目录结构我心里有数AI写偏了我随手就能纠正。可人一多问题立刻暴露。项目里每个成员对“项目长什么样”的理解本来就是碎片化的再加上每个人习惯不同AI得到的上下文不同写出来的东西自然千奇百怪。CLAUDE.md就是那个“交底文档”Claude Code启动时会自动读取项目根目录下的这份文件把它注入到本次会话的上下文里。你把项目背景、目录约定、代码风格、禁忌事项写清楚AI才可能在第一轮输出就踩到点子上而不是等你来回改三遍。1.2 各写各的CLAUDE.md团队协作更混乱很多人以为CLAUDE.md是个人自嗨用的于是建一个~/.claude/CLAUDE.md把自己喜欢的风格写进去。这个做法对个人效率有帮助但放在团队里反而制造了新的分裂。你可以想象一下团队里甲在全局配置里写了“优先使用组合式API”乙写了“尽量别拆分文件”丙什么也没写。三人让AI做同一件事AI给出的方案完全不一样代码审查会直接变成辩论赛。我真实经历过一次三个前端同时开发同一个模块有人提交的代码全是function声明有人全是箭头函数有人混着来。吵到最后大家发现谁都没错因为AI压根没见过一个统一的“项目说明书”。模型本身并不精分让它精分的是我们喂给它的上下文。共享一份项目级CLAUDE.md本质上是把团队的“脾气”写进同一个文件让AI不管跟谁对话都处于同一种“性格设定”下。代码风格、架构边界、技术选型这些团队纪律不再靠人肉提醒而是让AI自己读一遍就记住。1.3 共享CLAUDE.md解决的三个核心问题我总结下来共享CLAUDE.md至少解决三个问题而且都是团队协作里最容易冒火的问题。第一是上下文一致。项目背景、技术栈、目录结构、关键规则全团队所有人面对的AI读的是同一份说明书。不会出现“你让AI写Vue组件它却给你拿React写法”这种低级错位。第二是规范一致。命名规则、分层边界、禁止事项、命令入口全部固化进CLAUDE.md。AI生成的代码天生符合团队约定Code Review时少一半口水战。第三是新人友好。新同学加入项目以前要花一周翻文档问老人现在直接开Claude Code让AI带着他过一遍CLAUDE.md里的项目全貌再让他照着约定写个小改动上手速度能快不少。我甚至见过有人把CLAUDE.md当成“入职培训课件”用的效果意外地好。2. 编写项目级CLAUDE.md的四个关键模块2.1 项目一句话说明与技术栈白名单写CLAUDE.md第一步不是列规则而是用三五行话把项目“立住”。我习惯在文件最开头写清楚这是什么系统、服务谁、有哪些端以及主打的技术栈是什么。别小看这几行字AI越清楚项目全貌越不容易在后续任务里跑偏。更关键的是“技术栈白名单”。AI非常容易被“最流行的方案”带跑。你项目里用的是FastAPI它写接口时可能顺手给你引一个Django你前端用的是React它可能建议你上Redux Toolkit但你们团队明明是自研的轻量状态方案。所以我明确要求AI只允许使用项目已经声明的依赖不要擅自引入新包。这句写在CLAUDE.md里能省掉大量“AI为什么又给我装了个库”的抱怨。给一段我实际用的模板# Atlas 数据分析平台 这是一个面向运营团队的数据分析平台。前端使用 React 18 TypeScript Vite后端使用 FastAPI PostgreSQL Redis。所有代码必须通过CI流水线eslint、prettier、pytest。 ### 技术栈约束 - 只允许使用 package.json 或 requirements.txt 中已声明的依赖 - 禁止引入未和团队确认过的第三方库 - 后端一律使用 SQLAlchemy 2.x 语法禁止混用旧版 Query API2.2 目录结构与核心模块地图AI在IDE里能看到项目目录但它不知道每个目录的“职责边界”。你需要在CLAUDE.md里给它画一张带注释的地图。举个例子## 目录结构 - frontend/src/pages路由页面组件只做页面编排 - frontend/src/components可复用组件必须带 props 类型定义 - backend/app/api路由层只做参数校验和响应格式化 - backend/app/services业务逻辑层所有事务和权限判断必须在这层 - backend/app/modelsSQLAlchemy 模型禁止写业务代码为什么这一步重要因为Claude Code在规划改动时会基于它对目录的理解去决定“动哪个文件”。如果你不告诉它api层只能做参数校验它很可能把权限判断、数据库查询、格式化输出全堆在路由函数里然后一脸无辜地问你“功能不都实现了吗”目录约束写得越清晰AI给出的改动方案越接近团队期望。我还建议在目录说明里写清楚“数据流方向”。比如前端页面调用api层方法api层再请求后端接口后端路由转发到servicesservices操作models。把这条链路写出来AI生成的代码会天然遵守依赖方向减少循环引用和跨层调用。2.3 编码约定与禁止事项这份CLAUDE.md里最值钱的部分往往是“禁止事项”。很多时候团队碰撞、返工不是因为AI不会写某段代码而是因为它踩了团队的底线。规则不要写得太抽象比如“注意代码质量”这种话AI看了等于没看。要写成可判断、可执行的短句## 编码约定 - 前端组件一律使用函数式组件 hooks禁止使用 class 组件 - 禁止使用 any类型必须显式声明 - 后端禁止在 api 层写业务逻辑业务逻辑只能出现在 services 层 - 所有数据库查询必须走 services 层models 层不允许裸写查询方法 - 函数命名用动词开头getUser、handleClick、fetchDashboardData我遇到过的最典型反面教材是团队里有人用let满天飞有人要求所有变量constCLAUDE.md里如果不写AI就随机挑一个。写了之后AI生成的代码明显“像同一个人写的”。2.4 工作流与命令让AI按团队节奏办事CLAUDE.md里还应该写清楚“开发命令”。Claude Code是终端工具它天然会去执行命令。你把启动、测试、构建、提交前检查的命令写进去AI在帮你改完代码之后会主动提示“你可以跑一下npm run lint npm run type-check来验证”。甚至它自己就会跑起来。## 常用命令 - 启动后端cd backend uvicorn app.main:app --reload - 启动前端cd frontend npm run dev - 运行测试cd backend pytest -q - 提交前检查npm run lint npm run type-check这一步很多人忽略但恰恰是让AI从“代码生成器”升级为“工程助手”的关键。当你把命令写进CLAUDE.mdAI的输出就不只是一段代码而是一个完整的“改动-验证”流程。它更清楚什么时候该帮你看测试结果什么时候该提醒你跑格式化。3. 从0到1落地共享CLAUDE.md的团队实操流程3.1 第一步收集“口头禅”提炼团队的脾气很多人一上来就让我推荐“万能CLAUDE.md模板”我直接说别套模板。CLAUDE.md的价值在于它记录的是你这个团队独有的约定和工作流。让一份别人的CLAUDE.md来指导你的项目等于让隔壁组的项目经理来替你开周会不现实。正确做法是先收集大家平时给AI的提示词。把最近一个月内团队成员发给AI的指令汇总起来重点找那些反复出现的规则。比如“不要用any”“记得跑测试”“按现有目录结构放文件”“不要引入新的依赖”——这些才是你们团队的“口头禅”把它们转写成清晰条目就是CLAUDE.md的雏形。我自己的经验是整理两周的提示词就能提炼出80%的关键规则。剩下的20%靠评审和实际使用慢慢补。3.2 第二步AI回显实验验证文件真的生效写完了别急着推给全组。先做一次“AI回显实验”让团队里每个人打开一个全新的Claude Code会话进入项目根目录然后问AI三个固定问题这个项目是做什么的用了哪些技术栈用一句话说明目录结构里每个模块的职责。我准备新加一个接口按项目约定应该放在哪个目录需要走哪些步骤如果三个人的回答基本一致说明CLAUDE.md被正确读取且写得足够清晰。如果回答五花八门那就是文件没写到点上。我见过一种很常见的情况CLAUDE.md写了一大篇AI的回答却和文件内容毫无关系。后来发现问题出在描述太模糊——比如“注意代码规范”这种话AI根本不知道你的规范是什么。改成“禁止使用any、函数命名用动词开头”这种具体指令后回显才稳定下来。3.3 第三步把CLAUDE.md当代码管入库、评审、发PRCLAUDE.md不是个人草稿它是项目资产。我强烈建议把项目根目录的CLAUDE.md纳入git版本管理后续改动走正常的PR流程。理由很简单CLAUDE.md承载了团队的架构决策和编码约定改它不应该比改代码更随意。第一次写好后必须在评审会上过一遍。评审重点不是逐字抠措辞而是确认每个条目都具备“可执行性”AI看到这条规则能不能直接做出符合预期的判断比如“保持代码整洁”就不是可执行规则而“后端禁止在api层写业务逻辑”就是。评审通过后CLAUDE.md就正式生效之后任何人修改都要像改代码一样提交PR让团队其他人看到变更。有个小坑提醒一下CLAUDE.md尽量和主干保持同步。如果你在功能分支上改了CLAUDE.md合并时没解决好冲突很容易出现“代码是新的规则是旧的”这种尴尬局面。我的习惯是CLAUDE.md的更新单独提PR不塞进功能分支里避免被埋没在一堆代码改动中。3.4 第四步个人偏好放到local文件别污染共享文件共享CLAUDE.md管团队公约个人偏好必须另立门户。Claude Code支持在项目根目录放一个CLAUDE.local.md这个文件按惯例不进版本库专门用来记录个人习惯。比如你个人喜欢AI在回复时把代码和解释分开或者你希望AI默认用中文写注释这些通通可以写进local文件。为什么要这样分层因为团队共享文件一旦混入某个人的个人偏好其他成员读起来就会觉得莫名其妙。你们小组可能有人习惯分号结尾有人习惯无分号有人喜欢yarn有人用npm——这些属于个人工作流不属于项目公约。把公约放进CLAUDE.md把个人偏好放进CLAUDE.local.md各取所需互不打扰。优先级上CLAUDE.local.md会覆盖同名目录下CLAUDE.md里的相关内容所以它不会让团队的硬性约束失效只会在边缘地带做个人化补充。4. 踩坑记录CLAUDE.md设计中的常见问题与排查4.1 “写了跟没写一样”AI为什么无视我的CLAUDE.md这是被问得最多的一个问题。排查思路无非三条。第一检查文件位置。Claude Code读取的是当前工作目录下的CLAUDE.md。如果你在frontend/子目录里启动会话却在项目根目录放CLAUDE.mdAI未必会父目录去找。这时候应该在frontend/下再放一份或者把工作目录切到项目根。第二检查描述清晰度。AI对“不要写得太烂”这种模糊描述是无感的它需要的是可判断的规则。把“注意代码质量”改成“禁止使用any所有函数必须显式声明返回值类型”效果立刻不同。规则越具体AI越不可能违反。第三检查是否有冲突。如果你在CLAUDE.local.md里写了和我上面说的完全相反的规则本地文件会覆盖项目文件于是只有你的AI不遵守公约。这种时候别急着骂AI先检查自己本地的local文件是不是写过头了。4.2 文件太长被截断CLAUDE.md的黄金长度有人觉得CLAUDE.md写越多越好于是堆了上千行结果发现AI根本不买账。原因不复杂上下文窗口是有限的而且越长的文件关键信息越容易被淹没。我自己踩过这个坑。第一次写CLAUDE.md把项目背景、历史背景、踩坑记录、API文档全塞进去了AI在回答问题时表现得像个PPT复读机抓不住重点。我的经验是项目级CLAUDE.md控制在100到200行之间比较合适。超过这个量级就该考虑拆分。拆法有两种一种是把更细节的说明写到子目录的CLAUDE.md里比如backend/CLAUDE.md专门讲后端约定另一种是把高频复用片段抽到单独文件用路径的方式引入。保持文件精简本质上是在保护AI的注意力——它和人类同事一样最怕读一份冗长的说明书。4.3 全局配置和项目配置打架个人全局的~/.claude/CLAUDE.md和项目级的CLAUDE.md同时存在时优先级问题就成了隐患。默认情况下项目级配置会覆盖全局配置因为项目上下文对当前工作更重要。但人总会犯迷糊比如你全局写了“所有字段都加注释”项目里却要求“注释只写业务意图不要在代码里贴注释墙”这种冲突需要及时清理。排查方法很简单在会话里直接问AI“当前项目对我有哪些编码要求”把它的回答和CLAUDE.md原文对照不一致的地方就是配置打架的信号。我习惯每季度做一次全局配置清理把那些已经在项目级覆盖的全局规则删掉保持全局文件只放真正通用的东西比如“所有回复默认用中文”“代码和解释分开”。4.4 多语言、多仓库的写法现在不少项目是前后端分离的甚至有好几个仓库。有人纠结一份CLAUDE.md写前端还写后端我的答案是按仓库拆。每个仓库各放一份自己的CLAUDE.md只写和本仓库相关的内容。前端仓库写组件规范、状态管理约定、样式方案后端仓库写API分层、数据库访问、接口格式。如果你非要在聚合目录里维护一份总纲那只写跨仓库的公共约定比如接口风格、认证方式、错误码规范然后通过路径引用具体仓库的CLAUDE.md。别追求一份文件管所有CLAUDE.md最忌讳的是“贪多求全”。5. 进阶玩法让CLAUDE.md成为团队的活知识库5.1 把架构决策记进CLAUDE.md很多团队有架构评审、技术选型讨论但讨论完就完没有沉淀过两个月AI又给你推荐已经否决过的方案。我现在的做法是凡是团队拍板过的重要决策都精简成两三行写进CLAUDE.md。比如“支付服务统一走独立模块不要在业务代码里直接调用三方SDK”“缓存更新一律走Redis封装类禁止裸操作连接实例”。AI看到这些条目后就不会再提出已经被否决的“创新”方案。这个事其实和传统架构决策记录ADR很像但ADR往往躺在文档系统里吃灰CLAUDE.md则是AI每次会话都会读的活文档。把决策写进CLAUDE.md相当于让每一个新会话都站在团队的决策基线上思考而不是重新发明轮子。5.2 把高频问题的答案做成“FAQ钩子”我还发现一个很实用的技巧把群里被反复问的问题整理成CLAUDE.md里的简短FAQ。比如“项目如何初始化本地环境”“部署流程是什么”“联调时连哪个环境”“数据库迁移怎么做”。这些问题AI本来也能回答但如果答案在CLAUDE.md里AI回答得更准而且会带上团队约定而不是网上搜来的通用步骤。每次有新成员加入HR还在走流程新同学在本地clone仓库后直接问AI“按项目约定我该怎么跑起来代码”AI照着CLAUDE.md一步步带他搭环境、装依赖、跑通本地服务。这个过程极大地减轻了老成员的答疑负担。我把这种做法叫“FAQ钩子”——问的人越多的东西越值得写进去。5.3 让CLAUDE.md参与Code ReviewCLAUDE.md最后一个隐藏价值是可以参与Code Review。我们团队现在把“提交前对照CLAUDE.md自检”当成硬性要求AI写完代码后让它自己按CLAUDE.md的约定检查一遍。比如“按项目约定路由层不能出现业务逻辑请检查你刚才的改动是否符合”“是否使用了未声明的第三方依赖”。这一步本质上是让AI当自己的第一轮Reviewer。我试过几次后发现代码质量提升最明显的不是格式而是“边界遵守”。以前AI经常把查询、格式化、日志全写在一个函数里现在有了CLAUDE.md的约束和自检流程它在生成阶段就会刻意保持分层。当然CLAUDE.md不能替代人工Review但它能过滤掉大部分“低级但烦人”的问题让人的精力集中在真正的架构和业务逻辑上。CLAUDE.md这件事我自己踩过的最大的坑就是把它当成“写一次就完事”的静态文档。实际上它像项目的活地图目录重构了、依赖升级了、团队改了约定、AI反复犯同一个错误都是更新它的时机。我现在每周会花十分钟看一眼CLAUDE.md问问自己“如果有个新同学明天入职靠这份文件能顺利开工吗”答案是否定的时候就动手改。改完之后你会发现AI越来越像团队里的“自己人”而不是一个每次都要重新磨合的外包临时工。