SuperAPI AI 工具集

ai-memory-durable-pages

智能体与模型

查看项目

更新于 10-25 16:17

技能介绍

ai-memory durable pages

该技能仅用于经过明确意图的持久 wiki 变更。日常会话捕获是自动的,永久笔记需要用户明确请求。

工具组成

  • memory_write_page:写入持久 wiki 页面,用于永久性项目知识。
  • memory_delete_page:按精确路径删除持久 wiki 页面。
  • memory_restore_page:列出某页面的检查点(不带 rev),或将早前版本写回(带 rev),包括已删除页面。在多用户服务器上仅限管理员使用,且不涉及 scope 为 "profile" 的页面。

写入持久记忆

仅当用户明确要求永久记住某事、保存笔记、添加注释或记录项目知识时才写入页面。不要将持久页面用于临时进度、常规状态更新或下次会话上下文。

页面标题以 # H1 放在正文第一行,省略单独的 title 参数,ai-memory 会从该 H1 推导标题。内容保持简洁、事实化,并提供足够上下文,使未来智能体无需重读整个会话即可应用。

可选顶层元数据:kind(64 字符)、entities(10 个名称,每个 64 字符,经规范化与去重)、abstract(1,024 字符)、relations(以 causes、fixes 或 contradicts 映射到页面目标数组的对象,共 32 个目标,每个 1,024 字符)。关系目标使用 path、project:path 或 workspace/project:path;无扩展名的页面路径按 .md 解析,scope 组成部分须已去除首尾空白。限制作用于原始值,在去除、规范化或去重之前。任意 frontmatter 与作者字段不可编辑。

每次写入会整体替换页面及其元数据,省略的字段会被清除。需要保留现有内容时,应先读取当前页面。不存在补丁或比较后写入的前置条件。

当用户明确希望笔记为临时性质时,传入 expires_at(RFC3339 时刻或裸 YYYY-MM-DD,即该日 UTC 结束时刻)。TTL 到期后,常规搜索、recent 与 briefing 读取会隐藏该页面,下一次 forget sweep 将其删除。TTL 优先于 pinned,除非用户有意要求该行为,否则不要组合两者。

自行写入会话页面

当用户要求整合你参与的会话时,用你自己的模型而非服务器来写入其页面:先读取会话原始观察(检索技能涵盖该读取),然后用 memory_write_page 写入每个页面并传入相同的 session_id,以此将会话记录为证据并结算其排队的整合任务。匹配服务器的多页布局,最多五页:

  • sessions/<session_id>.md:会话叙事,tier: "episodic",kind: "fact"。
  • concepts/<slug>.md:常青概念页,tier: "semantic",kind: "fact"。
  • decisions/<short>.md:ADR 风格的选择记录,tier: "semantic",kind: "decision"。
  • gotchas/<slug>.md:失败模式与意外情况,tier: "semantic",kind: "gotcha"。
  • _rules/<slug>.md:作为独立指令写下的持久项目约定,tier: "semantic",kind: "rule"。

只拆分出会话实际确立的内容;短会话就是一页会话页。记录已说与已做的事,绝不要把用户的问题变成已确认的决定。

项目规则优先写入指令文件

如果用户要求创建持久项目规则(例如总是做 X、绝不 Y),而仓库表明存在规范智能体指令文件,则应更新该文件。仅当用户明确希望规则也进入 wiki,或不存在适用规范指令文件时,才使用持久页面。

删除持久记忆

仅按精确路径删除。若用户给出模糊标题或主题,先用只读查找解析出页面路径。除非用户明确点名,否则保留同级项目。

项目范围

根据 MCP 客户端的身份支持选择范围:

  • 会话感知的 MCP 客户端在每个请求中转发真实生命周期钩子 session id 时,应使用自动当前项目路由。对当前仓库省略 workspace、project 与 cwd;仅当用户点名不同项目时才传显式范围。
  • 静态 MCP 客户端(包括有生命周期钩子但无桥接将该钩子 session id 连到 MCP 请求的客户端)必须在每个项目范围调用中同时传入 workspace 与 project,包括关于本项目、此处或我们的工作的请求。当最近的 .ai-memory.toml 同时声明两者时,从中读取精确名称。无标记覆盖时,从规范化后的 upstream 推导项目,其次是 origin,使用不含主机名的完整仓库路径(github.com/acme/api → acme-api);仅当无有效远程时使用文件夹基名。切勿依赖服务器的最后活动项目。

该规则仅适用于项目范围调用。跨项目检索时,global=true 必须省略 workspace、project 与 scopes。以 scope: "global" 写下的固定偏好,省略 workspace 与 project。

架构决策采用 ADR 结构并置顶

当用户要求记录架构决策(选定方案、被拒替代方案、长期权衡)时,将其写为 decisions/<short-slug>.md 下的持久页面,带 pinned: true,并在正文中使用如下结构:

# <Decision title>

**Status:** accepted   <!-- proposed | accepted | superseded by [[decisions/other]] -->

## Context
迫使做出决策的情境;重要的约束。

## Decision
决策内容,以事实陈述。

## Consequences
哪些变得更容易、哪些变得更困难、放弃了什么。
被拒替代方案及原因,使未来会话不再重复提议。

置顶页面免于保留期衰减与整理,自动改进路径拒绝重写它们——除非人工取消置顶,记录保持不可变。要取代某个决策,写入新页面并把旧页面状态行设为 superseded by [[decisions/<new>]];绝不编辑旧决策的实质内容。注意:ai-memory 从不触碰项目仓库中的文件——由人工或其他工具在 docs/adr/ 目录管理的 ADR 完全在 ai-memory 之外;这些 wiki ADR 为其补充跨会话检索能力。

长期用户/团队偏好写入跨项目 profile

当事实是应适用于所有项目的长期偏好——技术选择(“总是使用 pnpm workspaces”)、代码风格(“优先组合而非继承”)、个人习惯(“未经询问绝不 --force”)——调用 memory_write_page 时使用 scope: "profile" 而非当前项目。该页面加入 profile/ 下的跨项目 profile(传入如 tools/pnpm.md 的路径,存储为 profile/tools/pnpm.md),每个项目的会话启动会将其列为默认,默认记忆读取将其作为 global_scope_hits 呈现。正文以 # Title 和一行祈使句开始;传入 applies_to(如 ["rust"])将其限定到该技术栈的项目,并在已有机制强制执行时传入 enforced_by(如 "pre-push hook"),这会使其不出现在会话启动摘要中;两者仅对 profile 条目接受,省略它们的重写会将其清除。用 memory_delete_page 与 scope: "profile" 删除。scope: "global" 仍直接写入共享 _global 范围。两种范围均不能与 workspace/project 参数组合。仅用于真正跨项目的偏好;项目特定规则留在项目内(或其指令文件,见上文)。规则文件始终优先于 profile:profile 是仓库未说明事项的默认值。