我上周看到莎拉·伍德斯的帖子，立即同意了其中的一半。

Wooders，MemGPT 的联合创始人（现在的 Letta），[认为内存不是插件，而是线束](https://x.com/sarahwooders/status/2040121230473457921)。线束做出外部工具无法控制的隐形决策：什么在压缩中幸存，上下文如何加载，代理是否可以修改自己的指令。 “要求将内存插入特工线束就像要求将驾驶功能插入汽车一样。”

框架很容易传递。我不断听到线束线作为固定背景重复出现，而不是作为检查的要求。部分原因是我同意的一半是正确的。

## 看不见的决定是真实的

[Claude Code 在线束中内置了多级内存层次结构](https://docs.anthropic.com/en/docs/claude-code/memory)：CLAUDE.md、会话状态、压缩规则、系统消息注入。当 [Claude Code 将 100K 令牌对话压缩为 20K 时，该工具将决定哪些内容能够幸存。没有任何外部工具可以复制或推翻该决定。

构建[虚拟上下文](https://github.com/virtual-context/virtual-context)的艾哈迈德·基德瓦伊(Ahmed Kidwai)在[人工智能一生中的大部分时间都在阅读有关其生活的文章](https://open.substack.com/pub/virtualcontext/p/ai-spends-most-of-its-life-reading)中从用户席位描述了相同的结构。每个回合都可以重播整个线程，因此大多数输入令牌都会重新读取已经发生的事情。当窗口填满时，压缩会用摘要替换原始历史记录。您不会收到消失物品的单项收据。

在单个会话中，线束对哪些内容进入上下文窗口、哪些内容被总结以及哪些内容被丢弃的选择是有效的记忆系统。伍德斯在这一点上是正确的。

## 该参数假设只有一根线束

该线程的结论是您应该使用内存优先的线束。这个结论需要你在其中进行操作。

我不知道。我使用 Cursor 作为我的主要界面，使用 Claude Code 来执行特定任务，使用 ChatGPT 来进行对话，并使用自定义脚本来实现自动化。这是四个安全带，每个安全带都对要记住什么做出自己的无形决定。

与我交谈过的使用代理进行构建的人使用三到五个工具。每个压缩方式不同，加载上下文不同，存储状态不同。用户成为他们之间的人类同步层。

添加更多线束嵌入式内存会使情况变得更糟，而不是更好。每个工具都有更好的内存。他们都不同意。

## 三个问题，不是一个

Wooders 将上下文窗口管理、会话状态和持久状态合并为一个她称之为“内存”的概念。这些在架构上是不同的。

**上下文窗口管理**：现在适合提示的内容，压缩的内容，模型本轮看到的内容。这是一个线束问题。伍德斯是对的。

**会话状态**：在对话中持续存在。这也是一个线束问题。

**持久状态**：跨会话、工具和代理持续存在，具有出处和版本控制。这是基础设施，而不是线束。

没有任何工具能够提供确定性的、模式绑定的、仅附加的、具有来源的跨平台状态。上下文管理是驱动力。持久状态是导航数据。它为驾驶提供信息，但不属于动力传动系统。

## 甚至上下文也可以外部化

Kidwai 的 [虚拟上下文](https://github.com/virtual-context/virtual-context) 是位于您的客户端和上游 LLM API 之间的代理。客户端设置了2000万个令牌的上下文窗口。该模型的真实窗口为 200K。虚拟上下文在它们之间进行压缩、索引和分页。具有 52 个工具链的 937K 代币 Claude Code 有效负载可压缩至约 65K 的策划信号。

在 [LongMemEval](https://github.com/virtual-context/virtual-context#benchmark-results) 上，虚拟上下文的准确度为 95%，而具有完整原始上下文的 Claude Sonnet 4.5 的准确度为 33%，而成本只有一半。该代理可与 Claude Code、Cursor、OpenClaw 或任何接受基本 URL 的客户端配合使用。 VCATTACH 允许两个客户端跨平台共享相同的压缩知识库。

机制很重要。 VC 不会绕过线束。该工具仍然会做出自己的压缩和截断决策并组成 API 请求。 VC 通过基本 URL 重定向拦截下游请求。当工具截断对话历史记录时，VC 会检测到截断并从其自己的持久存储中恢复。到达模型的是 VC 的策划窗口，而不是线束的原始输出。

伍德斯是对的，没有任何外部工具可以控制线束的内部决策。但是位于线束和 API 之间的代理可以观察这些决策并部分逆转它们。该工具在其自身压缩后发送 937K 个令牌。 VC 向模型发送 65K 的策划信号。线束仍然运行工具循环和代理。决定模型实际看到的内容的层位于外部。

剩下三层，而不是两层。线束运行代理。可选的上下文管理层可以位于线束和 API 之间。持久状态层位于所有内容之下，无论如何管理任何会话的上下文，都会保留真实的内容。

## 控制与价值

外部工具无法控制线束的压实决策。真的。但问题不在于状态层是否控制压缩。问题在于它是否提供了线束的本机内存所没有的价值。

大多数线束原生记忆都是短暂的。 Letta 是个例外：它按照设计在会话之间保留内存。但即使 Letta 的记忆也是特定于工具的、不可移植的且不确定的。代理通过 LLM 驱动的工具调用来决定存储什么以及何时存储，因此相同的对话可以产生不同的内存状态。光标无法读取。克劳德·科德读不懂。持久状态层是跨平台的、确定性的、版本化的并且可追溯源。

您不需要控制安全带才有价值。你需要在安全带的决定中生存下来。仅附加、持久状态在设计上得以保留。当线束压缩上下文时，状态层保存完整记录。当您明天打开不同的工具时，状态层会保留您昨天存储的内容。

## 触发与传输

Nicolò Boschi (Hindsight/Vectorize) [同意 Wooders 的观点](https://x.com/nicoloboschi/status/2042145292632379598)：“通过 MCP 使用内存并希望模型能够从内存中存储和搜索信息是没有希望的。”这种担忧是真实的。如果模型必须决定何时存储和检索，它可能会忘记存储。它可以在重要的时候跳过检索。

Hindsight 使用 [hooks](https://docs.anthropic.com/en/docs/claude-code/hooks) 代替 MCP：利用脚本在生命周期事件（例如会话启动、提示提交或工具完成）时自动运行。没有法学硕士决定是否解雇他们。 Hindsight 的 Claude Code 插件使用四个生命周期挂钩来自动保留每个对话并在每个提示上自动调用。有用。

但这个论点混淆了两件事：记忆是如何被触发的以及它存在于哪里。

Hindsight 的钩子调用 Hindsight API。它们不会写入线束的内置内存。钩子是触发器。外部服务器是存储。这种分离就是整个架构。写入 Claude Code 的本机内存的钩子将继承相同的限制：短暂的、不可移植的、明天对 Cursor 不可见。

Hooks解决了触发问题。它们没有解决存储问题。每个持久存储系统都需要两者。

钩子虽然不是普遍可用，但却很广泛。 Claude Code 有一个包含 12 个以上事件的插件系统。 Cursor 的 hooks.json 包含 14 多个 Beta 事件。 OpenCode 有 20 多个事件，包括压缩控制和系统提示注入。 Codex 在开发中具有带有工具级挂钩的会话挂钩。 ChatGPT 和 Claude Web 应用程序仍仅限 MCP。 Hindsight 本身就针对这些情况提供了 MCP 服务器。

答案是钩子（如果可用），MCP（没有的话），两者都会写入每个线束下方的相同持久状态层。 “MCP 毫无希望”是关于触发可靠性的陈述，而不是关于内存应该存放在哪里的陈述。

## 各层是互补的

五个工具做出五种不同的压缩和上下文决策，产生代理所知道的五种不同版本。 “驾驶”类比适用于上下文管理。当您驾驶五辆汽车并且需要所有汽车之间保持一致的导航数据时，它就会崩溃。

上下文管理和持久状态并不竞争。线束运行代理和工具循环。内置或外部的上下文层管理模型每轮看到的内容。状态层管理跨会话和工具的真实情况。没有任何工具或上下文代理提供可验证的事实、出处、确定性、模式验证或跨工具访问。支持线束嵌入式内存的论点同时也是支持每个线束下方共享状态层的论点。

## 我正在构建什么

我正在构建 [Neotoma](https://neotoma.io)，这是一个位于任何控制之下的结构化内存层：实体解析、时间线、出处、确定性、跨平台访问。

这些线程改变了我接下来要构建的内容。我将 MCP 视为唯一的积分表面。现在我添加钩子作为生命周期扩展层。 MCP 仍然是主要代理接口。

分离是故意的。 MCP 拥有代理合约：在会话开始时加载一次的指令，代理调用的结构化存储工具具有完整的上下文感知能力。 Hooks 拥有harness 契约：代理无法控制的生命周期事件。在代理看到每个提示之前，“UserPromptSubmit”挂钩会自动检索相关实体。 `PostToolUse` 钩子捕获每个文件编辑和 shell 命令作为观察。如果错过了代理自己的关闭商店，“停止”挂钩会保留原始对话。 “PreCompact”钩子观察线束将要丢弃的内容。

结果是 MCP 质量上限下方的可靠性下限。没有钩子，MCP 就可以像现在一样工作。如果没有 MCP，钩子提供原始观察捕获，但不提供结构化实体提取。两者一起提供确定性检索、被动观察、压实感知和崩溃恢复。

这与事后诸葛亮的方法不同。 Hindsight 通过钩子捕获原始成绩单，然后运行单独的服务器端 LLM 来提取实体。这意味着第二个模型会判断什么是重要的，但每次操作都会产生额外的成本和延迟。 Neotoma 保持实体提取代理驱动：理解对话的同一模型以零边际 LLM 成本进行提取。 Hook 提供了底层的可靠性，而不是智能。

接下来是 Claude Code、Cursor、OpenCode 和 Codex 的插件。挂钩写入 Neotoma，而不是写入安全带的内置内存。所有这些都到达相同的持久状态层，通过可用的钩子和不可用的 MCP。

伍德斯是对的，安全带拥有上下文。 Boschi 是对的，hooks 在触发可靠性方面胜过 MCP。 Kidwai 表明，甚至上下文管理也可以外部化。他们都没有解决的问题是，当你使用五个安全带时，谁拥有真理。这个答案必须存在于所有人之下。