【claude code实践】CLAUDE.md 应该写什么:命令、规范、架构与禁区

📅 2026/7/6 1:37:24 👁️ 阅读次数 📝 编程学习
【claude code实践】CLAUDE.md 应该写什么:命令、规范、架构与禁区

CLAUDE.md 应该写什么:命令、规范、架构与禁区

引言:为什么现在需要理解它

很多开发者开始使用 Claude Code 后,都会遇到一个问题:

同样是一个项目,有时候 Claude Code 表现得像一位熟悉代码库的同事,有时候却会犯一些团队内部几乎不会出现的错误。

例如:

  • 使用了团队已经废弃的框架;
  • 修改了自动生成的代码;
  • 绕过了统一的数据访问层;
  • 忘记执行测试;
  • 修改了本不应该修改的配置文件。

这些问题并不是因为模型不会写代码,而是因为它不知道团队的规则

代码能告诉 AI「系统是怎么实现的」,却很难告诉它「团队为什么这样实现」。

CLAUDE.md存在的意义,就是把这些隐藏在团队经验中的知识显式写下来。

不过,新的问题又来了:

很多团队知道应该创建CLAUDE.md,却不知道里面应该写什么。

有人把 README 全部复制进去。

有人只写一句:

这是一个 Java 项目。

还有人把几十页设计文档全部放进去。

这些做法都不能充分发挥CLAUDE.md的价值。

真正重要的不是写得越多越好,而是写Claude Code 在开发过程中真正需要知道的信息

本文将围绕CLAUDE.md的内容组织展开,重点讨论四类最值得维护的信息:命令(Commands)、规范(Conventions)、架构(Architecture)和禁区(Guardrails)


一、CLAUDE.md 是什么

一句话来说:

CLAUDE.md 是一份长期维护的 AI 协作说明书,用来告诉 Claude Code 如何参与当前项目的开发,而不仅仅是如何理解代码。

它最大的特点不是介绍项目,而是描述开发规则

如果 README 回答的是:

这个项目是什么?

那么CLAUDE.md回答的是:

在这个项目里,应该怎样开发。

因此,它不应该成为代码文档,也不应该成为设计文档,而应该成为一份面向 AI 的开发指南。

很多开发者容易误解的一点是:

CLAUDE.md并不是 Prompt。

Prompt 更偏向一次任务,例如:

帮我修复登录 Bug。

CLAUDE.md更像项目中的长期约束:

  • 使用什么架构;
  • 如何运行测试;
  • 哪些目录不能修改;
  • 哪些规范必须遵守。

这些信息不会随着一次任务结束而失效,因此更适合沉淀到项目中。


二、从「写给 AI 的项目说明书」开始理解它

可以把CLAUDE.md想象成团队迎接新成员的一份《开发须知》。

当一位新同事加入项目时,团队通常不会要求他立刻阅读几十万行代码,而是会先告诉他几件事:

  • 项目采用什么架构;
  • 核心目录在哪里;
  • 开发流程是什么;
  • 哪些模块不要轻易修改;
  • 提交代码之前要完成哪些检查。

这些内容并不会随着某一个需求改变,而是团队长期积累下来的经验。

Claude Code 的情况也类似。

虽然它能够阅读代码,但很多开发规则无法直接从代码中推导出来。例如:

  • 为什么所有数据库访问必须经过 Repository?
  • 为什么generated/目录不能修改?
  • 为什么提交前必须运行集成测试?

如果这些信息没有明确记录,Claude Code 只能依赖推断,而推断未必符合团队约定。

因此,CLAUDE.md的目标不是增加更多上下文,而是减少 AI 的猜测


三、它解决了什么问题

1. 避免重复输入项目规则

开发者经常需要告诉 Claude Code:

不要修改自动生成代码。

新接口必须补测试。

使用 pnpm,不要使用 npm。

这些规则其实属于项目级知识。

