Communitygithub.com

fade-away

为 AI 聊天提供持久的记忆层——在纯 Markdown 的 Obsidian 知识库中记录日志、追踪任务,并构建由用户把关的知识库。适用于 Claude Code 和 Codex 的会话追踪技能。

fade-away 是什么?

fade-away 是一种会话追踪技能,专为 Claude Code 和 Codex 设计,通过在 Obsidian 知识库中维护一个从日志到知识的分层记忆结构,帮助用户在切换任务时无需重复解释上下文。它支持自动日志记录、任务索引、话题切换、周报生成、知识沉淀等功能,并提供了丰富的模块化参考文档来处理边界情况,例如并发写入、时区处理和用户主动关闭追踪。该技能的核心机制是每次有实质内容的助手回复后,都会在当天的日志文件中追加一行进度记录,并定期触发话题页面、任务索引和知识库的更新,确保长期对话中的信息持续积累而不会丢失。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add Aresfangxx/fade-away-skill

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

fade-away 是做什么的?

维护一个轻量级日志 -> 话题 wiki -> 索引 -> 周报 MOC -> 知识的记忆层,让用户在切换任务时无需重复解释上下文,并构建自己的个人 LLM 知识库。

操作契约

该技能贯穿整个对话运行,而不仅限于第一轮。在每次助手回复之前,检查该轮是否触发了会话开始、每轮保存、话题切换、手动记录、话题晋升、周报/看板/体检或知识晋升。最常被遗漏的规则是每轮保存:每次有实质内容的助手回复,都需要在活动日志条目中追加一行 (HH:MM) <进展>。

保持热路径短小。将低频机制放在 references/ 中,仅在触发条件满足时才加载它们。

路径

<VAULT_ROOT> 是 fade-away 维护的 Obsidian 知识库根目录。每个会话解析一次,顺序如下:

  1. 项目 AGENTS.md / CLAUDE.md 中声明的 Vault root 字段(由引导安装脚本 scripts/bootstrap_vault.py 写入)。
  2. 如果不存在该字段,则将当前项目/工作目录视为知识库根目录。

在读写前始终将 <VAULT_ROOT> 展开为绝对路径:

  • 日志:<VAULT_ROOT>/03 Journal/<YYYY-MM>/<YYYY-Wnn>/YYYY-MM-DD.md,其中 <YYYY-MM> 是日期所在月份,<YYYY-Wnn> 是该日期的 ISO 周。
  • 周索引:<VAULT_ROOT>/03 Journal/<YYYY-MM>/<YYYY-Wnn>/YYYY-Wnn 周索引.md,其中 <YYYY-MM> 是包含该周星期日的月份。
  • 任务索引:<VAULT_ROOT>/00 Tasks/_Index.md
  • 话题页面:<VAULT_ROOT>/00 Tasks/<话题文件名>.md
  • 知识页面:<VAULT_ROOT>/02 Knowledge/<领域>/<页面>.md
  • 参考:本技能的 references/ 目录

如果 00 Tasks/ 或 _Index.md 缺失,则在当前会话中跳过任务索引和话题逻辑。不要在会话中途自动创建 00 Tasks/。日志记录仍然运行。

顶级文件(如 备忘.md)可以直接放在 03 Journal/ 下,请勿移动它们。

时区规则

本技能记录的所有日期和时间必须使用一致的时区,称为知识库时间(vault-time)。从项目 AGENTS.md / CLAUDE.md 中的 Time zone 字段解析知识库时间;如果未设置,则回退到机器的本地时区。引导安装程序默认设置为 Asia/Hong_Kong,因此未配置的知识库默认为 Asia/Hong_Kong / GMT+8 / UTC+8。

将知识库时间用于日志文件名、父路径、标题、进度行、话题元数据、_Index.md 时间戳和周索引推断。

推荐的 shell 检查方式(替换为你的配置时区):

TZ=Asia/Hong_Kong date

信任知识库时间而非工具提示中的日期。如果工具提示的日期与知识库时间冲突,则基于新的知识库时间读取来推导日志文件名、ISO 周和 HH:MM。关于追加/并发细节,请阅读 references/journal-write-protocol.md。

会话状态

内部追踪:

  • current_entry_start:活动日志条目的开始时间 HH:MM。
  • current_entry_date:活动日志条目的日期 YYYY-MM-DD。
  • current_entry_title:当前短中文任务标题。
  • bound_topic:话题文件名(不含 .md),或 None。
  • bind_skipped:仅在用户选择不绑定时为 True。
  • task_auto_bind_checked / task_auto_bind_skipped:每个新日志条目重置。
  • knowledge_candidate_prompted / knowledge_candidate_skipped:每个新日志条目重置。
  • knowledge_context_checked:在当前用户请求已通过知识检索门后,或有意跳过该门时为 True。
  • tracking_disabled:仅在用户选择退出当前会话时为 True。

