Home
avatar

麒麟剑

Claude Code实战教程(3):CLAUDE.md——给AI装上一颗项目大脑

《从零开始的 Claude Code 实战系列教程》第 3 篇 · 公众号「麒麟剑的AI自动化Lab」连载

Brain and knowledge organization ▲ CLAUDE.md 就像给 AI 装上了一颗项目大脑,让它真正理解你的工作


一、你是否有过这样的经历?

“我已经跟 Claude 解释了 5 遍这个项目用什么技术栈了,每次新开会话它都忘了。”

“每次让 Claude 写代码,它都用我不喜欢的风格,我得一次又一次纠正。”

“换了个新同事,他接手我的项目需要几天才能理解架构;但 Claude 每次都要我重新 briefing。”

这些问题都有一个共同的解决方案:CLAUDE.md


二、CLAUDE.md 是什么?它怎么工作的?

CLAUDE.md 是 Claude Code 最重要的配置文件。它决定了 Claude 如何看待你的项目、遵循什么规则、如何与你沟通。

工作原理

┌─────────────────────────────────────────────────────────────┐
│                    Claude Code 启动流程                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   1. 扫描项目根目录,找到 CLAUDE.md                          │
│         ↓                                                   │
│   2. 扫描父目录,找到上级 CLAUDE.md(向上递归)               │
│         ↓                                                   │
│   3. 读取用户级 CLAUDE.md(~/.claude/CLAUDE.md)             │
│         ↓                                                   │
│   4. 将以上内容合并注入到系统提示词中                          │
│         ↓                                                   │
│   5. 每次对话开始,Claude 都能"记住"这些规则                   │
│                                                             │
├─────────────────────────────────────────────────────────────┤
│   ⚠️ 重要:系统提示词本身约占用 50 个指令槽位                  │
│      Claude 有效理解上限约 150 条指令                         │
│      留给 CLAUDE.md 的空间:约 100 条规则                     │
└─────────────────────────────────────────────────────────────┘

加载层级

CLAUDE.md 可以放在多个层级,Claude Code 会自底向上合并:

~/.claude/CLAUDE.md              ← 个人全局配置(对所有项目生效)

项目根目录/CLAUDE.md             ← 项目级配置(团队共享,推荐放入 git)

src/components/CLAUDE.md        ← 子目录级配置(仅对该目录下的代码生效)

src/api/CLAUDE.md               ← 更细粒度的配置

最佳实践:大多数规则放在项目根目录的 CLAUDE.md 即可。只有当某个子目录有特殊的编码规范时,才在该子目录下单独放一个。

File structure hierarchy ▲ 多层级的配置文件,让规则可以精细化控制


三、什么样的 CLAUDE.md 是好的?

反例:配置式 CLAUDE.md(很多人这样写)

## 项目规则
- Don't use passive voice
- Always use TypeScript
- Response length: concise
- No inline comments unless asked

问题:这些规则是孤立的清单,没有上下文。当规则之间冲突时(比如”concise”和”解释一个复杂的 security vulnerability”),Claude 不知道如何选择。

正例:宪法式 CLAUDE.md(推荐)

我偏向直接、专业的沟通风格,但在写面向初级工程师的文档时会更温暖一些。
代码审查评论要简洁有力,不需要过度解释基础概念。

技术栈:TypeScript + Next.js + Tailwind CSS + Zustand
所有新代码必须使用 TypeScript,禁止 any。
React 组件一律使用函数组件 + hooks,不使用 class 组件。
状态管理使用 Zustand,不在组件内直接使用 localStorage。
UI 组件来自 shadcn/ui,优先使用现有组件而非自定义样式。
生产环境禁止 console.log,使用专用的 logger 模块(src/utils/logger.ts)。

优势:不仅告诉 Claude 做什么,还解释了为什么,让 Claude 在遇到边界情况时能做出符合你意图的判断。


四、CLAUDE.md 的标准结构(10 个必备章节)

章节一:项目概述

## 项目概述
这是一个电商平台的后端服务,使用 NestJS + PostgreSQL 构建。
主要功能:用户管理、商品目录、订单处理、支付集成。
目标用户:B2B 采购商家,日活约 5000。

章节二:技术栈

