Sooua
登录
返回文章列表
Claude Code··9 分钟阅读

配置 CLAUDE.md:让 AI 记住项目规范

CLAUDE.md 是一个特殊的 Markdown 文件,放在项目根目录的 .claude/ 文件夹中(或项目根目录)。Claude 会在每个会话开始时自动读取它,作为项目级别的系统提示。

目标:使用 CLAUDE.md 定制 Claude 的行为,使其更懂你的项目
预计时间:25 分钟
对应官方文档:MemoryClaude Directory


什么是 CLAUDE.md?

CLAUDE.md 是一个特殊的 Markdown 文件,放在项目根目录的 .claude/ 文件夹中(或项目根目录)。Claude 会在每个会话开始时自动读取它,作为项目级别的系统提示

你可以把它理解为:

  • 📋 项目规范说明书
  • 🎯 编码风格指南
  • 🔧 常用命令速查
  • 🧠 项目背景知识

创建 CLAUDE.md

位置

你的项目/
├── .claude/
│   └── CLAUDE.md          # 项目级配置(推荐)
├── src/
├── tests/
└── README.md

或直接在根目录:

你的项目/
├── CLAUDE.md              # 也支持
├── src/
└── ...

基本结构

# 项目规范
 
## 项目概述
这是一个 Python Web API 项目,使用 FastAPI 框架。
 
## 编码规范
- 使用 Black 格式化代码
- 类型注解必须完整
- 函数文档使用 Google Style
- 测试覆盖率要求 80%+
 
## 常用命令
```bash
# 运行测试
pytest tests/ -v --cov=src
 
# 代码检查
black src/ && flake8 src/
 
# 启动开发服务器
uvicorn main:app --reload

架构约定

  • 路由放在 src/routes/
  • 模型放在 src/models/
  • 服务层放在 src/services/
  • 不要在路由里写业务逻辑

注意事项

  • 数据库使用 PostgreSQL,不要假设 SQLite
  • 所有 API 响应必须包含 request_id
  • 敏感操作需要记录审计日志

---

## 实际效果

配置了 CLAUDE.md 后,当你说:

添加一个用户注册的 API 端点


Claude 会自动:
- ✅ 使用 FastAPI 风格
- ✅ 添加完整的类型注解
- ✅ 编写 Google Style 文档字符串
- ✅ 把路由放在 `src/routes/`
- ✅ 业务逻辑放在 `src/services/`
- ✅ 包含 `request_id` 和审计日志

**不需要每次都重复说明!**

---

## 高级配置

### 分层配置

大型项目可以使用多层 CLAUDE.md:

项目根目录/ ├── .claude/ │ └── CLAUDE.md # 全局规范 ├── backend/ │ └── .claude/ │ └── CLAUDE.md # 后端特有规范 ├── frontend/ │ └── .claude/ │ └── CLAUDE.md # 前端特有规范 └── shared/ └── .claude/ └── CLAUDE.md # 共享模块规范


Claude 会按层级合并配置,子目录的规范会覆盖父目录的冲突项。

---

### 条件配置

```markdown
## 环境判断

如果项目包含 `pyproject.toml`,使用 Poetry 管理依赖。
如果项目包含 `package.json`,使用 npm/yarn/pnpm(检查 lock 文件确定)。

## 测试策略
- Python 项目:pytest + coverage
- JavaScript 项目:Jest + React Testing Library

包含文件

## 参考文档
- @docs/architecture.md    # 架构文档
- @docs/api-spec.md        # API 规范
- @CONTRIBUTING.md         # 贡献指南

Auto Memory(自动记忆)

除了手动编写 CLAUDE.md,Claude 还会自动积累记忆

> 我们总是把错误处理放在 service 层,不是路由层

[Claude 记住这个偏好]

这些自动记忆存储在:

~/.claude/memory/          # 用户级记忆
项目/.claude/memory/        # 项目级记忆

管理自动记忆

> /memory show              # 查看当前记忆
> /memory forget <id>       # 删除某条记忆
> /memory clear             # 清空所有记忆

