Convergent memory
Skill hd18512614931-cyber/convergent-memory/skills/convergent-memory
本地优先、人可读、跨 agent 的长期记忆收敛协议。当 agent 接入一个由发散笔记 + 收敛画像 + 归档组成的 Markdown 记忆库时,用本 skill 决定开局读哪里、如何收敛 (重写求秩而非追加)、何时归档、以及如何安全写入。适用于任何有文件读写能力的 agent,记忆库即一组本地 md 文件夹,零外部依赖。From its SKILL.md
npx -y skills add hd18512614931-cyber/convergent-memory --skill convergent-memoryAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.3 KB, as published. Nobody here has run it
Convergent Memory
把长期记忆从单个 agent 框架里剥离出来,存为本地 Markdown 文件夹,让任何有文件工具的 agent 读这个库就继承全部记忆。md 是协议,文件夹层级是结构,收敛是写入动作。
核心命题:收敛就是在判定哪些信息值得被反复召回,召回就是让 agent 直读这些文件来 代替每轮手动注入提示词。 库里反复被读到的,就是被反复召回的;收敛把值得召回的提前 摆到该在的位置、随时更新好,agent 读库即继承,无需谁手动喂。
换个角度看它是什么:把上下文压缩从「运行时、由专门的压缩子 agent 现做」搬到 「会话间、由同一个对话模型离线做」。 一轮对话结束时触发,模型结合本轮对话 + 上一次 召回,重写出下一会话该召回的内容——等于上一轮的自己给下一轮的自己写一封信。下一会话 的模型先读这封信(召回),再读用户当下的提示词。所以这里不需要独立的压缩模块或检索 模块:压缩器就是对话模型本身,召回就是 read,且全在会话之间离线备好。
库结构约定
记忆库根目录下按语义分三层(文件夹名可由模型按需演化,语义不变):
- 发散层(根目录散落 md):未收敛的灵感、随手记、当日笔记、待办/待修项。 本质是「本来想对 AI 说的话,先存着」的输入队列——预备注入语料。收敛把其中值得 反复召回的提纯进收敛层,召回时让 AI 直读这些文件,代替每轮手动注入。直读全量。
- 收敛层(权威源):当前画像/方法论/情境画像。整版可重写,是注入的主体。
- 常驻子层:每轮都读(核心画像)。
- 情境子层:按话题召回,不全量注入。
- 归档层:已收敛留痕的源文件。默认不读,翻旧账才检索。
开局读取规则
- 必读收敛层的常驻子层(核心画像)。
- 情境子层按当前话题语义召回,无关话题不注入。
- 扫一遍发散层,识别待收敛项(扫什么见下「收敛信号优先级」)。
- 默认跳过归档层、同步目录、
.obsidian/、配置文件。 - 库体量在人眼可扫范围内(约几万 tokens)时直读全量,不引入向量化或外挂记忆插件。 召回机制是在库大到读不完后才需要的,不要提前上拐杖。
收敛信号优先级(扫发散层时抓什么)
不是逐字读全文,是带着这四类信号去扫,按优先级排序(参考 Claude Code dream 的信号四分类):
- 用户纠正(最高):"其实不是…"「你写错了」「我说的是…」——直接改写画像的硬信号。
- 偏好/原则:"我喜欢…"「永远别…」「以后都…」——进核心画像或方法论。
- 决策/转变:"我决定…"「改用…」「想通了…」——心路演化,常需 merge 进已有情境文件。
- 复现模式:"又…"「每次都…」「老毛病」——反复出现才值得固化,单次出现先放着。
单次、模糊、情绪化的句子不急着收敛,等它复现或被用户确认再处理。
收敛协议(写入时遵守)
- 重写优先于追加:遇到同主题已有内容,做 merge-rewrite——合并、去冗余、降秩重写, 而不是新建文件或往后堆段落。类比:多个矩阵合并后求更小的秩,多余的归档。
- 只提纯不生产:进画像的每一条都必须能在对话里找到用户原话或明确推理。做约分
(去冗余),不做代数(凭空造项)。越界的漂亮话直接打回。
- 好结论:具体、可行动、有支撑。如「推他动手而非给鼓励」「找深圳 AI Agent 实习中」。
- 坏结论:模糊(「他说了些关于实习的事」)、或已在画像里的重复(「他挺技术的」)。
- 矛盾即改写并留痕:新信息和旧画像冲突时,删旧写新,但标注演化轨迹——
(更新于 YYYY-MM-DD,原为:X)。这个库记的是心路转变(臣服、无观众状态那类), 丢掉「我曾经怎么想」就丢了演化本身,所以改写要留痕,不是无声覆盖。 - 自包含、可移植:每份收敛文件能独立被另一个 agent 读懂,不依赖会话上下文。
- 收敛与回应分离:收敛是把事实沉淀进库;回应是解用户当下的困惑。两件事,分开做。
归档流程(收敛 ≠ 可归档)
完整三步,按能力分工:
- 高能力模型把发散笔记收敛进画像;
- agent 回应该笔记里的困惑,用户看完、心里有答案;
- 低成本模型把源文件移进归档层(不删除,保留留痕)。
整理时默认只读发散层 + 收敛层,不读归档层(省 token)。
收敛触发时机(什么时候做收敛)
触发时机是确定性规则,不交给模型「觉得该收敛了」——那既费 token 又不可控。收敛质量才交给模型判断。四种触发方式,按场景选:
- 用户喊(最稳):用户说「收敛一下」「整理进画像」时做。默认方式。
- 会话结束时:一段对话收尾时扫发散层、沉淀本轮信号。类比 Claude Code dream 的退出钩子。
- 定时批处理:距上次收敛超过约定时长(如 24h)才做一次,用一个时间戳记录上次收敛时间判定,不是每轮都跑。库小时这条非必须。
- 复杂任务后追问:单轮里发生了密集动作(如 8+ 次工具调用、跨 2 类以上工具)时,问一句「这轮要不要沉淀进库」。借 hermes-memory 的触发器思路,但只追问、不自动写——确定性触发、收敛仍交模型判断。
参考对比:Claude Code 的 dream 是「24h 定时 + 退出钩子批量 merge」;hermes-agent 是「每回合实时写、后端自愈矛盾」。本协议偏 dream 路线——本地 md、批量重写、人可读;只借 hermes 的「复杂任务触发器」当确定性信号,不抄它的后端自愈(那要绑记忆服务,违背本地直读)。
安全护栏
- 删除、归档、覆盖旧版、移动文件一律保留确认门。
- 移动操作只列清单交给用户/低成本模型执行,不在收敛步骤里替用户移动。
- 引用外部 agent 产出的总结前先验证来源,警惕名字撞车与未经核实的源码断言。
边界(不要被新平台勾走)
- vs 托管记忆平台(Dify/Mem0/Zep 类):它们要求把数据搬进它的库,制造第二数据源、 交出数据主权。本协议数据原地不动,方向相反。
- vs 向量记忆库:向量化只决定"命中谁",属归档层的可选优化,不是收敛本身。
- vs MCP server:MCP 是对外暴露的接口层,只在需要让外部 agent 即插即用时才做; 自己用有文件工具的 agent 直读 md,连 MCP 都不需要。