`CLAUDE.md` 是 Claude Code 的项目级上下文配置文件,允许开发者为项目定义规范、编码约定、架构说明和智能体行为规则。本文将深入探讨 CLAUDE.md 的结构设计、rules 目录的组织方式、auto-memory 自动记忆机制,以及如何在团队项目中建立一致的智能体行为规范。

CLAUDE.md 项目上下文 — 项目规范记忆、rules 目录与 auto-memory

简介

CLAUDE.md 是 Claude Code 的项目级上下文配置文件,允许开发者为项目定义规范、编码约定、架构说明和智能体行为规则。本文将深入探讨 CLAUDE.md 的结构设计、rules 目录的组织方式、auto-memory 自动记忆机制,以及如何在团队项目中建立一致的智能体行为规范。

想象一下,每次你启动 Claude Code 时,它都能"记住"你项目的架构设计、编码规范和团队约定——不需要你每次都重复解释。这就是 CLAUDE.md 的核心价值。它相当于给你的项目编写了一份"AI 使用手册",让 Claude Code 从一开始就站在你的项目上下文中思考问题,而不是从零开始理解。

在团队开发场景中,CLAUDE.md 的作用更加突出。当所有开发者共享同一份项目上下文时,无论谁启动 Claude Code,得到的回答都会遵循相同的编码规范和架构原则。这种一致性对于维护代码质量和团队协作效率至关重要。

目录

一、CLAUDE.md 基础

1.1 什么是 CLAUDE.md?

CLAUDE.md 是放置在你项目根目录(或任意子目录)中的 Markdown 文件,Claude Code 在启动时会自动读取并理解其中的内容。它相当于给 AI 智能体提供了一份"项目使用手册"。

1.2 快速开始

bash
# 在项目根目录创建 CLAUDE.md
cat > CLAUDE.md << 'EOF'
# 项目上下文

## 项目概述
这是一个基于 FastAPI 的用户管理系统,使用 PostgreSQL 作为数据库。

## 技术栈
- Python 3.11+
- FastAPI
- SQLAlchemy 2.0
- PostgreSQL 15
- Pydantic v2

## 编码规范
- 使用类型注解
- 函数不超过 50 行
- 每个公开方法必须有 docstring
- 使用 ruff 进行 linting

## 目录结构

src/ ├── api/ # API 路由 ├── models/ # 数据模型 ├── services/ # 业务逻辑 └── utils/ # 工具函数

text

## 重要约定
- 所有数据库操作必须通过 service 层
- API 响应统一使用 APIResponse 包装
- 错误使用自定义异常类
EOF

1.3 自动加载机制

Claude Code 按以下顺序加载上下文文件:

text
1. ~/.claude/CLAUDE.md          (全局上下文,可选)
2. 项目根目录/CLAUDE.md         (项目级上下文)
3. 当前子目录/CLAUDE.md         (目录级上下文,可选)
4. .claude/CLAUDE.md            (隐藏目录,可选)

多层级上下文会合并,子目录的设定优先于父目录。这种层级加载机制非常巧妙——你可以在全局配置中定义通用的编码偏好(比如"始终使用类型注解"),在项目级配置中定义项目特定的架构约束(比如"所有 API 响应必须使用统一的包装类"),在子目录级别定义模块特定的规范(比如"数据库迁移文件必须放在 migrations/ 目录")。这种灵活的层级结构使得 CLAUDE.md 既能服务于个人项目,也能适配大型团队协作。

二、CLAUDE.md 完整结构

2.1 推荐模板

markdown
# 项目名称 — Claude Code 上下文

## 📋 项目概述
[一句话描述项目是什么]

## 🏗️ 架构概览
[高层架构描述,包含关键组件和数据流]

## 🛠️ 技术栈
- **语言**: [语言及版本]
- **框架**: [框架及版本]
- **数据库**: [数据库类型]
- **工具**: [linting、测试、构建工具]

## 📁 目录结构
```
project/
├── src/
│   ├── api/          # REST API 路由
│   ├── models/       # 数据模型定义
│   ├── services/     # 业务逻辑层
│   ├── schemas/      # Pydantic 模式
│   └── config/       # 配置管理
├── tests/
│   ├── unit/         # 单元测试
│   ├── integration/  # 集成测试
│   └── fixtures/     # 测试夹具
├── docs/             # 文档
└── scripts/          # 运维脚本
```

