Claude Code 的记忆系统由两个互补机制构成:你写的 CLAUDE.md 文件(给 Claude 的持久指令),和 Claude 自动写的 Auto Memory(从你的纠正和偏好中学习)。两者在每次会话开始时都会加载。
CLAUDE.md vs Auto Memory 对比
| 维度 | CLAUDE.md 文件 | Auto Memory |
|---|---|---|
| 谁写 | 你 | Claude 自动 |
| 内容 | 指令和规则 | 学习和模式 |
| 作用范围 | 项目、用户或组织 | 按工作目录树 |
| 加载方式 | 每次会话完整加载 | 每次会话加载前 200 行 |
| 适合放什么 | 编码规范、工作流、架构决策 | 构建命令、调试洞察、Claude 发现的偏好 |
CLAUDE.md 文件系统
四个作用域
| 作用域 | 位置 | 用途 | 共享对象 |
|---|---|---|---|
| Managed policy | macOS: /Library/Application Support/ClaudeCode/CLAUDE.md<br>Linux/WSL: /etc/claude-code/CLAUDE.md<br>Windows: C:\Program Files\ClaudeCode\CLAUDE.md | 组织统一策略 | 组织所有用户 |
| Project instructions | ./CLAUDE.md 或 ./.claude/CLAUDE.md | 项目团队规范 | 通过版本控制共享给团队 |
| User instructions | ~/.claude/CLAUDE.md | 个人偏好,适用于所有项目 | 仅自己(所有项目) |
| Local instructions | ./CLAUDE.local.md | 个人项目特定偏好,不提交 git | 仅自己(当前项目) |
更具体的位置优先级更高:Local > Project > User > Managed。
快速创建项目 CLAUDE.md
/initClaude 分析代码库,自动生成包含构建命令、测试指令和项目约定的 CLAUDE.md。若文件已存在,只给出改进建议,不会覆盖。
编写高效指令的 4 条原则
1. 控制大小(< 200 行)
CLAUDE.md 每次会话都消耗 Token。目标每个文件 200 行以内;超出时用 imports 或 .claude/rules/ 拆分。
2. 结构化
用 Markdown 标题和列表分组相关指令。Claude 扫描结构的方式和读者相同:有组织的章节比密集段落更易遵循。
3. 具体可验证
# 好的写法
- 使用 2 空格缩进
- 提交前运行 `npm test`
- API handler 放在 `src/api/handlers/`
# 不好的写法
- 规范地格式化代码
- 测试你的变更
- 保持文件有序4. 保持一致
若两条规则互相矛盾,Claude 可能随机选一条。定期审查 CLAUDE.md、嵌套子目录的 CLAUDE.md 和 .claude/rules/ 文件,移除过时或冲突的指令。
导入其他文件(@ 语法)
# CLAUDE.md
参见 @README 了解项目概览,@package.json 查看可用 npm 命令。
# 额外指令
- git 工作流:@docs/git-instructions.md- 相对路径相对于包含 @ 语法的文件,而非工作目录
- 最多递归 5 层
- 首次遇到外部 imports 时,会显示批准对话框;拒绝后不再提示
跨 worktree 共享个人指令:
# CLAUDE.local.md
# 个人偏好
- @~/.claude/my-project-instructions.mdCLAUDE.md 加载机制
Claude Code 从当前工作目录向上遍历目录树,加载每个目录的 CLAUDE.md 和 CLAUDE.local.md。例如在 foo/bar/ 运行时,加载 foo/bar/CLAUDE.md 和 foo/CLAUDE.md。子目录的 CLAUDE.md 在 Claude 读取那些子目录中的文件时按需加载。
加载额外目录的 CLAUDE.md(配合 --add-dir 使用):
CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config.claude/rules/ 路径规则系统
对于大型项目,将指令拆分到多个文件,按主题组织:
your-project/
├── .claude/
│ ├── CLAUDE.md # 主项目指令
│ └── rules/
│ ├── code-style.md # 代码风格
│ ├── testing.md # 测试约定
│ └── security.md # 安全要求
没有 paths frontmatter 的规则文件,与 .claude/CLAUDE.md 同优先级,在启动时加载。
路径特定规则(按需加载)
---
paths:
- "src/api/**/*.ts"
---
# API 开发规则
- 所有 API 端点必须包含输入验证
- 使用标准错误响应格式
- 包含 OpenAPI 文档注释仅当 Claude 读取匹配文件时才加载,减少不相关任务的 Token 消耗。
支持的 glob 模式:
| 模式 | 匹配内容 |
|---|---|
**/*.ts | 任意目录下的 TypeScript 文件 |
src/**/* | src/ 下所有文件 |
*.md | 项目根目录的 Markdown 文件 |
src/components/*.tsx | 特定目录的 React 组件 |
多模式和花括号展开:
---
paths:
- "src/**/*.{ts,tsx}"
- "lib/**/*.ts"
- "tests/**/*.test.ts"
---任务特定的指令(不需要一直在上下文中)使用 Skills 代替
.claude/rules/——Skills 只在调用时或 Claude 判断相关时加载。
用 symlink 跨项目共享规则
# 在 shared-standards 仓库维护标准规则
# 在各项目中 symlink
ln -s /path/to/shared-standards/.claude/rules/security.md .claude/rules/security.md大团队 CLAUDE.md 管理
组织级统一部署
# macOS(via MDM)
/Library/Application Support/ClaudeCode/CLAUDE.md
# Linux
/etc/claude-code/CLAUDE.md用 MDM 工具分发到所有设备,所有用户自动应用组织编码标准、安全策略和合规要求。
排除无关的 CLAUDE.md
在 Monorepo 中,其他团队的 CLAUDE.md 可能被自动拾取,用 claudeMdExcludes 跳过:
// settings.json
{
"claudeMdExcludes": [
"packages/other-team/**",
"legacy/**"
]
}Auto Memory(自动记忆)
工作机制
Claude 在对话中发现值得记住的信息时,自动将其保存到内存文件。触发条件:
- 你纠正了 Claude 的行为(「不要用 var,用 const」)
- Claude 发现了有用的项目规律(构建命令、首选库)
- 你表达了工作流偏好
Subagent 也可以维护自己的 Auto Memory(见 subagent 配置)。
存储位置
Auto Memory 按工作目录树存储:
~/.claude/memory/
└── <directory-hash>/
└── memory.md # 该工作目录的自动记忆
每个工作目录独立,切换项目时记忆不会混淆。
启用/禁用
/memory # 打开记忆管理界面
界面中可以:
- 查看 Auto Memory 条目
- 编辑或删除特定记忆
- 启用/禁用 Auto Memory
- 查看哪个目录的记忆正在被加载
全局禁用:
{ "autoMemory": false }故障排查
| 问题 | 解决方案 |
|---|---|
| Claude 不遵循 CLAUDE.md | 检查文件加载:用 /context 查看是否在上下文中;检查是否超过 200 行;规则是否足够具体 |
| 不知道 Auto Memory 保存了什么 | 运行 /memory 查看并审计所有条目;不需要的条目直接删除 |
| CLAUDE.md 太大 | 用 @ 语法拆分到多个文件;把规则移到 .claude/rules/;把示例移到 Skills |
| /compact 后指令丢失 | 在 CLAUDE.md 中添加「Compact instructions」部分,指示 Claude 压缩后重新读取 CLAUDE.md |
原文:How Claude remembers your project - Claude Code Docs | 来源:Anthropic 官方文档