## 技术栈
- 运行时:Node.js 20 LTS
- 框架:NestJS 10
- 数据库:PostgreSQL 16 + TypeORM
- 缓存:Redis
- 测试:Jest + Supertest
- 部署:Docker + Kubernetes

章节三:项目结构

## 项目结构
src/
  modules/          # 业务模块(users, products, orders, payments)
  common/           # 共享工具(filters, interceptors, guards)
  config/           # 配置文件
  main.ts           # 入口文件
test/               # 测试文件(与 src/ 结构对应)
docker/             # Docker 相关文件

章节四:编码规范

## 编码规范
- 所有模块必须遵循 NestJS 的标准分层:controller → service → repository
- DTO 类放在 dtos/ 子目录,使用 class-validator 做输入校验
- 异常处理统一使用 HttpException,不在 service 层抛原生 Error
- 数据库查询使用 TypeORM QueryBuilder,避免 N+1
- API 响应统一包装为 { data, meta: { page, limit, total } }

章节五:命名约定

## 命名约定
- 模块:kebab-case(user-module.ts)
- 服务类:PascalCase + Service 后缀(UserService)
- DTO:PascalCase +Dto 后缀(CreateUserDto)
- 测试文件:*.spec.ts
- 环境变量:UPPER_SNAKE_CASE

章节六:关键路径与常量

## 关键路径
- 主入口:src/main.ts
- 用户认证:src/modules/auth/
- 支付逻辑:src/modules/payments/
- 数据库配置:src/config/database.ts

章节七:构建与测试命令

## 常用命令
npm run build          # 构建
npm run start          # 本地启动
npm run test           # 运行测试
npm run test:cov       # 带覆盖率报告
npm run test:e2e       # E2E 测试

章节八:禁止事项(Don’t Do This)

## 禁止事项
- 不要在生产代码中使用 console.log,改用 logger 模块
- 不要绕过 DTO 直接用 req.body
- 不要在 service 层直接操作 HTTP 响应对象
- 不要在数据库查询中拼接 SQL 字符串(防注入)
- 不要提交包含 .env 文件的生产密钥

章节九:读者画像(最重要但最常被忽略的章节)

## 代码的读者是谁
- 代码审查者:资深工程师,不需要解释基础概念,但需要清楚非显而易见的决策理由
- 文档读者:新入职的初级工程师,需要更详细的解释和上下文
- 未来维护者:6个月后的自己,希望快速理解当前代码的意图

为什么这一节重要? Claude 几乎从来不是在为你一个人写代码。理解读者是谁,Claude 就能自动调整语气、详细程度和解释深度,而不需要你每次都重新指定。

章节十:安全与合规

## 安全要求
- 所有用户输入必须经过校验(class-validator)
- 密码必须使用 bcrypt 哈希,成本因子 ≥ 12
- API 端点必须经过 JWT 认证中间件保护
- 敏感信息不得出现在日志或错误消息中
- 数据库查询参数必须参数化,禁止字符串拼接

五、实战:为一个真实项目编写 CLAUDE.md

项目背景

假设你有一个 Next.js + TypeScript 的前端项目,使用了 TanStack Query、ShadCN UI 和 Zustand。

完整的 CLAUDE.md

# Project Instructions

## 项目概述
SaaS 仪表盘前端,管理用户的订阅、团队成员和数据分析。
已上线产品,日均活跃用户约 2000。

## 技术栈
- Next.js 14 (App Router)
- TypeScript(严格模式)
- Tailwind CSS + ShadCN/UI
- Zustand(状态管理)
- TanStack Query(服务端状态)
- Vitest(测试)
- ESLint + Prettier

## 目录结构
app/            # Next.js App Router 页面
  components/   # UI 组件
  lib/          # 工具函数和 API 客户端
  hooks/        # 自定义 React Hooks
services/       # API 调用封装
store/          # Zustand stores
types/          # TypeScript 类型定义
tests/          # 测试文件

## 编码规范
- 组件使用函数组件 + TypeScript 接口
- 禁止在组件内直接使用 fetch,统一走 services/ 层
- API 响应类型必须在 types/ 中明确定义
- 使用 ShadCN 现有组件,不造轮子
- 复杂 UI 逻辑提取为 custom hook

