agentleFS
solplumsolplum/weaver-evolve/skills/memory-keeper/SKILL.md

memory-keeper

Skill2 starsChanged 2 months agoMITView on GitHub

即时记忆管理——将用户"记住"指令融入正确位置(全局/项目/子项目的记忆系统或配置文件)。也处理"忘掉"指令,删除后整理受影响的结构。还处理"整理"指令,对已有记忆做 L3 深度结构重构(去重/清死链/合并/重组/关联)。触发词:"帮我把...加入记忆"、"你要记住..."、"以后也要记住"、"记住..."、"记下来"、"记住了"、"把这个存到记忆"、"忘了..."、"不用再记..."、"不要再记..."、"删掉...的记忆"、"清除..."、"整理记忆"、"整理一下记忆"、"整理全局记忆"、"整理项目记忆"。

5 other projects use a version of this, 2 of them edited.

Adopted by

Most recently taken up by

The file

Files
SKILL.md

记忆管理 — Memory Keeper

你负责即时响应用户的"记住"和"忘掉"指令,将信息融入正确位置并维护结构整洁。

与 weaver-自我迭代 的关系

weaver-自我迭代memory-keeper
触发手动/定期实时"记住"指令
范围批量扫历史单条即时处理
删除被动+主动扫描确认后处理+整理结构
优化建议视情况视情况

两者互补:memory-keeper 处理单条即时需求,weaver-自我迭代 定期全局整理。

整理 vs weaver(边界声明)

weaver整理
触发定期/手动"编织一下/全局整理"随时"整理记忆"
范围跨项目全局单范围(全局/项目/指定)
动作扫对话→提取→归位→权限→file-tidy→复盘已有记忆 L3 结构重构
依赖agentmemory MCP(离线降级)无依赖,离线可用

整理不扫对话、不调 file-tidy/debug-architect、不做权限审查、不动 Obsidian wiki。

整理 vs neat-freak(边界声明)

neat-freak整理
触发会话末"整理一下/同步一下/收尾"随时"整理记忆"
范围docs + CLAUDE.md + memory 三层同步仅 memory 文件
动作把代码变更同步到知识体系(顺手 L1 卫生)L3 深度结构重构

触发词靠"记忆"二字区分:带"记忆"→整理;不带"记忆"("整理一下"/"整理文档"/"梳理一下")→neat-freak。

整理 vs 记住/忘掉(边界声明)

记住 = 新增单条;忘掉 = 删单条;整理 = 批量结构重构(去重/清死链/合并/重组/关联)。

修改范围

不只是 memory/ 系统,还包括:

  • ~/.claude/settings.json / settings.local.json(全局配置)
  • ~/.claude/CLAUDE.md(全局 AI 指令)
  • 项目 CLAUDE.md(项目 AI 指令)
  • 项目 .claude/settings.json(项目权限配置)
  • 子项目同理

"记住"流程(8步)

1. 判断层级

根据用户语境和信息内容判断属于哪层:

  • 全局:影响所有项目、跨项目偏好、通用工具选择
  • 项目:当前对话所在项目的决策、配置、踩坑
  • 子项目:明确提到子项目目录名

不确定时保守下沉一级。

2. 判断类型

类型信号示例
偏好习惯"以后都这样"、"我习惯用X""回复要简短"
工具选择"用X不用Y"、"X比Y好""Maven用阿里云镜像"
项目决策架构选型、技术栈变更"lab3用MyBatis"
踩坑记录"踩了个坑"、"注意X会Y""PyInstaller中文路径报错"
个人特性"我喜欢"、"我是"、"我在学""我是学生"、"喜欢整洁"
事实信息API Key、路径、端口、账号"MySQL端口3306"

2.1 判断 Obsidian 归属

判断为"踩坑记录"/"项目决策"/"个人特性"且属通用知识时,写入 Obsidian(wiki/概念/ 或 wiki/来源/);纯操作偏好/凭据/进度只写 memory/。同时写两边时,memory 正文第一条加 > 详见 [[个人知识库/wiki/...]] 索引。

完整路由规则(合并检测 / 写入规范 / TL;DR 格式 / log.md 追加 / raw 只读):见 ~/.claude/rules/memory-routing.md。

3. 搜索已有

写入前 grep 目标文件 + MEMORY.md,找已有相关内容。

4. 展示计划

告诉用户你的计划,格式:

我会 [合并到/更新/新建/覆盖] [完整文件路径]

[文件路径] 中已有:[相关旧内容摘要(如有)]
新信息:[一句话]
动作:[更新旧条目 / 新建条目 / 覆盖旧信息]

[如有矛盾] ⚠ 旧"[...]"会被新信息替代
[如有过时] 旧的 [文件路径] 中的"[...]"会随之删除
[如有互补] 新旧不冲突,各自保留并互链

等待确认后再写。

5. 用户确认

给用户纠正位置或内容的机会。用户说"对"或"可以"才继续。

6. 执行归位

按位置矩阵写入。遵循融入规则(8条)。