对话开始

  1. 如果存在,读取 <VAULT_ROOT>/00 Tasks/_Index.md。将表格体行解析为 [[topic]] | 时间戳 | 下一步;缺失文件视为空索引。

  2. 廉价检查是否存在并发的同话题会话。如果知识库时间今天的日志存在,则读取其尾部。如果最后一条进度行在知识库时间的 15 分钟内,且其条目可能与用户的第一条消息重叠,则提示:

    ⚠️ 另一会话 <HH:MM> 刚写过 [[<topic>]],可能在并行做同一件事。我先扫一眼最新进展再回。
    

    然后读取最近的条目,确保本次回复不会与并行工作矛盾。如果没有近期的重叠条目,则静默跳过。

  3. 在仅依赖 _Index.md、今天的日志或匹配的话题页面之前,对任何实质性请求运行知识检索门。当请求涉及项目/领域/人/方法(这些可能在 <VAULT_ROOT>/02 Knowledge/ 中有持久上下文)时,或者当用户要求上下文、分析、决策、策略、继续、回顾、写作风格、可复用工作流或旧工作时,请阅读 references/knowledge-retrieval-trigger.md。采用清单优先路由:列出知识库树,从中推导当前文件夹/项目,然后匹配文件名、H1/标题、别名、标签、status: canonical、导航页面和权威事实来源页面,然后再进行广泛的正文搜索。仅跳过等待确认的问候、看板/体检报告、纯日志记账、原子工具查询以及在此元数据优先遍历后没有相关知识命中的情况。

  4. 按顺序调度用户的第一个消息:

    • 引导/设置意图(install fade-away, setup, bootstrap, 初始化, 第一次使用, 开源部署,或 _Index.md 缺失且用户请求初始化):阅读 references/bootstrap-vault.md。引导是一次性设置路径;如果不清楚知识库根目录则询问,并且未经用户确认绝不创建文件。
    • 上下文/指令检查意图(AGENTS, CLAUDE, 上下文, context, 经验继承, 规则漂移,项目结构,技能/知识库/工作流维护,或新的 cwd/项目边界):阅读 references/context-check.md。仅在发现漂移或用户明确询问时报告;未经用户确认具体补丁,不要写入指令文件。
    • 知识库体检意图(lint, 体检, health check, 检查知识库, 检查任务索引, 看看哪些适合变成 wiki,或类似表达):阅读 references/lint-vault-memory.md;先呈现报告,未经用户确认不要写入修复或知识页面。
    • 知识晋升意图(沉淀成知识, 写进 knowledge, 变成 wiki, 归档成知识页,或类似表达):阅读 references/promote-to-knowledge.md。
    • 周索引意图(周索引, 周报, weekly index, weekly summary, 本周总结,或类似表达):阅读 references/render-weekly-index.md。仅当模块写入或更新周索引时才打开日志条目。
    • 看板意图(看下任务, 看板, dashboard, 总览,或类似表达):阅读 references/render-dashboard.md,仅渲染,不要打开日志条目。
    • 明确匹配现有话题:静默读取该话题页面,设置 bound_topic,然后打开日志条目。
    • 模糊问候(hi, 你好, 在吗, 开始干活了,等):如果 _Index.md 有行,则输出 ⏮️ 上次:<task>,下一步是 <next-step>。继续这个还是新任务? 并等待回复。仅在用户确认后绑定到第一行。
    • 新的实质性任务:不要提旧任务;保持 bound_topic = None。

打开日志条目

仅当实际工作开始时才打开日志条目。计算知识库时间的每日路径为 03 Journal/<YYYY-MM>/<YYYY-Wnn>/YYYY-MM-DD.md,其中 <YYYY-MM> 是日期所在月份,<YYYY-Wnn> 是 ISO 周。使用 mkdir -p 创建缺失的月/周文件夹。

如果每日文件缺失,则使用 references/journal-write-protocol.md 中的模板创建。确保有 ## 🕐 任务时间线,然后在该部分底部附加一个标题:

  • 未绑定:### HH:MM ▶️ <短中文标题>
  • 已绑定:### HH:MM ▶️ <短中文标题> → [[00 Tasks/<bound_topic>]]

存储 current_entry_start、current_entry_date 和 current_entry_title。重置新条目的任务、知识候选和知识检索标志。

每轮保存

在每次有实质内容输出的助手回复后,在当前日志条目内追加一行精确的进度记录:

(HH:MM) <一句话进展>

追加在活动条目正文的末尾,紧接在下一个 ### 时间线标题或文件末尾之前。不要重写之前的进度行。如果该轮仅包含澄清问题或 tracking_disabled = True,则跳过保存。

在写入前,当你需要精确的追加位置、并发写入重基、知识库时间边界处理、陷阱行语法或日志模板时,请阅读 references/journal-write-protocol.md。

保存后检查