## 禁止事项
- 禁止使用 any 类型
- 禁止直接在组件中读写 localStorage
- 禁止在服务器上执行客户端-only 的代码
- 禁止提交时包含 node_modules 或 .next 缓存

## 常用命令
npm run dev          # 开发服务器
npm run build        # 生产构建
npm run test         # 运行测试
npm run lint         # 代码检查

## 代码读者
- 同事:熟悉 Next.js,不需要解释基础概念
- 新成员:需要理解项目整体架构和数据流

六、如何初始化 CLAUDE.md

Claude Code 内置了一个初始化命令:

/init

运行后,Claude 会扫描项目结构,自动生成一份基础 CLAUDE.md。然后你可以:

  1. 审阅生成内容
  2. 手动添加项目特有的规则
  3. 删除不适用的部分
  4. 保存到版本控制

建议:每个新项目都应该运行一次 /init,然后根据实际使用情况持续优化。


七、与 CLAUDE.md 配合使用的其他文件

SKILL.md(Skills)

当 CLAUDE.md 中的一段内容变得很长、很 Procedure 化时,应该提取为 Skill:

.claude/skills/
├── deploy/
│   └── SKILL.md          # 部署流程
├── code-review/
│   └── SKILL.md          # 代码审查流程
└── test/
    └── SKILL.md         # 测试编写规范

判断标准:如果你的 CLAUDE.md 中有超过 20 行的操作步骤,考虑提取为 Skill。

settings.json(持久化设置)

{
  "permissions": {
    "defaultMode": "auto"
  },
  "model": {
    "default": "claude-sonnet-5"
  }
}

.gitignore(排除 Claude 生成文件)

# Claude Code 生成的临时文件
.claude/
!.claude/settings.json
!.claude/CLAUDE.md

八、维护 CLAUDE.md 的最佳实践

原则一:保持简短

  • 目标长度:50-150 行
  • 超过 150 行后,Claude 开始忽略后面的规则
  • 长规则提取为 SKILL.md

原则二:渐进式披露

# ❌ 不好的做法:把所有内容堆在根 CLAUDE.md
## 数据库规范
## 前端规范
## 测试规范
## 部署规范
## API 规范
## ...(200行)

# ✅ 好的做法:根文件只放关键规则,子目录放详细规范
# 项目根/CLAUDE.md(15行)
## 项目概述
## 技术栈
## 关键规范(全局适用的)

# src/database/CLAUDE.md(10行)
## 数据库模块专用规范

# src/frontend/CLAUDE.md(10行)
## 前端模块专用规范

原则三:定期回顾

每月回顾一次 CLAUDE.md:

  • 删除不再适用的规则
  • 补充新发现的常见错误
  • 合并重复的规则

原则四:团队共享

把 CLAUDE.md 纳入版本控制,让团队成员共享同一套规范:

# 在团队项目中,CLAUDE.md 应该在根目录并提交到 git
git add CLAUDE.md
git commit -m "docs: 更新项目规范和编码约定"

九、常见错误

错误后果修正
规则过多(>150条)Claude 开始忽略后面的规则提取为 SKILL.md
只列清单没有解释Claude 在边界情况时做出错误判断补充”Why”
把文档内容放进去浪费上下文空间@ 引用外部文档
规则之间矛盾Claude 随机选择执行哪条删除矛盾规则
写得太泛泛而谈没有实际指导作用给出具体例子

十、本章小结

要点说明
CLAUDE.md 的作用为 Claude 提供项目级上下文和规则
宪法式 > 清单式解释 Why 比列出 What 更重要
10 个必备章节概述、技术栈、结构、规范、命令、禁止事项、读者画像、安全等
层级加载个人级 → 项目级 → 子目录级,自底向上合并
长度控制保持在 50-150 行,超出部分提取为 Skill
定期维护每月回顾,删除过时规则

下期预告(第 4 篇):Git不再只是命令行——内置Git工作流全攻略,让你用自然语言管理分支、提交、PR 和冲突解决

关注本系列,从入门到专家,系统掌握 Claude Code 的全部技能。

Claude Code AI编程 配置管理 教程 最佳实践 Anthropic