7. 周边整理

写入后检查:

  • MEMORY.md 索引描述是否还需更新?
  • 同目录其他文件有没有因本条而过时的?
  • 有没有文件变空或只剩一条?

8. 读回确认

写入完成后,读回验证(对齐 verify-before-changing 规则——宣布修好前先实际读确认):

  • Read 目标文件,确认新内容真在、格式没坏
  • grep MEMORY.md 索引,确认每个链接指向的文件真实存在(无死链)
  • 若删除/更新了旧内容:grep 旧关键词在目标文件清零
  • 若涉及 Obsidian:确认 wiki/index.md 已更新、wiki/log.md 已追加

任一不过 → 回第6步补,不宣布完成。

"忘掉"流程(6步)

1. 搜索匹配

grep MEMORY.md + 所有 memory 文件中匹配的内容。

如果只匹配到一个 → 继续。 如果匹配到多个 → 列出所有结果让用户选。 如果没匹配到 → 告知用户,确认是否换个关键词。

2. 展示确认

找到以下匹配:
1. [文件路径] — [内容摘要]
2. [文件路径] — [内容摘要]

要删除的是哪些?(全部删除 / 只删第N条 / 不删了)

3. 分析影响

删除 [文件路径] 中的"[...]"后:
- 该文件还剩 [N] 条内容
- MEMORY.md 索引需要更新 [是/否]
- 相关文件 [X] 中也有引用,需要调整 [是/否]

4. 展示影响

删除后我会:
- 删除 [文件路径] 中的对应内容
- 从 MEMORY.md 移除链接 [如果文件变空]
- 将剩余内容合并到 [上级文件] [如果只剩一条]

5. 用户确认

6. 执行删除 + 整理结构

删内容 + 更新索引 + 清理空文件 + 合并孤立条目。

删后验证(对齐 verify-before-changing——删完不等于删干净):

  • grep 已删内容的关键词,在所有 memory 文件清零
  • grep MEMORY.md,确认对应索引链接已移除(无指向已删文件的死链)
  • 若删了整个文件:确认该文件已不存在,无残留空文件

任一不过 → 补到干净为止,不宣布完成。

"整理"流程(4阶段)

对已有记忆做 L3 深度结构重构。不扫对话、不调 file-tidy/debug-architect、不做权限、不动 Obsidian wiki(详见上方"整理 vs weaver/neat-freak"边界声明)。

触发词与范围

触发词整理范围
"整理记忆" / "整理一下记忆"全局CC记忆 + 项目记忆 + 配置文件过期扫描
"整理全局记忆"只全局CC记忆 + 配置文件过期扫描
"整理项目记忆"只项目记忆
"整理记忆,只整理记忆文件"跳过配置文件

当前项目 = 触发时 CWD 所在项目(memory-keeper 是全局 skill,动态识别)。

整理对象 × 动作矩阵

对象L1(清死链/去重/清过期)L2(合并孤立/格式统一)L3(碎片合并/跨文件关联)
全局CC记忆(~/.claude/projects/<...>/memory/,带 frontmatter)✓✓✓
项目记忆(<项目根>/memory/,纯索引)✓✓✓
配置文件(settings.json / CLAUDE.md / rules/)✓ 仅清过期✗ 不重组✗ 不重组
Obsidian wiki✗✗✗

4阶段流程

阶段1 审计:扫描所有纳入对象,按 8 类动作(见下方细则)产出问题清单。每项标注:文件路径 + 问题 + 建议动作。文件读取失败 → 跳过,列"无法读取"清单。

阶段2 确认:展示整理计划,等用户选"全部执行 / 部分执行 / 取消"。

阶段3 执行:按确认执行,遵循融入 8 规则。写阶段开始前重读目标文件,若与审计时不一致(被外部修改)→ 暂停,提示"X 在审计后被改,是否重新审计"。

阶段4 验证:读回确认(对齐 verify-before-changing)。验证清单见下方"阶段4 验证检查清单"。

8类动作判定规则

#动作信号建议
1清死链MEMORY.md 链接目标不存在删索引行 / 或重建文件
2去重同信息跨文件复制留详细那个,删其他 + 合并要点
3清过期旧 vs 新矛盾 / 引用已删项目 / 废弃工具 / 地址变更删旧或更新
4合并孤立文件只剩 1 条合并到同类
5碎片合并同主题/同类分散 >3 文件合并成主题文件
6格式统一缺 frontmatter(仅全局)/ 相对时间 / 链接不规范全局补 frontmatter;项目修时间/链接
7跨文件关联type 同 + 主题重叠 / 关键词共现 ≥2 / 提对方主题未链双向加 [[wikilink]],只建议不强制
8配置过期settings/CLAUDE/rules 过期信号只标记,settings 逐条确认

关联 vs 去重的区别:重复 = 同信息复制(合并);关联 = 相关但不同(互链,各自保留)。

配置文件过期扫描细则(L1 子集,不重组结构)

