智能体的记忆,以及值得信赖的状态
会话一结束,智能体就忘掉一切。NeuroSquad 0.1.222 新增“记忆”:画一条箭头,智能体就能保存学到的东西,下周还能找回来——保存在你的电脑上,可按含义搜索。同时,Claude Code 卡片不再卡在“工作中”。
智能体的每次会话都从零开始。你解释过这个仓库用 pnpm、迁移文件放在 db/migrations、没人手动推送 staging 分支——到了下一次会话,或者画布上的下一个智能体,又得从头讲一遍。指令文件适合一次写好的规则,却管不了智能体在工作中学到的东西。
NeuroSquad 0.1.222 新增 “记忆”,一个基于开源记忆引擎 mem0(Apache-2.0)的插件卡片。连接到它的智能体会保存值得记住的内容,之后再找回来——在另一次会话、另一个智能体里,或者重启之后。记忆保存在你的电脑上,位于应用的数据文件夹中。无需注册账号,也无需运行服务器。
memory_add 保存一条团队规则,卡片显示它和智能体的名字。第二轮:自动回忆把关于迁移的记忆加到提示中。截图中的智能体连接的是按脚本应答的本地模型;记忆、搜索和回忆都是真实的应用。箭头就是权限
和所有插件一样,“记忆”是一张卡片。从智能体向它画一条箭头,智能体就获得六个工具:memory_search、memory_add、memory_list、memory_get、memory_update 和 memory_delete。移除箭头,工具随之消失,记忆仍留在卡片上。大多数命令行工具在下一次读取工具列表时就能看到变化,无需重启。Codex、Kimi Code、Cursor 和 Crush 只在启动时读取一次工具列表,因此它们一开始就有这些工具,由箭头决定调用能否通过。
记忆属于范围,而不属于某张卡片:此工作区(默认——这里所有连接的智能体共享)、所有工作区(适合处处适用的内容,比如你的约定),或 每个智能体独立(每个连接的智能体有自己的私有记忆,卡片显示全部)。除非你打开“智能体可以修改任何记忆”,智能体只能修改或删除自己保存的记忆。工具说明会告诉智能体:记忆是笔记而不是指令,密钥绝不能存入记忆。
关键词搜索与语义搜索
mem0 需要嵌入模型才能搜索。我们不希望卡片在开始工作前还要先准备什么,所以默认使用内置的关键词索引:添加卡片后立即离线可用,能找到与问题有相同词或词片段的记忆——“postgres”能找到“PostgreSQL”。它不认识同义词,卡片也会如实说明。
升级选项是 智能搜索:一个在你电脑上运行的多语言句子模型 paraphrase-multilingual-MiniLM-L12-v2。在卡片上按一下,就会一次性下载约 150 MB——模型、分词器和 WebAssembly 运行时——逐个文件校验 SHA-256,并为已有记忆重建索引。选择 WebAssembly 是有意为之:没有原生代码,同一套文件就能在 Windows 和两种 Mac 上运行,无需重新编译或签名。你也可以改用 OpenRouter 或你自己服务器(Ollama、LM Studio、llama.cpp、vLLM)上的嵌入模型。
为什么选这个模型
我们用英文、俄文和中文的文本对比较了两个同样大小的模型。multilingual-e5-small 给相关和不相关文本对的分数几乎一样——都在 0.75 到 0.81 之间——还把“用哪个包管理器?”排得离数据库那条记忆比离 pnpm 那条更近。MiniLM 能把它们分开:相关文本对约 0.53–0.58,不相关的低于 0.25。正是这个差距让卡片能把不相关的记忆排除在外。不过分数整体不高,所以自动回忆的阈值比搜索框更严格。
智能搜索没有设为默认,因为首次使用时下载 150 MB 会让智能体的第一次 memory_add 一直等着,还会消耗没人要求的流量。卡片会在合适的位置——记忆数量下方——提供这个选项。
不用开口的回忆与保存
我们告诉智能体,在可能依赖先前决定的工作之前先搜索记忆,但它们并不总是照做。卡片上的两个开关(默认都关闭)让这件事不再依赖它们。
- 自动回忆。 在连接的智能体每次提示之前,用提示在卡片的范围内搜索,最多五条相关记忆会以笔记的形式加入这一轮。如果搜索超过三秒,这一轮就不带回忆直接进行。Claude Code、Codex 和 Qwen Code 通过各自的提示钩子实现,OpenCode 和 Kilo Code 通过 NeuroSquad 插件,pi 和 omp 通过它们的扩展,Gemini CLI 通过一个专门的钩子。
- 自动保存。 连接的智能体结束一轮后,你的提示和它的最终回答会发给你在卡片上选择的事实提取模型——OpenRouter 上的或你自己服务器上的。模型只保留长期有效的事实,常常一条也没有。没有模型时这个开关不可用:否则每个提示都会被原样保存。
保留什么由你决定。卡片列出每条记忆及其作者——你、某个智能体或“自动”——可以就地修改或删除,并显示历史。导出会把一个范围写入 JSON 文件;导入时先显示预览再写入:多少条是新的,多少条已存在并将跳过。“撤销”只删除上一次导入添加的内容。删除工作区会删除它的记忆,删除智能体会删除它的私有记忆,删除对话框会事先说明数量。
依据会话记录判断 Claude Code 的状态
卡片的状态——工作中、需要你的回答、已完成、空闲——来自命令行工具的钩子。对 Claude Code 来说这还不够。我们检查了自己的 14 份 NeuroSquad Claude Code 会话记录,只看事件类型:166 轮中有 14 次中断,3 轮因速率限制结束,还有 38 个提示是在 Claude 仍在工作时输入的。最近有七轮结束时根本没有 Stop 钩子——发生在按下 Escape 或 API 出错之后——每一次都让卡片停在“工作中”。另一个问题是 Notification 钩子:除了真正的权限请求,它还会报告子智能体完成、对话框结果等事件,卡片会在一轮正常结束后把其中一些当成“需要你的回答”。
Claude Code 会把每一轮写入会话记录文件,钩子会告诉我们文件位置。现在每张 Claude 卡片在智能体工作时读取记录中新增的行,并据此核对状态:比当前状态更新的一轮结束、中断标记或 API 错误会结束这一轮;在完成之后开始的新一轮会让卡片重新变为工作中。在我们的测试中,回答中途按 Escape,卡片约 0.3 秒变为空闲。API 错误会以“Claude stopped: API error”结束这一轮并照常提醒,但提示队列不会发进失败的一轮。“需要你的回答”现在只来自权限请求或提问;后面排着提示的 Stop 也不再在两轮之间提醒“已完成”。
如果卡片看起来仍然不对,它的菜单里有 “复制状态追踪”:卡片最近的状态事件和状态转换,只有事件类型——不含提示、回答、命令或文件名。把它粘贴到问题报告里,我们就能看到卡片看到的情况。
插件有自己的页面 记忆(mem0),文档 里有使用指南;状态和通知见 通知。完整的更改列表见 0.1.222 更新日志。