CLAUDE.md可以把它们沉淀下来。

改变的是:

AI 每次进入项目都能够遵循同一套规则。

限制在于:

规则更新后,需要同步维护文档。


2. 降低错误修改的概率

很多错误不是代码能力不足,而是违反团队规范。

例如:

直接修改数据库脚本;

绕过统一日志组件;

新增接口没有权限校验。

这些问题都可以通过明确约束减少。

改变的是:

Claude Code 更容易按照团队已有方式工作,而不是自行选择实现路径。

限制在于:

规则越模糊,AI 越容易产生不同理解。


3. 提高长期协作效率

随着 AI 成为开发流程的一部分,团队知识开始从「口头传递」转向「文档传递」。

CLAUDE.md正是这种知识沉淀的载体。

改变的是:

开发者可以把更多精力放在需求和设计上,而不是反复解释开发约定。

限制在于:

它只能描述长期规则,无法替代当前任务背景。


四、它的基本工作方式

Claude Code 在执行任务时,会不断构建上下文,而CLAUDE.md提供的是其中最稳定的一层。

一个典型流程如下:

开发任务 │ ▼ 读取 CLAUDE.md │ ▼ 建立项目规则 │ ▼ 搜索相关代码 │ ▼ 分析与修改 │ ▼ 执行测试 │ ▼ 输出结果

其中,CLAUDE.md不负责解释代码实现,而负责影响后续决策。

例如:

开发者提出:

增加订单接口。

如果CLAUDE.md写着:

所有接口必须: - 使用统一响应对象 - 添加权限注解 - 补充单元测试

Claude Code 就会把这些规则纳入自己的执行计划,而不是仅仅完成接口代码。

这也是为什么,一份好的CLAUDE.md能够提升 AI 输出的一致性,而不仅仅是准确性。


五、一个典型使用流程

假设团队维护一个微服务项目,并准备让 Claude Code 参与开发。

首先,他们创建了如下CLAUDE.md

# Commands 测试: ./gradlew test 格式化: ./gradlew spotlessApply # Conventions 所有数据库访问必须经过 Repository。 所有接口统一返回 ApiResponse。 新增接口必须添加测试。 # Architecture 认证: auth-service 订单: order-service 支付: payment-service # Guardrails 禁止修改 generated/ 禁止修改 migration 禁止提交 .env

接下来,开发者提出任务:

给订单接口增加导出功能。

Claude Code 的执行过程通常如下:

  1. 读取CLAUDE.md
  2. 知道订单模块位置;
  3. 按照统一响应格式生成接口;
  4. 不直接访问数据库;
  5. 修改后执行测试;
  6. 保持生成代码不变;
  7. 等待开发者 Review。

整个流程中,CLAUDE.md并没有告诉 AI 如何写代码,而是告诉它应该遵守哪些规则


六、它和传统方式的区别

对比维度CLAUDE.mdREADME一次性 Prompt团队 Wiki
面向对象AI 协作者人类开发者当前任务团队成员
生命周期长期长期单次长期
内容重点开发规则项目介绍当前需求全量知识
是否影响 AI 行为部分通常需要人工查阅
是否适合团队协作

真正的区别在于:

CLAUDE.md描述的是开发过程,而不是项目本身。


七、CLAUDE.md 应该写什么,不应该写什么

围绕标题中的四个关键词,可以建立一份稳定的内容框架。

1. Commands(开发命令)

这是 Claude Code 最容易直接利用的信息。

建议包括:

  • 项目启动命令;
  • 测试命令;
  • 构建命令;
  • 格式化命令;
  • Lint 命令。

例如:

## Commands Run tests: ./gradlew test Lint: ./gradlew check Format: ./gradlew spotlessApply

这些命令能够帮助 Claude Code 在完成修改后主动验证结果。


2. Conventions(开发规范)

