Claude Code 工程 · 记忆/CLAUDE.md
学习舱 / Claude Code 工程 / 记忆/CLAUDE.md

CLAUDE.md 与记忆系统

整理中 深度 · 应用 更新 2026-09-09

前置 全景上手

CLAUDE.md 与记忆系统

一句话定位:Claude Code 的记忆分两层加一条兜底——CLAUDE.md 是你写的持久指令,auto memory 是它自己记的笔记,上下文满了自动压缩兜底;本文讲每层装什么、多大开始变成负资产。前置:Claude Code 全景与日常使用——知道上下文窗口与自动压缩的产品行为。

先从反复教同一件事说起

你和 Claude Code 合作了两周,项目约定教过它好几遍:测试用哪个命令、提交前跑什么检查、目录怎么组织。它会照做,你也满意。

直到某天你发现:每次新会话,这些约定都要从头再教。上下文窗口一关,一切清零——它不是不听话,是根本不记得。把约定贴进对话?下个会话就丢。全写进一个说明文件?听说文件越长它越不听话。让它自己记?记在哪、记什么、什么时候会忘?

这个产品的记忆系统到底怎么分层——什么该你写、什么它自己记、什么靠压缩续命?

官方的答案是「两层加一条兜底」:CLAUDE.md 是你写的持久指令,每次会话开场必载;auto memory 是 Claude 给自己记的笔记,一个索引加一堆主题文件、按需取用;上下文满了由自动压缩兜底——那是上一章讲过的产品行为,本章只说它在记忆版图里的位置。先看全景:

谁记什么:记忆分层全景 ① 你写的:CLAUDE.md(四级) 企业策略(IT 统一下发) 用户级 ~/.claude/CLAUDE.md(你所有项目) 项目级 ./CLAUDE.md(入库共享) 本地级 CLAUDE.local.md(gitignore) 从当前目录逐级向上加载 + 子目录按需加载 写「每个会话都该知道」的事实与规则 ② 它记的:auto memory MEMORY.md 索引(每会话载前 200 行/25KB) 主题文件一条一档(user_role.md 等) 记你的纠正与偏好,按需取用 按仓库隔离,只在本机 「Saved 2 memories」就是它在写 /memory 随时查看与编辑 ③ 上下文窗口(每场会话) 常驻区载 CLAUDE.md + MEMORY.md 索引;对话进行,满员前自动压缩兜底 读法:①②是两个仓库,③是每次会话的工作台——开场装常驻区,干活时按需取文件

图:记忆分层——①你写的 CLAUDE.md 四级作用域 ②它记的 auto memory ③每场会话的上下文窗口;自动压缩在③里兜底

渐进拆解:一个新员工的两份手册

类比:把 Claude Code 想成一位每早都「失忆重来」的资深同事。CLAUDE.md 是你给 TA 的工作手册——入职第一天就摆在桌上,每天都要读一遍;auto memory 是 TA 自己的笔记本——你纠正一次 TA 记一条,下次先翻笔记再干活;自动压缩则是工位太小时的整理术——旧文件装箱收进柜子,桌面只留正在办的。三样各管一段,别让一本手册越写越厚,也别指望笔记本替你定规矩。

CLAUDE.md:你写的那份手册(①)

它就是个 markdown 文件,放在约定位置、每次会话开场自动载入。四级作用域从宽到窄:

  • 企业策略:IT 统一下发,管全公司合规。
  • 用户级:~/.claude/CLAUDE.md,你的个人偏好跟人走。
  • 项目级:./CLAUDE.md 或 ./.claude/CLAUDE.md,入库随 git 共享给全组。
  • 本地级:CLAUDE.local.md,进 .gitignore,只属于你在这台机器的这个项目。

加载规则两条:

  • 从当前目录逐级向上,每一级的都算数——在 foo/bar/ 里启动,foo/bar/ 与 foo/ 的 CLAUDE.md 都会载入。
  • 子目录里的按需加载——读到那个目录的文件,才载入对应指令。

官方给的写法判据一句话:只写「每个会话都该知道」的事实——构建命令、约定、项目结构、「永远要 X」类规则。多步骤流程与只跟某类文件相关的指令,分别归 Skills(按需加载的技能包)与路径作用域规则(放 .claude/rules/ 下、路径匹配才加载的规则文件)。