最佳实践

✅ 推荐❌ 避免
简洁明了,重点突出过长(超过 200 行效果递减)
具体示例,而非抽象描述模糊的"写好代码"
常用命令直接可复制只写命令名不写参数
项目特有的约束通用的 Python/JS 知识
定期更新创建后不再维护

验证配置生效

> /context

[查看输出中的 "Project Instructions" 部分]

或:

> 请复述一下项目的编码规范

如果 Claude 能准确说出你的规范,说明配置生效。


示例:完整 CLAUDE.md

# MyProject 开发规范
 
## 技术栈
- Python 3.11+
- FastAPI + SQLAlchemy 2.0
- PostgreSQL 15
- pytest + httpx
 
## 代码风格
```python
# 所有函数必须有类型注解
def get_user(user_id: UUID, db: Session) -> User | None:
    """Get user by ID.
    
    Args:
        user_id: The user's UUID.
        db: Database session.
        
    Returns:
        User object or None if not found.
    """

提交规范

  • 使用 Conventional Commits
  • feat: 新功能
  • fix: 修复
  • refactor: 重构
  • test: 测试

禁止事项

  • 不要在代码中硬编码密码
  • 不要直接返回 SQLAlchemy 模型,使用 Pydantic schema
  • 不要在循环中查询数据库(使用 join)

---

## 补充:CLAUDE.md 工作流程与实战

### CLAUDE.md 加载与合并流程

```mermaid
flowchart TD
    A[启动 Claude Code] --> B{发现 .claude/CLAUDE.md?}
    B -->|是| C[读取项目级 CLAUDE.md]
    B -->|否| D{发现根目录 CLAUDE.md?}
    D -->|是| E[读取根目录 CLAUDE.md]
    D -->|否| F[使用默认行为]
    C --> G{当前目录有子级 CLAUDE.md?}
    E --> G
    G -->|是| H[逐层合并配置]
    G -->|否| I[加载完成]
    H --> I
    F --> I
    I --> J[会话开始,AI 遵循项目规范]

完整配置示例

示例 1:前端 React + TypeScript 项目完整 CLAUDE.md

# Frontend 开发规范
 
## 技术栈
- React 18 + TypeScript 5.3
- Vite 5 + pnpm
- Tailwind CSS + shadcn/ui
- React Query + Zustand
- Vitest + React Testing Library
- Playwright E2E
 
## 目录结构

src/ components/ # 通用组件(只收无状态/低状态) features/ # 功能模块(含业务逻辑) hooks/ # 通用 hooks lib/ # 工具函数 services/ # API 层 stores/ # 全局状态 types/ # 全局类型


## 编码规范
1. 所有组件使用函数式 + hooks
2. Props 必须有 interface,命名 `XXXProps`
3. 异步逻辑必须放在 React Query 或自定义 hook 中
4. 禁止在 JSX 中写内联对象/函数(避免引用不稳定)
5. 样式优先用 Tailwind,复杂样式用 CSS Modules

## 常用命令
```bash
# 安装依赖
pnpm install

# 启动开发服务器
pnpm dev

# 运行单元测试
pnpm test

# 运行 E2E 测试
pnpm e2e

# 类型检查
pnpm typecheck

# 构建
pnpm build

提交规范

使用 Conventional Commits:

  • feat: 新功能
  • fix: Bug 修复
  • refactor: 重构(无行为变更)
  • test: 测试相关
  • chore: 构建/工具

API 调用规范

// 统一使用 services 层
import { fetchUser } from '@/services/user';
 
// 组件中只使用 hook
const { data, isLoading } = useQuery({
  queryKey: ['user', userId],
  queryFn: () => fetchUser(userId),
});

禁止事项

  • 不要使用 any 类型(必须用 unknown + 类型守卫)
  • 不要直接调用 fetch/axios(使用 services 层封装)
  • 不要在组件中直接修改 Zustand store
  • 不要引入未评审的第三方库

#### 示例 2:分层配置实战(Monorepo)

my-monorepo/ ├── .claude/ │ └── CLAUDE.md # 全局:通用提交规范、沟通语言 ├── apps/ │ ├── web/ │ │ └── .claude/ │ │ └── CLAUDE.md # 前端:React、Next.js 规范 │ └── api/ │ └── .claude/ │ └── CLAUDE.md # 后端:FastAPI、SQLAlchemy 规范 ├── packages/ │ └── shared/ │ └── .claude/ │ └── CLAUDE.md # 共享库:TypeScript 库开发规范


根目录 `.claude/CLAUDE.md`:
```markdown
# Monorepo 全局规范

