Agent skill

LLM Wiki

by sdyckjq-lab in sdyckjq-lab/llm-wiki-skill

个人知识库构建系统(基于 Karpathy llm-wiki 方法论)。让 AI 持续构建和维护你的知识库, 支持多种素材源(网页、推特、公众号、小红书、知乎、YouTube、PDF、本地文件), 自动整理为结构化的 wiki。

MITAuto-check: warningsKnowledge Management

Install LLM Wiki

The automated check flagged lines worth reading first. See the safety section below.

skills CLI
$ npx skills add sdyckjq-lab/llm-wiki-skill --skill llm-wiki -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install sdyckjq-lab/llm-wiki-skill llm-wiki --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
llm-wiki
GitHub stars
2.5k
Used in
1 other repo
Token cost
~7k tokens
SKILL.md length
1,351 words
Files
1,000 (incl. scripts, assets)
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

个人知识库构建系统(基于 Karpathy llm-wiki 方法论)。让 AI 持续构建和维护你的知识库, 支持多种素材源(网页、推特、公众号、小红书、知乎、YouTube、PDF、本地文件), 自动整理为结构化的 wiki。

  • Works in 2 steps: 初始化:说"帮我初始化一个知识库" → 添加素材:给一个链接或文件,说"帮我消化这篇"
  • Tasks that involve LLM wikis
  • SKILL.md covers 这个 skill 做什么, 核心理念, 快速开始 and Script Directory, plus 11 more sections
  • Calls bash, jq and node; needs OPENAI_API_KEY and ANTHROPIC_API_KEY

What it does

LLM Wiki is an agent skill from sdyckjq-lab/llm-wiki-skill. 个人知识库构建系统(基于 Karpathy llm-wiki 方法论)。让 AI 持续构建和维护你的知识库, 支持多种素材源(网页、推特、公众号、小红书、知乎、YouTube、PDF、本地文件), 自动整理为结构化的 wiki。 触发条件:用户明确提到"知识库"、"wiki"、"llm-wiki",或要求对已初始化的知识库执行 消化、查询、健康检查等操作。不要在用户只是要求"总结这篇文章"时触发——必须是明确的 知识库相关意图。

Its SKILL.md is about 7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1002 other files, including scripts and assets (for example `.github/workflows/browser-main-flows.yml`, `.github/workflows/path-portability.yml` and `.github/workflows/quality-and-tests.yml`).

It sits in Knowledge Management, covering LLM wikis. It works with YouTube. The repository describes itself as: 基于 Karpathy llm-wiki 方法论的个人知识库构建 Skill,支持多平台!. The licence is MIT.

When your agent uses it

  • Tasks that involve LLM wikis

Example prompts

  • “llm-wiki”
  • “总结这篇文章”
  • “/llm-wiki”

Requirements

  • A credential in OPENAI_API_KEY
  • A credential in ANTHROPIC_API_KEY

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. 初始化:说"帮我初始化一个知识库"
  2. 添加素材:给一个链接或文件,说"帮我消化这篇"

What it can do on your machine

Read from SKILL.md and the folder at commit efa2294. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/, which the agent can run.

    Shell commands in SKILL.md call:

    • bash
    • jq
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OPENAI_API_KEY
    • ANTHROPIC_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

LLM Wiki loads about 7k tokens when it runs. Until then it costs about 56 tokens; SKILL.md has 1,351 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~56
When it runs · the whole SKILL.md, loaded when a task matches
~7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: warnings

The automated check found patterns that need a careful read before installing.

  • WarningTells the agent its actions are pre-authorized / not to stop for confirmationSKILL.md:302
    -url-to-markdown 会自己处理 Chrome 启动,**继续执行,不要等待用户确认**。

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from sdyckjq-lab/llm-wiki-skill at commit efa2294, republished under its MIT licence (© sdyckjq-lab). 1,351 words, ~7,049 tokens.

