CLAUDE.md 是放置在项目根目录下的 Markdown 格式文件,它的作用是作为 Claude Code 的项目级指令文档。你可以把它理解成给 AI 助手看的一份"项目手册"——就像新员工入职第一天收到的那本手册一样,它告诉 Claude 这个项目的所有重要信息,包括技术栈、代码规范、目录结构以及各种开发约定。
这份文件有着极高的优先级。每次你启动一个新的 Claude Code 对话时,系统都会自动读取项目根目录下的 CLAUDE.md 文件,将其内容注入到系统提示(System Prompt)中。这意味着 Claude 从一开始就了解你的项目背景,无需你在每次对话中重复说明项目信息。
CLAUDE.md 与项目中的 README.md 有着本质的区别。README.md 是写给人类开发者看的,它侧重于项目的用途、安装方式和基本使用方法。而 CLAUDE.md 是写给 AI 助手看的,它侧重于AI在协助开发时所需遵循的规则、约定和上下文信息。简单来说:README 告诉人如何用这个项目,CLAUDE.md 告诉 AI 如何帮你开发这个项目。
通过合理编写 CLAUDE.md,你可以让 Claude Code 更准确地理解项目上下文,遵循团队约定,从而大幅提升 AI 编程助手的实际工作效率。
CLAUDE.md 是 Claude Code 项目级配置中优先级最高的指令来源。它不同于 ~/.claude/settings.json 中的用户级全局配置,也不同于 .claude/settings.json 中的项目级设置。CLAUDE.md 直接以自然语言描述项目规则,覆盖范围最广、优先级最高。这意味着在 CLAUDE.md 中定义的规则会覆盖 settings.json 中的同名配置项。
CLAUDE.md 文件在 Claude Code 的使用体验中扮演着至关重要的角色。它不仅仅是一份文档,更是连接 AI 助手与项目实际需求的桥梁。充分理解它的价值,有助于你更有动力去维护这份文件。
了解 CLAUDE.md 的存放位置和加载机制是正确使用它的前提。文件必须放置在正确的位置才能被 Claude Code 自动识别和加载,否则你将无法享受到自动化配置带来的便利。
CLAUDE.md 文件必须放置在项目的根目录下,与 .gitignore、README.md 等根级文件平级。例如,如果你的项目路径是 /home/user/my-project/,那么 CLAUDE.md 就应该位于 /home/user/my-project/CLAUDE.md。这是 Claude Code 在启动对话时默认搜索的位置,放置在子目录中将不会被自动识别。
每次你启动 Claude Code 对话时,系统都会自动扫描项目根目录,查找 CLAUDE.md 文件。如果找到该文件,其全部内容将被读取并注入到当前对话的系统提示中。这意味着在整个对话期间,Claude 都会将文件中的指令视为项目规则的一部分。如果文件不存在,Claude Code 将使用默认行为模式,不会应用任何项目特定的指令和约束。
配置优先级(从高到低):
| 优先级 | 配置来源 | 说明 |
|---|---|---|
| 最高 | CLAUDE.md | 项目根目录的 Markdown 指令文件,每次对话自动加载 |
| 中 | .claude/settings.json | 项目级设置,存放于项目根目录的 .claude 子目录中 |
| 低 | ~/.claude/settings.json | 用户级全局设置,影响所有项目 |
版本控制建议:CLAUDE.md 应当提交到 Git 仓库中。这样做有三大好处:第一,团队所有成员都能共享同一份 AI 行为配置,确保协作一致性;第二,文件的变更历史会被 Git 完整记录,方便追踪谁在何时修改了哪些 AI 指令;第三,新成员克隆仓库后自动获得配置,无需额外设置。
如果你在项目根目录下找不到 CLAUDE.md 文件,可以手动创建一个空文件,或者使用 claude init 命令让 Claude Code 自动分析代码库并生成初始版本。创建后不需要重启任何服务,下一次启动 Claude Code 对话时新文件就会自动生效。
一个高质量的 CLAUDE.md 应当覆盖以下几个核心内容模块。这些模块共同构成了 AI 助手理解和参与项目开发的完整上下文框架。不同类型的项目可以根据自身特点对这些模块进行增删调整。
项目概述是 CLAUDE.md 的第一部分,它应当用 2-4 句话简要说明项目的名称、核心功能、目标用户和使用场景。这部分信息帮助 Claude 快速建立对项目的整体认知。此外,还应当标明项目的当前状态,例如"开发中"、"维护中"或"已上线",以便 Claude 根据项目阶段调整辅助策略。
技术栈信息是 CLAUDE.md 中最重要的内容之一。你需要详细列出项目所使用的编程语言及版本号、框架和库的具体版本、构建工具和包管理器、数据库和中间件方案,以及部署平台和环境信息。版本号尤其重要——如果项目使用的是 Python 3.12 而非 3.10,Claude 在生成依赖配置和语法代码时会据此做出正确的选择。
在代码规范部分,你需要明确定义项目使用的编码风格约定。这包括命名约定(使用 camelCase 还是 snake_case)、缩进和格式化规则(例如使用 4 个空格还是 2 个空格)、文件和目录的组织方式、注释规范的要求,以及 Linting 和格式化工具的配置。明确的代码规范是保证 Claude 生成的代码与项目现有代码风格一致的关键。
开发流程部分指导 Claude 在参与项目开发时遵循团队的工作流。内容包括分支策略(如 Git Flow 或 GitHub Flow)、提交信息的格式要求(如 Conventional Commits)、Code Review 的流程和标准、测试要求(单元测试框架、集成测试覆盖标准),以及 CI/CD 流程的说明。当 Claude 需要创建提交信息、编写测试或发起 Pull Request 时,这些规范会直接影响其输出。
重要约定涵盖项目中各种非功能性的开发约定。这包括环境变量的命名和使用方式、日志输出的格式和级别规范、错误处理的标准模式、API 设计的接口约定(如 RESTful 风格或 GraphQL 规范),以及数据库迁移的策略。这些约定虽然不直接体现在代码功能中,但对项目的可维护性和团队协作至关重要。
常用命令部分列出项目开发过程中最频繁使用的终端命令。这包括如何安装依赖、启动本地开发服务器、运行不同类别的测试、执行构建和部署操作,以及各种常用脚本的调用方式。将这些命令写入 CLAUDE.md 后,Claude 可以直接执行它们,无需你每次手动输入或回忆命令格式。
CLAUDE.md 的内容应当"精而不冗"。优先覆盖最核心、最不常变化的信息。过于琐碎的细节(例如每条数据库连接字符串)不适合放在 CLAUDE.md 中——这些信息可能变化频繁,容易导致文件过时。同时,对于变动频繁的命令,可以考虑放在 Makefile 或 package.json 的 scripts 字段中管理,然后在 CLAUDE.md 中引用它们。
下面是一个完整的 CLAUDE.md 示例文件。你可以基于这个模板进行修改和扩展,以适配自己项目的实际需求。注意观察每个部分的内容深度和信息组织方式。
编写一份高质量的 CLAUDE.md 不仅仅是罗列信息,更需要遵循一系列经过实践验证的最佳原则。以下最佳实践来自大量 Claude Code 用户的真实经验总结。
revise-claude-md 技能定期审查和更新 CLAUDE.md 文件。这个技能会分析当前对话的内容,识别出有用的新信息,并建议将它们补充到文件中。不要追求"一次性写完"完美的 CLAUDE.md。更好的方式是先创建一个简短的版本,然后在实际使用中逐步补充和完善。Claude Code 的 revise-claude-md 技能可以帮助你在会话结束后自动总结需要更新的内容,使维护工作变得轻松自然。
init 命令初始化对于新项目或不熟悉 CLAUDE.md 格式的开发者,Claude Code 提供了一个非常实用的 init 命令。通过这个命令,你可以无需手动编写任何内容就能获得一份初始的 CLAUDE.md 文件。
当你在项目根目录下运行 claude init 命令时,Claude Code 会自动执行以下步骤:首先扫描项目的目录结构,了解文件组织方式;然后分析关键配置文件(如 package.json、pyproject.toml、Dockerfile 等),识别项目的技术栈和框架;接着检测项目的代码风格和常用模式;最后,综合所有这些信息,生成一份结构完整、内容准确的初始 CLAUDE.md 文件。
claude init 生成的 CLAUDE.md 是一个很好的起点,但它并不能完美覆盖所有项目特有的约定和规范。在生成初始版本后,建议你人工检查并补充以下内容:项目特有的业务规则和逻辑约定、团队内部的工作流和沟通规范、自定义的脚本和工具链使用说明,以及任何你认为重要的但 init 无法自动识别的内容。
随着项目的持续开发,CLAUDE.md 也需要同步更新。除了手动编辑外,你可以利用 revise-claude-md 技能来完成这一任务。每次完成一个对话后,运行这个技能,它会回顾本次对话中讨论的与项目配置相关的内容,并自动建议对 CLAUDE.md 的修改。这大大降低了维护成本,确保文件始终与项目保持同步。
claude init 生成的 CLAUDE.md 是起点而非终点。自动生成的版本可以帮助你快速建立起文件框架,但要发挥其最大价值,还需要结合团队实际的人工优化和定期维护。建议初始使用 init 生成基础版本,然后手动补充项目特有的规则和约定,最后用 revise-claude-md 技能维持文件的时效性。
对于已经熟悉 CLAUDE.md 基础用法的进阶用户,以下高级技巧可以帮助你进一步发挥 CLAUDE.md 的潜力,实现更精细化的 AI 行为控制。
除了项目根目录的 CLAUDE.md 外,你还可以在项目的子目录中放置 .claude.md 文件(注意文件名前有一个点号)。当你在子目录中启动对话或涉及该子目录的文件时,Claude 会同时加载根目录的 CLAUDE.md 和对应子目录的 .claude.md。这种方式适用于大型项目中不同模块有各自独立规范的情况,可以实现指令的作用域隔离。
在 CLAUDE.md 中,你可以编写针对特定任务类型的条件指令。例如,当 Claude 被要求编写测试时,你可以指定测试框架和风格;当涉及数据库迁移时,指定迁移工具和命名规范。通过在文件中分类组织规则,Claude 可以根据当前任务的性质自动选择应用哪组规则,实现更加智能化的行为控制。
CLAUDE.md 是定义安全边界的最佳场所。你可以在文件中明确声明 Claude 不允许执行的操作,例如"不允许修改 .env 文件"、"不允许删除数据库中的数据"或"不允许向生产环境直接部署代码"。这些安全约束会被系统提示接受,从而在源头上防止 AI 执行越权操作。结合 settings.json 中的权限配置,可以形成多层的安全防护。
如果你的团队维护着多个相似类型的项目(如多个微服务),可以考虑创建一个 CLAUDE.md 模板。模板中包含了所有项目通用的规则和规范,每个项目只需要在模板基础上添加自己的特有信息即可。这种方式可以显著降低跨项目的维护成本,同时确保所有项目遵循统一的基础规范。
由于 CLAUDE.md 建议纳入 Git 版本管理,你可以利用 Git 的 diff 和 log 命令来追踪文件的变更历史。当 CLAUDE.md 中的某个指令导致 AI 行为异常时,你可以通过 git diff 快速定位最近的修改,及时回滚或修正问题。这也是为什么建议将 CLAUDE.md 放在 Git 仓库中进行管理的另一个重要原因。
多级指令(CLAUDE.md + .claude.md)在大型项目中尤为有用。例如,一个 monorepo 项目可以在根目录的 CLAUDE.md 中定义通用规范,然后在前端和后端子目录中分别放置各自的 .claude.md 来定义该模块特有的技术栈和规范。需要注意的是,子目录中 .claude.md 的规则会覆盖根目录 CLAUDE.md 中的同名规则,因此要小心避免意外的覆盖行为。
在实际使用 CLAUDE.md 的过程中,开发者可能会遇到一些典型问题。以下是常见问题的诊断和解决方案。
CLAUDE.md。revise-claude-md 技能可以辅助这一过程。claude init 命令可以自动扫描代码库生成初始版本的 CLAUDE.md 文件。revise-claude-md 技能辅助更新。