写法四原则(官方口径)

  • 尺寸:单文件以 200 行内为目标——文件越长,占上下文越多、遵循度越低。
  • 结构:用标题与分组,Claude 扫结构和人一样。
  • 具体到可验证:「用两空格缩进」好过「把代码格式化好」,「提交前跑 npm test」好过「记得测试」。
  • 一致性最要紧:两条规则互相矛盾时,Claude 可能随机挑一条遵循。

文件之间用 @路径 导入拆分组织(相对路径按所在文件解析,最多递归四层),但导入的文件开场照样进上下文——拆分是整理,不是瘦身。

auto memory:它自己记的笔记(②)

这是「你不用动手」的那一层:默认开启,Claude 在会话中根据你的纠正与偏好自动写笔记。存储按仓库隔离(同仓库的所有子目录与工作树共享一份),位置在用户目录的项目缓存下;结构是一本 MEMORY.md 索引加若干主题文件——每条记忆一个文件,索引一行一条:

  • 开场只载索引的前 200 行(或 25KB,先到为准)。
  • 主题文件不进开场,要用时按需读取。

索引快超限时产品会提醒它精简,超了就报错逼它重写。这套「索引薄、细节下沉」的设计正是 Context 工程说的预算花法。会话里看到「Saved 2 memories」就是它在写,/memory 随时翻看编辑——笔记是明文 markdown,删改随意。另有一个值得知道的隔离:主对话的 auto memory 不进子代理(受派干活的独立 Agent 实例)的上下文,子代理可以配自己的独立笔记目录——脏活的上下文,不污染主笔记。

自动压缩:工位整理术(③)

上一章说过,上下文满员前自动压缩兜底——在记忆版图里,它是「会话内」的机制:压缩的是对话历史,不碰 CLAUDE.md 与 auto memory 这两个仓库。三层的分工由此清晰:约定进手册,纠正进笔记,过程靠压缩——别把该进手册的东西塞给压缩去「记」。

大白话:约定写手册,纠正记笔记,聊天靠压缩。手册你写、它每天读;笔记它写、你自己删;压缩产品做、你不用管。三件事别互相顶班——手册越写越厚、笔记没人清理、压缩被当成记忆,都是乱岗的开始。

技术定义:CLAUDE.md 是会话启动时自动载入上下文的 markdown 指令文件:四级作用域、逐级向上加载、子目录按需,支持 @路径 导入。auto memory 是按仓库隔离的自动笔记:MEMORY.md 索引开场载入、主题文件按需读取,仅本机有效。自动压缩在上下文将满时替换对话历史,不触碰两个持久仓库。

动手:给项目配一份及格的 CLAUDE.md