Download SKILL.mdSave it as .claude/skills/llm-wiki/SKILL.md (or your agent's skills folder). This skill also uses 999 other files; get the full folder from GitHub.
name
llm-wiki
description
个人知识库构建系统(基于 Karpathy llm-wiki 方法论)。让 AI 持续构建和维护你的知识库, 支持多种素材源(网页、推特、公众号、小红书、知乎、YouTube、PDF、本地文件), 自动整理为结构化的 wiki。 触发条件:用户明确提到"知识库"、"wiki"、"llm-wiki",或要求对已初始化的知识库执行 消化、查询、健康检查等操作。不要在用户只是要求"总结这篇文章"时触发——必须是明确的 知识库相关意图。
version
3.6.4
author
sdyckjq-lab
license
MIT

llm-wiki — 个人知识库构建系统

把碎片化的信息变成持续积累、互相链接的知识库。你只需要提供素材,AI 做所有的整理工作。

这个 skill 做什么

llm-wiki 帮你构建一个持续增长的个人知识库。它不是传统的笔记软件,而是一个让 AI 帮你维护的 wiki 系统:

  • 你给素材(链接、文件、文本),AI 提取核心知识并整理成互相链接的 wiki 页面
  • 知识库随着每次使用变得越来越丰富,而不是每次重新开始
  • 所有内容都是本地 markdown 文件,用 Obsidian 或任何编辑器都能查看

核心理念

传统方式(RAG/聊天记录)的问题:每次问问题,AI 都要从头阅读原始文件,没有积累。知识库的价值在于知识被编译一次,然后持续维护,而不是每次重新推导。

快速开始

告诉用户这两步就够了:

  1. 初始化:说"帮我初始化一个知识库"
  2. 添加素材:给一个链接或文件,说"帮我消化这篇"

Script Directory

Scripts located in scripts/ subdirectory.

Path Resolution:

  1. SKILL_DIR = this SKILL.md's directory
  2. Script path = ${SKILL_DIR}/scripts/<script-name>

依赖检查

核心主线(本地文件、纯文本、已有知识库操作)默认不需要这些提取依赖。

只有当用户给的是 URL 类来源,并且明确要自动提取网页 / X / 微信公众号 / YouTube / 知乎内容时,才检查以下可选依赖。

如果缺失,提示用户运行:

bash
bash ${SKILL_DIR}/install.sh --platform <当前平台> --with-optional-adapters

可选依赖 skill / 工具:

  • baoyu-url-to-markdown — 普通网页、X/Twitter、部分知乎提取
  • wechat-article-to-markdown — 微信公众号提取
  • youtube-transcript — YouTube 字幕提取

即使这些依赖缺失,skill 仍可工作(用户可以直接提供本地文件、粘贴文本,或改走手动入口)。

外挂状态模型

外挂失败统一分成 not_installed / env_unavailable / runtime_failed / unsupported / empty_result 五类。

所有需要枚举来源、读取 source_label、raw_dir、adapter_name、fallback_hint 的地方,都先读来源总表:

bash
bash ${SKILL_DIR}/scripts/source-registry.sh list

需要拿单个来源的定义时,用:

bash
bash ${SKILL_DIR}/scripts/source-registry.sh get <source_id>

对 URL 类来源,先运行:

bash
bash ${SKILL_DIR}/scripts/adapter-state.sh check <source_id>

adapter-state.sh check 返回 8 列:

text
source_id	source_label	state	state_label	detail	recovery_action	install_hint	fallback_hint
  • not_installed:提示用户可补安装,同时允许改走手动入口
  • env_unavailable:说明缺少的环境条件,同时允许改走手动入口
  • runtime_failed:说明本次提取执行失败,允许重试一次,再改走手动入口
  • unsupported:直接给出手动入口,不尝试自动提取
  • empty_result:说明自动提取没拿到有效内容,请用户手动补全文本

当自动提取实际执行后,再运行:

bash
bash ${SKILL_DIR}/scripts/adapter-state.sh classify-run <source_id> <exit_code> <output_path>

用返回的 detail、recovery_action、install_hint、fallback_hint 生成提示。核心主线不因外挂失败而中断。


工作流路由

根据用户的意图,路由到对应的工作流:

用户意图关键词工作流
"初始化知识库"、"新建 wiki"、"创建知识库"→ init
URL / 文件路径 / "添加素材"、"消化"、"整理" / 直接给链接→ ingest
"批量消化"、"把这些都整理" / 给了文件夹路径→ batch-ingest
"关于 XX"、"查询"、"XX 是什么"、"总结一下"→ query
"给我讲讲 XX"、"深度分析 XX"、"综述 XX"、"digest XX"→ digest
"对比一下 X 和 Y"、"比较 X 和 Y"、"整理一下时间线"、"按时间排列"→ digest(指定格式)
"检查知识库"、"健康检查"、"lint"→ lint
"知识库状态"、"现在有什么"、"有多少素材"→ status
"画个知识图谱"、"看看关联图"、"graph"、"知识库地图"→ graph
"删除素材"、"remove"、"delete source"、"移除"→ delete
"结晶化"、"crystallize"、"把这个记进知识库"、"总结这段对话"→ crystallize

重要:如果用户直接给了一个 URL 或文件,但没有明确说要做什么,默认走 ingest 工作流。如果知识库还不存在,先自动走 init 再走 ingest。


通用前置检查

除 init 外,其他工作流默认先执行这段检查:

  1. 先检查当前工作目录是否包含 .wiki-schema.md
    • 如果包含 → 用当前目录作为知识库根路径
    • 如果不包含 → 回退到读取 ~/.llm-wiki-path
  2. 如果两者都没有:
    • ingest / batch-ingest → 先运行 init
    • query / lint / status / digest / graph / delete → 提示用户先初始化知识库
  3. 读取知识库根目录下的 .wiki-schema.md
  4. 从 .wiki-schema.md 的"语言"字段判断 WIKI_LANG
    • 语言:中文 → WIKI_LANG=zh
    • 语言:English → WIKI_LANG=en
    • 字段缺失 → 默认 WIKI_LANG=zh

输出语言规则

所有面向用户的输出和新写入的 wiki 内容,都按 WIKI_LANG 生成:

  • WIKI_LANG=zh → 使用下文中文示例
  • WIKI_LANG=en → 保持与中文示例相同的结构、信息量和顺序,仅改为自然英文措辞
  • 文件路径、wiki 链接、目录名保持现有约定,不因为语言切换而改动

术语对照:

  • 素材 → Source
  • 实体 → Entity
  • 主题 → Topic
  • 摘要 → Summary
  • 综合 → Synthesis
  • 消化 → Ingest
  • 对比 → Comparison
  • 深度报告 → Deep Dive Report
  • 知识图谱 → Knowledge Graph

工作流 1:init(初始化知识库)

前置检查(含多知识库 CWD 检查)
  1. 先检查当前工作目录是否包含 .wiki-schema.md
    • 如果包含 → 当前目录已经是一个知识库,提示用户已存在并询问是否要重新初始化
  2. 如果当前目录没有 → 读取 ~/.llm-wiki-path 文件
    • 如果存在 → 提示用户已有一个知识库(显示路径),询问是要新建还是切换到那个
  3. 两个都没有 → 进入初始化流程
步骤
  1. 询问知识库主题(先向用户提问):

    • "你的知识库要围绕什么主题?比如'AI 学习笔记'、'产品竞品分析'、'读书笔记'"
    • 如果用户没想法,默认用"我的知识库"
  2. 询问知识库语言(先向用户提问):

    • "知识库内容用什么语言?中文 / English(默认中文)"
    • 选项:zh(中文)或 en(English)
    • 如果用户没有明确说,默认 zh
    • 将选择记录为 WIKI_LANG(zh 或 en)
  3. 询问保存位置(先向用户提问):

    • 默认:~/Documents/我的知识库/(zh)或 ~/Documents/my-wiki/(en)
    • 用户可以自定义路径
  4. 运行初始化脚本:

    bash
    bash ${SKILL_DIR}/scripts/init-wiki.sh "<路径>" "<主题>"
  5. 补充初始化结果说明:

    • init-wiki.sh 会同时生成 purpose.md 和 .wiki-cache.json
    • purpose.md 和 .wiki-schema.md 同级存放,用来记录研究目标、关键问题和研究范围
    • 提醒用户优先填写核心目标和关键问题;这些内容写在 purpose.md 里,后续 ingest 会优先参考这里的方向
  6. 写入语言配置并本地化种子文件:

    • 将 .wiki-schema.md 中的 语言:{{LANGUAGE}} 替换为:
      • zh → 语言:中文(种子文件保持中文,无需额外处理)
      • en → 语言:English,同时覆写以下种子文件为英文版:
    • 如果 WIKI_LANG=en,读取 ${SKILL_DIR}/templates/index-en-template.md、${SKILL_DIR}/templates/overview-en-template.md、${SKILL_DIR}/templates/log-en-template.md,将 {{DATE}} 和 {{TOPIC}} 替换为实际值后,分别写入 index.md、wiki/overview.md、log.md
  7. 记录路径到 ~/.llm-wiki-path:

    bash
    echo "<路径>" > ~/.llm-wiki-path
  8. 输出引导(根据 WIKI_LANG 切换语言):

    中文(zh):

    知识库已创建!路径:<路径>
    
    接下来你可以:
    - 给我一个链接,我会自动提取并整理(网页、X/Twitter、公众号、知乎等)
    - 小红书内容请直接粘贴文本给我(暂不支持自动提取)
    - 给我一个本地文件路径(PDF、Markdown 等)
    - 直接粘贴文本内容
    - 批量消化:给我一个文件夹路径
    
    推荐:用 Obsidian 打开这个文件夹,可以实时看到知识库的构建效果。

    (英文版按「输出语言规则」生成,结构相同。)


工作流 2:ingest(消化素材)

这是最核心的工作流。用户给一个素材进来,AI 做所有的整理工作。

前置检查

执行通用前置检查(见上方定义)。

隐私自查提示(首次进入 ingest 必须执行)

在开始提取或分析任何内容之前,AI 必须先对用户说下面这句话,然后等待确认:

在开始分析这份素材前,请先快速确认里面不包含这些敏感内容:

  • 手机号码(如 138xxxxxxxx)
  • 身份证号(18 位数字)
  • API 密钥(sk-...、AIzaSy...、OPENAI_API_KEY=、ANTHROPIC_API_KEY=、Bearer ...)
  • 明文密码(password=、passwd=)
  • 其他你不希望进入知识库的个人信息

如果素材里有上面任何一项,请先用文本编辑器删除或脱敏后再继续。 llm-wiki 不会自动过滤这些内容,处理后的内容会进入你的知识库。

确认无上述内容请回复 y,要中止请回复 n。

流程规则:

  • 用户回复 y(或"可以"、"继续"、"没有"等明确肯定)→ 继续执行后续步骤
  • 用户回复 n(或"停"、"取消"等明确否定)→ 终止本次 ingest,提示用户清理后再来
  • 其他不明确的回复 → 再问一次,最多两次;两次都不是明确 y/n 则终止
  • 绕过规则:如果用户在当前对话里已经明确说过"素材里没有敏感信息,直接开始", 或者用户是在 batch-ingest 流程中(已经在顶层确认过一次),AI 可以跳过这一步

为什么是自查清单而不是脚本:

  • 正则在非结构化文本(聊天记录、笔记)里误报率很高,错过真的敏感词,误报无害的普通词
  • 把判断权还给用户,比让脚本决定更可靠
  • 对新手更友好,不会遇到看不懂的脚本报错
素材提取路由

根据素材类型自动路由到最佳提取方式:

外挂前置判断:

  • URL 先调用 bash ${SKILL_DIR}/scripts/source-registry.sh match-url "<url>"
  • 本地文件先调用 bash ${SKILL_DIR}/scripts/source-registry.sh match-file "<path>"
  • 纯文本粘贴直接调用 bash ${SKILL_DIR}/scripts/source-registry.sh get plain_text
  • source-registry.sh 返回 10 列:source_id、source_label、source_category、input_mode、match_rule、raw_dir、adapter_name、dependency_name、dependency_type、fallback_hint
  • 调用 bash ${SKILL_DIR}/scripts/adapter-state.sh check <source_id>
  • 从 adapter-state.sh check 的 8 列结果里读取 state、detail、recovery_action、install_hint、fallback_hint
  • 如果 state=not_installed / env_unavailable / unsupported → 不调用外挂,直接按 detail、recovery_action、install_hint、fallback_hint 告诉用户下一步
  • 只有返回 available 时,才继续自动提取

URL 类素材(统一走来源总表,不手写域名表):

Chrome 提示(仅当 adapter_name=baoyu-url-to-markdown 时): adapter-state.sh check 会把“提取器可用”与“是否存在 9222 可复用会话”分开表达。 如果 check 返回 available,正常调用外挂;即使 detail 提示未检测到 9222,也继续执行。baoyu-url-to-markdown 会自己处理 Chrome 启动,继续执行,不要等待用户确认。 只有在你想复用当前已登录的 Chrome 会话时,才需要手动开启 9222。 如果提取仍然失败(通常是页面需要登录态,如 X/Twitter、知乎等),可提示用户开启调试端口复用已登录会话:open -na "Google Chrome" --args --remote-debugging-port=9222

  • 如果 source_category=manual_only → 不调用外挂,直接使用 fallback_hint
  • 如果 adapter_name=wechat-article-to-markdown → 执行 wechat-article-to-markdown "<URL>"
  • 如果 adapter_name=youtube-transcript → 调用 youtube-transcript
  • 如果 adapter_name=baoyu-url-to-markdown → 调用 baoyu-url-to-markdown

本地文件:

  • 统一走 bash ${SKILL_DIR}/scripts/source-registry.sh match-file "<path>"
  • 命中后直接读取,不调用外挂

纯文本粘贴:

  • 统一视为 plain_text
  • 直接使用用户提供的文本

统一回退规则:

  • 对自动提取结果,统一运行 bash ${SKILL_DIR}/scripts/adapter-state.sh classify-run <source_id> <exit_code> <output_path>
  • 从 classify-run 返回的 8 列结果里读取 state、detail、recovery_action、fallback_hint
  • 如果返回 runtime_failed → 按 detail、recovery_action、fallback_hint 告诉用户“这次自动提取失败,可以先重试一次;如果还不行,就改走手动入口”
  • 如果返回 empty_result → 按 detail、recovery_action、fallback_hint 告诉用户“自动提取没有拿到有效正文,请手动补全文本后继续”
  • 其他状态也使用同一份返回结果,不再手写第二套回退文案
内容分级处理

根据素材长度和信息密度自动选择处理级别:

判断标准:

  • 素材内容 > 1000 字 → 完整处理
  • 素材内容 <= 1000 字(短推文、小红书笔记等)→ 简化处理
完整处理流程(长素材 > 1000 字)
  1. 提取素材内容:按上面的路由获取素材文本

  2. 保存原始素材到 raw/ 对应目录:

    • 根据素材类型保存到对应目录(articles/、tweets/、wechat/、xiaohongshu/、zhihu/ 等)
    • 文件名格式:{日期}-{短标题}.md
    • 如果是 URL 类素材,在文件头部记录原始 URL

    图片检测与追踪:保存素材后,扫描内容中是否包含图片引用(![ 或 <img 或 .png/.jpg/.gif/.svg URL)。如果检测到图片:

    • 告诉用户:"素材包含 {N} 张图片引用。图片链接可能失效,建议手动下载到 raw/assets/(Obsidian 用户可在设置中绑定快捷键一键下载附件)"
    • 在后续 source 页面的 frontmatter 中:
      • images:记录检测到的图片引用数量
      • image_paths:如果用户已将图片下载到 raw/assets/,用 YAML block list 格式记录路径;如果尚未下载,保持为空数组 []。示例:
        yaml
        image_paths:
          - raw/assets/2026-01-15-fig1.png
          - raw/assets/2026-01-15-fig2.jpg
    • 不阻塞 ingest 流程,仅做提醒
    • 用户后续下载图片后,可以手动更新 source 页面的 image_paths,或在下次 lint 时由 AI 辅助补全
  3. 读取上下文:

    • 优先顺序:purpose.md > .wiki-schema.md > index.md
    • 如果 purpose.md 存在,先读取其中的核心目标、关键问题和研究范围
    • 用 purpose.md 指导后续实体、主题、关联的取舍和权重
  4. 缓存检查:

    • 在进入 LLM 处理前,先运行:
      bash
      bash ${SKILL_DIR}/scripts/cache.sh check “<raw 文件路径>”
    • 如果返回 HIT 或 HIT(repaired) → 跳过本次 LLM 调用,直接读取已有 wiki 页面,并告诉用户这是”无变化,直接复用已有结果”
      • HIT(repaired) 表示缓存自愈修复成功(上次 update 被跳过但 source 页面存在且 source_path 匹配)
    • 如果返回 MISS:<reason> → 继续执行下面的两步流程
      • MISS:no_entry — 首次处理此素材(正常情况)
      • MISS:hash_changed — 素材内容有变化,需要重新处理
      • MISS:no_source — 有缓存记录但 source 页面被删除了
      • MISS:repaired_needs_verify — 找到同名 source 页面但 source_path 不匹配,需要重新处理以确认关联正确
  5. Step 1:结构化分析:

    • 输入:原始内容 + purpose.md + 现有 wiki 结构(至少读取 index.md 概要)
    • 输出:JSON 格式的分析结果,不持久化,只在当前 ingest 流程里临时传递
    • JSON 至少包含 entities、topics、connections
    • confidence 是必需字段,缺失就视为格式异常并触发单步回退
    json
    {
      "source_summary": "一句话概括",
      "entities": [{"name": "xxx", "type": "concept", "relevance": "high", "confidence": "EXTRACTED", "evidence": "原文摘录或推理依据"}],
      "topics": [{"name": "xxx", "importance": "high"}],
      "connections": [{"from": "A", "to": "B", "type": "因果", "confidence": "INFERRED", "evidence": "推理依据"}],
      "contradictions": [{"claim_a": "...", "claim_b": "...", "context": "..."}],
      "new_vs_existing": {"new_entities": [], "updates": []}
    }

    置信度赋值规则(Claude 必须遵守):

    • EXTRACTED:信息直接出现在原文里,字面可以找到。应在 evidence 字段提供原文摘录(建议 ≤50 字);缺失时脚本会发出 WARN 但不阻塞
    • INFERRED:信息是从多处原文推断出来的,原文没有直接说。应在 evidence 字段说明推理依据;缺失时脚本会发出 WARN 但不阻塞
    • AMBIGUOUS:原文说法不清楚,或者有歧义。evidence 可选
    • UNVERIFIED:信息来自 Claude 的背景知识,原文没有证据。evidence 可选

    Step 1 完成后,必须执行验证:

    1. mkdir -p {wiki_root}/.wiki-tmp
    2. 将 Step 1 JSON 写入 {wiki_root}/.wiki-tmp/step1-latest.json
    3. 调用 bash ${SKILL_DIR}/scripts/validate-step1.sh {wiki_root}/.wiki-tmp/step1-latest.json
    4. 验证完成后删除 {wiki_root}/.wiki-tmp/step1-latest.json

    如果脚本返回非 0,自动回退到单步 ingest(不进行 Step 2)。

  6. Step 2:页面生成:

    • 输入:原始内容 + purpose.md + Step 1 的分析结果 + 现有相关 wiki 页面
    • 上下文加载规则:只读取 Step 1 中 new_vs_existing.updates 列出的已有页面;如果某页超过 2000 字,只读取 frontmatter + 需要更新的章节
    • 输出:所有需要创建或更新的 wiki 页面内容
    • Step 2 负责完成原流程中的素材摘要、实体页、主题页、index、log 更新
  7. 容错回退:

    • 如果 Step 1 不是有效 JSON,或者缺少 entities、topics、confidence 等必需字段,自动回退到原来的单步流程
    • 回退时,所有本次新生成内容统一加上:
      markdown
      <!-- confidence: UNVERIFIED -->
    • 同时在页面顶部加注释说明本次处理因格式问题降级,避免出现“部分标注、部分没标注”的状态
  8. 生成素材摘要页(wiki/sources/{日期}-{短标题}.md):

    • 参考 templates/source-template.md 的格式
    • frontmatter 里保留 sources: [] 字段;如果这次 ingest 有明确来源,按实际 raw/source 引用填入
    • 包含:基本信息、核心观点、关键概念、与其他素材的关联、原文精彩摘录
    • 对 Step 1 中标记为 INFERRED 或 AMBIGUOUS 的关系,用 HTML 注释保留置信度:
      markdown
      <!-- confidence: INFERRED -->
      <!-- confidence: AMBIGUOUS -->
    • 写入 source 页面时,必须使用 create-source-page.sh(自动更新缓存):
      bash
      # 先把页面内容写到临时文件
      echo "<页面内容>" > /tmp/source-content.tmp
      # 调用脚本原子写入 + 缓存更新
      bash ${SKILL_DIR}/scripts/create-source-page.sh "<raw 文件路径>" "wiki/sources/{日期}-{短标题}.md" /tmp/source-content.tmp
    • 如果脚本返回 SUCCESS → 写入和缓存都已更新
    • 如果脚本返回 ERROR → 写入或缓存失败,检查报错信息后重试
  9. 更新或创建实体页(wiki/entities/):

    • 对每个关键概念,检查 wiki/entities/ 下是否已有对应页面
    • 如果已有 → 追加新信息,更新"不同素材中的观点"部分
    • 如果没有 → 创建新实体页,参考 templates/entity-template.md
    • 使用 [[实体名]] 语法做双向链接
  10. 更新或创建主题页(wiki/topics/):

  • 识别素材涉及的主要研究主题
  • 如果已有对应主题页 → 更新素材汇总表和核心观点
  • 如果没有 → 创建新主题页,参考 templates/topic-template.md
  1. 更新 index.md:
  • 在对应分类下添加新条目
  • 更新概览统计数字
  1. 更新 log.md:
  • log.md 追加格式:## {日期} ingest | {素材标题}
  • 记录新增和更新的页面列表
  • 注意:缓存更新已在 Step 8 通过 create-source-page.sh 自动完成,此处无需再调用 cache.sh update
  1. 向用户展示结果(按 WIKI_LANG 切换语言):

中文(zh):

已消化:{素材标题}

新增页面:
- {素材摘要页}
- {新实体页1}
- {新主题页1}

更新页面:
- {已有实体页2}(追加了新信息)

发现关联:
- 这篇素材和 [[已有素材]] 在 {某概念} 上有联系

别名建议:(仅当发现新的同义词关系时显示)
- 建议添加到别名词表:{术语A} = {术语B}

(英文版按「输出语言规则」生成,结构相同。)

简化处理流程(短素材 <= 1000 字)

适用于短推文、小红书笔记、简短评论等。

  1. 保存原始素材到对应 raw/ 目录

    • 图片检测与追踪:同完整处理流程,扫描图片引用并提醒用户;在 source 页面 images 和 image_paths frontmatter 字段记录数量和路径
  2. 读取上下文并检查缓存:

    • 仍然优先读取 purpose.md
    • 仍然先运行 bash ${SKILL_DIR}/scripts/cache.sh check "<raw 文件路径>"
    • 如果缓存命中(HIT 或 HIT(repaired)),直接复用已有结果
  3. 生成简化摘要页(wiki/sources/):

    • frontmatter 里写入 sources: []
    • 只包含基本信息和核心观点
    • 不写"原文精彩摘录"部分
    • 写入 source 页面时同样使用 create-source-page.sh(自动更新缓存)
  4. 提取 1-3 个关键概念:

    • 如果对应实体页已存在 → 追加一句话说明
    • 如果不存在 → 在摘要页中用 [待创建: [[概念名]]] 标记
  5. 更新 index.md 和 log.md(缓存已由 create-source-page.sh 自动更新)

  6. 跳过:主题页创建/更新、overview 更新

  7. 向用户展示简化结果(按 WIKI_LANG 切换语言):

    中文(zh):

    已消化:{素材标题}(短内容,简化处理)
    
    新增:
    - 素材摘要页
    
    待完善:
    - [待创建: [[概念名]]](积累更多素材后整理)

    (英文版按「输出语言规则」生成,结构相同。)


工作流 3:batch-ingest(批量消化)

当用户给了一个文件夹路径,或者说"把这些都整理一下"。

步骤
  1. 确认知识库路径:

    • 执行通用前置检查(见上方定义),获取知识库根路径和 WIKI_LANG
  2. 列出所有可处理文件:

    • 支持的格式:.md, .txt, .pdf, .html
    • 忽略:隐藏文件、.git 目录、node_modules 等
  3. 展示文件列表,确认处理范围(按 WIKI_LANG 切换语言):

    zh:

    发现 {N} 个文件待处理:
    1. file1.pdf
    2. file2.md
    3. file3.txt
    
    预计需要 {N} 轮处理。是否开始?

    (英文版按「输出语言规则」生成,结构相同。)

  4. 逐个处理:对每个文件执行 ingest 工作流

    • 每个文件先 cache check
    • 命中缓存的文件直接跳过,不再进入 LLM 处理
    • 只有 MISS 的文件才继续执行完整或简化处理
  5. 每 5 个文件后暂停,展示进度并询问是否继续(按 WIKI_LANG 切换语言):

    zh:

    进度:5/{N} 已完成
    
    本批处理结果:
    - 新增素材摘要:5
    - 新增实体页:3
    - 更新已有页面:7
    
    继续处理剩余 {M} 个文件?

    (英文版按「输出语言规则」生成,结构相同。)

  6. 全部完成后:

    • 运行一次 index.md 全量更新
    • 输出总结报告(按 WIKI_LANG 切换语言):

    zh:

    批量消化完成!
    
    处理了 {N} 个文件:
    - 已跳过 N 个(无变化),处理 M 个(新增/更新)
    - 成功:{S}
    - 跳过(内容为空/格式不支持):{K}
    - 失败:{F}
    
    新增页面:{total_new}
    更新页面:{total_updated}

    (英文版按「输出语言规则」生成,结构相同。)


工作流 4:query(查询知识库)

步骤
  1. 确认知识库路径:

    • 执行通用前置检查(见上方定义),获取知识库根路径和 WIKI_LANG
    • 如果没有可用知识库,提示用户先初始化
  2. 读取 index.md 了解知识库全貌

  3. 搜索相关页面:

    • 别名展开:先读取 .wiki-schema.md 中的"别名词表",如果用户的查询关键词命中了某一组别名,则将该组所有同义词都纳入搜索(如搜"LLM"时同时搜"大语言模型"和"大模型")
      • 展开规则:只在命中的那一组内展开,不跨组传递(A=B 和 B=C 是两组时,搜 A 只展开第一组,不合并第二组)
      • 去重:展开后的关键词列表自动去重,忽略空项和纯空格项
    • 在 index.md 中定位相关分类和条目(用展开后的全部关键词)
    • 再用 Grep 在 wiki/ 目录下搜索所有关键词(原始 + 别名展开)
    • 按相关性排序:文件名精确命中 > index.md 条目命中 > 正文关键词命中次数(同一别名组的多个词命中同一页面时只计一次,避免别名密集的页面分数虚高)
    • 段落上限:展开后每个关键词最多取 3 个命中段落,总段落数不超过 15 个
    • 读取最相关的 3-5 个页面
    • 单页长度上限:如果某页超过 2000 字,只读取 frontmatter + 前 500 字 + Grep 命中段落(前后各 3 行),避免长页面消耗过多上下文
  4. 综合回答:

    • 按 WIKI_LANG 用对应语言回答用户的问题
    • 标注信息来源(引用 wiki 页面,用 [[页面名]] 格式)
    • 如果多个素材有不同观点,分别列出并标注来源
  5. 判断是否值得持久化:

    • 如果回答引用了 3 个及以上来源的综合分析,提示用户:"是否保存此回答到知识库?"
    • 少于 3 个来源时,默认只做即时回答,不主动建议持久化
  6. 重复检测:

    • 持久化前,先在 wiki/queries/ 下搜索同主题页面
    • 通过 frontmatter tags 和 title 匹配,判断是否已有同主题 query 页面
    • 如果已有,提示用户是“更新现有页面”还是“新建一页”
    • 如果用户选择更新旧页面,旧版页面增加 superseded-by 标记
  7. 保存 query 页面:

    • 用 templates/query-template.md 生成页面
    • 保存路径使用 wiki/queries/{date}-{short-hash}.md,避免同主题命名冲突
    • frontmatter 必须包含 type: query 和 derived: true
    • derived: true 表示这是衍生内容,不是一手素材
  8. 自引用防护:

    • query 页面在后续 ingest 分析里视为二级来源,不作为主要知识来源
    • 如果后续页面引用 query 页面里的信息,相关关系统一按 INFERRED 处理
    • ingest 不主动扫描 wiki/queries/;只有当前问题确实需要时,才把 query 页面作为补充材料读取
  9. 更新索引和日志:

    • 保存成功后,在 index.md 中加入 query 条目
    • 同时在 log.md 中追加一条 query 保存记录

工作流 5:lint(健康检查)

触发时机
  • 用户主动说"检查知识库"
  • 每次 ingest 后,如果素材总数是 10 的倍数,主动建议运行 lint
Show full SKILL.md (841 more words)Show less
前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

  1. 确定检查范围:

    • 最近更新的 10 个页面(按文件修改时间排序)
    • 随机抽查的 10 个页面(避免遗漏旧页面的问题)
    • 如果页面总数 <= 20,检查全部
  2. Step 0:调用脚本做机械检查(必须先做,不要跳过):

    bash
    bash ${SKILL_DIR}/scripts/lint-runner.sh <wiki_root>

    脚本一次读取后统一检查孤立页、index、图片、来源信息和全部 wikilink。明确路径和唯一裸名会按实际页面路径解析;同名页面不会被合并。歧义链接不猜目标、不计入关系,并列出全部候选;“待创建”和真正断链分开报告,代码示例不会被当成链接。

    普通检查只读并完整报告数据问题,退出码为 0;路径、参数、解析或读取失败返回 1。需要让 CI 因歧义、真正断链或路径冲突而阻断时,显式运行:

    bash
    bash ${SKILL_DIR}/scripts/lint-runner.sh <wiki_root> --strict

    严格模式完成报告后,有 error 返回 2,只有“待创建”等提示仍返回 0。可在末尾加 --json 获取同一份结构化完整报告。所有这些检查都不会修改知识库 Markdown。

  3. 逐项检查(AI 判断类,脚本做不了):

    矛盾信息(阅读相关页面,检查是否有互相矛盾的说法):

    • 列出发现的矛盾
    • 标注每处矛盾的来源页面

    交叉引用缺失(检查相关主题的页面之间是否应该互相链接但没链):

    • 建议添加的交叉引用

    置信度报告(统计 EXTRACTED / INFERRED / AMBIGUOUS / UNVERIFIED):

    • 高亮 AMBIGUOUS 条目,提醒用户优先验证
    • 抽查标注为 EXTRACTED 的条目,检查是否能在原始素材里找到对应原文
    • 如果发现 EXTRACTED 无法回溯到原文,提示用户回退为更低置信度或重新整理

    补充建议:基于 Step 0 脚本的孤立页/断链输出,给出修复建议(脚本只列问题,不给方案)

    • 孤立页面 → 建议从哪些相关页面添加 [[链接]]
    • 断链 → 建议为哪些概念创建新页面,或改写引用为已有页面
  4. 输出报告(按 WIKI_LANG 切换语言,整合 Step 0 脚本输出 + Step 3 AI 判断结果):

    zh:

    知识库健康检查报告
    
    检查范围:最近更新 10 页 + 随机抽查 10 页(共 {N} 页)
    
    孤立页面(没有其他页面链接到它):
    - [[某页面]] → 建议从 [[相关页面]] 添加链接
    
    断链(被链接但不存在):
    - [[某概念]] → 建议创建新页面
    
    矛盾信息:
    - 关于"XX",[[页面A]] 说是 Y,但 [[页面B]] 说是 Z
    
    缺失索引:
    - {文件名} 存在但未记录在 index.md 中
    
    置信度报告:
    - EXTRACTED:{N}
    - INFERRED:{N}
    - AMBIGUOUS:{N}
    - UNVERIFIED:{N}

    (英文版按「输出语言规则」生成,结构相同。)

  5. 询问用户:要自动修复哪些问题?(按 WIKI_LANG 用对应语言提问)


工作流 6:status(查看状态)

前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

步骤
  1. 先运行 bash ${SKILL_DIR}/scripts/source-registry.sh list 读取来源总表

  2. 获取知识库路径(按上面的 CWD 检查逻辑)

  3. 统计:

    • 按来源总表中的 source_label 和 raw_dir 逐项统计 raw/ 文件数
    • wiki/entities/ 下的页面数
    • wiki/topics/ 下的页面数
    • wiki/sources/ 下的页面数
    • wiki/comparisons/ 和 wiki/synthesis/ 下的页面数
    • purpose.md 是否存在
  4. 读取 log.md 最后 5 条记录

  5. 读取 index.md 获取主题概览

  6. 运行 bash ${SKILL_DIR}/scripts/adapter-state.sh summary-human 获取外挂状态

  7. 运行 node ${SKILL_DIR}/scripts/source-signal-coverage.js <wiki_root> 获取来源信号覆盖数据,从返回 JSON 的 summary 中读取:

    • ok(已参与)、missing_sources(缺少 sources)、empty_sources(sources 为空)、invalid_sources(格式无效)、not_applicable(当前不参与)
  8. 输出报告(按 WIKI_LANG 切换语言):

    zh:

    知识库状态:{主题}
    
    素材分布(按来源总表):
    - {source_label}:{N}
    - {source_label}:{N}
    ...
    
    Wiki 页面:{总数} 页
      - 实体页:{N}
      - 主题页:{N}
      - 素材摘要:{N}
      - 对比分析:{N}
      - 综合分析:{N}
    
    图谱来源信号覆盖:
    - 已参与:{ok}
    - 缺少 sources:{missing_sources}
    - sources 为空:{empty_sources}
    - 格式无效:{invalid_sources}
    - 当前不参与:{not_applicable}
    
    研究方向:
    - purpose.md 是否存在:{是/否}
    
    最近活动:
    - {日期} ingest | {素材标题}
    - {日期} ingest | {素材标题}
    ...
    
    外挂状态:
    {summary-human 原文}
    
    建议:
    - 你可能想深入了解 {某主题},已有 {N} 篇相关素材
    - {某实体} 被 {N} 篇素材提到,值得整理成独立页面

    (英文版按「输出语言规则」生成,结构相同。)

    外挂状态直接使用 bash ${SKILL_DIR}/scripts/adapter-state.sh summary-human 的输出,不要自己再重写一套来源清单。


工作流 7:digest(深度综合报告)

区别于 query:query 是快速问答,不生成新页面;digest 是跨素材深度综合,生成持久化报告。

触发关键词
  • 默认深度报告格式:"给我讲讲 XX"、"深度分析 XX"、"综述 XX"、"digest XX"、"全面总结一下 XX"
  • 对比表格式:"对比一下 X 和 Y"、"比较 X 和 Y"、"X 和 Y 有什么区别"
  • 时间线格式:"整理一下时间线"、"按时间排列"、"时间顺序"
前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

  1. 搜索相关页面:

    • 别名展开:同 query 工作流,先读取 .wiki-schema.md 中的"别名词表"展开同义词(不跨组传递,自动去重)
    • 用 Grep 在 wiki/ 下搜索所有关键词(原始 + 别名展开),同一别名组命中同一页面只计一次
    • 列出将要综合的页面(让用户了解报告覆盖范围)
  2. 深度阅读所有相关页面 + 选择输出格式:

    • 读取找到的所有相关 wiki 页面(sources/、entities/、topics/)
    • 单页长度上限:如果某页超过 3000 字,优先读取 frontmatter + 核心观点章节 + 与主题直接相关的段落,跳过"原文精彩摘录"等冗长引用部分
    • 归纳每个页面的核心观点和来源信息
    • 根据触发关键词决定输出格式:
      • 用户说"对比"/"比较"类 → 使用对比表格式(见下方模板 B)
      • 用户说"时间线"/"按时间"类 → 使用时间线格式(见下方模板 C)
      • 其他默认 → 使用深度报告格式(见下方模板 A)
  3. 生成结构化深度报告,保存到 wiki/synthesis/{主题}-{格式}.md(按 WIKI_LANG 切换语言):

    文件名规则:默认格式用 {主题}-深度报告.md,对比表用 {主题}-对比.md,时间线用 {主题}-时间线.md

    模板 A:深度报告格式(默认)

    zh:

    markdown
    # {主题} 深度报告
    
    > 综合自 {N} 篇素材 | 生成日期:{日期}
    
    ## 背景概述
    (简要说明这个主题的背景和重要性)
    
    ## 核心观点
    (按重要性排列,每个观点标注来源)
    - 观点一(来源:[[素材A]]、[[素材B]])
    - 观点二(来源:[[素材C]])
    
    ## 不同视角对比
    (如有多个素材观点不同,在此对比)
    | 维度 | 来源A的观点 | 来源B的观点 |
    |------|------------|------------|
    
    ## 知识脉络
    (按时间或逻辑顺序梳理该主题的发展)
    
    ## 尚待解决的问题
    (现有素材中尚未回答的问题,可作为下次搜集素材的方向)
    
    ## 相关页面
    (列出所有综合来源的链接)

    (英文版按「输出语言规则」生成,结构相同。)

    模板 B:对比表格式(触发词:对比 / 比较)

    markdown
    # {对比主题} 对比分析
    
    > 对比 {N} 个对象 | 生成日期:{日期}
    
    ## 对比对象
    - [[对象 A]]
    - [[对象 B]]
    - [[对象 C]](如有)
    
    ## 对比表
    
    | 维度       | [[对象 A]] | [[对象 B]] | [[对象 C]] |
    |-----------|-----------|-----------|-----------|
    | 核心观点   | ...       | ...       | ...       |
    | 适用场景   | ...       | ...       | ...       |
    | 优点       | ...       | ...       | ...       |
    | 缺点 / 限制 | ...       | ...       | ...       |
    | 来源素材   | [[素材1]] | [[素材2]] | [[素材3]] |
    
    ## 关键差异
    (用 1-2 句话说清最重要的差异点)
    
    ## 相关页面

    模板 C:时间线格式(触发词:时间线 / 按时间)

    markdown
    # {主题} 时间线
    
    > 时间跨度:{起始年} ~ {结束年} | 生成日期:{日期}
    
    ```mermaid
    gantt
      title {主题} 时间线
      dateFormat YYYY-MM-DD
      section 主要事件
        事件 A : 2023-01-01, 1d
        事件 B : 2024-03-15, 1d
        事件 C : 2025-06-20, 1d

    事件说明

    • 2023-01-01 — 事件 A:简要说明(来源:[[素材A]])
    • 2024-03-15 — 事件 B:简要说明(来源:[[素材B]])
    • 2025-06-20 — 事件 C:简要说明(来源:[[素材C]])

    相关页面

    
    > **时间线格式注意事项**:
    > - `gantt` 要求 `YYYY-MM-DD` 精度
    > - 如果素材只有年份(如 "2023 年"),把日期补为该年第一天(`2023-01-01`)
    > - 如果连年份都不确定,改用**纯文字时间线**(无序列表按时间排序),不用 Mermaid gantt
    > - 如果事件超过 15 个,建议按 section 分组,避免图太长
  4. 更新 index.md 和 log.md:

    • index.md 的"综合分析"分类下添加新报告条目
    • log.md 追加:## {日期} digest | {主题}
  5. 向用户展示结果(按 WIKI_LANG 切换语言):

    zh:

    已生成深度报告:{主题}
    
    综合了 {N} 篇素材:
    - [[素材1]]、[[素材2]]...
    
    报告已保存:wiki/synthesis/{主题}-深度报告.md
    
    发现这些待解决问题,可以继续搜集素材:
    - {问题1}
    - {问题2}

    (英文版按「输出语言规则」生成,结构相同。)


工作流 8:graph(知识图谱 · Mermaid + 交互式 HTML)

触发关键词

"画个知识图谱"、"看看关联图"、"graph"、"知识库地图"、"展示知识关联"

前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

  1. 扫描双向链接:

    • 遍历 wiki/ 下所有 .md 文件
    • 提取每个文件中的 [[链接]] 语法,建立关系列表:页面A → 页面B
  2. 生成 Mermaid 图表文件 wiki/knowledge-graph.md:

    markdown
    # 知识图谱
    
    > 自动生成 | {日期} | 共 {N} 个节点,{M} 条关联
    
    ```mermaid
    graph LR
      A[概念1] --> B[概念2]
      A --> C[素材1]
      D[主题1] --> A
      D --> E[概念3]
    ```
    
    查看方式:用 Typora、VS Code(Markdown Preview Enhanced)、或直接在 GitHub 上查看。

    生成规则:

    • 节点名用中括号 [名称],名称太长则截断到 10 字
    • 只展示有双向链接关系的节点(孤立节点不纳入图谱)
    • 如果关系超过 50 条,只保留被引用次数最多的 30 个节点,避免图谱过于密集
    • 默认全部使用 A --> B 无标注箭头,不自动判断关系类型

    可选:手动美化图谱(生成后由用户自己做,AI 不自动处理):

    生成的 wiki/knowledge-graph.md 默认只有 --> 箭头。如果用户希望图谱更清楚地 表达关系类型,可以:

    1. 用编辑器打开 wiki/knowledge-graph.md
    2. 参考 .wiki-schema.md 里的"关系类型词汇表"(实现 / 依赖 / 对比 / 矛盾 / 衍生)
    3. 把最重要的 3-5 条箭头改写成 A -->|实现| B 之类的带标注写法
    4. 保存后用 Obsidian / VS Code / Typora 重新渲染

    AI 在 graph 工作流里不自动打标——因为自动判断关系类型需要额外阅读整段上下文, 成本高且准确率难保证。人类对"哪些关系最值得打标"的判断更可靠。 用户如果明确要求 AI 给某几条边打标,可以单独说"把 A 和 B 之间的关系标成'实现'", AI 再手动修改 wiki/knowledge-graph.md 对应的那一行。

2b. 生成交互式图谱数据(wiki/graph-data.json):

bash
bash scripts/build-graph-data.sh "$WIKI_ROOT"

脚本会递归扫描 wiki/{entities,topics,sources,comparisons,synthesis,queries}/**/*.md, 解析 wikilink 与 <!-- confidence: EXTRACTED|INFERRED|AMBIGUOUS --> 注释, 调用本地 Node helper 计算 3 信号边权重(共引强度 / 来源重叠 / 类型亲和度)、Louvain 社区和规则 insights, 并把 wiki/graph-data.json 与同目录唯一的 wiki/graph-warnings.json 成对写入(内容 >2MB 自动降级,单节点只留 500 行;图规模超预算时 insights 自动降级)。节点身份使用实际知识库相对路径,因此六类正式目录中的同名页面都会保留。明确路径和唯一裸名正常建边;歧义链接不建边并报告候选;“待创建”和真正断链分别报告。

正常构建即使发现数据问题也返回 0,只有工具、输入或写入失败返回 1,并且绝不修改 Markdown。CI 要阻断数据错误时,另运行 node scripts/wiki-link-cli.js check "$WIKI_ROOT" --strict;严格检查有 error 返回 2。自定义输出必须仍在知识库内、文件名保持 graph-data.json,并使用自己的目录;该目录中的 graph-warnings.json 是它唯一的配对详情文件,两个自定义输出要放在两个不同目录。 依赖 jq + node(如缺失可运行 brew install jq node)。

2c. 图谱运行时说明:

  • 图谱基础构建现在依赖 jq + node
  • 不需要额外 npm install
  • node 只用于运行随仓库分发的本地预构建 helper

2d. 生成交互式图谱 HTML(东方编辑部 × 数字山水风):

bash
bash scripts/build-graph-html.sh "$WIKI_ROOT"

生成 wiki/knowledge-graph.html。脚本会先验证成对告警,再安全内嵌图谱和最多 2 MiB(gzip level 9)的告警详情,离线双击即可打开。详情超过上限时会稳定精简并保留全部总数;详情缺失或与图谱不是同一代时仍显示图谱,并提示重新构建。 页面保持三栏国风布局:左侧文献索引,中间数字山水图谱,右侧常驻节点详情。 包含搜索、社区筛选、节点视觉分层、首屏推荐预览、摘要、正文、相邻节点、洞察、小地图和关系置信度图例。 离线页只负责解释告警,不提供改名、解决或其他写入操作。

  1. 读取 insights 并向用户展示结果(按 WIKI_LANG 切换语言):

    先读取 insights:

    bash
    jq '.insights' "$WIKI_ROOT/wiki/graph-data.json"

    zh:

    知识图谱已生成!
    
    共 {N} 个节点,{M} 条关联
    
    图谱洞察:
    - 惊人连接:{from} ↔ {to}(跨社区,权重 {weight}){如有}
    - 桥节点:{node}(连接 {count} 个社区){如有}
    - 知识缺口:{node}(度数 {degree},建议补充素材){如有}
    - 稀疏社区:{community}(密度 {density}){如有}
    
    查看方式:
    - 交互式(推荐):双击 wiki/knowledge-graph.html
      (建议 Chrome / Firefox;Safari 若提示"已阻止脚本",
       可在 wiki/ 下跑 `python3 -m http.server 8000` 再访问)
    - Mermaid 静态图:wiki/knowledge-graph.md
      (Obsidian / VS Code Markdown Preview Enhanced / GitHub / Typora 均可渲染)
    
    孤立页面(未纳入图谱):
    - [[某页面]](建议添加到相关实体页或主题页)

    (英文版按「输出语言规则」生成,结构相同。各洞察类别为空时省略该行。)


工作流 9:delete(删除素材)

触发关键词

"删除素材"、"remove"、"delete source"、"移除"

前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

步骤
  1. 识别目标素材:

    • 在 raw/ 下搜索用户提到的素材名
    • 如果匹配到多个候选,先列出候选文件让用户确认
  2. 扫描影响范围:

    • 先运行:
      bash
      bash ${SKILL_DIR}/scripts/delete-helper.sh scan-refs "<wiki 根目录>" "<素材文件名>"
    • 用脚本返回的页面列表作为引用扫描结果
    • 逐页判断是“删除整页”还是“保留页面但移除该素材引用”
  3. 安全确认:

    • 如果影响超过 5 个页面时,先把受影响页面完整列给用户,再做二次确认
    • 如果某个实体或主题只被这个素材引用,提示用户是否连同页面一起删除
  4. 执行级联清理:

    • 删除 raw/ 下对应原始文件
    • 删除 wiki/sources/ 下对应素材摘要页
    • 对 wiki/entities/、wiki/topics/、wiki/comparisons/、wiki/synthesis/ 中仍需保留的页面,只移除该素材相关的引用段落
    • 更新 index.md
    • 在 log.md 追加删除记录
    • 标记 wiki/overview.md 需要重新生成
  5. 清理缓存:

    • 删除完成后,对对应 raw 文件运行:
      bash
      bash ${SKILL_DIR}/scripts/cache.sh invalidate "<raw 文件路径>"
  6. 断链检查:

    • 用 grep 或 delete-helper.sh 再扫一遍指向已删除页面的链接
    • 清理明确可判定的断链;如果归属不清,保留原文并提示用户后续人工确认
  7. 向用户报告结果:

    zh:

    已删除:
      - raw/articles/2024-01-15-ai-article.md
      - wiki/sources/2024-01-15-ai-article.md
    已更新(移除引用):
      - wiki/entities/AI-Agent.md
      - wiki/topics/大语言模型.md
    需要重新生成:
      - wiki/overview.md

    (英文版按「输出语言规则」生成,结构相同。)


工作流 10:crystallize(结晶化)

触发条件: 用户说"结晶化"、"crystallize"、"把这个记进知识库"、"这段对话很有价值"

输入: 用户主动提供的内容(文字粘贴进对话,或明确引用某段上下文)。 用户必须主动提供内容,Claude 不自动提取当前会话。

处理步骤(MVP):

  1. 用户提供内容(文字粘贴进对话)
  2. Claude 从内容中提取:
    • 核心洞见(3-5 条)
    • 关键决策和原因
    • 值得记录的结论
  3. 生成 wiki/synthesis/sessions/{主题}-{日期}.md,格式参考 templates/synthesis-template.md
    • 本轮不要求 crystallize 页面补 sources,默认不参与 graph source overlap
  4. 更新 log.md(记录本次结晶化操作)

MVP 版本不自动创建 entity 页面,不自动更新 index.md。

confidence 规则: 结晶化来源的内容默认标记为 INFERRED(来自推断/对话,非原始文档)。

输出示例: 已创建 wiki/synthesis/sessions/AI-agent-设计决策-20260413.md 已更新 log.md

© sdyckjq-lab, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 999 other files (scripts, assets) in the repository root of sdyckjq-lab/llm-wiki-skill.

  • SKILL.md
  • .gitattributes
  • .github/workflows/browser-main-flows.yml
  • .github/workflows/path-portability.yml
  • .github/workflows/quality-and-tests.yml
  • .gitignore
  • .mise.toml
  • .nvmrc
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CONTEXT-MAP.md
  • CONTEXT.md
  • HERMES.md
  • README.en.md
  • README.md
  • TODOS.md
  • assets/graph-demo.gif
  • … and 982 more

Open the folder on GitHubat commit efa2294

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in sdyckjq-lab/llm-wiki-skill, which our catalogue first saw on October 7, 2026.

Compare with similar skills

LLM Wiki next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

LLM Wiki compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
LLM Wiki this skillsdyckjq-lab/llm-wiki-skill2.5k1 repos~7kAutomated safety check: WarnMIT
Infranodusinfranodus/skills119—~3.5kAutomated safety check: PassNone
TiXL Video Operator Analysistixl3d/tixl5.1k—~4kAutomated safety check: PassMIT
Karpathy LLM WikiAstro-Han/karpathy-llm-wiki2.5k—~3.6kAutomated safety check: PassMIT
Multi-Source to NotebookLM Processorjoeseesun/qiaomu-anything-to-notebooklm6.2k—~3.6kAutomated safety check: PassMIT
LLM Wikilewislulu/llm-wiki-skill655—~3.7kAutomated safety check: PassNone

Similar skills

  • Infranodus

    infranodus/skills

    Text network analysis and knowledge graphs via the InfraNodus MCP server: analyze text structure, find content gaps, generate research questions and ideas, compare texts, optimize content for…

    119 GitHub stars~3.5k tokensUpdated 20 days ago
    Knowledge ManagementAuto-check passed
  • Turns transcribed TiXL tutorial videos into an exhaustive, timestamped list of every operator mention, feeding the documentation editor's deep-link index without touching the wiki or YouTube text.

    5.1k GitHub stars~4k tokensUpdated today
    Knowledge ManagementAuto-check passed
  • Karpathy LLM Wiki

    Astro-Han/karpathy-llm-wiki

    A skill your agent uses when building or maintaining a personal LLM-powered knowledge base.

    2.5k GitHub stars~3.6k tokensUpdated 2 mo ago
    Knowledge ManagementAuto-check passed
  • Multi-Source to NotebookLM Processor

    joeseesun/qiaomu-anything-to-notebooklm

    Collects content from WeChat articles, web pages, YouTube, podcasts, documents and more, uploads it to NotebookLM and generates podcasts, slides or mind maps.

    6.2k GitHub stars~3.6k tokensUpdated 6 days ago
    Knowledge ManagementAuto-check passed
  • LLM Wiki

    lewislulu/llm-wiki-skill

    Build and maintain a Karpathy-style LLM knowledge base — a self-compiling Obsidian markdown wiki where an Agent ingests raw sources, compiles cross-linked concept/entity/summary pages, answers…

    655 GitHub stars~3.7k tokensUpdated 5 mo ago
    Knowledge ManagementAuto-check passed
  • Wiki Builder

    rohitg00/pro-workflow

    Start, structure, and grow a persistent research wiki indexed in pro-workflow's SQLite knowledge base.

    2.9k GitHub stars~1k tokensUpdated 12 days ago
    Knowledge ManagementAuto-check passed

More from sdyckjq-lab/llm-wiki-skill

  • Baoyu URL To Markdown

    sdyckjq-lab/llm-wiki-skill

    Fetch any URL and convert to markdown using Chrome CDP. An agent skill from sdyckjq-lab/llm-wiki-skill.

    2.5k GitHub starsUsed in 2 repos~3.2k tokens
    Auto-check passed
  • LLM Wiki Upgrade

    sdyckjq-lab/llm-wiki-skill

    升级 llm-wiki 到最新版本。从 GitHub 拉取最新代码并通过官方 install.sh 升级核心主线. An agent skill from sdyckjq-lab/llm-wiki-skill.

    2.5k GitHub stars~735 tokensUpdated 2 mo ago
    Auto-check: notes

Works with

Questions about LLM Wiki

What does LLM Wiki do?

个人知识库构建系统(基于 Karpathy llm-wiki 方法论)。让 AI 持续构建和维护你的知识库, 支持多种素材源(网页、推特、公众号、小红书、知乎、YouTube、PDF、本地文件), 自动整理为结构化的 wiki。. LLM Wiki is an agent skill from sdyckjq-lab/llm-wiki-skill.

When should I use LLM Wiki?

LLM Wiki fits situations like: tasks that involve LLM wikis.

How do I install LLM Wiki in Claude Code?

Run `npx skills add sdyckjq-lab/llm-wiki-skill --skill llm-wiki -a claude-code`. Or copy the skill folder (the sdyckjq-lab/llm-wiki-skill repository) into .claude/skills/llm-wiki in your project. Claude Code loads it when a task matches its description.

How do I install LLM Wiki in Codex?

Run `npx skills add sdyckjq-lab/llm-wiki-skill --skill llm-wiki -a codex`. Or copy the skill folder (the sdyckjq-lab/llm-wiki-skill repository) into .agents/skills/llm-wiki in your project. Codex loads it when a task matches its description.

Can I use LLM Wiki in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sdyckjq-lab/llm-wiki-skill --skill llm-wiki -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/llm-wiki, .gemini/skills/llm-wiki, .github/skills/llm-wiki and .opencode/skills/llm-wiki in your project.

What does LLM Wiki need to run?

Going by SKILL.md and its folder, LLM Wiki needs the command-line tools its instructions call (bash, jq and node) and credentials named OPENAI_API_KEY and ANTHROPIC_API_KEY. Our summary lists: A credential in OPENAI_API_KEY; A credential in ANTHROPIC_API_KEY.

Does LLM Wiki access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is LLM Wiki safe to install?

Our automated static check of SKILL.md flagged 1 warning(s): tells the agent its actions are pre-authorized / not to stop for confirmation. Read the flagged lines before installing; the check is not a guarantee either way. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does LLM Wiki use?

LLM Wiki is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does LLM Wiki use?

About 7k tokens (SKILL.md is roughly 28k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to LLM Wiki?

Skills that share tags, products or a category with LLM Wiki: Infranodus (infranodus/skills, 119 stars), TiXL Video Operator Analysis (tixl3d/tixl, 5.1k stars), Karpathy LLM Wiki (Astro-Han/karpathy-llm-wiki, 2.5k stars) and Multi-Source to NotebookLM Processor (joeseesun/qiaomu-anything-to-notebooklm, 6.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains LLM Wiki?

sdyckjq-lab (a GitHub user) maintains it in sdyckjq-lab/llm-wiki-skill, which has 2,531 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on July 27, 2026.

Source: sdyckjq-lab/llm-wiki-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.