Claude Code 看似"记得"很多事——能叫出你的名字、知道项目结构、遵守你的工作规范。但这些"记忆"分布在两套独立机制里,新手极易混淆。
这份手册一次讲清四件事:两种记忆机制的区别、全局与项目的范围划分、四象限决策法、实战的提示词协议。
CLAUDE.md 告诉 Claude "你应该怎么做"
memory 告诉 Claude "我们知道什么事实"
| 位置 | 范围 | 何时加载 |
|---|---|---|
~/.claude/CLAUDE.md | 全局 | 每次启动都加载 |
<project>/CLAUDE.md | 项目 | cwd 在该项目时加载 |
<project>/<sub>/CLAUDE.md | 子目录 | 进入更深目录时叠加 |
<project>/CLAUDE.local.md | 项目 + gitignored | 同项目,不进 git |
关键规则:CLAUDE.md 从 cwd 向上级目录逐层叠加,所有命中的层都会加载。
所以启动 cwd 越深,加载的层越多。宁深勿浅。
~/.claude/projects/<encoded-cwd>/memory/
例:cwd = /Users/teemo/Desktop/teemo-workspace/Projects/html-lab/
对应:~/.claude/projects/-Users-teemo-Desktop-teemo-workspace-Projects-html-lab/memory/
(把所有 / 替换成 -)
反直觉的关键事实:memory 没有真正的"全局"版本。
它永远按 cwd 隔离。如果想让某个事实在所有项目都被 Claude 知道,唯一办法是写进全局 CLAUDE.md(即使本质是事实而不是规则)。
左下象限是关键反例:想全局可见的"事实"也得借道 CLAUDE.md,因为 memory 没有全局版本。
cwd 决定哪些 CLAUDE.md 被加载。让 cwd = 任务的实际所在地,宁深勿浅。
| 要做的事 | 启动 cwd | 叠加层数 |
|---|---|---|
| 写飞书财务相关 | 飞书/人生无限公司/财务/ | 5 层 |
| 写飞书随想(KB 内) | 飞书/人生无限公司/ | 4 层 |
| 飞书跨模块讨论 | 飞书/ | 3 层 |
| 处理某 GitHub 项目 | Projects/<名>/ | 3 层 |
| Wiki / 跨项目 | ~/Desktop/teemo-workspace/ | 2 层 |
| 无关项目 | ~ 或 /tmp | 1 层(仅全局) |
用显式提示词,不要让 Claude 猜。
为什么不让 Claude 猜?代价不对称。
写到项目(窄)猜错 → 在其他项目失效,损失小。
写到全局(宽)猜错 → 污染所有项目 + 浪费 token + 影响判断,损失大。
按性质 + 范围两个维度判断。
| 你说的话 | 性质 | 范围 | 落点 |
|---|---|---|---|
| "默认回答中文" | 规则 | 全局 | ~/.claude/CLAUDE.md |
| "飞书文档用 XML" | 规则 | 项目 | 飞书/CLAUDE.md |
| "我女朋友叫小明" | 事实 | 全局 | ~/.claude/CLAUDE.md 用户区 |
| "Margin 部署在 Vercel" | 事实 | 项目 | Margin memory |
| "我喜欢用 Tailwind" | 偏好 | 全局 | ~/.claude/CLAUDE.md |
已写入 ~/.claude/CLAUDE.md v1.1
用户说"记一下 X"但没指定落点时,Claude 必须:
① 先问性质(规则/事实)+ 范围(全局/项目)
② 改全局 CLAUDE.md 前必须告知用户
③ 项目 memory 可自主写,写完报备
为什么这么少?几个原因叠加:
对 Teemo 这种"主动维护 CLAUDE.md"的用户,memory 重要性其实不高。
规则化沉淀已经在 CLAUDE.md 层完成。memory 累积少不是 bug,是 CLAUDE.md 体系成熟的副作用。
不用焦虑,继续以 CLAUDE.md 为主即可。
feishu,可以加 obs、margin)$ cd /tmp
$ claude
然后问:
我叫什么?你现在加载了哪些 CLAUDE.md?
预期回答:
~/.claude/CLAUDE.md/tmp 不在任何项目下)如果不符合预期,说明全局 CLAUDE.md 出了问题(被改坏、被删、路径错),需要排查。