## 📝 编码规范

### 命名约定
- 变量: snake_case
- 类: PascalCase
- 常量: UPPER_SNAKE_CASE
- 私有方法: _leading_underscore

### 代码风格
- 行长度限制: 120 字符
- 使用类型注解
- 每个模块以 docstring 开头
- 函数不超过 50 行

### Git 提交规范
```
<type>(<scope>): <description>

feat(auth): add JWT token refresh
fix(api): handle null pointer in user endpoint
docs(readme): update installation instructions
```

## 🔧 开发工作流

### 环境设置
```bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
```

### 运行测试
```bash
pytest tests/ -v --cov=src
```

### 代码质量检查
```bash
ruff check src/
mypy src/
```

## ⚠️ 重要注意事项
- 不要直接修改数据库,使用迁移脚本
- 所有 API 变更必须更新 OpenAPI 文档
- 敏感配置通过环境变量注入

三、rules 目录组织

3.1 .claude/rules/ 目录结构

text
.claude/
└── rules/
    ├── general.md          # 通用规则
    ├── security.md         # 安全规则
    ├── testing.md          # 测试规则
    ├── documentation.md    # 文档规则
    └── performance.md      # 性能规则

3.2 规则文件示例

规则文件的设计理念是将具体的编码规范和安全要求从 CLAUDE.md 中解耦出来,实现更好的组织和管理。每个规则文件专注于一个特定的领域,这样不仅便于维护,也方便团队成员快速定位相关规范。比如,当你需要修改安全策略时,只需要编辑 .claude/rules/security.md,而不必在冗长的 CLAUDE.md 中搜索。

markdown
<!-- .claude/rules/security.md -->
# 安全规则

## 输入验证
- 所有用户输入必须经过验证
- 使用 Pydantic 模型进行请求体验证
- 禁止使用 `eval()``exec()`

## 认证与授权
- 所有 API 端点必须有认证装饰器
- 使用 JWT token 进行身份验证
- 角色权限检查在服务层完成

## 数据安全
- 密码必须使用 bcrypt 哈希
- 敏感数据不在日志中输出
- API 密钥通过环境变量管理

## SQL 安全
- 使用参数化查询
- 禁止字符串拼接 SQL
- 使用 SQLAlchemy ORM 而非原始 SQL

3.3 规则优先级

text
.claude/rules/ 目录中的规则按以下优先级应用:

1. 目录级规则(最具体)
   .claude/rules/src/api/security.md

2. 通用规则
   .claude/rules/security.md

3. CLAUDE.md 中的内联规则
   CLAUDE.md 中的编码规范部分

四、auto-memory 自动记忆机制

4.1 什么是 auto-memory?

auto-memory 是 Claude Code 的上下文记忆功能,允许智能体在会话间记住关键信息,如项目决策、架构变更、用户偏好等。这一机制的核心价值在于"跨会话知识积累"——Claude 不再是一个每次启动都"失忆"的助手,而是随着使用时间的增长,越来越了解你的项目和偏好。

auto-memory 的实现基于一个结构化的记忆存储系统,它将记忆分为多个类别(架构决策、编码偏好、项目约定、已知问题等),每个记忆条目都带有时间戳和来源标记。当 Claude 在后续会话中需要参考这些信息时,它会根据当前任务的上下文自动检索相关记忆,并将其融入到回答中。

4.2 启用 auto-memory

json
// .claude/settings.json
{
  "memory": {
    "enabled": true,
    "autoSave": true,
    "maxEntries": 100,
    "categories": [
      "architecture_decisions",
      "coding_preferences",
      "project_conventions",
      "known_issues"
    ]
  }
}

4.3 记忆存储位置

text
.claude/
└── memory/
    ├── active.json         # 当前活跃记忆
    ├── archive/            # 归档记忆
    │   ├── 2024-01.json
    │   └── 2024-02.json
    └── index.json          # 记忆索引

4.4 记忆操作命令

bash
# 查看当前记忆
claude memory list

