CLAUDE.md 文件完全指南

Claude Code 学习笔记

分类:核心功能

核心主题:CLAUDE.md 文件的编写方法、结构规范、最佳实践与高级技巧

主要内容:全面介绍 CLAUDE.md 文件的作用、编写规范、核心内容模块、最佳实践及高级用法,帮助开发者高效管理和配置 Claude Code 项目。

关键词:CLAUDE.md, 项目配置, AI指令, 项目管理, 提示词, 最佳实践

一、概述

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/settings.json 和 ~/.claude/settings.json。在 CLAUDE.md 中定义的规则和约定将覆盖其他配置文件中的同类设置,因此它是规范 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 助手理解和参与项目开发的完整上下文框架。不同类型的项目可以根据自身特点对这些模块进行增删调整。

4.1 项目概述

项目概述是 CLAUDE.md 的第一部分,它应当用 2-4 句话简要说明项目的名称、核心功能、目标用户和使用场景。这部分信息帮助 Claude 快速建立对项目的整体认知。此外,还应当标明项目的当前状态,例如"开发中"、"维护中"或"已上线",以便 Claude 根据项目阶段调整辅助策略。

4.2 技术栈

技术栈信息是 CLAUDE.md 中最重要的内容之一。你需要详细列出项目所使用的编程语言及版本号、框架和库的具体版本、构建工具和包管理器、数据库和中间件方案,以及部署平台和环境信息。版本号尤其重要——如果项目使用的是 Python 3.12 而非 3.10,Claude 在生成依赖配置和语法代码时会据此做出正确的选择。

4.3 代码规范

在代码规范部分,你需要明确定义项目使用的编码风格约定。这包括命名约定(使用 camelCase 还是 snake_case)、缩进和格式化规则(例如使用 4 个空格还是 2 个空格)、文件和目录的组织方式、注释规范的要求,以及 Linting 和格式化工具的配置。明确的代码规范是保证 Claude 生成的代码与项目现有代码风格一致的关键。

4.4 开发流程

开发流程部分指导 Claude 在参与项目开发时遵循团队的工作流。内容包括分支策略(如 Git Flow 或 GitHub Flow)、提交信息的格式要求(如 Conventional Commits)、Code Review 的流程和标准、测试要求(单元测试框架、集成测试覆盖标准),以及 CI/CD 流程的说明。当 Claude 需要创建提交信息、编写测试或发起 Pull Request 时,这些规范会直接影响其输出。

4.5 重要约定

重要约定涵盖项目中各种非功能性的开发约定。这包括环境变量的命名和使用方式、日志输出的格式和级别规范、错误处理的标准模式、API 设计的接口约定(如 RESTful 风格或 GraphQL 规范),以及数据库迁移的策略。这些约定虽然不直接体现在代码功能中,但对项目的可维护性和团队协作至关重要。

4.6 常用命令

常用命令部分列出项目开发过程中最频繁使用的终端命令。这包括如何安装依赖、启动本地开发服务器、运行不同类别的测试、执行构建和部署操作,以及各种常用脚本的调用方式。将这些命令写入 CLAUDE.md 后,Claude 可以直接执行它们,无需你每次手动输入或回忆命令格式。

实践提示

CLAUDE.md 的内容应当"精而不冗"。优先覆盖最核心、最不常变化的信息。过于琐碎的细节(例如每条数据库连接字符串)不适合放在 CLAUDE.md 中——这些信息可能变化频繁,容易导致文件过时。同时,对于变动频繁的命令,可以考虑放在 Makefile 或 package.json 的 scripts 字段中管理,然后在 CLAUDE.md 中引用它们。

五、编写示例

下面是一个完整的 CLAUDE.md 示例文件。你可以基于这个模板进行修改和扩展,以适配自己项目的实际需求。注意观察每个部分的内容深度和信息组织方式。

