Claude Code 每次会话从空白开始。但两个机制让 Claude 跨会话「记忆」:你写的 CLAUDE.md 和 Claude 自己写的 Auto Memory。
两个记忆系统的分工
| CLAUDE.md | Auto Memory | |
|---|---|---|
| 谁来写 | 你 | Claude 自动 |
| 写什么 | 项目规范、工作流指令 | 构建命令、调试发现、你的偏好 |
| 何时加载 | 每次会话开始(全量) | 每次会话(MEMORY.md 前 200 行) |
| 用于 | 主动指导行为 | 积累项目知识 |
原则:CLAUDE.md 写「Claude 应该怎么做」,Auto Memory 让 Claude 自动积累「这个项目怎么运转」。
CLAUDE.md 的四种作用域
组织级(不可被用户排除)
macOS: /Library/Application Support/ClaudeCode/CLAUDE.md
Linux: /etc/claude-code/CLAUDE.md
项目级(提交到 git,团队共享)
./CLAUDE.md
./.claude/CLAUDE.md
用户级(个人习惯,所有项目生效)
~/.claude/CLAUDE.md
本地个人(加进 .gitignore)
./CLAUDE.local.md
写有效指令的 4 个原则
1. 具体不抽象
markdown
# 差的
- 格式化代码
- 好好测试
# 好的
- 用 2 空格缩进
- 提交前运行 npm test
- API handler 放 src/api/handlers/,不直接写在路由里2. 控制在 200 行以内
超过 200 行遵守程度下降。大文件用 @import 拆分:
markdown
项目概览见 @README.md
API 规范见 @docs/api-conventions.md
Git 工作流见 @docs/git-workflow.md3. 不要用 CLAUDE.md 当 linter
markdown
# 不要放进去(ESLint/Prettier 管这些)
- 用 2 空格缩进
- import 按字母排序4. 不要放一次性任务的指令
一次性任务的指令会影响后续每个会话。一次性指令放在对话提示词里。
.claude/rules/:路径感知规则
当项目不同区域有不同规范时,用路径感知规则,只在处理相关文件时加载:
.claude/
rules/
api-design.md # 无 paths,所有文件生效
frontend/react.md # 有 paths,只对 React 文件生效
backend/database.md # 有 paths,只对 DB 相关文件生效
路径感知规则示例:
markdown
---
paths:
- "src/api/**/*.ts"
- "lib/handlers/*.ts"
---
# API 规范
- 所有 endpoint 必须有输入验证
- 统一错误格式:{ error: string, code: number }
- 必须有 OpenAPI 注释支持的 glob 模式:
| 模式 | 匹配 |
|---|---|
**/*.ts | 所有 TypeScript 文件 |
src/**/* | src/ 下所有文件 |
src/**/*.{ts,tsx} | ts 和 tsx 同时匹配 |
Auto Memory:Claude 自己记的笔记
Claude 自动记录有价值的信息:
- 项目的构建命令(
npm run dev:full而不是npm run dev) - 调试发现(这个 bug 是 race condition)
- 你的偏好(用户喜欢 functional 风格)
存储位置:~/.claude/projects/<git-repo-name>/memory/MEMORY.md
手动触发记忆:
text
记住:我们的项目用 pnpm,不是 npm
记住:数据库迁移必须先在 staging 跑如果想加到 CLAUDE.md 而不是 Auto Memory:
text
把这条加到 CLAUDE.md:API rate limit 是 100 次/分钟查看记忆:
bash
/memory # 显示加载的所有文件 + Auto Memory 管理Auto Memory 的限制
- 只加载 MEMORY.md 前 200 行(或 25KB)
- 详细内容自动拆成独立文件(debugging.md、patterns.md),按需读取
- 机器本地,不同机器之间不共享
排查:Claude 为什么没遵守 CLAUDE.md
bash
/memory # 确认文件在列表里不在列表 → Claude 看不到。常见原因:
- 文件路径错误
- 指令太模糊(「好好测试」不如「运行 npm test」)
- 两条指令有矛盾
来源:Claude Code Memory 官方文档 | 整理:ClaudeEagle