@skepsun/pi-loom
extensionLong-term memory plugin for pi with Dream Engine for insight generation — designed to collaborate with pi-esr
by — · v0.5.0 · published 4w ago
$ pi install npm:@skepsun/pi-loomSignals
Download trend
No downloads in the last 12 weeks.
README
@skepsun/pi-loom
适用于 pi 编码代理框架的极简记忆插件。提供带自动过期的时序记忆存储、实时召回,以及通过 LLM 驱动的模式发现从记忆生成洞察的 Dream Engine。
与 pi-esr 松耦合设计 —— 两个插件通过不透明的 entity_id 引用和 fire-and-forget 事件协作,同时各自独立部署。
架构
┌─────────────┐ entity_id(不透明字符串) ┌─────────────┐
│ pi-esr │ ←──────────────────────────────────→ │ @skepsun/pi-loom │
│ 状态图 │ tool_result hook 事件 │ 记忆流 │
└─────────────┘ └─────────────┘
任务 · 实体 记忆 · 洞察
关系 · 状态机 重要性 · 过期
闭包验证 Dream Engine
两个独立插件、两种独立数据模型、两个独立数据库。唯一的耦合点是自动捕获 ESR 任务完成事件写入记忆的 fire-and-forget 事件钩子。
特性
| 特性 | 说明 |
|---|---|
| 时序记忆 | 存储观察、决策、事实,支持重要性(0–1)、可选过期时间、标签 |
| 实体锚定 | 将记忆绑定到 pi-esr 的 entity_id 以支持按范围召回 |
| 实时召回 | 按实体查询、全文搜索、或列出所有活跃记忆 |
| Dream Engine | 多阶段洞察生成:加权采样 → 冲突检测 → 随机打乱 → LLM 提炼 |
| 洞察管理 | Agent 可以随着理解的深入更新或删除已有洞察 |
| 归档 | 从活跃池中移除记忆但保留在库中 |
| 自动过期 | 带 expire_at 的记忆到期自动清理 |
| 上下文注入 | [PI_LOOM] 块注入到 agent 系统提示中——格式稳定以命中前缀缓存 |
| ESR 协作 | 自动捕获 esr_promote_task → stable 为高重要性记忆 |
快速开始
安装
pi add @skepsun/pi-loom
或通过 npm 安装:
npm install @skepsun/pi-loom
插件随 pi 启动自动激活,基础使用无需配置。
Codex 和 Claude Code 也可以通过随包发布的原生 hooks 直接获得 [PI_LOOM] 上下文注入,并在工具调用后自动捕获低成本编码信号。该路径不启动常驻 worker,hook 进程直接读写本地 SQLite;MCP 仍用于显式召回、存储和审查。
pi-loom 仍保持为 MCP stdio server,避免破坏已有配置;本地操作面使用 pi-loom-cli:
pi-loom-cli doctor
pi-loom-cli status --json
pi-loom-cli context --max-total-chars 1200
pi-loom-cli search "release procedure" --limit 5
pi-loom-cli store "发布前运行 retrieval precision" --importance 0.8 --tags procedure
pi-loom-cli install codex
CLI 不启动常驻 worker,也不会自动修改 ~/.claude / ~/.codex 配置;安装命令只打印最小接入指引。
配置
| 环境变量 | 用途 |
|---|---|
PI_LOOM_DIR | 覆盖数据目录(默认:项目根目录下的 .pi-loom/) |
PI_LOOM_CODEX_HOOK_DISABLE / PI_LOOM_CLAUDE_HOOK_DISABLE | 设为 true 时分别关闭 Codex / Claude Code 原生 hooks,MCP 和服务模式不受影响 |
PI_LOOM_HOOK_DISABLE | 设为 true 时关闭所有原生 agent hooks |
PI_LOOM_CODEX_MAX_TOKENS / PI_LOOM_CLAUDE_MAX_TOKENS | 控制原生 hook 注入上下文的预算 |
PI_LOOM_HOOK_SCOPE_TYPE / PI_LOOM_HOOK_SCOPE_ID | 原生 hook 注入时的共享 scope 过滤 fallback |
PI_DREAM_MODEL | Dream Engine 使用的洞察生成模型,如 openai/gpt-4.1 或 deepseek/deepseek-v3.1。未设置时使用当前对话模型。 |
工具
| 工具 | 说明 |
|---|---|
loom_store | 存储一条记忆,支持重要性、过期时间和实体锚定 |
loom_recall | 按实体、全文搜索或列出全部活跃记忆 |
loom_search | 5 信号混合搜索:关键词、语义或混合模式 |
loom_detail | 按 ID 查看一条记忆的完整内容 |
loom_timeline | 查看某个实体的时间线 |
loom_episode | 查看完整会话摘要:决策、错误、变更、未完成事项 |
loom_dream | 运行 Dream Engine 从记忆中生成洞察 |
loom_insights | 查看已生成的洞察,可按实体过滤 |
loom_manage_insight | 更新或删除已有洞察 |
loom_extract | 从记忆中提取原子事实 |
loom_consolidate | 合并反复出现的潜意识记忆 |
loom_link | 在两个实体之间创建带类型的关系 |
loom_related | 列出与某个实体相关的实体 |
loom_graph | 从某个实体开始做 BFS 图遍历 |
loom_audit | 查看原始工具事件日志 |
loom_summarize_session | 为会话生成 LLM 摘要 |
loom_stats | 查看记忆统计 |
loom_status | 轻量级会话状态检查 |
loom_constrain | 创建路径条件约束 |
loom_check_path | 检查运行时护栏违规 |
loom_offload | 将大文本卸载到外部文件,返回 [REF:node_id] |
loom_offload_recall | 按 node_id 取回卸载内容 |
loom_mermaid | 从卸载的会话引用生成 Mermaid 任务图 |
loom_context | 构建 [PI_LOOM] 上下文注入块 |
loom_profile | 生成或查看实体画像 |
loom_setup | 会话初始化:检查 DB 与 embedding 配置 |
loom_evidence | 基于来源引用的查询时证据提炼 |
loom_views | 从 MemoryNode 导出只读 Markdown 视图 |
推荐默认路径:loom_setup → loom_recall/loom_context → loom_review → loom_apply。其他工具只在需要事实提取、合并、画像、卸载或图遍历时使用。
Dream Engine(梦境引擎)
Dream Engine 通过四步管线生成洞察:
- 加权采样 —— 按重要性(70%) × 时间新鲜度(30%) 指数衰减采样
- 冲突检测 —— 找出相互矛盾的记忆对(如同实体上的 task-started ↔ task-completed)
- 随机打乱 —— 消除位置偏差
- LLM 提炼 —— 生成简洁、可操作的洞察并附带支持记忆引用
洞察存储于独立表中,不回流到记忆池——防止回声效应,同时保持在 agent 上下文中可见。
触发时机:系统提示在活跃记忆达到 10+ 时提示可运行 loom_dream。也可手动触发或配置自动触发。
设计原则
- 独立且能完美协作 —— Loom 和 ESR 各自独立可用,通过不透明 ID 协作
- 统一记忆图 —— facts、decisions、procedures、handoffs、profiles、insights 都是 MemoryNode
- 克制的设计 —— 无全局索引、无自动跨项目同步、过期作为核心机制
- 上下文格式稳定 —— 确定性
[PI_LOOM]块以命中 LLM 前缀缓存 - 杜绝回声循环 —— 洞察为只输出产品,Dream Engine 仅采样原始记忆
- 仅追加记忆 —— 语义不可变(归档而不删除)
Memory Graph Runtime
pi-loom 保持一套极简架构:memories 表是 MemoryNode,memory_edges 表是 MemoryEdge,procedures、handoffs、profiles、insights、decisions 都只是同一张表上的视图。
loom_review 基于同一套图模型产生 merge、supersede、contradicts、promote-to-procedure 等维护提案。它只提出建议;只有显式调用 loom_apply 才会修改记忆或写入 MemoryEdge。
loom_views(scope_type, scope_id) 会在 .pi-loom/views/ 下导出确定性的 Markdown 投影:index.md、procedures.md、handoffs.md、decisions.md、profiles.md、insights.md、edges.md。这些文件只用于检查和交接;SQLite 仍然是唯一事实源。
当前改进边界和后续顺序见 Memory Graph Runtime Roadmap。
许可
MIT