Claude Code Memory 系统详解

Claude Code 的 Memory 系统是让 Agent 真正“认识你”的核心基础设施。不同于传统的对话历史,它是一套跨会话的、结构化的持久化记忆机制——Agent 不仅能记住你说过什么,还能记住你是谁、你的偏好、项目背景,甚至你对它工作方式的反馈。

1. Memory 5 层架构

Memory 并不是一个单一的存储,而是由 5 个层次组成的体系。每一层有不同的生命周期、写入方式和用途。

Interactive · Memory 5 层架构
Memory 5 层架构
点击各层查看详细说明
单次会话
CLAUDE.md用户编写始终加载
会话记忆FEATURE-GATED
对话聊天历史cost: zero
↓ 跨会话 / 全局级别
团队记忆
自动记忆本文的重点
这是 CC 从多次对话中学习用户信息的地方:角色、偏好、项目上下文以及外部系统的指引。存储为本地 .md 文件,带有 YAML frontmatter。
4 种类型: user / feedback / project / ref
~/.claude/projects/<slug>/memory/

从上到下,前三层(CLAUDE.md、会话记忆、对话历史)的生命周期都局限于单次会话或由用户主动管理。真正有意思的是最底下的自动记忆——这是 Claude Code 从多次对话中自主学习、自主管理的记忆层。

2. 四种记忆类型

自动记忆不是一股脑地什么都记。它严格区分四种类型,每种类型有不同的触发条件和用途。这四种类型本质上是为 Agent 检索时提供的标签——帮助它快速判断一条记忆与当前任务的相关性。

Interactive · 四种记忆类型
四种记忆类型
本质上是为 Agent 检索提供的标签
用户 (user)
角色、领域、偏好
你是谁
反馈 (feedback)
修正与确认方法
你希望 CC 怎么做
项目 (project)
截止日期、决策
代码和 Git 看不到的
参考 (ref)
代码库外的关注
外部系统的指引
MEMORY.md(索引文件):
1 - [用户档案](user_profile.md) — 后端工程师,5年 Python 经验
2 - [测试规范](feedback_testing.md) — 集成测试中禁止 mock 数据库
3 - [认证重写](project_auth.md) — 合规需求驱动,截止 2026-04-15
4 - [Bug追踪](reference_linear.md) — 流水线 bug 在 Linear INGEST 项目
feedback_testing.md(单个记忆文件):
---
name: 测试规范
description: 集成测试必须使用真实数据库连接,禁止使用mock
type: feedback
---

记忆的存储格式非常简单:每条记忆一个 .md 文件,带有 YAML frontmatter(name、description、type),再加一个 MEMORY.md 索引文件作为目录。这个设计既方便 Agent 读写,也方便人类直接查看和编辑。

3. 如何写入记忆?

记忆的写入分三个阶段:实时提取、定期整合、判断删除。

Interactive · 记忆写入流程
如何写入记忆?
三个阶段:提取 → 整合 → 删除
后台 Agent 浏览最近 N 条消息
接收现有记忆,避免重复创建
值得记住?
yes
新建记忆文件
或更新已有文件
写入索引 MEMORY.md
目录表 + 单行摘要,方便后续检索
no
skip

关键设计决策:

  • 逐轮提取是增量的——后台 Agent 只看最近几条消息,不会重读整个对话
  • 定期整合由独立的 autoDream 子 Agent 执行,它有自己的上下文,不会干扰主对话
  • 删除是保守的——宁可保留可能过时的记忆,也不会冒险删掉有用信息

4. 如何检索 Memory?

检索是 Memory 系统中最精巧的部分。核心问题:一个项目可能有上百条记忆,但每次对话的上下文窗口有限,如何选出最相关的?

Interactive · 记忆检索流程
如何检索 Memory?
如何决定加载哪些记忆?
MEMORY.md 始终加载到 system prompt
索引文件,上限 200 行 / 25KB
但单个记忆文件不会
↓ 非阻塞
Sonnet 相关性过滤器
即使主模型是 Opus,过滤仍由 Sonnet 完成
① 扫描所有记忆文件的前置元数据
最多 200 个文件,按最新排序
② 格式化清单
[type] filename (timestamp): description
③ 将清单 + 用户查询发送给 Sonnet
④ Sonnet 返回最相关的前 5 个文件名
不确定就不选
⑤ 只有这 5 个文件被加载到上下文中
已展示过的文件会被排除,把名额留给新记忆
所以 description 字段至关重要,它是 Sonnet 判断相关性时唯一能看到的东西
较早的记忆以怀疑态度被添加

这个设计有几个精妙之处:

  • Sonnet 做过滤而非主模型——即使你在用 Opus,筛选记忆的仍然是 Sonnet。这实现了关注点分离:主模型专注推理,过滤模型专注相关性判断
  • 只看 description 不看内容——Sonnet 在筛选时只能看到 frontmatter 中的 description 字段,看不到记忆的完整内容。这就是为什么 description 的质量至关重要
  • 过时警告是框架注入的——不是靠 Agent 自觉,而是系统在加载记忆时自动附加警告

5. Memory 安全怎么保证?

让一个 AI Agent 自主读写本地文件系统,安全是绕不开的问题。Claude Code 的 Memory 系统采用了三层防护:

Interactive · Memory 安全机制
Memory 安全:三层防护
第一层
全局锁定
存储路径只能全局改
第二层
路径校验
拦截越权路径
第三层
沙箱白名单
名单外直接拒绝
安全写入
项目不能改路径,防止恶意仓库劫持
用 .. 往上跳?拦截。指向根目录?拦截
Agent 在沙箱中运行,写入操作逐一校验
堵死一切"借记忆功能偷偷写到不该写的地方"的可能

核心原则:不信任模型的自律性。安全不是靠 prompt 里写“不要做坏事”,而是通过代码层面的硬约束来保证。路径锁死、权限校验、沙箱隔离——每一层都是代码级别的防护,不依赖模型的“理解”或“配合”。

总结

Interactive · 总结
模型很强大,但 Harness 不信任它在无监督下管理自己的记忆。每一步都有约束。
写入
格式强制
YAML 元数据
四种固定类型
模型不能自选格式
检索
独立模型过滤
Sonnet 做筛选
主模型无法干预
主模型碰不到筛选
删除
无自动触发
只在整合阶段判断
不会静默移除
记忆只增不减
过时
框架注入警告
强制标注日期
Agent 必须先验证
老记忆自带"保质期"

Memory 系统体现了 Claude Code 架构哲学的一个核心观点:模型很强大,但 Harness 不信任它在无监督下管理自己的记忆。每一步操作——写入、检索、删除、过时处理——都有独立的约束机制。这不是对模型能力的否定,而是工程上的务实:在 Agent 真正可靠之前,框架层面的安全网是必要的。

从使用者的角度看,Memory 系统的存在让 Claude Code 从一个“每次从零开始的助手”变成了一个“认识你的协作伙伴”。它记住你的编码风格、测试偏好、项目背景、甚至你不喜欢它做什么。随着对话的积累,这种个性化会越来越精准——这也许是当前 AI 编码工具中最被低估的特性。

Comments

0 comments