递归客diguike

Claude Code 的记忆按项目目录隔离

递归客2026.04.26Claude Code约 8 分钟

Claude Code 的自动记忆按项目目录存。在 A 目录让它记住的事,换到 B 目录它就不知道了。这篇讲它存在哪、分几类、怎么让一条偏好在所有项目里生效。

一、Claude Code 的两套持久化机制

Claude Code 有两套独立的「记忆」:

CLAUDE.md Auto Memory(自动记忆)
谁来写 你自己写 Claude 自动写
存什么 指令、规则、约定 Claude 在协作中学到的知识
加载方式 每次会话全量加载 仅加载 MEMORY.md 前 200 行,详细内容按需读取
典型内容 "用 2 空格缩进"、"测试用 vitest" "用户是前端工程师,偏好 TypeScript"

二、核心机制:按项目目录隔离

记忆存在哪?

所有自动记忆存储在 ~/.claude/projects/ 目录下,每个项目对应一个独立的子目录:

~/.claude/projects/
├── -home-ubuntu-workspace/           # /home/ubuntu/workspace 的记忆
│   └── memory/
│       ├── MEMORY.md                 # 索引文件
│       ├── user_profile.md           # 用户画像
│       └── project_xxx.md            # 项目信息
├── -home-ubuntu-my-app/              # /home/ubuntu/my-app 的记忆
│   └── memory/
│       └── MEMORY.md
└── -home-ubuntu-another-project/     # 另一个项目
    └── memory/
        └── MEMORY.md

目录命名规则:把项目的绝对路径里的 / 换成 -。输入一个路径试试:

记忆存在~/.claude/projects/-Users-me-my-app/memory/MEMORY.md
  1. 你在项目 A 里告诉 Claude 的偏好,在项目 B 里 Claude 完全不知道
  2. /resume 恢复会话也是项目隔离的——只能恢复当前目录下的历史会话
  3. 同一个 git 仓库的不同 worktree 共享同一份记忆(因为路径归属同一个 repo)

三、Auto Memory 的四种类型

Claude 会自动将学到的信息分为四类:

1. user(用户画像)

记录你是谁、擅长什么、怎么协作效率最高。

---
name: 用户画像
description: 前端全栈工程师,Node+TS 技术栈
type: user
---
前端全栈工程师,熟悉 Node.js + TypeScript 技术栈...

作用:Claude 会根据你的背景调整回答深度。对资深工程师不会解释基础概念,对新手会多给上下文。

2. feedback(反馈偏好)

你纠正过 Claude 的行为,或者确认过某个做法是对的。

---
name: wrangler 必须加 --remote
description: wrangler R2 命令必须加 --remote,因为本地 GLIBC 版本问题
type: feedback
---
wrangler R2 操作必须加 --remote 参数。
**Why:** 本机 GLIBC 版本低,本地模拟会报错。
**How to apply:** 所有 wrangler r2 相关命令都要加 --remote。

作用:同样的坑不踩第二次。这是最有价值的记忆类型。

3. project(项目上下文)

当前项目的背景、目标、进展。

---
name: CoffeesMap V2 迁移
description: V2 进行中,Supabase 数据迁移 + R2 图片迁移已完成
type: project
---
CoffeesMap V2 正在进行中...

作用:Claude 能理解你当前在做什么,给出更贴合上下文的建议。

4. reference(外部引用)

外部系统的位置和用途。

---
name: Cloudflare 账号信息
description: Cloudflare R2 bucket、API token 的位置
type: reference
---
R2 bucket 名称: xxx, API token 在 ...

作用:Claude 知道去哪里找信息,不用每次都问你。

四、MEMORY.md:记忆的索引

MEMORY.md 是每个项目记忆目录下的索引文件,每次会话启动时自动加载前 200 行。它只包含指向详细记忆文件的链接:

# Memory Index

- [user_profile.md](user_profile.md) — 前端全栈工程师,Node+TS
- [feedback_wrangler.md](feedback_wrangler.md) — wrangler 命令必须加 --remote
- [project_coffeesmap.md](project_coffeesmap.md) — CoffeesMap V2 迁移进展

注意:超过 200 行的内容会被截断,所以要保持索引简洁。详细内容放在各个记忆文件里,Claude 会按需读取。

五、/resume 也是隔离的

/resume 命令用于恢复之前的会话,它默认只显示当前项目目录下的历史会话。

快捷键扩展范围

在 /resume 的会话选择器中:

  • Ctrl+A:显示本机所有项目的会话
  • Ctrl+W:显示同一仓库所有 worktree 的会话
  • Ctrl+B:只显示当前 git 分支的会话
  • Space:预览会话内容

命令行用法

claude --continue          # 继续当前目录的最近一次会话
claude --resume            # 打开选择器
claude --resume "会话名"   # 按名称恢复(搜索当前仓库及其 worktree)

六、CLAUDE.md 的层级体系

CLAUDE.md 也有作用域,但它的层级更丰富:

组织级策略(强制执行,不可跳过)
  └── 用户级:~/.claude/CLAUDE.md(所有项目生效)
       └── 项目级:./CLAUDE.md 或 ./.claude/CLAUDE.md(当前项目)
            └── 本地级:./CLAUDE.local.md(个人覆盖,加入 .gitignore)
                 └── 子目录级:子目录下的 CLAUDE.md(按需加载)

实用建议:

  • 团队共享的规则放 ./CLAUDE.md,提交到 git
  • 个人偏好放 ./CLAUDE.local.md,加入 .gitignore
  • 全局个人偏好放 ~/.claude/CLAUDE.md

七、实战建议

1. 让记忆跨项目生效

如果你希望某些偏好在所有项目中都生效(比如"我是 TypeScript 开发者,偏好函数式风格"),把它写进 ~/.claude/CLAUDE.md,而不是依赖 Auto Memory。

2. 定期审查记忆

运行 /memory 命令可以查看当前加载的所有记忆文件,选中即可编辑。建议定期清理过时的记忆。

3. 主动让 Claude 记住关键信息

当你发现某个知识点未来会反复用到,直接说"记住这个",Claude 会立即保存。比如:

  • "记住:这个项目的部署用 GitHub Actions,触发条件是 push 到 main"
  • "记住:数据库连接串在 Vault 里,key 是 prod/db-url"

4. 切换目录前想清楚

如果你的工作跨多个目录,记得:每个目录的 Claude 是「独立的」。在一个目录里建立的上下文,不会自动带到另一个目录。

5. 善用 /resume 的快捷键

忘了在哪个目录聊过?用 Ctrl+A 显示所有项目的会话历史,可以快速定位。

八、总结

机制 作用域 谁写的 加载时机
CLAUDE.md 组织/用户/项目/子目录 你 每次会话启动
Auto Memory 项目目录 Claude MEMORY.md 前 200 行启动加载,详细文件按需
/resume 会话 项目目录(可扩展) 系统 手动恢复
Checkpoints 当前会话 系统 Esc×2 回退

记忆这块我写了一本书

《Agent Memory 工程实战》,20 章,从 claude-mem 源码讲起。

看这本书