Claude Code Memory 记忆系统完全指南:CLAUDE.md 分层配置、Auto Memory 与会话级规则持久化实战
2026/9/10 1:23:54 网站建设 项目流程

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/fileCLAUDE.md中引用外部文档(如@README.md@docs/api.md
#历史上用于"快速把当前规则写入 memory"的前缀,详见下文说明

关于#前缀的版本说明:中文版文档将其列为快速写入入口,而仓库中英文原版 README.md 已明确标注该功能Discontinued(已停用)。若你依赖此模式,请改用/memory命令或直接在对话中提出请求(例如"remember that we always use TypeScript strict mode"),Claude 会依据你的请求更新对应的CLAUDE.md文件。

快速上手:初始化 Memory

使用/init

在项目目录中运行:

/init

Claude 会根据当前项目生成一个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会打开记忆编辑器(默认系统编辑器),让你在不同范围之间切换:

  1. 受管策略记忆(Managed Policy Memory)
  2. 项目记忆(./CLAUDE.md
  3. 用户记忆(~/.claude/CLAUDE.md
  4. 本地项目记忆(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

两个关键行为需要理解:

  1. 目录遍历方向:Claude Code 会从当前工作目录向上逐级查找。如果你从foo/bar/启动,foo/CLAUDE.md会先于foo/bar/CLAUDE.md加载——也就是说,离启动位置更近的指令更晚进入上下文,而非"覆盖"更早的指令,只是"更新的上下文"。
  2. 子目录按需加载:工作目录之下子目录里的CLAUDE.mdCLAUDE.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 的加载方式。你可以把它理解为:

  1. 组织策略
  2. 项目设置
  3. 本地设置
  4. 临时会话输入

英文原版按"真正覆盖而非拼接"的原则给出了 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.mdapi-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/project

Claude 会加载指定额外目录中的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 devnpm testnpm run lint等命令,并包含 Git 工作流、测试要求(最低 80% 覆盖率、Jest/Cypress)、API 规范、部署策略(Docker/Kubernetes/蓝绿部署)等完整条目。

仓库根目录的 CLAUDE.md 就是这个结构的真实生产级实例——它记录了项目定位(教程仓库、输出为 Markdown)、关键命令(pre-commit run --all-filespytest scripts/tests/ -vuv 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:会话中更新记忆

两种常见方式:

  1. 直接提要求,让 Claude 把规则写进 memory。例如在会话中请求"记住我们在这个项目里始终使用 TypeScript 严格模式",Claude 会询问要写入哪个记忆文件(项目记忆./CLAUDE.md或个人记忆~/.claude/CLAUDE.md),确认后完成写入并反馈"✅ Memory saved!"。
  2. 使用/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(推荐)

/init

Claude 会自动创建并填充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.mdls -la ~/.claude/CLAUDE.md确认文件就位)
  • 用一条明显会受 memory 影响的提示词测试——例如对项目记忆,问一句与规范相关的问题,观察 Claude 是否引用了你写入的规则

相关概念与延伸阅读

Memory 是 Claude Code 的基础设施,它与本仓库其他模块协同工作:

  • Slash Commands 中文参考 ——/init/memory本身就是 slash command,commit.mdoptimize.md等命令会把 session 级快捷操作与记忆结合
  • Skills 中文指南 —— skill 的 SKILL.md 是"按需加载的说明书",与 memory 的"每会话加载"形成互补;CLAUDE.md膨胀时把多步骤流程迁移到 skill 是官方推荐做法
  • Subagents 中文参考 —— subagent 可通过memoryfrontmatter 控制自身记忆范围
  • Advanced Features 中文指南 —— 高级配置与会话控制
  • Hooks 参考 —— 其中的InstructionsLoaded等生命周期事件会在记忆文件加载时触发,可用于审计或通知;pre-tool-check.shvalidate-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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询