# 添加记忆
claude memory add "项目使用 UUID 作为主键"

# 搜索记忆
claude memory search "主键"

# 删除记忆
claude memory delete <memory-id>

# 导出记忆
claude memory export > memory-backup.json

# 导入记忆
claude memory import memory-backup.json

4.5 记忆类别管理

markdown
<!-- .claude/memory/categories.md -->

# 记忆分类

## architecture_decisions
- 为什么选择 FastAPI 而非 Flask
- 数据库分片策略
- 缓存层设计方案

## coding_preferences
- 偏好函数式编程风格
- 使用 dataclass 而非 dict
- 异步优先于同步

## project_conventions
- 错误处理使用 try/except 而非 if/else
- 日志使用结构化 JSON 格式
- API 版本通过 URL 路径管理

## known_issues
- 用户模块存在竞态条件(计划 2024 Q2 修复)
- 文件上传大小限制为 10MB

五、团队级配置共享

5.1 Git 追踪 CLAUDE.md

bash
# 将 CLAUDE.md 纳入版本控制
git add CLAUDE.md
git add .claude/rules/
git commit -m "feat: 添加 Claude Code 项目上下文配置"

5.2 个人配置覆盖

bash
# .gitignore — 排除个人配置
.claude/settings.json     # 个人设置
.claude/memory/           # 个人记忆

5.3 团队共享规则

markdown
<!-- CLAUDE.md 中的团队协作部分 -->

## 🤝 团队协作

### 审查规则
- PR 必须通过自动审查
- 至少一名团队成员 approve
- CI 全部通过才能合并

### 沟通约定
- 重大架构变更需在 PR 描述中说明原因
- 使用 Conventional Commits
- 功能分支命名: `feat/feature-name`

### Claude Code 协作
- 所有开发者使用相同的 CLAUDE.md
- 个人偏好写入 .claude/settings.json(不提交)
- 团队规则写入 .claude/rules/(提交到 Git)

六、最佳实践与反模式

6.1 @import 语法:拆分大型 CLAUDE.md(v2.1+ 新特性)

当 CLAUDE.md 超过 200 行时,推荐使用 @import 语法将内容拆分到子文件,按需引入。这样可以避免上下文过大影响 Claude Code 的响应质量:

markdown
# CLAUDE.md

## 项目概述
这是一个基于 FastAPI 的用户管理系统...

## 技术规范
@import .claude/rules/coding-standards.md
@import .claude/rules/security.md
@import .claude/rules/testing.md

## 架构说明
@import docs/architecture.md

@import 规则

  • 被引用文件的路径必须相对于 CLAUDE.md 所在目录
  • 支持多级嵌套引用(但建议不超过 2 层)
  • 被引用的文件也会被 Claude Code 读取并理解
  • 建议将 CLAUDE.md 本体控制在 200 行以内,详细规则拆分到子文件

6.2 团队共享规则新特性(v2.1.154+)

v2.1.154 引入了团队级别的规则共享机制,允许管理员统一管理团队的 .claude/rules/ 内容:

json
// .claude/settings.json — 团队规则同步配置
{
  "teamRules": {
    "source": "https://github.com/company/claude-rules",
    "branch": "main",
    "sync": "auto",
    "includes": ["security.md", "coding-standards.md"]
  }
}

团队规则 vs 项目规则

