关于 wiki-narrate
wiki-narrate 是一项 Agent Skill,可根据 Obsidian wiki 围绕主题生成带引用的 Markdown 阅读稿。它通过主张清单限制内容于有依据的库内证据,并仅在指定时保存。
主要功能
- 01检索与主题相关的库内页面
- 02支持 briefing、plain-language 和 lecturer 文风
- 03为事实主张标注库内页面引用
- 04标记推断及未解决的冲突
- 05仅在使用 --save 时保存阅读稿
适用场景
- 01围绕 wiki 主题生成带引用的叙述
- 02按指定文风制作简明阅读稿
- 03总结库内相互矛盾或不完整的证据
- 04按要求保存已完成的阅读稿
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ar9av/ obsidian-wiki --skill wiki-narrate安装后在 Claude Code 中输入/wiki-narrate确认已加载。
附带文件references/voices.md
详细介绍
Wiki Narrate — 带引用的叙述式摘要
仅将此技能用于基于主题的 Markdown 摘要。不要添加标签或页面列表选择、先前查询输入、语音别名、HTML、PDF、幻灯片、渲染器移交或新编译的知识页面。
命令约定
/wiki-narrate <topic> [--voice briefing|plain-language|lecturer] [--save]
- 必须提供非空的
<topic>。 - 默认语音为
briefing。 - 语音名称为规范名称,且区分大小写。不支持的值必须返回错误,并列出
briefing、plain-language和lecturer;不得搜索或写入。 --save是唯一的持久化开关。- 如果缺少主题、选项格式错误或语音不受支持,则返回简短的用法说明或验证错误;不得搜索、写入、追加日志事件或更改
hot.md。
检索
写作规范: 在起草或改写自然语言 Markdown 之前,先阅读并遵循 llm-wiki/SKILL.md 中的 Writing Profile Resolution 部分。框架架构、来源溯源、安全性和特定操作要求优先。
WRITING.md 中的偏好仅适用于新起草或改写的自然语言 Markdown;保留源内容和结构化记录。
- 使用 Config Resolution Protocol 解析配置,包括行内的
@name知识库覆盖,然后在目标知识库中存在AGENTS.md时读取它。 起草引用之前加载OBSIDIAN_LINK_FORMAT。 - 首先读取
hot.md和index.md。根据 frontmatter 和摘要筛选候选项,再读取正文。 - 配置了 QMD 时,先使用 QMD,再使用
rg;如果 QMD 不存在、未配置或运行失败,则继续使用索引和rg路径。将 QMD 输出视为候选项指引,而非证据:每项声明都必须以允许读取的知识库页面为依据。 - 遵循诸如“仅限公开内容”“面向用户”“不含内部内容”“以用户所见为准”和“排除内部内容”等过滤模式措辞。在此模式下,跳过标记为
visibility/internal或visibility/pii的页面:绝不读取、引用或透露这些页面。 - 从候选项中排除
_readouts/、_raw/、_archives/、_meta/、index.md、log.md、hot.md和_insights.md。 - 先阅读匹配的章节,只有在无法通过其他方式确认事实声明时才阅读整页。保留相关的生命周期和时效性注释;不得提高页面的可信度。
声明台账与引用审计
撰写正文前先拟定台账。每项包含一项声明、作为依据的 [[vault page]] 链接,以及以下一种状态:有依据的事实、推断出的关联或模糊冲突。
当 OBSIDIAN_LINK_FORMAT=markdown 时,将同一支撑页面呈现为标准 Markdown 链接;否则使用知识库的 [[wikilink]] 格式。
确保每个事实句子旁都有支撑引用。将推断出的关联标记为 ^[inferred];将未解决的冲突标记为 ^[ambiguous]。绝不使用网络知识、模型记忆或虚构示例来填补缺口。省略缺乏依据的声明,并在 Coverage 中指出缺口。推断或模糊标记只是补充,不能替代相邻引用。
起草与输出
阅读 references/voices.md,并严格使用所请求语音的结构模板。所选语音可以改变措辞和顺序,但不能改变台账的事实边界。
仅返回 Markdown,结构如下:
- 标题须注明主题和所选语音。
- 按所选语音文档规定的顺序排列章节。
- 每个事实句子旁都附上引用,并按照
OBSIDIAN_LINK_FORMAT呈现。 - 以
## Coverage作为页脚,列出引用的页面、推断声明的数量,以及已知证据缺口。
如果证据薄弱或相互矛盾,则只呈现有依据的部分。使用 ^[ambiguous] 标记每项未解决的冲突,并附上所有冲突页面的引用;在 ## Coverage 中列出其余缺口。
持久化
默认在对话中呈现结果。对于 --save,如有必要则创建 _readouts/,并将结果写入
_readouts/<slug>.md,其中包含 title、topic、voice、sources、created 和
updated frontmatter。根据主题生成确定且符合文件系统安全要求的 <slug>。保存与对话中返回的相同完整 Markdown 阅读报告。
阅读报告是派生输出:检索时排除 _readouts/,且不得更新 index.md 或 .manifest.json。只有 --save 成功后才能创建 _readouts/ 或阅读报告文件。
日志记录与热缓存
检索已启动的每次叙述尝试后,在
log.md 中追加一条 WIKI_NARRATE 事件:
obsidian-wiki memory log WIKI_NARRATE \
topic="<topic>" voice=<voice> result_pages=<N> \
mode=<normal|filtered> saved=<true|false> \
outcome=<success|no_match|write_failed>
这是未使用 --save 的叙述唯一允许执行的写入操作。不得手动修改 index.md 或 hot.md。
- 未使用
--save时,在返回阅读报告后追加saved=false的事件; 不创建阅读报告,也不更改hot.md。 - 成功写入
--save后,追加saved=true的事件,然后使用obsidian-wiki memory hot --takeaways "<line>"刷新热缓存,其中单行摘要需说明主题、语气、引用页面数和已保存阅读报告的路径。仅在成功保存后,且只能通过该命令更改hot.md。 - 如果起草后阅读报告写入失败,则在对话中返回完整阅读报告,说明保存失败;若
log.md仍可写入,则追加带有saved=false outcome=write_failed的WIKI_NARRATE事件,且不得更新hot.md。 - 如果追加
log.md失败,则保留阅读报告结果,并单独报告日志记录失败。绝不能将失败的日志记录或保存说成成功。
安全失败处理
- 没有匹配页面: 说明知识库中没有该主题的相关材料。即使请求了
--save,也不得创建阅读报告文件,不得更改hot.md;如果log.md可写入,则记录带有outcome=no_match的WIKI_NARRATE事件。 - 证据薄弱或来源冲突: 不得借助外部知识解决。仅返回有依据的说法,在适用时标明歧义,并在
## Coverage中明确说明缺口;仍可保存成功生成的部分阅读报告。 - QMD 不可用或未配置: 在工作进度更新中简要说明回退方案,并通过
index.md和rg安全地继续;不能仅因 QMD 不可用就中止叙述。 - 写入失败: 绝不能将不完整的阅读报告作为已保存结果呈现,绝不能更新
hot.md,也绝不能更新index.md或.manifest.json。