## 通用约定
- 使用 pnpm workspaces
- 所有包统一用 ESM
- 提交前必须跑 `pnpm lint` 和 `pnpm test`
- 代码风格:Prettier + ESLint(根配置)

## 分支策略
- main:生产分支
- develop:集成分支
- feature/*:功能分支

## 常用命令
```bash
# 安装所有依赖
pnpm install

# 构建全部包
pnpm build

# 测试全部包
pnpm test

#### 示例 3:条件配置 + 文件引用

```markdown
# 智能项目规范

## 环境判断
- 如果存在 `pyproject.toml` → Python 项目,使用 Poetry
- 如果存在 `package.json` → Node 项目,使用 pnpm(优先)或 npm
- 如果存在 `Cargo.toml` → Rust 项目,使用 cargo

## 语言特定规范
### Python
- 类型注解必须完整
- 使用 Ruff 替代 flake8 + black
- 测试用 pytest

### JavaScript/TypeScript
- 严格模式开启
- 优先使用 `const`,少用 `let`,禁用 `var`
- 异步优先 async/await

## 参考文档
- @docs/architecture.md    # 架构决策记录
- @docs/api-spec.md        # 接口契约
- @CONTRIBUTING.md         # 贡献者指南
- @SECURITY.md             # 安全政策

## 自动触发规则
当用户说"添加 API"时:
1. 先检查是 Python 还是 Node 项目
2. 遵循对应语言的目录结构
3. 同时生成对应的测试文件
4. 更新接口文档(如果存在)

实战场景

场景一:团队规范统一(多人协作项目)

背景:一个 8 人团队维护 Python 后端项目,经常因为代码风格不一致、测试写法各异导致 Code Review 效率低下,甚至出现遗漏类型注解的情况。

步骤

  1. 技术负责人编写 .claude/CLAUDE.md,明确编码风格、测试要求、目录结构
  2. 将文件提交到 Git,要求所有成员拉取
  3. 每位开发者在本地启动 Claude Code 时自动加载规范
  4. 在规范中写明"每次生成功能代码必须同时生成 pytest 测试"

结果

  • AI 生成的代码自动符合团队风格,减少 60% 的风格类 Review 意见
  • 新成员无需阅读冗长文档,通过 CLAUDE.md 即可让 AI 按团队习惯编码
  • 类型注解覆盖率从 45% 提升到 92%

场景二:遗留项目改造(老项目接入 AI 辅助)

背景:一个 5 年前的 Django 项目,无类型注解、无测试、目录混乱。团队希望借助 Claude Code 逐步现代化,但担心 AI 不了解项目历史约束。

步骤

  1. 在项目根目录创建 CLAUDE.md,开篇说明"这是遗留项目,正在渐进式改造"
  2. 列出当前技术债务:Django 3.2、无类型注解、使用函数视图而非 CBV
  3. 规定改造原则:
    • 新功能必须用基于类的视图
    • 修改旧文件时,只给新增/修改的函数加类型注解
    • 不要一次性重构整个模块
  4. 记录业务约束:某些表字段命名历史原因不符合规范,不要重命名

结果

  • AI 不会盲目按最新最佳实践推倒重来,避免破坏现有功能
  • 逐步改造过程中,每个新功能都自动符合现代 Django 写法
  • 团队成员无需每次重复说明"这是老项目,请注意..."

下一步

02. 会话管理与多项目切换

分享

评论

登录 后参与讨论。

加载中…

相关文章