进入会话后,三条斜杠命令起步(# 后是注解):

/init                        # 扫描代码库,生成一份起步 CLAUDE.md
/context                     # 查看本次会话载入了哪些记忆文件、各占多少
/memory                      # 浏览与编辑 CLAUDE.md 和 auto memory 的各文件

/init 生成的是底子,价值在于你接着补「它自己发现不了的」约定。一份及格的项目级 CLAUDE.md 长这样(节选,伪示例不可直接运行):

# 项目约定
## 命令
- 测试:npm test(提交前必跑,失败不得提交)
- 本地启动:npm run dev,端口 4399
## 结构
- API 处理器一律放 src/api/handlers/
## 风格
- 缩进两空格;组件命名用大驼峰

注意每条都具体可验证。反面教材:「保持代码整洁」「认真测试」——这类句子占上下文却不产生遵循度。写完跑一次 /context,看到自己的文件列在 Memory files 里才算生效;之后每教一次新约定,就顺手补进对应层级,而不是在对话里重发一遍。

三种记忆去处一张表对齐(口径来自官方文档):

去处谁来写装什么每会话载入
CLAUDE.md你全会话通用的事实与规则全文(上限 4 MiB,超限整文件跳过)
auto memoryClaude你的纠正、偏好、代码推不出的项目背景仅索引前 200 行/25KB,其余按需
自动压缩产品对话历史的摘要满员前触发,替换对话区

边界与取舍:手册写到多厚算负资产

CLAUDE.md 不是配置,是上下文

官方文档特别提醒:它是「喂给模型的上下文,不是强制执行的配置」——模型遵循得再好也是概率行为。需要确定性的事(提交前必须跑 lint、某文件不许动),别指望手册里一句话,那是 Hooks 的地盘:事件驱动的脚本,物理上拦得住。

那一条指令来了,到底放哪?官方的分流逻辑三问定去处:

一条指令该放哪:三问定去处 一条新约定 (你想让它持久) 第一问:每个会话 都需要吗? 第二问:只跟特定 路径或文件相关吗? 第三问:是一套 多步骤流程吗? CLAUDE.md 全会话通用的事实与规则 路径规则 匹配路径才加载 Skill 按需加载的技能包 auto memory 偏好与纠正,它自己记 是 否 是 否 是 都否 读法:CLAUDE.md 每会话必载,路径规则匹配才载,Skill 用到才载;auto memory 索引必载、主题文件按需——它不是你写指令的地方

图:指令分流——每个会话都要的进 CLAUDE.md,路径相关的进规则,多步骤的进 Skill,偏好与纠正交给 auto memory 自己记

负资产的判断信号

官方给的是阈值:单文件 200 行内为目标,4 MiB 是载入硬上限。但真正的信号是行为不是行数:

  1. 你发现自己超过两周没读过这个文件,它多半已经堆满过期规则。
  2. 同一件事文件里说法与你的口头纠正不一致——矛盾规则会被随机遵循。
  3. 某些规则只跟个别目录相关却全局常驻——那是路径作用域规则的活。
  4. /context 里记忆文件占比挤占了干活空间。

处理顺序:删过期的、下沉路径相关的、拆导入组织的——压缩手册厚度,别压缩遵循度。

monorepo 还有一档官方解法:别的团队塞在仓库里的 CLAUDE.md,可以用 claudeMdExcludes 配置整体排除,不让它进你的会话。

auto memory 不是真理库

它记的是「Claude 理解的你的偏好」,会记错也会过时;跨机器不共享(按仓库、按本机隔离)。定期 /memory 翻看,删掉与现状不符的条目——就像你也会纠正一个新同事的笔记。产品行为的机制层对照:自动压缩对应手写 Harness 里的上下文压缩机构,CLAUDE.md 对应常驻上下文的组装(预算与装窗的机制在 Context 工程),auto memory 对应文件式长期记忆——Harness 记忆系统一篇讲后者的三级结构与召回管线。

自测

合上文章先自己答,再展开对照:

CLAUDE.md 写到多大就开始「负资产」?判断信号是什么?

官方口径:单文件以 200 行内为目标——更长则占上下文更多、遵循度更低;4 MiB 是载入硬上限。但负资产的真信号是行为不是行数:文件久到超过两周没读过(堆满过期规则);同一件事文件说法与口头纠正不一致(矛盾规则会被随机挑一条遵循);只跟个别目录相关的规则全局常驻(该下沉为路径作用域规则);/context 里记忆文件挤占干活空间。处理顺序:删过期、下沉路径相关、拆导入组织。

产品行为(自动压缩触发时机)与 Harness 记忆系统的机制层如何对应?

自动压缩在上下文将满时由产品自动触发,替换的是对话历史区,不碰 CLAUDE.md 与 auto memory 两个持久仓库——对应机制层的上下文压缩机构(compaction):旧对话摘要化腾出预算。CLAUDE.md 每会话开场全文载入,对应常驻上下文的组装;auto memory 索引开场载入、主题文件按需读,对应文件式长期记忆的「索引常驻、正文按需」。一句话:产品行为是机制层三件事的产品化——压缩机构见「上下文压缩」篇,常驻组装见「Context 工程」篇,文件记忆见「Harness 记忆系统」篇。

参考与延伸

下一站:Skills 实战:从斜杠命令到渐进披露——手册放不下的多步骤流程,封装成按需加载的技能包。

本节点大纲与自测题(4 个子点 · 2 问)

大纲

  • CLAUDE.md 四级作用域与加载规则(企业策略/用户/项目/本地)
  • CLAUDE.md 写法:什么该写、什么不该写(腐化防治)
  • auto memory 自动记忆的使用
  • 上下文窗口与自动压缩的产品行为

自测——答不上来就是缺口

  • CLAUDE.md 写到多大就开始「负资产」?判断信号是什么?
  • 产品行为(自动压缩触发时机)与 Harness 记忆系统的机制层如何对应?