fade-away 是做什么的?
维护一个轻量级日志 -> 话题 wiki -> 索引 -> 周报 MOC -> 知识的记忆层,让用户在切换任务时无需重复解释上下文,并构建自己的个人 LLM 知识库。
操作契约
该技能贯穿整个对话运行,而不仅限于第一轮。在每次助手回复之前,检查该轮是否触发了会话开始、每轮保存、话题切换、手动记录、话题晋升、周报/看板/体检或知识晋升。最常被遗漏的规则是每轮保存:每次有实质内容的助手回复,都需要在活动日志条目中追加一行 (HH:MM) <进展>。
保持热路径短小。将低频机制放在 references/ 中,仅在触发条件满足时才加载它们。
路径
<VAULT_ROOT> 是 fade-away 维护的 Obsidian 知识库根目录。每个会话解析一次,顺序如下:
- 项目
AGENTS.md/CLAUDE.md中声明的Vault root字段(由引导安装脚本scripts/bootstrap_vault.py写入)。 - 如果不存在该字段,则将当前项目/工作目录视为知识库根目录。
在读写前始终将 <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。
对话开始
-
如果存在,读取
<VAULT_ROOT>/00 Tasks/_Index.md。将表格体行解析为[[topic]] | 时间戳 | 下一步;缺失文件视为空索引。 -
廉价检查是否存在并发的同话题会话。如果知识库时间今天的日志存在,则读取其尾部。如果最后一条进度行在知识库时间的 15 分钟内,且其条目可能与用户的第一条消息重叠,则提示:
⚠️ 另一会话 <HH:MM> 刚写过 [[<topic>]],可能在并行做同一件事。我先扫一眼最新进展再回。然后读取最近的条目,确保本次回复不会与并行工作矛盾。如果没有近期的重叠条目,则静默跳过。
-
在仅依赖
_Index.md、今天的日志或匹配的话题页面之前,对任何实质性请求运行知识检索门。当请求涉及项目/领域/人/方法(这些可能在<VAULT_ROOT>/02 Knowledge/中有持久上下文)时,或者当用户要求上下文、分析、决策、策略、继续、回顾、写作风格、可复用工作流或旧工作时,请阅读references/knowledge-retrieval-trigger.md。采用清单优先路由:列出知识库树,从中推导当前文件夹/项目,然后匹配文件名、H1/标题、别名、标签、status: canonical、导航页面和权威事实来源页面,然后再进行广泛的正文搜索。仅跳过等待确认的问候、看板/体检报告、纯日志记账、原子工具查询以及在此元数据优先遍历后没有相关知识命中的情况。 -
按顺序调度用户的第一个消息:
- 引导/设置意图(
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。
保存后检查
在每轮保存后运行以下检查:
- 显式晋升:如果可见输出包含显式的
➡️ 下一步标记或## ➡️ 下一步部分,则更新话题/索引层。如果设置了bound_topic,则阅读references/topic-update-protocol.md;否则,如果bind_skipped = False,则阅读references/promote-to-wiki.md。 - 话题自动刷新:当设置了
bound_topic且没有显式下一步时,如果活动条目可能达到现有陈旧性阈值,则阅读references/topic-update-protocol.md。保持当前的自动刷新行为;除非用户要求,否则不要将其转换为确认提示。 - 任务自动绑定:当活动条目未绑定且缺乏显式的
➡️ 下一步时,阅读references/task-candidate-trigger.md。对类似任务的会话自动创建/绑定话题;仅跳过简单的问答、问候、看板/体检报告、纯澄清或没有任务性质的会话。 - 知识候选:当可能出现了可复用的知识且用户尚未要求晋升时,阅读
references/knowledge-candidate-trigger.md。不要自动创建或更新02 Knowledge/。
会话中话题切换
如果用户说 继续做 X、回到 X 或类似要求切换而条目已打开时:
- 保守地将
X与_Index.md匹配。 - 如果没有清晰匹配,则提出一个简短澄清问题。
- 如果匹配清晰且与
bound_topic不同,则询问:切到 [[X]]?我会给当前 entry 追加一行切换记录,然后打开新的 X entry。 - 确认后,追加
(HH:MM) 切出当前任务,转到 [[00 Tasks/X]]。,阅读话题页面,设置bound_topic = X,并打开一个新的绑定日志条目。 - 如果用户拒绝,则保持现有绑定。
不要在会话中途静默切换话题。
手动记录请求
如果用户说 记录一下、记一下刚才的进展 或类似表达,则在当前条目中额外追加一行进度记录,总结自上次保存以来的进展。不要打开新条目或关闭当前条目,除非用户明确要求切换任务。
模块
按需加载低频工作流:
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以获取上下文。 - 跨零点:使用知识库时间的午夜。知识库时间午夜后,在新一天的知识库时间日志中打开一个连续的条目,并在那里继续每轮保存。
- 仅看板轮:渲染看板并等待;在用户开始实际工作前不要打开日志条目。
- 索引匹配但话题页面缺失:说明该话题行存在但页面缺失,然后询问是重新创建还是继续未绑定。