# My Awesome API ## 项目概述 这是一个基于 FastAPI 构建的 RESTful API 服务,为移动端和 Web 端提供用户管理、内容发布和数据分析功能。项目当前处于活跃开发阶段,计划于 2026 年 Q3 发布 v1.0 正式版。 ## 技术栈 - 语言:Python 3.12 - 框架:FastAPI 0.110+ - 数据库:PostgreSQL 15 + Redis 7(缓存) - ORM:SQLAlchemy 2.0 + Alembic(迁移) - 测试:pytest 8.x + httpx(异步测试) - 部署:Docker + Kubernetes(AWS EKS) - CI/CD:GitHub Actions ## 代码规范 1. Python 代码使用 Black 格式化(行宽 88) 2. 所有函数和方法的类型注解必须完整,使用 `from __future__ import annotations` 3. 命名约定:变量/函数使用 snake_case,类名使用 PascalCase,常量使用 UPPER_CASE 4. 每个 public 函数/方法必须包含 docstring,遵循 Google 风格 5. 按以下顺序组织 import:标准库 -> 第三方库 -> 本地模块,每组之间空一行 ## 开发流程 1. 分支策略:从 main 创建 feature/* 分支,完成后提交 PR 合并到 main 2. 提交信息格式:`type(scope): description`(遵循 Conventional Commits) 3. 每次提交前必须通过所有现有测试 4. 新功能必须编写对应的单元测试和集成测试 5. PR 需要至少一位 reviewer 批准后方可合并 ## API 约定 - 所有 API 响应遵循 `{ "code": 0, "data": ..., "message": "ok" }` 格式 - 错误响应使用 HTTP 状态码 + 统一错误体 - 分页接口统一使用 `?page=1&page_size=20` 参数 - API 版本通过 URL 前缀管理:`/api/v1/...` ## 常用命令 - 安装依赖:`pip install -r requirements.txt && pip install -r dev-requirements.txt` - 本地开发:`uvicorn app.main:app --reload --port 8000` - 运行测试:`pytest -v --cov=app tests/` - 数据库迁移:`alembic upgrade head` - 代码格式化:`black . && isort .`
编写要点:上述示例中的每一项指令都是可执行的、明确的、具体的。例如"代码使用 Black 格式化"和"行宽 88"这样的描述可以让 Claude 直接遵循而无需猜测。相反,像"代码风格要优雅"这样的模糊表述应当避免,因为"优雅"对 AI 来说不是一个可量化的标准。

六、最佳实践

编写一份高质量的 CLAUDE.md 不仅仅是罗列信息,更需要遵循一系列经过实践验证的最佳原则。以下最佳实践来自大量 Claude Code 用户的真实经验总结。

实践提示

不要追求"一次性写完"完美的 CLAUDE.md。更好的方式是先创建一个简短的版本,然后在实际使用中逐步补充和完善。Claude Code 的 revise-claude-md 技能可以帮助你在会话结束后自动总结需要更新的内容,使维护工作变得轻松自然。

七、使用 init 命令初始化

对于新项目或不熟悉 CLAUDE.md 格式的开发者,Claude Code 提供了一个非常实用的 init 命令。通过这个命令,你可以无需手动编写任何内容就能获得一份初始的 CLAUDE.md 文件。

init 命令的工作原理

当你在项目根目录下运行 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.md 外,你还可以在项目的子目录中放置 .claude.md 文件(注意文件名前有一个点号)。当你在子目录中启动对话或涉及该子目录的文件时,Claude 会同时加载根目录的 CLAUDE.md 和对应子目录的 .claude.md。这种方式适用于大型项目中不同模块有各自独立规范的情况,可以实现指令的作用域隔离。

条件指令:针对不同类型的任务

在 CLAUDE.md 中,你可以编写针对特定任务类型的条件指令。例如,当 Claude 被要求编写测试时,你可以指定测试框架和风格;当涉及数据库迁移时,指定迁移工具和命名规范。通过在文件中分类组织规则,Claude 可以根据当前任务的性质自动选择应用哪组规则,实现更加智能化的行为控制。

安全约束:限制 AI 的操作范围

CLAUDE.md 是定义安全边界的最佳场所。你可以在文件中明确声明 Claude 不允许执行的操作,例如"不允许修改 .env 文件"、"不允许删除数据库中的数据"或"不允许向生产环境直接部署代码"。这些安全约束会被系统提示接受,从而在源头上防止 AI 执行越权操作。结合 settings.json 中的权限配置,可以形成多层的安全防护。

模板复用:跨项目共享配置

如果你的团队维护着多个相似类型的项目(如多个微服务),可以考虑创建一个 CLAUDE.md 模板。模板中包含了所有项目通用的规则和规范,每个项目只需要在模板基础上添加自己的特有信息即可。这种方式可以显著降低跨项目的维护成本,同时确保所有项目遵循统一的基础规范。

版本对比:用 Git 追踪变更历史

由于 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 相关的问题时,首先检查文件位置是否正确,其次确认各级配置之间没有冲突,最后评估文件内容是否与项目现状保持同步。大多数问题都可以通过正确的位置、清晰的优先级管理和定期的内容维护来解决。

十、核心要点总结

  • CLAUDE.md 是给 AI 助手看的项目手册,相当于一份结构化指令文件,每次对话开始时自动加载到系统提示中。
  • 核心内容包含:项目概述、技术栈、代码规范、开发流程、重要约定和常用命令六大模块。
  • 优先级别最高:CLAUDE.md 的优先级高于 .claude/settings.json 和 ~/.claude/settings.json。
  • 快速入门:使用 claude init 命令可以自动扫描代码库生成初始版本的 CLAUDE.md 文件。
  • 持续维护:需要定期更新以保持与项目同步,推荐使用 revise-claude-md 技能辅助更新。
  • 编写原则:简洁但完整、指令可执行、规则明确、用示例说话、先通用后具体。
  • 高级扩展:支持多级指令(子目录 .claude.md)、条件指令、安全约束配置和模板复用。
  • 版本控制:建议将 CLAUDE.md 纳入 Git 仓库管理,方便团队共享和变更追踪。