想象一下:换一台电脑、重开一个会话,Claude居然还记得你项目的编码规范、团队的约定俗成——这就是Memory的价值。
前言
说个扎心的场景:
- 每次新建Claude会话,都要重新告诉它"我们项目用TypeScript"
- 团队5个人用Claude,5种不同的代码风格
- 在公司配好的习惯,回家一看全没了
Claude Code的Memory系统就是来解决这个问题的。 它能让Claude跨会话记住项目标准、团队约定和个人偏好,说白了就是——一次配置,永久生效。
本系列教程带你从零掌握Claude Code。这节课聚焦Memory系统——搞懂它,你就能真正实现"一次配置,永久生效"。
一、Memory是什么?
Memory(记忆系统)是Claude Code提供的一种持久化上下文机制。说人话就是:它不像聊天记录那样关掉就没了,而是把信息存到硬盘里,下次开新会话还能接着用。
核心价值
graph LR
A[当前会话] -->|保存| B[Memory文件系统]
B -->|下次加载| C[新会话]
C -->|使用记忆| D[高效协作]
- 项目记忆:团队共享的编码规范、架构决策、工作流程
- 个人偏好:你喜欢的代码风格、常用命令、工作习惯
- 目录级别规则:针对特定模块或子目录的特殊配置
Memory vs 临时上下文
| 特性 | Memory | 临时上下文(聊完就没) |
|---|---|---|
| 持久性 | 存硬盘,永久保存 | 关掉就没了 |
| 作用范围 | 换电脑换会话都能用 | 仅限当前对话 |
| 更新方式 | 手动写入文件 | 随对话累积 |
| 版本控制 | 可以提交到Git | 没法追踪 |
二、Memory的7个层级
Claude Code的Memory分成7个层级,优先级高的会覆盖优先级低的。理解这个很关键,不然你改的东西可能被更高优先级的覆盖掉了。
完整层级表(按优先级从高到低)
┌─────────────────────────────────────────────────────────────────┐
│ 优先级 1 (最高) Managed Policy │
│ 路径: Windows: C:\Program Files\ClaudeCode\CLAUDE.md │
│ 适用: 企业/公司强制要求的策略 │
├─────────────────────────────────────────────────────────────────┤
│ 优先级 1.5 Managed Drop-ins (v2.1.83+) │
│ 路径: managed-settings.d/ 目录下的 *.md 文件 │
│ 适用: 模块化的策略文件,按字母顺序合并加载 │
├─────────────────────────────────────────────────────────────────┤
│ 优先级 2 Project Memory │
│ 路径: ./.claude/CLAUDE.md 或 ./CLAUDE.md │
│ 适用: 团队共享的项目规范(建议提交到Git) │
├─────────────────────────────────────────────────────────────────┤
│ 优先级 3 Project Rules │
│ 路径: ./.claude/rules/*.md │
│ 适用: 模块化的路径特定规则 │
├─────────────────────────────────────────────────────────────────┤
│ 优先级 4 User Memory │
│ 路径: ~/.claude/CLAUDE.md │
│ 适用: 个人偏好(所有项目通用) │
├─────────────────────────────────────────────────────────────────┤
│ 优先级 5 User Rules │
│ 路径: ~/.claude/rules/*.md │
│ 适用: 个人规则(所有项目通用) │
├─────────────────────────────────────────────────────────────────┤
│ 优先级 6 Local Project Memory │
│ 路径: ./CLAUDE.local.md │
│ 适用: 个人项目本地覆盖(通常被Git忽略) │
├─────────────────────────────────────────────────────────────────┤
│ 优先级 7 (最低) Auto Memory │
│ 路径: ~/.claude/projects/<project>/memory/ │
│ 适用: Claude自动记录的学习笔记 │
└─────────────────────────────────────────────────────────────────┘
加载顺序图
graph TD
A[Claude启动] --> B{搜索Memory文件}
B --> C[Managed Policy]
C --> D[Managed Drop-ins]
D --> E[Project Memory]
E --> F[Project Rules]
F --> G[User Memory]
G --> H[User Rules]
H --> I[Local Memory]
I --> J[Auto Memory]
J --> K[构建上下文]
style C fill:#fce4ec
style D fill:#fce4ec
style E fill:#e1f5fe
style F fill:#e1f5fe
style G fill:#f3e5f5
style H fill:#f3e5f5
style I fill:#e8f5e9
style J fill:#fff3e0
记住这个规则:优先级高的Memory会覆盖优先级低的同名规则。比如公司的Managed Policy说"不能用console.log",那你在Project Memory里写的规则就算冲突了,也以公司的为准。
三、核心命令
3.1 /init - 新项目初始化
刚创建项目时用这个,自动生成CLAUDE.md模板:
# 进入项目目录
cd my-project
# 启动Claude并初始化
claude
/init
推荐用增强模式(多步骤引导,手把手配置):
CLAUDE_CODE_NEW_INIT=true claude
/init
3.2 /memory - 编辑Memory文件
需要对Memory进行大改时用这个:
/memory
Claude会列出可编辑的Memory文件,选哪个就在哪个里面改。
3.3 # 前缀 - 快速添加单条规则
这个是日常最实用的。在任何对话中,以#开头就能快速添加记忆:
# 使用TypeScript strict模式
# 文件命名使用kebab-case
# 提交前必须运行npm test
Claude会问你添加到哪个Memory文件。
其他等效语法:
# new rule into memory
你的规则内容
# remember this
你的规则内容
# add to memory
你的规则内容
四、导入外部文档
用@语法直接引用现有文档,不用复制粘贴,避免重复维护:
# 项目文档
参见 @README.md 了解项目概述
参见 @docs/architecture.md 了解系统架构
参见 @package.json 查看可用命令
# 从用户目录导入(绝对路径)
@~/.claude/my-project-instructions.md
支持的功能:
- 相对路径和绝对路径都行
- 可以递归导入(最多5层)
- 首次从外部位置导入会弹出安全确认
- 代码块里的
@引用不会生效(可以放心展示示例)
五、模块化规则系统
对于大项目,可以用.claude/rules/目录把规则拆分成多个文件。
目录结构示例
my-project/
├── .claude/
│ ├── CLAUDE.md # 主项目记忆
│ └── rules/
│ ├── code-style.md # 代码风格规则
│ ├── testing.md # 测试规范
│ ├── security.md # 安全要求
│ └── api/ # 子目录
│ ├── conventions.md
│ └── validation.md
~/.claude/
├── CLAUDE.md # 个人偏好
└── rules/
├── personal-style.md # 个人风格
└── preferred-patterns.md
路径特定规则
通过YAML frontmatter指定规则只在某些文件里生效:
---
paths: src/api/**/*.ts
---
# API开发规则
- 所有端点必须包含输入验证
- 使用Zod进行Schema验证
- 文档化所有参数和响应类型
支持的glob模式:
**/*.ts- 所有TypeScript文件src/**/*- src目录下的所有文件{src,lib}/**/*.ts- src和lib目录的TypeScript文件
子目录与符号链接
- 子目录:规则按递归方式发现,支持按主题分类
- 符号链接:支持链接到共享规则文件,便于多个项目共享
六、Auto Memory 自动记忆
Auto Memory是Claude自动写入的记忆,会在每次会话中持续学习和更新。
工作原理
~/.claude/projects/<project>/memory/
├── MEMORY.md # 入口文件(启动时加载前200行)
├── debugging.md # 主题文件(按需加载)
├── api-conventions.md # 主题文件(按需加载)
└── testing-patterns.md # 主题文件(按需加载)
加载时机:
MEMORY.md的前200行在会话启动时自动加载- 主题文件在需要时按需加载
控制Auto Memory
# 禁用Auto Memory
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 claude
# 强制启用Auto Memory
CLAUDE_CODE_DISABLE_AUTO_MEMORY=0 claude
自定义存储位置
// ~/.claude/settings.json 或 .claude/settings.local.json
{
"autoMemoryDirectory": "/path/to/custom/memory/directory"
}
七、大型项目:排除无关Memory
在大型monorepo中,某些CLAUDE.md可能与当前工作无关。使用claudeMdExcludes排除它们:
// ~/.claude/settings.json 或 .claude/settings.json
{
"claudeMdExcludes": [
"packages/legacy-app/CLAUDE.md",
"vendors/**/CLAUDE.md"
]
}
模式相对于项目根目录匹配。
八、实战示例
示例1:项目Memory完整配置
# 电商平台项目规范
## 项目概述
- **技术栈**: Node.js, PostgreSQL, React 18, Docker
- **团队规模**: 5人开发团队
- **发布时间**: 2025 Q4
## 开发规范
### 代码风格
- 使用Prettier格式化
- ESLint使用airbnb配置
- 最大行长度100字符
- 2空格缩进
### 命名规范
- 文件: kebab-case (user-controller.js)
- 类: PascalCase (UserService)
- 函数/变量: camelCase (getUserById)
- 常量: UPPER_SNAKE_CASE (API_BASE_URL)
### Git工作流
- 分支命名: `feature/描述` 或 `fix/描述`
- 提交信息遵循conventional commits
- 必须PR才能合并
- CI必须全部通过
- 至少1人审批
### 测试要求
- 覆盖率≥80%
- 关键路径必须测试
- 单元测试用Jest
- E2E测试用Cypress
## 架构文档
@docs/architecture.md
@docs/api-standards.md
## 常用命令
| 命令 | 用途 |
|------|------|
| npm run dev | 启动开发服务器 |
| npm test | 运行测试 |
| npm run lint | 检查代码风格 |
| npm run build | 生产构建 |
示例2:API模块特定规则
在src/api/CLAUDE.md中覆盖根目录规则:
# API模块规范
此文件覆盖根目录CLAUDE.md对本模块的规则。
## 请求验证
- 使用Zod进行Schema验证
- 必须验证输入
- 验证失败返回400并包含字段级错误详情
## 认证
- 所有端点需要JWT Token
- Token放在Authorization头
- Token 24小时后过期
## 响应格式
成功响应:
```json
{
"success": true,
"data": { /* 实际数据 */ },
"timestamp": "2025-11-06T10:30:00Z"
}
错误响应:
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "用户可读的错误信息"
}
}
### 示例3:会话中快速添加规则
```markdown
User: # 使用React Hooks而不是class组件
Claude: 我将此规则添加到记忆中。应该使用哪个Memory文件?
1. Project memory (./CLAUDE.md)
2. Personal memory (~/.claude/CLAUDE.md)
User: 1
Claude: ✅ 记忆已保存!
添加到 ./CLAUDE.md:
---
### 组件开发
- 使用函数组件配合React Hooks
- 优先使用Hooks而非class组件
- 复用逻辑使用自定义Hook
- 事件处理器使用useCallback
- 昂贵计算使用useMemo
九、最佳实践
✅ 应该做的
| 做法 | 说明 |
|---|---|
| 保持具体 | "使用2空格缩进"优于"遵循最佳实践" |
| 保持组织 | 使用清晰的Markdown结构和标题 |
| 选择正确层级 | 企业策略→Managed Policy;团队标准→Project;个人偏好→User |
| 利用导入 | 用@path/to/file引用现有文档,避免重复 |
| 版本控制 | 将项目级CLAUDE.md提交到Git |
| 定期更新 | 随着项目演进更新记忆内容 |
❌ 避免做的
| 做法 | 说明 |
|---|---|
| 存储密钥 | 永远不要在Memory中放API密钥、密码、token |
| 存储敏感信息 | 不要放PII或私有信息 |
| 复制已有内容 | 用@导入而非复制文档内容 |
| 过于模糊 | 避免"遵循最佳实践"这类笼统表述 |
| 文件过长 | 单个Memory文件建议控制在500行以内 |
| 过度组织 | 不要创建过多的子目录覆盖 |
层级选择指南
| 使用场景 | 推荐层级 | 原因 |
|---|---|---|
| 企业安全策略 | Managed Policy | 全组织强制执行 |
| 团队代码规范 | Project | 通过Git团队共享 |
| 个人编辑器快捷键 | User | 个人偏好,不共享 |
| API模块标准 | 目录级 | 仅对该模块生效 |
十、常见问题
Q: Memory文件太多会不会影响性能?
A: Claude会智能加载相关Memory。使用claudeMdExcludes可以排除无关文件。
Q: 如何在团队中推广项目Memory?
A: 将CLAUDE.md提交到Git,确保git clone后即可使用。新成员首次运行/init会自动加载。
Q: Auto Memory和手动Memory的区别?
A: Auto Memory由Claude自动写入,记录它发现的模式;手动Memory由你维护,明确表达项目规范。两者可互补。
Q: 可以在子目录创建Memory吗?
A: 可以。子目录的CLAUDE.md会覆盖父目录的规则,实现路径特定的配置。
总结
Memory系统是Claude Code实现持久化协作的核心。掌握以下要点:
- 理解层级:Managed Policy > Project > User > Auto Memory
- 使用正确命令:
/init初始化,/memory编辑,#快速添加 - 选择合适层级:团队标准放Project,个人偏好放User
- 善用导入:
@语法避免重复维护 - 模块化规则:复杂项目使用
.claude/rules/结构化
下一课我们将学习Skills(技能系统),这是实现自动化工作流的关键。