这里记录团队长期遵循的约定,例如:

  • 命名规范;
  • 返回值格式;
  • 日志规范;
  • 异常处理方式;
  • 数据访问原则;
  • 测试要求。

例如:

所有数据库操作必须经过 Repository。 Controller 不允许直接访问数据库。 新增接口必须补充测试。

这些规则比单纯的代码风格更重要,因为它们决定了项目的一致性。


3. Architecture(架构说明)

这里不需要详细设计图,而是帮助 Claude Code 快速建立整体认知。

例如:

auth/ 负责认证 order/ 订单 payment/ 支付 common/ 公共组件

还可以说明:

  • 服务之间的关系;
  • 核心模块职责;
  • 关键数据流。

目标是帮助 AI 快速找到正确的分析入口。


4. Guardrails(开发禁区)

这是最容易被忽略,也是最重要的一部分。

建议明确写出:

  • 禁止修改自动生成代码;
  • 禁止修改数据库迁移;
  • 禁止提交敏感配置;
  • 不允许绕过权限校验;
  • 不允许修改第三方 SDK。

例如:

不要修改: generated/ migration/ vendor/ 第三方 SDK

这些规则能够有效降低误修改风险。


八、开发者应该如何使用它

实践中,可以遵循几个原则。

第一,优先写长期规则,而不是临时需求。

如果某项信息只对当前任务有效,更适合作为 Prompt,而不是写进CLAUDE.md

第二,保持内容简洁。

每一条规则都应该能够指导开发,而不是解释实现细节。

第三,持续维护。

团队规范发生变化时,应同步更新文档。

第四,与 README 分工明确。

README 描述项目。

CLAUDE.md描述开发。

第五,把重点放在容易出错的地方。

相比介绍技术栈,更值得写的是:

  • 哪些目录不能改;
  • 哪些规则不能违反;
  • 哪些检查必须执行。

这些信息对 AI 的帮助更直接。


九、它的局限和风险

幻觉仍然存在

即使拥有完整的规则,Claude Code 仍可能误解复杂业务逻辑。

缓解建议:保留人工 Review,并通过测试验证关键修改。

文档容易过期

项目规范改变后,CLAUDE.md如果没有同步更新,会持续误导 AI。

缓解建议:将其纳入代码评审和版本管理流程。

内容过于冗长

把 Wiki 全部复制进去,会增加上下文负担。

缓解建议:保持概览,详细内容链接到其他文档。

无法覆盖所有特殊情况

团队经验中总会存在例外。

缓解建议:对特殊业务规则,在任务中补充说明,而不是全部放入长期文档。

仍然依赖开发者判断

CLAUDE.md能帮助 AI 遵守规则,但无法代替开发者做架构取舍和业务决策。

缓解建议:将 AI 定位为执行者,把关键决策保留给开发者。

对大型项目需要分层维护

一个文件无法完整描述复杂系统。

缓解建议:将全局原则放在CLAUDE.md,模块细节拆分到独立文档,通过引用形成分层知识结构。


十、总结:它真正改变的是什么

CLAUDE.md的核心价值,并不是告诉 Claude Code 如何生成代码,而是告诉它如何像团队成员一样参与开发

它沉淀的是代码之外的长期知识:开发命令、团队规范、系统架构和开发禁区。这些内容过去依赖口头沟通,如今可以成为项目的一部分,与代码一起维护、一起演进。

对于团队而言,真正值得投入精力的,不是把所有知识都写进CLAUDE.md,而是优先记录那些AI 最容易猜错、却最影响开发质量的信息。以“命令、规范、架构、禁区”为核心组织内容,既能帮助 Claude Code 更快进入工作状态,也能降低重复沟通和误修改的成本。

从这个角度来看,CLAUDE.md更像是一份 AI 协作者手册,而不是配置文件。它连接了团队经验与 AI 能力,让开发者能够把更多时间投入到设计、决策和代码评审,把那些稳定、重复且可规范化的知识,交给文档和工具共同维护。