Claude.md 编写指南

让 AI 助手真正理解项目上下文,提升开发效率的完整手册

01

什么是 claude.md

claude.md(或 CLAUDE.md)是 Claude Code 特有的项目上下文文件。将它放在项目根目录,Claude 会在每次对话时自动读取,从而获得关于你项目的持久化记忆。

核心作用

claude.md 相当于项目的"AI 使用说明书",告诉 Claude 项目的架构、规范、约定和背景知识,避免每次都要重复交代上下文。

与通用 AI 助手不同,有了 claude.md 后:

02

为什么需要 claude.md

提升效率

省去重复交代项目背景的对话,直接切入正题。研究表明可以减少 30% 到 50% 的沟通成本。

保持一致

确保 AI 生成的代码始终符合项目规范,不会出现今天这样写、明天那样写的情况。

知识沉淀

将项目中的隐性知识显性化,新人加入时也能快速上手。

减少错误

提前告知常见陷阱和注意事项,避免 AI 踩坑。

对比:有 vs 没有 claude.md

没有 claude.md

你:帮我写个登录功能

Claude:好的,我用 Express +
Session 来实现...

你:等等,我们项目用 Fastify +
JWT,不是 Express

Claude:抱歉,我重写...
(反复调整)

有 claude.md

你:帮我写个登录功能

Claude:好的,根据项目规范,
使用 Fastify + JWT + Prisma,
按 src/modules/ 目录结构,
包含单元测试...

(一次到位)
03

claude.md 文件结构

一个完整的 claude.md 通常包含以下几个部分:

章节 内容 重要性
项目概述 项目用途、目标用户、核心价值
技术栈 语言、框架、数据库、工具链
项目结构 目录组织方式、关键文件位置
开发规范 代码风格、命名约定、提交规范
架构决策 为什么选择某技术或模式
常用命令 构建、测试、部署命令
注意事项 常见陷阱、特殊要求

推荐顺序

  1. 项目概述 — 让 AI 快速理解项目定位
  2. 技术栈 — 明确使用的工具和版本
  3. 开发规范 — 定义好代码的标准
  4. 项目结构 — 说明组织方式
  5. 其他补充 — 根据项目特点添加
04

编写原则

1. 简洁但完整

黄金法则

控制在 200-500 行以内。优先放不常变动的信息,避免信息过载。

2. 重"为什么",轻"是什么"

不要只列文件名(Claude 能看到文件树),要解释:

3. 使用清晰的结构化格式

4. 保持更新

维护建议
  • 当新人问问题时,考虑是否该写进 claude.md
  • 技术栈变更时同步更新
  • 每季度审查一次,删除过时内容

5. 避免的内容

不要写 替代方案
敏感信息(密钥、密码) 使用 .env.example 模板
频繁变动的信息 放在代码注释或专门文档中
冗长的代码示例 引用现有文件路径
与 README 重复的内容 README 放对外信息,claude.md 放开发规范
05

模板示例

以下是通用模板,可根据项目类型选择:

Web 项目模板

# 项目概述
[项目名称] 是一个 [类型,如:电商平台/SaaS 工具],
面向 [目标用户],核心功能是 [一句话描述]。

## 技术栈
- **前端**: Next.js 14 + TypeScript + Tailwind CSS
- **后端**: Node.js + Express + tRPC
- **数据库**: PostgreSQL + Prisma ORM
- **部署**: Vercel (前端) + Railway (后端)

## 项目结构
```
src/
  components/     # React 组件(按功能模块分)
  hooks/          # 自定义 Hooks
  lib/            # 工具函数、配置
  pages/          # Next.js 页面路由
  server/         # tRPC 路由和逻辑
  styles/         # 全局样式
  types/          # TypeScript 类型定义
```

## 开发规范

### 代码风格
- 使用 TypeScript,严格模式开启
- 组件使用函数式 + Hooks
- 异步操作使用 async/await,不用回调
- 错误处理:使用自定义 Error 类,统一在 API 层处理

### 命名规范
- 组件:PascalCase(如:UserProfile.tsx)
- 函数/变量:camelCase(如:fetchUserData)
- 常量:UPPER_SNAKE_CASE
- 文件:与默认导出同名

### Git 规范
- 分支:feature/xxx, bugfix/xxx, hotfix/xxx
- 提交格式:`type: description`(如:feat: add login)
- 类型:feat, fix, docs, style, refactor, test, chore

## 常用命令
```bash
# 开发
npm run dev          # 启动开发服务器

# 构建
npm run build        # 生产构建

# 测试
npm run test         # 运行测试
npm run test:watch   # 监听模式

# 数据库
npx prisma migrate dev   # 运行迁移
npx prisma generate      # 生成客户端
```

## 重要约定
- 所有 API 调用必须通过 tRPC,不直接 fetch
- 表单验证使用 Zod,前后端共用 schema
- 图片必须使用 Next.js Image 组件
- 颜色值必须使用 Tailwind 预设,不手写 CSS

