实测对比 Claude Code、Cursor、Codex、VS Code、Windsurf 在重启后恢复对话历史的能力,拆解「历史消失」问题的真正原因和各自解决方案。
周五你合上终端,智能体刚好完成了一半的重构——它对这套代码的理解已经不比你差了。周一打开新会话,让它继续,它问这是哪个项目。没有任何工具坏了,这是动手修之前首先要澄清的第一件事。我测试的五个编码工具(Claude Code、Cursor、Codex、VS Code 和 Windsurf)都自带恢复上一次会话的方法,没有哪个是坏的。用户真正碰到的缺口比"我的历史记录没了"要窄得多,准确命名它才是关键。
在把"记忆"这个词拆开之前,比较五个产品的记忆功能毫无意义。四个问题把它们清晰地区分开了:你能否回到同一个会话;即使回来了,有什么还是会降级;一个全新的会话会从磁盘加载什么;以及是否存在智能体为自己写的内置记忆,以后会自己读回来。以下每一条事实都来自厂商发布的页面,我在 2026-09-12 重新核对过,每条对应的完整页面链接放在完整对比文章里。
恢复功能处处都有,前提站不住脚
Claude Code 记录了五个入口,其中一个是当前目录下最近一次会话的 flag,以及一个选择器,并声明恢复会话时会同时恢复对话以及保存在其中的状态。它的文档也说明了哪些东西回不来,这很容易被忽略:MCP 配置的 flag、设置和添加的目录需要重新传入。
Cursor 只能从 CLI 恢复,记录了三种方式:"要恢复最近的对话,用 agent resume、--continue 或 /resume 斜杠命令",以及一个会话列表供选择。Codex 恢复上一次会话或指定会话,其恢复命令在自己的参考文档里标为 stable。VS Code 不需要 flag:它的智能体会话视图在界面里直接恢复之前的会话。Windsurf(现名 Devin Desktop)从 CLI 和桌面应用的历史面板恢复。
实际后果很小但有用。如果你丢掉的是刚才那个对话,你其实没有丢掉它。你是开了一个新的而不是回到那个。
真正的缺口是新会话
Claude Code 直截了当地说明:每次会话开始时都会有一个全新的上下文窗口。一个新任务、一个新终端、不同的日子,这五个产品里没有一个会把更早的对话带入新会话。人们说"智能体忘了"时真正指的就是这个,这不是五个产品里任何一个的 bug,而是持久化的单位就是会话本身。
五个产品在一个新会话里都会重新加载的是人写的静态指令文件。VS Code 称之为"始终开启的指令",包含在每次聊天请求里。Cursor 读取自己的 rules 格式以及其他工具的文件。Windsurf 的默认智能体在每次会话开始时注入规则。所以全新的会话仍然知道你的规范,却对上周的事一无所知——这也说明了那不是记忆:指令文件是人一次性决定的东西,而记忆是智能体从实际发生的事情中积累出来的。
恢复不是完美的倒带
五个产品都记录了压缩功能,但在这里它们不再一致。Claude Code 是唯一一个记录了选择而非静默替换的:在 Pro 和 Max 计划中,恢复一个空闲超过约一小时且超过十万 token 的会话时,会弹出一个对话框,有三个选项:从摘要恢复、按原样恢复完整会话、不再询问。它对损失的描述也异常具体:文档说摘要会替换逐字的对话,完整的工具输出和中间推理过程会消失,指令文件、自动记忆和最多五个最近修改过的文件会从磁盘重新读取。
Codex 在命令触发时压缩,也在达到可配置 token 限制时自动压缩,默认不设限。VS Code 对损失有明确说明,对触发条件却沉默:"长对话早期的重要细节可能被压缩或丢失",在其当前页面里找不到任何阈值。Cursor 记录了每次聊天共享一个固定上下文窗口,智能体在填满时压缩,但没有命名阈值也没有说明丢弃了什么。Windsurf 记录了后台压缩和强制压缩,对压缩保留了什么只字不提。
内置跨会话记忆:五个里三个,差异比存在本身更重要
一句话概括:如果新会话知道你的规范却不知道上周的事,那记忆没有失效。指令文件在工作,根本不存在记忆这回事。
Claude Code 有自动记忆,用它自己的话说默认开启。它为自己写四种笔记,在文件里打标签:你的角色和偏好、你给出的纠正、无法从代码或 git 历史推导的正在进行的项目决策,以及指向项目外信息所在位置的指针。每个项目有自己的记忆目录,它在每次会话开始时与指令文件一起加载。
Codex 有记忆功能,默认关闭,需要你手动开启:"本地 Codex 记忆默认关闭。"
VS Code 附带了一个记忆工具,文档里用一张表说明了三种作用域:用户记忆跨会话和workspace持久化,仓库记忆跨会话但限定在 workspace 作用域,会话记忆在聊天结束时清除。三种都存在本地。它的设置参考列表把开关标为实验性,描述为启用该工具"让智能体可以在对话之间保存和回忆笔记",默认值列打印的是 true。
Cursor 是所有人两个方向都会搞错的。功能没有参考页面,rules 页面把持久化层指向了别处:"大语言模型不在 completions 之间保留记忆。Rules 在 prompt 层面提供持久化、可复用的上下文。"停在这里会得出"Cursor 没有记忆",这是错误的:1.0 版引入了记忆功能,"有了记忆,Cursor 可以记住对话中的事实并在将来引用",1.2 版将其正式发布。然后管理它的界面在 2025 年 11 月的 2.1.x 系列里加了进去,任何地方都没有 changelog 条目;厂商自己的支持论坛是唯一提到这件事的地方,同一个员工账号后来既说过功能被移除了,也说过只是界面没了功能本身还在,通过聊天命令管理。我两条都报告,因为两条都是厂商的说法。
Windsurf 每次都需要加限定词。记忆功能属于旧版 Cascade 智能体,当前默认智能体 Devin Local 不是 Cascade。记忆页面顶部的警告提示和默认智能体自己页面上的同一行字说得一样:默认智能体不在会话之间持久化记忆。Cascade 的功能是真实存在且有文档的。变化的是新标签页打开的是哪个智能体。
三个记忆,同一家公司
有一个区分值得做,因为大部分困惑从这里来。2026 年 8 月底 Anthropic 统一了其聊天产品和 Cowork 之间的记忆。这个公告是关于助手应用的,说得很准确:Free、Pro 和 Max 计划默认开启,敏感话题默认关闭,Team 和 Enterprise 由管理员控制。公告正文完全没有提到编码工具或 API。所以在聊天应用里开启记忆不会改变终端里的智能体,编码工具里的自动记忆是一个不同作用域的不同功能。同一家公司,同一个词,两套机制。
一个持久化记忆层在什么地方补上了缺口,在什么地方没有
我在做这个,所以这一节要重点考量。恢复是一个客户端功能,记忆层既不替代也不竞争于它:无论有没有连接记忆层,resume 命令行为都一样。记忆层补充的正是新会话里的那个缺口。一次写下的一个事实会在任何后续会话里回来,包括一个全新的会话、在另一天、在一个完全不同的工具里,因为它存在于会话之外而不是之内。
这里有两个限制,说得和上面的缺口一样直白。第一个是这取决于智能体实际调用了写入和读取;一个工具可用不等于模型选择使用它,这就是 standing-instruction 技术存在的原因。第二个是 Claude Code 的自动记忆和同一个想法是真正的近亲,默认开启,说不是就是假的。区别在于作用域:那个目录是一套工具和一个项目的笔记,而一个记忆层跟着一个账户穿越每个连接的工具。这是一个真实的差异,不是在说它们的功能更差。
花五分钟检查一下你自己的配置
打开你最常用的工具,恢复昨天的会话而不是开一个新会话。然后开一个真正的新会话,问它一个只有更早对话才能回答的问题。如果新会话知道答案,跨会话记忆是开着的。如果它知道你的规范却不知道那个对话,那就是指令文件在正常工作。接下来检查你工具的记忆功能是否启用——五个里有一个不是默认开启,还有一个已经没有界面了。最后,如果你跨两个工具工作,用第二个问同样的问题,因为那个边界是五个产品里没有一个会自己跨越的。
披露:我在做 Mnemoverse,一个通过 MCP 连接的 AI 智能体持久化记忆层,所以最后两节请酌情考量。完整的对比和各来源页面在我们的 library 上。