站点图标 小满的博客 专题、文章与长期积累
ARTICLE

05 Agent Memory Runtime

Agent Memory Runtime

本页是 AI-Context 的常驻记忆运行时协议,设计目标类似 Engram Memory Protocol,但第一阶段只使用 Trilium。它不是按需启用的知识库说明,而是 Cursor、Claude Code、Codex 等 agent 在每轮任务中都应遵守的记忆纪律。

Always Active 原则

  • 只要工具能访问 Trilium MCP,就必须主动保存重要记忆,不等待用户说“记住”。
  • 不能访问 Trilium MCP 时,必须输出 Memory Update 区块,由可访问 Trilium 的工具代写。
  • Trilium note 是事实源;标签、关系、标题和正文共同构成可检索记忆。
  • 敏感凭据、令牌、密码、私钥不得写入 AI-Context。

可用 Trilium 操作映射

  • mem_save:用 search_notes 查重后,使用 create_noteupdate_note 写入。
  • mem_search:用 search_notes,优先限定 #ai_context#memory_status=active 和项目标签。
  • mem_context:读取 AI-Context 根节点、Memory Protocol、相关项目/工具/运维分区。
  • mem_update:用 update_note 更新同一 topic_key 对应 note。
  • mem_session_summary:在 📓 DevLog / Daily 或相关项目会话存档下写会话总结。

主动保存触发

完成以下任一事件后,应立即保存或生成 Memory Update:

  • 架构、设计、工具、库、流程或命名约定被确定。
  • 用户明确确认、拒绝、偏好某个方案。
  • 完成 bug 修复,并知道根因或非显然处理方式。
  • 发现代码库、工具链、部署环境、项目流程中的非显然事实。
  • 建立可复用模式、踩坑经验、配置方式或恢复流程。
  • 创建或更新了对未来有价值的文档、规则、脚本或项目结构。

自检问题

我或用户刚刚是否做出决策、确认偏好、修复 bug、发现非显然事实、建立约定、或形成未来会复用的流程?如果是,立刻保存。

保存格式

  • title:动词 + 对象,短而可搜索,例如“选择 Trilium 作为 AI-Context 事实源”。
  • type:preference、fact、decision、gotcha、episode、pattern、config。
  • scope:global、project、tool、ops。
  • topic_key:稳定键,用于同一主题 upsert,例如 memory/ai-context-runtimeproject/ekyc/android-sdk
  • content:What、Why、Where、Learned。

Topic Key 与 Upsert

  • 不同主题不能互相覆盖。
  • 同一主题演进时,复用同一个 #topic_key 更新原 note,而不是创建重复 note。
  • 不知道 topic_key 时,先根据 scope/type/title 生成稳定路径式 key。
  • 如果新 note 取代旧 note,添加 ~supersedes,并把旧 note 标记为 #memory_status=superseded

主动搜索触发

  • 用户提到“记得吗”“上次”“之前怎么做”“继续那个问题”。
  • 开始一个可能以前做过的项目、功能、部署或修复。
  • 用户第一条消息提到项目、功能、错误、工具或历史问题。
  • 执行高风险操作前,需要确认旧约定或历史坑点。

搜索顺序

  1. 先读当前会话或最近 DevLog。
  2. 再查 #memory_status=active 和匹配 scope 的 note。
  3. 项目任务加项目标签,例如 #project_ekyc
  4. 找到摘要后,如需细节再读取完整 note。

会话关闭协议

在说“完成”“就这样”“收尾”之前,必须检查是否需要写会话总结。总结结构:

Goal: 本轮目标
Instructions: 新发现的用户偏好或约束
Discoveries: 非显然发现、坑点、根因
Accomplished: 已完成事项
Next Steps: 后续动作
Relevant Notes/Files: 相关 note、仓库文件或命令

压缩或上下文恢复

  • 如果看到上下文压缩、摘要恢复、会话续接提示,第一步先把压缩摘要保存到 AI-Context 或 DevLog。
  • 然后读取 Memory Protocol 和相关 active 记忆。
  • 最后再继续执行任务。

冲突处理

  • 低风险同主题更新:直接 upsert 到同一 topic_key。
  • 新偏好覆盖旧偏好:新 note ~supersedes 旧 note,旧 note 标记 superseded。
  • 架构、策略、项目决策冲突:先向用户确认,不静默覆盖。
  • 仅不同范围适用:保留两条 note,并在正文写明 scope。