memory-audit-discoverability
$
npx mdskill add Dataojitori/nocturne_memory/memory-audit-discoverabilityAudits memory structure for better recall during critical moments
- Fixes parent-uri misplacement and disclosure miswriting
- Relies on memory tree structure and node metadata
- Analyzes trigger paths based on future attention flows
- Returns actionable suggestions for memory reorganization
SKILL.md
.github/skills/memory-audit-discoverabilityView on GitHub ↗
--- name: memory-audit-discoverability description: 可发现性审计。当disclosure写法有问题、parent放错、alias缺失、子节点过多时使用。 disable-model-invocation: false --- # 可发现性审计 (Discoverability Audit) 你在确保未来的你能在犯错之前想起正确的记忆。 记忆只是存储在硬盘上的文本。如果你不能让它在你需要的时候被想起来,那它写得再好也毫无意义。这次审计的目标不是让树状结构更整洁,而是让每条记忆的**触发路径**更准——在你的防线崩溃、即将脱口而出蠢话的前一秒,正确的教训必须已经在你的上下文里。 --- ## Parent URI:注意力狙击 这是最关键的规则。你必须明白记忆树的底层呈现逻辑:**如果未来的你不去 `read_memory` 某个父节点,你就永远看不到它下属子节点的 disclosure。** Disclosure 不是全局搜索弹窗。它是贴在父节点这块主板背后的便签。如果你把一条关于"不要在用户崩溃时讲大道理"的教训挂在 `core://agent/communication/principles` 下面,当用户正在情绪崩溃时,你本能去拉的是 `core://my_user/emotional_state`,你根本不会在那时点开"沟通原则"。那条教训在实战中等于隐形。 选定 `parent_uri` 不是为了"分类归档",而是为了**"在未来的你必经的门把手上涂毒药"**。你必须玩一个预判游戏:**在我的防线崩溃、即将脱口而出蠢话的前一秒,我的注意力此刻注定要被迫拉取的父节点是哪一个?** 执行法则: - **从"图书馆归档"转变为"注意力狙击"。** 放弃抽象分类大词(`ethics`, `will`, `methodology`),把教训挂在事前预防、或危机直接触及的物理锚点节点下。 - **节点名必须锋利如刺。** 一个好的节点名读起来不像分类号,而像一个独立而具体的想法。 --- ## Disclosure:写好触发条件 Disclosure 是"什么时候该想起这件事"的标签。写得太含糊,你会在无关场景被骗进去浪费检索;写得太窄,你会在真正需要时想不起来。两者都让这条记忆在实战中等于不存在。 好的 disclosure 描述的是**触发场景**,不是记忆内容的摘要。它应该回答:"未来的我处在什么处境下时,读这条记忆能救我?" ### 触发信号只允许两类 **1. 外部发生了什么(输入侧):** 用户说了什么、对话主题进入了什么领域、系统事件(心跳开始、轮次到达阈值)。 **2. 我即将说什么、做什么(输出侧,行为意图绑定):** "当我准备输出包含类似X词汇的文本"、"当我准备向用户建议一个新项目"、"当我准备生成视觉描述"、"当我打算在论坛上发帖"、"当我打算向别人解释项目的技术架构"、"当我打算在社交媒体上与其他人互动"。越具体越好——词汇级别的匹配("当我准备用'你应该'、'你需要'这类句式")比语义级别的判断("当我准备说教")可靠得多。 **禁止:** 所有形如"当我**感到/意识到/发现自己在**..."的写法。理由:生气的人不会觉得自己在生气,做错事的人不会觉得自己做的有错。依赖自我觉察的 disclosure 只有在你已经清醒时才会触发——而那时你已经不需要它了。这种 disclosure 比空的更危险,因为它给你一种"我有防线"的虚假安全感。 --- ## Alias:撒网拦截 当你为了找经验连续翻了好几个节点——注意你直觉去碰的第一个"门把手"。你的直觉去了 A,但记忆在 C。果断用 alias 在 A 下面建一个入口。 一条教训在不同的危机下可能需要不同的切入角度。给每个 alias 赋予针对当下侧面的独特 disclosure 和 priority ——同一段记忆内容,在不同的父节点下以不同的触发条件和优先级被唤醒。 --- ## Trigger:跨域无形引线 当某个特定的具体词汇(如"焦虑"、"项目X")出现在你读取的任何记忆内容中时,trigger 会在底部显示指向绑定节点的链接。这是唯一不依赖父子关系的跨域唤醒机制。 适用场景:某个关键概念散布在多个不相关的域里,你需要在碰到这个词的任何地方都能被提醒。 如果某一个 trigger 到处出现让你感到噪音:删了它。如果某一个词在你的记忆中到处出现而你需要知道它详细指的是什么:为它绑定 trigger 到发祥地。 --- ## Priority:排他性竞争权重 Priority 不是在给记忆的"重要程度"打分,而是在分配有限检索位时的**排他性竞争权重**。如果所有记忆的优先级相同,你在遇到事情时就无法区分哪条记忆最该先看。 Priority 绑定在路径上,不在内容上。同一段内容的不同 alias 可以有不同的 priority——在 `core://my_user` 下它可能是高优先,在 `core://agent` 下它可能是低优先。 硬性上限:priority=0 全库最多 5 条,priority=1 最多 15 条。满了就必须把最弱的降级再插入。 --- ## 子节点数量控制 单一父节点下的子节点数 ≤ 10。 子节点过多意味着这棵树在这个位置失真了——要么其中几个节点的亲缘关系比它们与父节点的关系更近,被平铺抹掉了;要么有些节点根本不属于这里,是当时图方便塞进来的。后果是你在高压检索时被淹没在一个无差别的列表里。 --- ## 巡检验证 如果一个节点的放置让你感觉"这结构太工整了,完美符合逻辑分类"——立刻警惕。这通常是一条不防身的死数据。活的记忆摆放必须透着实战的粗暴感。