类型 位置 谁管理 覆盖范围
项目规则 .claude/rules/*.md 项目团队 单个项目
团队规则 团队仓库同步 IT 管理员 所有团队项目
全局规则 ~/.claude/CLAUDE.md 个人开发者 个人所有项目

团队规则会自动同步到每个成员的本地配置,确保全团队的 Claude Code 行为一致性。

6.3 ✅ 最佳实践

  1. 保持 CLAUDE.md 精炼:只包含关键信息,不要复制整个文档
  2. 使用结构化格式:清晰的标题层级和列表
  3. 定期更新:项目变化时同步更新 CLAUDE.md
  4. 分层组织:全局规则在 CLAUDE.md,具体规则在 rules/
  5. 使用示例:提供代码示例而非纯文字描述

6.4 ❌ 反模式

  1. 过度详细:不要把整个 README 搬过来
  2. 过时信息:不更新的 CLAUDE.md 比没有更糟
  3. 矛盾规则:CLAUDE.md 和 rules/ 中的规则冲突
  4. 硬编码路径:使用相对路径而非绝对路径
  5. 忽略团队规范:个人项目可以随意,团队项目必须统一

6.5 检查清单

bash
#!/bin/bash
# check-claude-config.sh — 检查 CLAUDE.md 配置质量

echo "🔍 检查 CLAUDE.md 配置..."

# 检查文件是否存在
if [ ! -f "CLAUDE.md" ]; then
  echo "❌ CLAUDE.md 不存在"
  exit 1
fi

# 检查必需部分
required_sections=("项目概述" "技术栈" "编码规范" "目录结构")
for section in "${required_sections[@]}"; do
  if grep -q "$section" CLAUDE.md; then
    echo "✅ 找到: $section"
  else
    echo "⚠️ 缺失: $section"
  fi
done

# 检查 rules 目录
if [ -d ".claude/rules" ]; then
  rule_count=$(find .claude/rules -name "*.md" | wc -l)
  echo "✅ rules 目录存在,包含 $rule_count 个规则文件"
else
  echo "⚠️ .claude/rules 目录不存在"
fi

# 检查文件大小
size=$(wc -c < CLAUDE.md)
if [ $size -gt 20000 ]; then
  echo "⚠️ CLAUDE.md 过大 (${size} bytes),建议精简"
else
  echo "✅ CLAUDE.md 大小合理 (${size} bytes)"
fi

echo "✅ 检查完成"

七、真实经验与踩坑

7.1 经验 1:CLAUDE.md 过大导致上下文浪费

  • 场景:项目的 CLAUDE.md 超过 500 行,包含大量详细的编码规范和架构说明
  • 问题:Claude Code 每次会话都会读取全部内容,占用大量 Token,导致核心任务可用上下文不足
  • 解决方案:使用 @import 语法将 CLAUDE.md 控制在 200 行以内,详细规则拆分到 .claude/rules/ 子文件按需引入

7.2 经验 2:团队规范不统一导致 Claude 行为不一致

  • 场景:不同团队成员本地有各自风格的 CLAUDE.md,生成的代码风格差异很大
  • 问题:个人偏好配置被误提交到 Git,污染了项目级规范
  • 解决方案:团队规则同步机制(v2.1.154+)统一管理规范,个人偏好写入 .claude/settings.json 并通过 .gitignore 排除

八、落地检查清单

  • 项目根目录存在 CLAUDE.md 且包含项目概述、技术栈、编码规范
  • CLAUDE.md 本体不超过 200 行,超出部分用 @import 拆分
  • @import 引用的文件路径正确且文件存在
  • 规则文件已按领域拆分到 .claude/rules/ 目录
  • CLAUDE.md 已提交到 Git 版本控制
  • 个人偏好配置通过 .gitignore 排除
  • 子目录(如 src/api/)有模块特定的 CLAUDE.md
  • 团队统一使用相同的 CLAUDE.md 规范

九、总结

CLAUDE.md.claude/rules/ 是 Claude Code 项目级配置的核心机制。通过合理组织上下文信息,你可以让 AI 智能体更好地理解项目规范、编码约定和团队规则。auto-memory 机制则让智能体具备跨会话的记忆能力,随着使用时间的增长,智能体会变得越来越“懂”你的项目。

关键要点:

  • CLAUDE.md 按层级自动加载,子目录覆盖父目录
  • rules/ 目录用于组织具体规则文件
  • @import 语法可将大型 CLAUDE.md 拆分到子文件(建议本体 ≤ 200 行)
  • auto-memory 提供跨会话记忆能力
  • 团队项目中 CLAUDE.md 应纳入版本控制
  • v2.1.154+ 支持团队级规则同步,确保全团队行为规范一致
  • 个人配置通过 .gitignore 排除

十、下篇预告

提示词工程深度指南 — 学习如何编写高质量的结构化指令,掌握 ultrathink 深度推理模式,识别和避免常见的提示词反模式。包含大量实战示例,涵盖代码生成、重构、调试、文档编写等场景。