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 基础
- 二、CLAUDE.md 完整结构
- 三、rules 目录组织
- 四、auto-memory 自动记忆机制
- 五、团队级配置共享
- 六、最佳实践与反模式
- 七、真实经验与踩坑
- 八、落地检查清单
- 九、总结
- 十、下篇预告
一、CLAUDE.md 基础
1.1 什么是 CLAUDE.md?
CLAUDE.md 是放置在你项目根目录(或任意子目录)中的 Markdown 文件,Claude Code 在启动时会自动读取并理解其中的内容。它相当于给 AI 智能体提供了一份"项目使用手册"。
1.2 快速开始
# 在项目根目录创建 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/ # 工具函数
## 重要约定
- 所有数据库操作必须通过 service 层
- API 响应统一使用 APIResponse 包装
- 错误使用自定义异常类
EOF1.3 自动加载机制
Claude Code 按以下顺序加载上下文文件:
1. ~/.claude/CLAUDE.md (全局上下文,可选)
2. 项目根目录/CLAUDE.md (项目级上下文)
3. 当前子目录/CLAUDE.md (目录级上下文,可选)
4. .claude/CLAUDE.md (隐藏目录,可选)多层级上下文会合并,子目录的设定优先于父目录。这种层级加载机制非常巧妙——你可以在全局配置中定义通用的编码偏好(比如"始终使用类型注解"),在项目级配置中定义项目特定的架构约束(比如"所有 API 响应必须使用统一的包装类"),在子目录级别定义模块特定的规范(比如"数据库迁移文件必须放在 migrations/ 目录")。这种灵活的层级结构使得 CLAUDE.md 既能服务于个人项目,也能适配大型团队协作。
二、CLAUDE.md 完整结构
2.1 推荐模板
# 项目名称 — 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/ 目录结构
.claude/
└── rules/
├── general.md # 通用规则
├── security.md # 安全规则
├── testing.md # 测试规则
├── documentation.md # 文档规则
└── performance.md # 性能规则3.2 规则文件示例
规则文件的设计理念是将具体的编码规范和安全要求从 CLAUDE.md 中解耦出来,实现更好的组织和管理。每个规则文件专注于一个特定的领域,这样不仅便于维护,也方便团队成员快速定位相关规范。比如,当你需要修改安全策略时,只需要编辑 .claude/rules/security.md,而不必在冗长的 CLAUDE.md 中搜索。
<!-- .claude/rules/security.md -->
# 安全规则
## 输入验证
- 所有用户输入必须经过验证
- 使用 Pydantic 模型进行请求体验证
- 禁止使用 `eval()` 或 `exec()`
## 认证与授权
- 所有 API 端点必须有认证装饰器
- 使用 JWT token 进行身份验证
- 角色权限检查在服务层完成
## 数据安全
- 密码必须使用 bcrypt 哈希
- 敏感数据不在日志中输出
- API 密钥通过环境变量管理
## SQL 安全
- 使用参数化查询
- 禁止字符串拼接 SQL
- 使用 SQLAlchemy ORM 而非原始 SQL3.3 规则优先级
.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
// .claude/settings.json
{
"memory": {
"enabled": true,
"autoSave": true,
"maxEntries": 100,
"categories": [
"architecture_decisions",
"coding_preferences",
"project_conventions",
"known_issues"
]
}
}4.3 记忆存储位置
.claude/
└── memory/
├── active.json # 当前活跃记忆
├── archive/ # 归档记忆
│ ├── 2024-01.json
│ └── 2024-02.json
└── index.json # 记忆索引4.4 记忆操作命令
# 查看当前记忆
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.json4.5 记忆类别管理
<!-- .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
# 将 CLAUDE.md 纳入版本控制
git add CLAUDE.md
git add .claude/rules/
git commit -m "feat: 添加 Claude Code 项目上下文配置"5.2 个人配置覆盖
# .gitignore — 排除个人配置
.claude/settings.json # 个人设置
.claude/memory/ # 个人记忆5.3 团队共享规则
<!-- 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 的响应质量:
# 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/ 内容:
// .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 ✅ 最佳实践
- 保持 CLAUDE.md 精炼:只包含关键信息,不要复制整个文档
- 使用结构化格式:清晰的标题层级和列表
- 定期更新:项目变化时同步更新 CLAUDE.md
- 分层组织:全局规则在 CLAUDE.md,具体规则在 rules/
- 使用示例:提供代码示例而非纯文字描述
6.4 ❌ 反模式
- 过度详细:不要把整个 README 搬过来
- 过时信息:不更新的 CLAUDE.md 比没有更糟
- 矛盾规则:CLAUDE.md 和 rules/ 中的规则冲突
- 硬编码路径:使用相对路径而非绝对路径
- 忽略团队规范:个人项目可以随意,团队项目必须统一
6.5 检查清单
#!/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 深度推理模式,识别和避免常见的提示词反模式。包含大量实战示例,涵盖代码生成、重构、调试、文档编写等场景。