Claude Code CLAUDE.md 完全指南:加载机制、编写技巧与最佳实践
如果给 AI 编程工具的发展画一条时间线,Claude Code 无疑是值得单独标记的节点之一。Anthropic 在 2025 年 2 月首次将它带给开发者(当时还是早期公开预览版),到 2025 年 5 月,它已经开始触及更广泛的开发者群体。让它与众不同的,不是它增加了又一个模型交互界面,而是它首次让 AI Agent 真正走进了终端——读取仓库、编辑文件、运行命令、修复问题、推动任务前进。
从那一刻起,软件开发的中心已经在悄然转移。过去很长时间里,开发者的主要工作是手动实现,IDE 则提供代码补全、搜索和分析的辅助。Claude Code 把这个边界推远了很多。越来越多的时候,我们不再从”下一行代码应该写什么”开始思考,而是从”目标是什么、约束是什么、哪些文件可以改、什么结果算完成”开始。
这一切的基础,就是 CLAUDE.md。
1. CLAUDE.md 是什么
CLAUDE.md 是 Claude Code 理解项目上下文的核心文件。它相当于 AI 的”项目入职指南”——当 Claude 在项目中编写或修改代码时,第一件事就是读取 CLAUDE.md 文件。
Anthropic 官方将其定义为”项目记忆文件”(Project Memory File),它会告诉 Claude:
- 这个项目是做什么的
- 技术栈是什么
- 代码架构怎么组织
- 有哪些编码规范和约束
- 构建、测试、部署命令是什么
- 哪些文件可以改、哪些不能碰
与其他工具配置文件的对比
| 工具 | 配置文件 | 定位 | 加载机制 |
|---|---|---|---|
| Claude Code | CLAUDE.md | 项目级上下文提示 | 每次对话开始时加载 |
| Cursor | .cursorrules | 项目级规则文件 | 每次对话注入到系统提示 |
| GitHub Copilot | 无标准文件 | 依赖代码分析和注释 | 实时分析当前文件上下文 |
| Cline/Roo Code | CLINE.md / .clinerules | 类似 CLAUDE.md | 类似加载方式 |
| Windsurf | .windsurfrules | 项目规则 | 全局+项目级级联 |
| Aider | .aider.conf.yml / CONVENTIONS.md | 约定文件 | 明确约定 |
Claude Code 的设计理念是:CLAUDE.md 不是硬性规则,而是上下文信息。它通过提供高质量的项目上下文,让 AI 做出更好的判断,而不是强制 AI 遵守某套规则。
2. CLAUDE.md 的加载机制
了解 CLAUDE.md 如何被加载,是写好它的前提。
加载流程
当你在终端运行 claude 命令时,Claude Code 按照以下顺序加载上下文:
- 系统提示 — Anthropic 内置的基础行为定义
- CLAUDE.md — 项目根目录下的项目记忆文件
- 对话历史 — 当前会话的上下文
- 用户输入 — 你输入的最新指令
CLAUDE.md 的关键特性:
- 每次对话加载一次:在对话开始时读取,之后不会热重载
- 全局 + 项目级级联:可以在
~/.claude/CLAUDE.md放置全局配置,项目根目录的 CLAUDE.md 会叠加在其上 - 纯文本上下文注入:CLAUDE.md 的内容被当作纯文本注入到系统提示中,不会被解析为结构化配置
- 优先级:项目级 CLAUDE.md 覆盖全局配置中的同名章节
加载顺序和优先级
系统级 (~/.claude/CLAUDE.md)
↓ 叠加
项目级 (./CLAUDE.md)
↓ 叠加
对话上下文
这种设计允许你在全局配置中设置跨项目的通用偏好(比如”始终使用 TypeScript”、”运行测试前先检查类型”),然后在每个项目的 CLAUDE.md 中覆盖具体的项目细节。
Claude Code 如何解析 CLAUDE.md
Claude Code 读取 CLAUDE.md 后,将其作为对话开始时的上下文窗口的一部分。它不是被”编译”成指令或规则,而是作为自然语言描述被 Claude 理解。
这意味着:
- 格式不重要,内容才重要:Markdown 是推荐格式,但 Claude 读的是语义,不是语法树
- 清晰优于全面:一段精炼的心理模型比五页文档更有用
- 位置有影响:放在文件上半部分的内容更早进入上下文,通常影响力更大
- 指令可以递归:你可以在 CLAUDE.md 中告诉 Claude”如果遇到 X 问题,使用 Y 方案”,Claude 会记住这些关联
3. 如何编写高质量的 CLAUDE.md
以下是我认为一份好的 CLAUDE.md 应该包含的核心内容。
3.1 项目概述(高优先级)
这是最有价值的部分。用三四句话告诉 Claude:
## Project Overview
这是一个给独立开发者用的定时任务管理 SaaS。
核心用户是自由职业者和远程工作者。
优先保证:任务可靠性 > UI 美观度 > 功能数量。
为什么这段重要?因为 Claude 没有项目的”直觉”。你告诉它这是给独立开发者的工具,它就不会给你写企业级审批流。
关键点:回答”这是什么样的产品,应该优化什么?”
3.2 技术栈(中等优先级)
## Tech Stack
- TypeScript (strict mode)
- Next.js 15 (App Router)
- Prisma + PostgreSQL
- Tailwind CSS
- vitest (测试)
- pnpm (包管理)
禁止引入:
- Redux (无状态管理必要)
- styled-components (已用 Tailwind)
- any 类型
没有技术栈说明,Claude 可能会引入技术上正确但与项目不兼容的库。示例:在一个纯 Next.js 项目中,Claude 曾自行安装 Express 用于 API 路由,如果有技术栈说明就能避免。
3.3 架构和目录结构(中等优先级)
## Architecture
- `src/app/` — 路由和页面组件(RSC 优先)
- `src/components/` — 可复用 UI 组件
- `src/lib/` — 工具函数和共享逻辑
- `src/features/` — 业务逻辑模块
- `prisma/` — 数据库 schema 和迁移
规则:
- 页面级组合放在路由文件
- 重复 UI 提取为组件
- 服务端组件优先
- 新功能先在 features/ 下创建模块
这段帮助 Claude 理解”新代码应该放在哪里”,避免目录混乱。
3.4 编码规范(高优先级)
这是最直接影响代码质量的部分。使用可执行的具体规则,而非模糊描述。
## Coding Conventions
- 严格 TypeScript,避免 any
- 函数式组件优先
- 具名导出(路由文件除外)
- async/await 替代链式 Promise
- 描述性变量名,避免缩写
- 不要遗留死代码和注释掉的代码
- 每个文件不超过 300 行
- 优先使用 for...of 而非 forEach
- 禁止使用 var
如何写出高质量的编码规则
❌ 太模糊:
- 写干净、可维护的代码
- 遵循最佳实践
- 性能优先
✅ 可执行:
- 函数不超过 50 行
- 组件不超过 150 行
- 每个文件只导出一个主要组件
- 条件分支使用早期返回
- 复杂度超过 3 层的嵌套必须提取函数
3.5 命令和脚本(中等优先级)
提供明确的命令,让 Claude 知道如何执行操作:
## Commands
- 安装依赖:pnpm install
- 开发:pnpm dev
- 构建:pnpm build
- 类型检查:pnpm typecheck
- Lint:pnpm lint
- 测试:pnpm test
- 数据库迁移:pnpm prisma:migrate
没有这些命令,Claude 可能会用 npm 或 yarn(如果项目用的是 pnpm),或者用错误的命令运行测试。
3.6 安全规则(低优先级但重要)
告诉 Claude 哪些内容不应随意修改:
## Safety Rules
- 不要修改数据库 schema,除非明确要求
- 不要重命名公开 API 路由
- 不要修改认证流程
- 保持公共 API 的向后兼容性
- 不要删除已存在的环境变量引用
- 重大架构变更前先征求确认
3.7 测试和质量门槛(中等优先级)
明确工作完成的验证标准:
## Testing & Quality
标记任务完成前必须:
1. 运行类型检查 (pnpm typecheck)
2. 运行 Lint (pnpm lint)
3. 运行相关测试 (pnpm test)
4. 确认无死代码
测试要求:
- 为业务逻辑添加单元测试
- 覆盖正常路径、边界条件、错误路径
- UI 变更检查响应式行为
- 空状态和错误状态必须有处理
4. CLAUDE.md 最佳实践
基于大量项目的使用经验,这里总结几条核心原则。
4.1 清晰优于全面
一份好的 CLAUDE.md 一般 300~800 字。太短不够用,太长了 Claude 的关注力会被稀释。
信号: 如果你发现 Claude 反复忽略 CLAUDE.md 中的某条规则,删除这条规则。要么它不需要,要么它在消耗注意力。
4.2 规则要可执行
Claude 处理具体指令远比抽象原则好。
| ❌ 抽象原则 | ✅ 可执行规则 |
|---|---|
| 写可维护的代码 | 每个函数不超过 50 行 |
| 使用现代 JavaScript | 使用 ES2022+,禁止 var |
| 关注性能 | API 响应超过 500ms 需要缓存 |
| 安全优先 | 所有用户输入必须经过 Zod 验证 |
4.3 禁止比允许更重要
明确告诉 Claude “不要做什么” 和 “用什么” 同样重要。
除非明确要求,否则不要:
- 引入新的第三方依赖
- 修改数据库 schema
- 重构超过 3 个文件
- 添加新的抽象层
4.4 分层配置(全局 + 项目级)
利用级联加载机制,在全局配置中放通用规则,在项目配置中放特定细节。
~/.claude/CLAUDE.md:
## Global Conventions
- 所有项目使用 TypeScript strict mode
- 使用 pnpm 作为包管理
- 提交前运行类型检查和 Lint
- 使用函数式编程风格
项目 CLAUDE.md:
## Project Overview
[项目特有描述]
## Commands
[项目特有命令]
4.5 保持更新
CLAUDE.md 是活文档。当项目演进时(更换框架、调整架构、增加新规则),同步更新 CLAUDE.md。
更新信号:
- 发现 Claude 重复犯同类错误 → 在 CLAUDE.md 中添加规则
- 某个规则不再适用 → 移除以减少上下文噪音
- 添加了新命令 → 更新 Commands 章节
4.6 使用具体的代码示例
对于复杂的规则,配上代码示例会让效果翻倍:
## API Design Rules
✅ 推荐:
```typescript
// GET /api/users — 获取用户列表
export async function GET(request: NextRequest) {
const users = await db.user.findMany();
return NextResponse.json(users);
}
❌ 不推荐:
export async function handler(req, res) {
// 旧的 Pages Router 风格
res.json(await getUsers());
}
## 5. CLAUDE.md vs 其他工具的规则文件
了解不同工具之间的差异,有助于你写出更好的 CLAUDE.md。
### CLAUDE.md vs .cursorrules
| 维度 | CLAUDE.md | .cursorrules |
|------|-----------|-------------|
| 格式 | 纯 Markdown | 纯文本/Markdown |
| 加载 | 对话开始时读取 | 注入到系统提示 |
| 级联 | 支持(全局+项目) | 不支持(只有项目级) |
| 语义 | 上下文信息 | 指令/规则 |
| 自动更新 | 只读,需手动 | 同左 |
关键区别:Cursor 的 `.cursorrules` 更接近"指令"——Claude Code 的 CLAUDE.md 更接近"上下文"。两者最终的代码质量效果相当,但实现哲学不同。
### CLAUDE.md vs OpenCode/Cline 的自定义配置
OpenCode 和 Cline 等工具支持更结构化的规则文件(如 YAML 格式),可以定义变量、环境要求、自动化脚本等。CLAUDE.md 则保持纯文本,依赖 Claude 的自然语言理解能力。这意味着 CLAUDE.md 可以表达更复杂的上下文关系,但无法做结构化的条件判断。
### CLAUDE.md vs Copilot Instructions
GitHub Copilot 的指令机制是基于 IDE 插件的,通过 `Settings > Copilot > Instructions` 配置全局指令。相比 CLAUDE.md,Copilot 的指令机制更基础,无法理解项目级上下文,主要影响行级补全和简单对话。
## 6. 实战:从零编写一份 CLAUDE.md
以下是一个实际示例的综合 CLAUDE.md:
```markdown
## Project Overview
一个面向设计师的 AI 落地页生成工具。
用户上传设计稿,AI 生成可直接部署的 Landing Page。
核心指标:从设计稿到上线 < 5 分钟。
## Tech Stack
- Next.js 15 (App Router)
- TypeScript (strict)
- Tailwind CSS + shadcn/ui
- Supabase (认证 + 数据库)
- Vercel AI SDK
- Vitest
- pnpm
禁止:Redux、styled-components、Material UI
## Architecture
- app/ — 路由和页面 (RSC 优先)
- components/ui/ — 设计系统组件
- components/landing/ — 落地页模板
- lib/ — 共享工具函数和 API 客户端
- features/ — 业务模块
- types/ — 共享类型定义
## Coding Conventions
- 函数式组件,避免类组件
- 具名导出(路由文件除外)
- async/await 风格
- 组件不超过 200 行
- 函数不超过 50 行
- 描述性命名,避免缩写
- 不要遗留 console.log
- 所有用户输入必须经过 Zod 验证
## Commands
- 开发:pnpm dev
- 构建:pnpm build
- 类型:pnpm typecheck
- 测试:pnpm test -- --run
- Lint:pnpm lint
## Safety Rules
- 不修改认证逻辑
- 不修改数据库 schema
- 不重命名已发布的 API 路由
- 保持组件 API 向后兼容
这份配置大约 400 字,覆盖了所有关键信息。实践表明,这样的配置可以让 Claude Code 在项目中一次性达到 80% 以上的代码质量匹配度。
7. 常见问题
CLAUDE.md 和 AGENTS.md 有什么区别?
两者格式和作用相似,Claude Code 首先会查找 CLAUDE.md,如果存在则使用它。AGENTS.md 是 Hermes Agent 等工具使用的类似文件。如果你的项目同时被多个 AI 工具使用,可以同时保留两者。
可以用中文写 CLAUDE.md 吗?
可以。Claude 支持多语言理解。但建议使用与项目代码相同的语言(通常是英文),因为代码本身是英文的,上下文更一致。
CLAUDE.md 太大怎么办?
| 文件大小 | 效果 | 建议 |
|---|---|---|
| < 1KB | 太简略,遗漏关键信息 | 补充核心内容 |
| 1~5KB | 理想范围 | 保持 |
| 5~10KB | 良好,部分规则可能被稀释 | 检查是否有冗余内容 |
| > 10KB | Claude 可能忽略部分规则 | 精简到前 80% 的内容 |
多个项目共用规则怎么办?
使用全局配置 ~/.claude/CLAUDE.md 存放跨项目规则,每个项目的 CLAUDE.md 只放项目特有信息。
总结
CLAUDE.md 是 Claude Code 生态中最被低估的能力之一。它不是一个可有可无的补充文件——它是对话质量的基础设施。
写好 CLAUDE.md 的核心原则只有四条:
- 清晰优于全面 — 300~800 字的最佳区间,保持精炼
- 规则要可执行 — Claude 需要能自动遵循的具体规则,而非抽象原则
- 禁止比允许更重要 — 明确说什么不要做,和说什么要做同样重要
- 保持更新 — CLAUDE.md 随项目演进持续完善
如果你已经在使用 Claude Code,花 30 分钟写一份好的 CLAUDE.md,它会在之后的每一次对话中以更高质量的代码产出回馈你。从 AI 辅助编程到 AI 原生开发,CLAUDE.md 就是这个过渡中最重要的桥梁之一。