Python 项目模板

# 项目概述
[项目名称] 是一个 Python [类型,如:数据分析工具/CLI 应用]

## 技术栈
- **语言**: Python 3.11+
- **框架**: FastAPI / Django / Flask
- **数据库**: PostgreSQL / MongoDB
- **测试**: pytest
- **依赖**: Poetry / pipenv

## 项目结构
```
project/
  src/              # 源代码
  tests/            # 测试文件
  docs/             # 文档
  scripts/          # 脚本工具
  pyproject.toml    # 项目配置
```

## 开发规范

### 代码风格
- 遵循 PEP 8
- 使用 Black 格式化(行宽 88)
- 使用 isort 排序导入
- 类型注解:全部函数必须加类型提示

### 命名规范
- 类:PascalCase
- 函数/变量:snake_case
- 常量:UPPER_SNAKE_CASE
- 私有:_leading_underscore

## 常用命令
```bash
# 环境
poetry install       # 安装依赖
poetry shell         # 进入虚拟环境

# 开发
python -m src.main   # 运行应用

# 代码质量
black src tests      # 格式化
isort src tests      # 排序导入
mypy src             # 类型检查

# 测试
pytest               # 运行测试
pytest --cov=src     # 带覆盖率
```

## 架构说明
- 使用 Repository 模式处理数据访问
- 业务逻辑放在 Service 层
- API 层只处理请求/响应转换
06

实战案例

案例 1:微服务架构项目

## 服务边界
项目包含以下微服务,每个服务独立仓库:
- `api-gateway`: 统一入口,路由分发,认证
- `user-service`: 用户管理,JWT 签发
- `order-service`: 订单处理,状态机管理
- `payment-service`: 支付对接,幂等性处理

## 服务间通信
- 同步:gRPC(内部服务调用)
- 异步:RabbitMQ(事件驱动)
- 避免循环依赖,使用事件解耦

## 共享规范
- 所有服务统一使用 protobuf 定义 API
- 错误码统一格式:{code, message, details}
- 日志格式统一,包含 trace_id

案例 2:开源库/工具项目

## 项目定位
这是一个 [功能描述] 的 TypeScript 库,
追求零依赖、轻量级、TypeScript 原生支持。

## 兼容性要求
- Node.js >= 16
- 浏览器:ES2018+
- 包体积:< 5KB gzipped

## API 设计原则
- 链式调用优先
- 支持 tree-shaking
- 提供 ESM 和 CJS 两种格式
- 零运行时依赖

## 发布流程
1. 更新 CHANGELOG.md
2. 版本号遵循 SemVer
3. npm run build 生成产物
4. npm publish --access public

案例 3:AI 应用项目

## AI 集成规范
- 使用 OpenAI API,gpt-4o 模型
- 所有 Prompt 放在 prompts/ 目录,按功能分文件
- 必须实现流式响应(SSE)
- 实现 token 使用量追踪和限制

## Prompt 管理
- 使用 LangChain / 自研模板系统
- Prompt 版本化,A/B 测试时切换
- 敏感内容过滤:调用内容审核 API

## 数据处理
- 用户数据脱敏存储
- 对话历史保存最近 10 轮
- 长文本分块处理,避免超限
07

常见问题

Q: claude.md 和 README 有什么区别?

README 面向项目的使用者(如何安装、如何使用);claude.md 面向 AI 助手和开发者(如何开发、代码规范)。两者可以互补,不要完全重复。

Q: claude.md 必须用英文写吗?

可以用中文或英文,取决于你的项目语言。如果团队主要用中文,用中文写 claude.md 完全没问题,Claude 都支持。

Q: 文件名必须是 claude.md 吗?

是的,Claude Code 会自动识别项目根目录下的 claude.mdCLAUDE.md。目前不支持自定义文件名。

Q: 多个子项目怎么办?

目前 claude.md 只在项目根目录生效。建议:

  • 在根目录放一个总结性的 claude.md
  • 子项目各自维护详细文档
  • 在根 claude.md 中引用子项目文档位置
Q: 内容太长会有问题吗?

会。如果 claude.md 超过约 500 行,可能会占用太多上下文窗口,反而影响 Claude 处理其他内容的能力。保持简洁是关键。

Q: 可以动态生成 claude.md 吗?

可以。一些团队会写脚本从 package.json、pyproject.toml 等配置自动生成部分 claude.md 内容。但建议保持可读性,不要完全自动化。

小技巧

不确定 claude.md 是否生效?直接问 Claude:"你读过项目的 claude.md 吗?" 它会告诉你读取了哪些内容。

08

总结

写好 claude.md 的关键在于:提供 Claude 无法从代码中直接推断出的上下文

快速开始

1. 复制上面的模板
2. 根据你的项目填写具体内容
3. 保存为 claude.md 放在项目根目录
4. 开始享受更智能的 AI 辅助开发