Claude Code Memory 记忆系统完全指南:CLAUDE.md 分层配置、Auto Memory 与会话级规则持久化实战
【免费下载链接】claude-howtoA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-howto
本指南以 claude-howto 仓库的 Memory 中文参考 为主体,结合仓库内置的 project-CLAUDE.md、personal-CLAUDE.md、directory-api-CLAUDE.md 三份可直接复制的模板,以及仓库根目录 CLAUDE.md 这一真实运行实例,系统讲解 Claude Code 的持久记忆体系。读完你将掌握:如何用
/init、/memory、@import快速建立记忆、如何按"组织 → 项目 → 目录 → 用户"四个层级组织规则、如何用claudeMdExcludes与.claude/rules精细控制加载范围,以及 Auto Memory 的开启、禁用与自定义路径等完整实战技能。
Memory 是什么:让 Claude Code 跨会话保留上下文
Memory 让 Claude Code 在不同会话之间保留上下文。与普通聊天中"会话一结束上下文即消失"的临时上下文窗口不同,memory 文件是持久化的:你可以把团队规范、项目规则、个人偏好和目录级约束写进CLAUDE.md,Claude 会在合适的时候自动加载,并在后续会话中持续生效。
在 claude-howto 仓库中,这个机制本身就是最好的例子:仓库根目录的 CLAUDE.md 记录了"教程仓库、输出为01-到10-编号模块的 Markdown、scripts/仅用于校验文档与构建 EPUB"这样的项目定位,以及"必须激活.venv再运行 Python 脚本""内部链接使用相对路径""代码围栏必须声明语言"等硬性规则——这些都是典型的项目记忆内容,Claude 每次在该目录工作都会自动读到它们。
Memory 命令速查
| 命令 | 作用 |
|---|---|
/init | 初始化项目级CLAUDE.md |
/memory | 打开并编辑记忆文件 |
@path/to/file | 在CLAUDE.md中引用外部文档(如@README.md、@docs/api.md) |
# | 历史上用于"快速把当前规则写入 memory"的前缀,详见下文说明 |
关于
#前缀的版本说明:中文版文档将其列为快速写入入口,而仓库中英文原版 README.md 已明确标注该功能Discontinued(已停用)。若你依赖此模式,请改用/memory命令或直接在对话中提出请求(例如"remember that we always use TypeScript strict mode"),Claude 会依据你的请求更新对应的CLAUDE.md文件。
快速上手:初始化 Memory
使用/init
在项目目录中运行:
/initClaude 会根据当前项目生成一个CLAUDE.md,通常包含类似如下结构:
# 项目配置 ## 项目概览 ## 开发规范/init的典型行为包括:在项目根目录(./CLAUDE.md或./.claude/CLAUDE.md)创建新的CLAUDE.md、确立项目约定与指南、为跨会话上下文持久化打好基础。它还支持增强交互模式:设置CLAUDE_CODE_NEW_INIT=1后启动,可进入多阶段引导流程,一步步带你完成项目配置:
CLAUDE_CODE_NEW_INIT=1 claude /init/init适合的使用场景:启动新项目、确立团队编码标准与约定、为代码库结构编写文档、为协作开发搭建 memory 层级。
使用/memory
/memory会打开记忆编辑器(默认系统编辑器),让你在不同范围之间切换:
- 受管策略记忆(Managed Policy Memory)
- 项目记忆(
./CLAUDE.md) - 用户记忆(
~/.claude/CLAUDE.md) - 本地项目记忆(Local Project Memory)
适合你把长期规则、项目规范和个人偏好分层管理。一个典型的/memory工作流是:打开编辑器 → 选择"项目记忆"→ 在系统编辑器中修改./CLAUDE.md→ 保存关闭 → Claude 自动重新加载更新后的记忆。
英文原版补充了版本行为细节:当文件在 GUI 编辑器中打开时,会话不再阻塞等待,你可以并行继续工作(v2.1.216 起);而 Vim 等终端编辑器仍会占用终端直到退出。/memory与/init的定位区别在于:前者是"持续维护"(编辑已有记忆、重组结构、审查内容),后者是"一次性初始化"(生成起始模板)。
使用@path/to/file导入外部内容
CLAUDE.md支持@path/to/file语法引入外部内容,避免在多个记忆文件中重复粘贴文档:
# Project Documentation See @README.md for project overview See @package.json for available npm commands See @docs/architecture.md for system design # Import from home directory using absolute path @~/.claude/my-project-instructions.md导入机制的已知行为(英文原版文档确认):
- 相对路径与绝对路径均支持(如
@docs/api.md或@~/.claude/my-project-instructions.md);相对路径以包含该导入指令的文件为基准解析,而非当前工作目录; - 支持递归导入,最大深度为4 跳(hops);
- 首次从外部位置导入会触发安全审批对话框;
- 导入指令在 Markdown 代码围栏内不会被求值,因此可以在示例中安全地书写它们;
- 被引用的内容会自动包含进 Claude 的上下文中。
Memory 架构:分层加载、拼接而非覆盖
Claude Code 的记忆系统通常有以下几个层级:
| 层级 | 作用范围 | 典型内容 |
|---|---|---|
| 受管策略 | 组织级 | 合规、安全、统一流程 |
| 项目记忆 | 单个项目 | 架构、编码标准、工作流 |
| 目录记忆 | 子目录 | 模块约束、局部规范 |
| 用户记忆 | 单个用户 | 个人偏好、默认设置 |
记忆层级与加载顺序
Claude 会按更接近当前上下文的规则优先使用更具体的 memory。一般来说:
- 组织级规则优先于普通偏好
- 项目规则优先于个人偏好
- 目录级规则优先于项目级通用规则
英文原版给出了更精确的加载顺序(按作用域从宽到窄,全部拼接进上下文而非互相覆盖——这不是高层替换低层的优先级链):
| 顺序 | 作用域 | 位置 | 用途 |
|---|---|---|---|
| 1 | 受管策略 | macOS:/Library/Application Support/ClaudeCode/CLAUDE.md;Linux/WSL:/etc/claude-code/CLAUDE.md;Windows:C:\Program Files\ClaudeCode\CLAUDE.md | 组织级指令,由 IT/DevOps 管理,个人设置无法排除 |
| 2 | 用户规则 | ~/.claude/rules/*.md | 适用于所有项目的个人规则 |
| 3 | 用户记忆 | ~/.claude/CLAUDE.md | 个人偏好(所有项目) |
| 4 | 项目规则 | ./.claude/rules/*.md | 路径作用域的模块化规则 |
| 5 | 项目记忆 | ./CLAUDE.md或./.claude/CLAUDE.md | 团队共享、受版本控制的规范 |
| 6 | 本地项目记忆 | ./CLAUDE.local.md | 个人项目级偏好,建议加入.gitignore |
两个关键行为需要理解:
- 目录遍历方向:Claude Code 会从当前工作目录向上逐级查找。如果你从
foo/bar/启动,foo/CLAUDE.md会先于foo/bar/CLAUDE.md加载——也就是说,离启动位置更近的指令更晚进入上下文,而非"覆盖"更早的指令,只是"更新的上下文"。 - 子目录按需加载:工作目录之下子目录里的
CLAUDE.md与CLAUDE.local.md不会在启动时加载,而是在 Claude 读取那些子目录中的文件时按需加载;同一目录内,CLAUDE.local.md会追加在CLAUDE.md之后。
排除规则:claudeMdExcludes
如果某些CLAUDE.md不应该被自动加载,可以通过claudeMdExcludes之类的设置排除。在大型 monorepo 中,很多子项目的CLAUDE.md与当前工作无关,用该设置跳过它们可以有效减少上下文噪音:
// In ~/.claude/settings.json or .claude/settings.json { "claudeMdExcludes": [ "packages/legacy-app/CLAUDE.md", "vendors/**/CLAUDE.md" ] }模式相对于项目根目录匹配。这特别适用于:包含大量子项目的 monorepo、仓库内混有第三方CLAUDE.md、以及需要排除过期或无关指令以降低上下文窗口噪音的场景。
配置文件层级
项目设置、用户设置和企业托管设置会共同影响 memory 的加载方式。你可以把它理解为:
- 组织策略
- 项目设置
- 本地设置
- 临时会话输入
英文原版按"真正覆盖而非拼接"的原则给出了 settings 的完整优先级(与CLAUDE.md的拼接行为不同,设置项出现冲突时由高到低生效):
| 级别 | 位置 | 作用域 |
|---|---|---|
| 1(最高) | managed-settings.json、plist/注册表或服务端管理 | 组织级强制,不可被覆盖 |
| 2 | 命令行参数 | 临时会话覆盖 |
| 3 | .claude/settings.local.json | 本地覆盖(git 忽略) |
| 4 | .claude/settings.json | 项目级(提交到 git) |
| 5(最低) | ~/.claude/settings.json | 用户偏好 |
此外,管理级设置支持managed-settings.d/投放目录:基础文件先合并,目录内*.json再按字母序合并覆盖(标量覆盖、数组拼接去重、对象深合并),方便不同团队独立投放策略片段而无需编辑共享文件。注意权限规则(allow/ask/deny)与其他设置不同,它们跨作用域合并而不是高层替换低层。
模块化规则系统
Memory 不一定要写成一个巨大文件。你可以把规则拆成多个目录文件,再按路径组织。.claude/rules/目录支持项目级与用户级两层定义,规则会递归发现(含子目录):
your-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用户级规则(~/.claude/rules/)先于项目级规则加载,便于项目覆盖个人默认值。
通过 YAML frontmatter 设置路径规则
--- paths: src/api/**/*.ts --- # API Development Rules - All API endpoints must include input validation - Use Zod for schema validation - Document all parameters and response types - Include error handling for all operations常用 glob 模式示例:
**/*.ts—— 所有 TypeScript 文件src/**/*——src/下所有文件src/**/*.{ts,tsx}—— 多扩展名{src,lib}/**/*.ts, tests/**/*.test.ts—— 多模式组合
不带paths字段的规则无条件加载,优先级与.claude/CLAUDE.md相同;带paths的规则仅在 Claude 读取匹配文件时按需加载。
子目录与符号链接
你可以用子目录把规则按主题组织(如rules/api/、rules/testing/、rules/security/),并用 symlink 把局部规则复用到多个项目区域——例如从中心位置把共享规则文件符号链接到每个项目的.claude/rules/目录中。
Auto Memory:让 Claude 自己记笔记
Auto memory 让 Claude 根据当前目录自动寻找并加载合适的记忆文件。与需要你手动编写维护的CLAUDE.md不同,Auto memory 由 Claude 在会话过程中自己写入——它记录学习到的模式、洞察与项目特定知识。
工作方式与目录结构
- 位置:
~/.claude/projects/<project>/memory/ - 入口:
MEMORY.md是主文件 - 主题文件:可选的主题文件(如
debugging.md、api-conventions.md) - 加载行为:会话启动时加载
MEMORY.md的前 200 行(或前 25KB,以先到者为准);主题文件按需加载而非启动加载 - frontmatter:以 YAML frontmatter 开头的文件在每次写入时会获得
modified字段(ISO 8601 时间戳,v2.1.214 起)
~/.claude/projects/<project>/memory/ ├── MEMORY.md # 入口文件(启动时加载前 200 行 / 25KB) ├── debugging.md # 主题文件(按需加载) ├── api-conventions.md # 主题文件(按需加载) └── testing-patterns.md # 主题文件(按需加载)Claude 会根据当前工作目录、父目录和已配置路径,逐层查找相关 memory。目录结构示意:
project/ ├── CLAUDE.md ├── src/ │ ├── CLAUDE.md │ └── api/ │ └── CLAUDE.md版本要求
某些 auto memory 行为依赖较新的 Claude Code 版本。Auto memory 要求Claude Code v2.1.59 或更高版本,旧版本请先升级:
npm install -g @anthropic-ai/claude-code@latest控制 auto memory
Auto memory默认开启,受autoMemoryEnabled设置控制(默认true);设为false时 Claude 既不读取也不写入 auto memory 目录。会话中也可以用/memory切换。
{ "autoMemoryEnabled": false }也可以通过环境变量控制:
| 值 | 行为 |
|---|---|
0 | 强制开启 auto memory |
1 | 强制关闭 auto memory |
| (未设置) | 默认行为(启用) |
# 当前会话禁用 auto memory CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 claude # 显式强制开启 CLAUDE_CODE_DISABLE_AUTO_MEMORY=0 claude注意CLAUDE_CODE_DISABLE_AUTO_MEMORY=0会强制开启,即使--bare模式或autoMemoryEnabled: false本来会禁用它。
自定义 auto memory 目录
如果默认目录不适合你的项目,可以在设置中指定新的 memory 路径。autoMemoryDirectory设置(v2.1.74 起可用)用于改变默认存储位置:
// 仅可在 ~/.claude/settings.json 或 .claude/settings.local.json 中设置 { "autoMemoryDirectory": "/path/to/custom/memory/directory" }该设置只能配置在用户级(~/.claude/settings.json)或本地设置(.claude/settings.local.json),在项目级或受管策略设置中不生效。适合把 auto memory 放到共享/同步位置、与默认配置目录分离、或使用默认层级之外的项目专用路径。
worktree 和仓库共享
在 worktree、monorepo 或多人协作场景中,auto memory 可以帮助保持规则一致。同一 git 仓库的所有 worktree 与子目录共享同一个auto memory 目录,切换 worktree 或在不同子目录工作会读写同一组记忆文件。
Subagent 记忆
Subagents 也可以拥有自己的记忆范围,用于在各自职责内保持一致性。在 subagent 定义文件中用memoryfrontmatter 字段指定加载哪些记忆作用域:
memory: user # 仅加载用户级记忆 memory: project # 仅加载项目级记忆 memory: local # 仅加载本地记忆这允许 subagent 以聚焦的上下文运行,而不是继承完整的 memory 层级。
通过--add-dir添加额外目录
你可以用--add-dir把额外目录也加入 Claude 的可见范围,适合多目录协作(monorepo 或多项目场景中其他目录的上下文同样相关)。先启用环境变量,再用 flag 启动:
CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir /path/to/other/projectClaude 会加载指定额外目录中的CLAUDE.md,与当前工作目录的 memory 文件一起进入上下文。
实战示例:三份模板 + 会话内更新
claude-howto 仓库在 zh/02-memory/ 下提供了三份可直接复制的中文模板,覆盖记忆系统的三个核心作用域。
示例 1:项目记忆结构
对应模板:project-CLAUDE.md。标准结构骨架如下:
# 项目配置 ## 项目概览 ## 架构 ## 开发规范 ### 代码风格 ### 命名约定 ### Git 工作流 ### 测试要求 ### API 规范 ### 数据库 ### 部署 ## 常用命令 ## 团队联系人 ## 已知问题与解决办法 ## 相关项目仓库模板中给出了可落地的具体示例,例如开发规范里的"命名约定":
### 命名规范 - **文件**:kebab-case(`user-controller.js`) - **类**:PascalCase(`UserService`) - **函数 / 变量**:camelCase(`getUserById`) - **常量**:UPPER_SNAKE_CASE(`API_BASE_URL`) - **数据库表**:snake_case(`user_accounts`)模板还在"架构"一节展示了@docs/architecture.md这类导入语法,在"常用命令"一节用表格罗列npm run dev、npm test、npm run lint等命令,并包含 Git 工作流、测试要求(最低 80% 覆盖率、Jest/Cypress)、API 规范、部署策略(Docker/Kubernetes/蓝绿部署)等完整条目。
仓库根目录的 CLAUDE.md 就是这个结构的真实生产级实例——它记录了项目定位(教程仓库、输出为 Markdown)、关键命令(pre-commit run --all-files、pytest scripts/tests/ -v、uv run scripts/build_epub.py)、架构地图(01-到10-模块的编号即学习顺序)和硬性规则(内部链接用相对路径、代码围栏必须声明语言、提交格式type(scope): subject且 scope 匹配模块目录名),值得作为编写自己项目记忆时的参照。
示例 2:目录级记忆
对应模板:directory-api-CLAUDE.md。注意模板开头的说明——memory 文件是拼接(concatenate)而不是覆盖,根目录CLAUDE.md依然生效,Claude Code 会在读取该子目录下的文件时按需加载本文件:
# API 模块规范 本文件是对根目录 `CLAUDE.md` 的补充,作用于 `/src/api/` 下的所有内容。目录级记忆适合沉淀"模块专属规范",模板示例覆盖:请求校验(Zod、返回 400 与字段级错误详情)、认证(JWT、Authorizationheader、24 小时过期、refresh token)、统一响应格式(成功/错误 JSON 结构)、分页(cursor 分页 +hasMore、最大 100、默认 20)、限流(认证用户每小时 1000 次、公开端点 100 次、429 +retry-after)、缓存(Redis、默认 5 分钟、写操作失效)。
示例 3:个人记忆
对应模板:personal-CLAUDE.md:
# 我的开发偏好 ## 关于我 ## 代码偏好 ### 错误处理 ### 注释 ### 测试 ### 架构 ## 调试偏好 ## 沟通方式 ## 项目组织 ## 工具链模板中的内容体现了个人记忆的正确写法:偏好(8 年全栈、TypeScript/Python)、错误处理方式(try-catch+ 有意义的错误消息)、注释原则(解释"为什么"而不是"是什么")、测试方法论(TDD)、沟通风格、项目组织结构和完整工具链(VS Code + vim 键位、Zsh、Prettier、ESLint、Jest + React Testing Library)。
示例 4:会话中更新记忆
两种常见方式:
- 直接提要求,让 Claude 把规则写进 memory。例如在会话中请求"记住我们在这个项目里始终使用 TypeScript 严格模式",Claude 会询问要写入哪个记忆文件(项目记忆
./CLAUDE.md或个人记忆~/.claude/CLAUDE.md),确认后完成写入并反馈"✅ Memory saved!"。 - 使用
/memory打开编辑器直接编辑。
仓库中的两张截图展示了这一真实交互过程。第一张是用户向 Claude 陈述规则("执行任何 Python 脚本前,先检查venv/、.venv/、env/等位置的虚拟环境,存在则先激活"),Claude 复述确认:
第二张展示了保存流程的关键细节:用户问"规则保存到哪里了",Claude 坦诚此前仅在回复中确认、尚未写入文件,随后询问保存到项目记忆还是个人记忆;在用户选择个人记忆后,Claude 读取~/.claude/CLAUDE.md、追加### Virtual Environment Management小节并确认保存成功:
这个例子同时印证了两个要点:记忆文件不存在时规则不会凭空保存(必须先有CLAUDE.md文件);会话中的自然语言请求是更新记忆的推荐途径。
最佳实践
应该做的
- 用项目记忆保存团队标准(提交到 git,团队共享)
- 用目录记忆保存局部差异
- 先写简洁规则,再逐步补充
- 把可重复内容写进
CLAUDE.md - 规则要具体可执行:✅"所有 JavaScript 文件使用 2 空格缩进",❌"遵循最佳实践"
- 使用
@path/to/file引用已有文档,避免重复粘贴(递归导入最多 4 跳) - 定期审查更新记忆,项目演进时同步修订规则
- 保持
CLAUDE.md精简——目标控制在 200 行以内。该文件每个会话都会完整加载,每多一行都在与当前任务无关的内容争夺注意力;文件变长后即使仍能完整加载,指令遵从度也会下降。内容增长时优先"搬出"而非"删减":多步骤流程放进 Skills 的 SKILL.md(按需加载),目录/文件类型规则放进.claude/rules/*.md(glob 限定范围),参考资料放进 skill 的references/目录,关于你自己的记忆交给 Auto Memory(默认开启)。/doctor(v2.1.206+)会检查配置并在CLAUDE.md超出合理长度时提出精简建议。
不应该做的
- 不要把 README 整份复制进
CLAUDE.md(用@README.md导入即可) - 不要把明显属于代码的实现细节硬塞进 memory
- 不要让 memory 变成垃圾桶(垃圾桶式堆积会使关键规则被淹没)
- 不要存储密钥、密码、token 等凭据,不要包含 PII 与专有敏感数据
- 不要堆砌"请记得运行测试再结束"这类验证提醒——在 Opus 5 / Fable 5 等模型上这类提醒反而会引发过度验证,浪费 turn 与 token;应陈述目标、让 Claude 自行判断,只保留真正非显而易见的要求(如"集成测试需要 Docker 在运行")
- 不要过度组织——避免创建过多的子目录覆盖层级
- 不要超过导入嵌套上限(4 跳)
记忆管理建议
- 优先引用已有文档,而不是重复粘贴
- 只保留真正影响 Claude 行为的信息
- 定期整理过期或冲突的规则
- 按场景选择记忆层级:公司安全策略 → 受管策略;团队代码风格 → 项目记忆(git 共享);个人编辑器快捷键 → 用户记忆;API 模块规范 → 目录记忆
安装说明
设置项目记忆
方法 1:使用/init(推荐)
/initClaude 会自动创建并填充CLAUDE.md模板结构,之后按需定制,并提交到 git:
git add CLAUDE.md git commit -m "Initialize project memory with /init"方法 2:手动创建(复制仓库模板)
cp zh/02-memory/project-CLAUDE.md CLAUDE.md也可以手动初始化:
cd /path/to/your/project touch CLAUDE.md # 按示例 1 的结构填入项目概览、开发规范等内容方法 3:快速更新
在会话中直接陈述规则即可,例如:
# Use semantic versioning for all releases # Always run tests before committing # Prefer composition over inheritance(注意#前缀写法属于历史模式,新版建议改为对话式请求或/memory,详见前文。)
设置个人记忆
cp zh/02-memory/personal-CLAUDE.md ~/.claude/CLAUDE.md或手动创建:
mkdir -p ~/.claude touch ~/.claude/CLAUDE.md # 按示例 3 的结构填入你的偏好设置目录记忆
cp zh/02-memory/directory-api-CLAUDE.md src/api/CLAUDE.md验证安装
- 重新打开 Claude Code 会话
- 检查
CLAUDE.md是否被自动加载(可用ls -la ./CLAUDE.md、ls -la ~/.claude/CLAUDE.md确认文件就位) - 用一条明显会受 memory 影响的提示词测试——例如对项目记忆,问一句与规范相关的问题,观察 Claude 是否引用了你写入的规则
相关概念与延伸阅读
Memory 是 Claude Code 的基础设施,它与本仓库其他模块协同工作:
- Slash Commands 中文参考 ——
/init、/memory本身就是 slash command,commit.md、optimize.md等命令会把 session 级快捷操作与记忆结合 - Skills 中文指南 —— skill 的 SKILL.md 是"按需加载的说明书",与 memory 的"每会话加载"形成互补;
CLAUDE.md膨胀时把多步骤流程迁移到 skill 是官方推荐做法 - Subagents 中文参考 —— subagent 可通过
memoryfrontmatter 控制自身记忆范围 - Advanced Features 中文指南 —— 高级配置与会话控制
- Hooks 参考 —— 其中的
InstructionsLoaded等生命周期事件会在记忆文件加载时触发,可用于审计或通知;pre-tool-check.sh、validate-prompt.sh等脚本也可与记忆规则协同
最后回顾一下记忆更新的生命周期:创建或编辑CLAUDE.md→ Claude 重新加载 → 新规则在后续会话中生效。把这套"写规则、定层级、控范围、自动沉淀"的方法落地到自己的项目里,你的 Claude Code 就会从一个"每次都要重新解释上下文"的工具,变成一个真正懂你项目与偏好的长期协作者。
【免费下载链接】claude-howtoA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-howto
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考