Claude 跨会话行为不一致。有时规范被遵循,有时被忽视。第一个诊断步骤不是猜测、不是归因于随机性、不是重复内容。是运行 /memory 看哪些文件被实际加载了。
/memory vs MEMORY.md
/memory 命令 — 在会话内运行。显示哪些 memory 文件当前被加载。这是 Claude 有权访问什么的真相。
MEMORY.md 文件 — 一个索引,按路径指向 memory 文件。MEMORY.md 中列出的文件可能没有被加载,如果引用的文件不存在、frontmatter 格式不对、或被移到了不同路径。
MEMORY.md 说的是什么应该加载。/memory 显示的是什么实际加载了。两者不一致时,/memory 是对的。
最常见的失败:路径不匹配
一个队友重组了 memory 目录结构。一个开发者报告 Claude 不再回忆架构上下文。运行 /memory 确认:架构文件不在加载列表中,尽管文件仍然在磁盘上存在。
根因:MEMORY.md 仍然引用文件的旧路径。重组后,索引指针不再匹配文件的实际位置。修复:更新 MEMORY.md 中的路径。
Frontmatter 错误导致静默失败
一个团队把项目上下文迁移到 memory 文件。第 1 周:/memory 显示 90% 的会话加载了全部 5 个文件,准确率 96%。第 2 周:只有 60% 的会话有全部 5 个文件加载,准确率降到 78%。变化:一个队友更新了 2 个 memory 文件的 frontmatter。
Frontmatter 更新可能引入了格式错误——无效 YAML、缩进错误、缺失字段——导致那 2 个文件静默加载失败。/memory 本可以立刻捕获这个,显示只加载了 5 个中的 3 个。
Memory 文件加载不是概率性的。不是随机的。如果 /memory 跨会话显示不同文件,有一个具体的配置原因。
跨配置层的系统化调试
当 Claude 的行为偏离预期,且有多个配置源(CLAUDE.md、.claude/rules/、memory 文件)时:
/memory会话开始时——验证所有期望的 memory 文件都加载了- CLAUDE.md — 检查内容正确且存在
.claude/rules/paths — 验证 glob 模式匹配正在编辑的文件
比较每层的实际加载配置和期望配置。它们分歧的层就是问题来源。
对于 CI 流水线,加一个 /memory 检查步骤记录加载的文件。比较一致和不一致运行之间的日志,识别哪些 memory 文件和质量差异相关。
反模式:假设随机性
一个团队跨成员有不一致的 Claude 行为。反应:“Claude 就是不确定性的,加重试逻辑吧。”
这跳过了诊断步骤。跨会话不一致几乎总是表明配置加载差异——缺失文件、断掉的路径或格式错误。/memory 几秒内就能揭示这些。根因是缺失的配置文件时,重试逻辑什么也解决不了。
不存在的东西
claude --list-memory命令行标志- 设置面板的 Memory 标签页
- frontmatter 中的 Memory 文件优先级标签
- 跨会话的 Memory 路径缓存
- 基于修改时间戳的加载 — 时间戳不影响加载
- 自动相关性过滤 — memory 文件要么加载要么不加载
一句话总结: 运行 /memory 看会话中实际加载了什么——MEMORY.md 是什么应该加载的索引,不是什么实际加载了的实时报告。