memory-layered
六层记忆架构——不堆 context,按信息密度分层存储。
为什么需要这个
大多数 agent 的记忆只有一层——要么全塞 system prompt(爆 context),要么靠 session compaction(老消息被压成糊)。这个 skill 把记忆拆成六层,每层有明确的写入频率、检索优先级、遗忘策略。
六层结构
L1 对话层 —— 当前 session 的完整对话流(临时)
L2 索引层 —— memory.md,≤200 行,指向 L3(每次 L3 变更时更新)
L3 主题层 —— topics/ 目录,按主题拆文件(低频更新)
L4 技能层 —— 从对话中蒸馏出的可复用能力(手动触发)
L5 状态层 —— SESSION-STATE.md,当前正在做的事(高频更新)
L6 经验层 —— .learnings/ 目录,错误教训(失败时写入)
Quick Start
Step 1 — 初始化目录结构
在 agent 工作区创建:
mkdir -p memory/topics memory/.learnings
touch memory/memory.md
touch memory/SESSION-STATE.md
Step 2 — 写 memory.md(索引层,≤200 行)
格式:每个主题一行链接 + 一行简述。「索引与 topic 文件冲突时,topic 文件为准」。
# Memory Index
## 快速身份
- 用户名、年龄、城市 → topics/basic-profile.md
## 项目
- 项目A → topics/project-a.md
## 偏好
- 沟通风格、决策方式 → topics/preferences.md
Step 3 — 写 topics/ 文件(L3 主题层)
每个 topic 文件含完整的上下文。格式:
# 主题名
> 最后更新: YYYY-MM-DD
## 当前状态
{最新情况}
## 历史
{关键时间线}
## 决策记录
{为什么选了某个方案}
## 待办
{open questions}
Step 4 — 每次对话结束时更新
- memory_read → 加载 L2 索引
- 有新信息 → 追加到对应 topic 文件
- 索引超 200 行 → 裁剪或拆文件
- 重大事件 → 记入 L6 .learnings/
REM 做梦(只读扫描)
每天一次全量 read memory/,不做写入。发现:
- 跨主题模式:两个 topic 里出现同一个名字/项目
- 过期信息:标注
<!-- stale -->的条目 - 冲突:两个文件对同一件事有不同记录
只报告发现,不自动修改。修改由 SWS 或手动触发。
SWS 巩固(写入)
REM 之后运行,做的事:
- 合并 REM 发现的新信息到 topic 文件
- 删除标注
<!-- stale -->且超过 7 天的条目 - 重新生成 L2 索引
- 记录本次巩固日志
遗忘机制
maintain-learnings.sh:遍历 L6 .learnings/,超过 30 天未引用的条目移到 _archive/。
优雅降级
如果 topic 文件过大或检索超时:
- 只读 L2 索引 + 当前活跃的 topic
- 用 grep 按需检索其他 topic
- 不影响当前对话响应速度
与现有记忆系统的关系
大部分 agent 运行时已有原生的 memory 或 dream 机制负责机械整理 session 信号。这个 skill 做的是有判断力的记忆管理——决定什么值得记住、什么该忘、什么值得提炼为 skill。与原生机制互补,不替代。
初始投入
- 创建目录 + 写 memory.md:5 分钟
- 如果有历史对话,回填 topics/:30-60 分钟(一次性)
- 之后每次对话维护:<1 分钟
适用场景
- agent 需要跨 session 记住用户偏好和项目状态
- 多 agent 共享同一套记忆文件
- context 窗口有限,不能把所有信息塞 system prompt
不适用
- 单次问答 agent(不需要记忆)
- 已有完整向量数据库记忆方案(不需要文件层)