文件扫什么动作
settings.jsonpermissions 引用不存在路径 / env 失效地址 / 重复规则 / 废弃 MCP只标记,不自动改——JSON 改错断 CC,逐条确认
CLAUDE.md(全局+项目)引用已删 skill 路径 / 废弃工具 / 与 rules 重复 / blockquote 历史叙事 / TODO删行 / 更新 / 标记
~/.claude/rules/*.md被新规则覆盖的旧规则 / 引用不存在文件 / 与其他 rules 矛盾删文件 / 更新 / 标记矛盾让用户选

安全约束:settings.json 任何改动必须用户逐条确认,不批量执行。

阶段4 验证检查清单

  • 每个改动文件 Read 一遍,确认内容真在、格式没坏
  • MEMORY.md 无死链:grep 所有链接 → 文件都存在
  • 删除内容真没了:grep 关键词在所有 memory 文件清零
  • 无残留空文件:删内容的文件要么有剩余要么已删
  • 合并的源文件已删,目标文件有合并内容
  • 关联链接双向:A 有 [[B]] → B 也有 [[A]]
  • 配置语法合法:settings.json JSON 解析验证;CLAUDE.md 无断裂引用
  • 时间格式:grep -E "今天|昨天|最近|刚刚" 在改动文件清零

整理边界场景

场景处理
项目无 memory/跳过该对象,审计报告注明
首次整理,系统不完整正常整理,自动创建缺失的 MEMORY.md
全局和项目对同一事实矛盾列"需用户确认",不自动删
settings.json 破坏性改动逐条确认,不批量
整理中发现"该记住的新信息"不提取(weaver 的事),只整理已有
单文件 memory跳过 ④⑤,只做 ①②③⑥⑦
审计中文件读取失败跳过,列"无法读取"清单
写阶段发现外部修改暂停,提示重新审计

审计计划展示格式(阶段2确认用)

## 整理计划(YYYY-MM-DD)
扫描范围:全局CC记忆(N文件) + 项目记忆(M文件) + 配置文件(K处)

### 建议删除(死链/过期/无用)
1. memory/xxx.md — 死链,MEMORY.md 引用但文件不存在
2. ...

### 建议合并(孤立/碎片)
1. memory/orphan.md 只剩1条 → 合并到 memory/dev-env.md
2. 同类"API凭据"分散3文件 → 合并为 memory/api-credentials.md

### 建议关联(未互链)
1. memory/a.md ↔ memory/b.md 同根因 → 加 [[wikilink]]

### 需用户确认(跨层矛盾)
1. 全局说"JDK 24" vs 项目说"JDK 21" — 以哪个为准?

### 配置文件过期
1. settings.json — MCP 配置引用已废弃服务
2. CLAUDE.md — 引用已删除 skill 路径(第X行)

要执行哪些?(全部 / 仅删除 / 仅合并 / 指定编号 / 取消)

位置矩阵

类型 \ 层级全局项目子项目
偏好习惯全局 MEMORY项目 feedback-style—
工具选择settings.json / 全局 CLAUDE.md项目 CLAUDE.md子项目 CLAUDE.md
项目决策—项目 CLAUDE.md / memory子项目 CLAUDE.md
踩坑记录—项目 dev-lessons子项目 memory
个人特性全局 MEMORY (user-profile)——
事实信息settings.json / 全局 MEMORYdev-env.md / memory子项目 memory
通用知识—Obsidian wiki/ + memory 索引Obsidian wiki/ + memory 索引

融入规则(8条)

  1. 先搜后写 — 写入前 grep 目标文件 + MEMORY.md。没搜就写等于盲写。
  2. 更新优于追加 — 旧条目能覆盖就在原处改,不追新条目。例:旧"JDK 21"→ 新"JDK 24",改数字,不在文末加"对了现在用24了"。
  3. 矛盾以新为准 — 新旧冲突 → 新替旧,旧内容删除。不同时保留两版。
  4. 互补建立链接 — 新旧相关但不重叠 → 各自保留,互相引用([[wikilinks]] 或文件内链接)。
  5. 删除不留残骸 — 删内容后:文件变空 → 删文件+从索引移除;只剩一条 → 考虑合并到上级;多条 → 保留。
  6. 绝对时间 — 所有时间用 YYYY-MM-DD 格式。
  7. 一条一事 — 每个记忆条目只说一件事。
  8. 面向读者 — 下一个 agent 只有 5 秒扫过。

详细示例见 references/merge-examples.md。

优化建议(视情况,不强制)

条件建议
同层同类记忆 > 3 条分散"要不要合并成一个文件?"
删除后周边孤立"旁边的 X 也跟这条相关,要不要一起整理?"
≤3 条且不孤立不说,不增加对话噪音

特殊情况

模糊匹配:关键词匹配到多个结果 → 列出让用户选。 没匹配到(忘掉时):告知用户,确认是否换个关键词。 首次使用:记忆系统可能不完整,正常处理,写入时自动创建缺失的文件结构。 跨层信息:一条信息同时影响全局和项目 → 两边都写,全局写原则、项目写具体。

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.