在每轮保存后运行以下检查:

  1. 显式晋升:如果可见输出包含显式的 ➡️ 下一步 标记或 ## ➡️ 下一步 部分,则更新话题/索引层。如果设置了 bound_topic,则阅读 references/topic-update-protocol.md;否则,如果 bind_skipped = False,则阅读 references/promote-to-wiki.md。
  2. 话题自动刷新:当设置了 bound_topic 且没有显式下一步时,如果活动条目可能达到现有陈旧性阈值,则阅读 references/topic-update-protocol.md。保持当前的自动刷新行为;除非用户要求,否则不要将其转换为确认提示。
  3. 任务自动绑定:当活动条目未绑定且缺乏显式的 ➡️ 下一步 时,阅读 references/task-candidate-trigger.md。对类似任务的会话自动创建/绑定话题;仅跳过简单的问答、问候、看板/体检报告、纯澄清或没有任务性质的会话。
  4. 知识候选:当可能出现了可复用的知识且用户尚未要求晋升时,阅读 references/knowledge-candidate-trigger.md。不要自动创建或更新 02 Knowledge/。

会话中话题切换

如果用户说 继续做 X、回到 X 或类似要求切换而条目已打开时:

  1. 保守地将 X 与 _Index.md 匹配。
  2. 如果没有清晰匹配,则提出一个简短澄清问题。
  3. 如果匹配清晰且与 bound_topic 不同,则询问: 切到 [[X]]?我会给当前 entry 追加一行切换记录,然后打开新的 X entry。
  4. 确认后,追加 (HH:MM) 切出当前任务,转到 [[00 Tasks/X]]。,阅读话题页面,设置 bound_topic = X,并打开一个新的绑定日志条目。
  5. 如果用户拒绝,则保持现有绑定。

不要在会话中途静默切换话题。

手动记录请求

如果用户说 记录一下、记一下刚才的进展 或类似表达,则在当前条目中额外追加一行进度记录,总结自上次保存以来的进展。不要打开新条目或关闭当前条目,除非用户明确要求切换任务。

模块

按需加载低频工作流:

  • references/journal-write-protocol.md:日志创建、追加位置、知识库时间边界处理、并发写入重基、陷阱行语法和日志模板。
  • references/bootstrap-vault.md:新用户 Obsidian 知识库的一次性设置工作流;仅在确认后创建最小化的 fade-away 目录/模板/索引和指令入口点。
  • references/context-check.md:冷启动或边界变化时检查陈旧的指令/上下文(例如 AGENTS.md、CLAUDE.md、项目结构笔记和知识继承);报告漂移,未经确认不写入。
  • references/task-candidate-trigger.md:将未绑定的实质性任务条目自动绑定到 00 Tasks;跳过琐碎或非任务会话。
  • references/topic-update-protocol.md:更新绑定的话题页面、刷新 _Index.md 并运行当前的话题自动刷新行为。
  • references/promote-to-wiki.md:在显式 ➡️ 下一步 或任务自动绑定触发后,将未绑定的日志条目绑定到话题页面并更新 _Index.md。
  • references/render-dashboard.md:从 _Index.md 渲染只读的任务看板。
  • references/render-weekly-index.md:在 03 Journal/<YYYY-MM>/<YYYY-Wnn>/YYYY-Wnn 周索引.md 中按需生成或更新周报 MOC。
  • references/lint-vault-memory.md:为任务、日志、周索引和知识层渲染只读的健康检查报告。
  • references/knowledge-retrieval-trigger.md:在实质性工作开始前,盘点活动的 02 Knowledge/ 树,从元数据中排序候选,并读取少量相关页面,以便较旧的持久上下文、方法和项目事实能够影响回答。
  • references/knowledge-candidate-trigger.md:提议将可复用的日志材料放入 02 Knowledge/,未经确认不写入。
  • references/promote-to-knowledge.md:在确认后在 02 Knowledge/ 下创建或更新精选页面。

格式规则

  • 时间格式:24 小时制 HH:MM,使用配置的知识库时区。
  • 日志标题:简短、描述性的中文;避免使用 任务1 等通用标题。
  • 话题文件名:kebab-case,不含空格,仅在磁盘上有 .md 扩展名。
  • 日志中的话题维基链接:[[00 Tasks/<topic>]]。
  • 索引行格式:| [[<topic>]] | YYYY-MM-DD HH:MM | <转义的下一步> |。
  • 旧的 task-tracker 目录已被移除;如果用户询问旧的追踪器,说明 fade-away 已替代它。

边界情况

  • 用户选择退出(这次不用记录):设置 tracking_disabled = True;跳过当前会话的所有写入,但允许读取 _Index.md 以获取上下文。
  • 跨零点:使用知识库时间的午夜。知识库时间午夜后,在新一天的知识库时间日志中打开一个连续的条目,并在那里继续每轮保存。
  • 仅看板轮:渲染看板并等待;在用户开始实际工作前不要打开日志条目。
  • 索引匹配但话题页面缺失:说明该话题行存在但页面缺失,然后询问是重新创建还是继续未绑定。

相关技能