| name | wei-llm-wiki |
|---|---|
| description | 当用户要求把文章存进知识库、查询知识库、或维护知识库时使用。 触发词:wiki init、wiki ingest、wiki query、wiki lint、wiki refresh、wiki log、wiki list、wiki evolve、wiki graph、 构建知识库、编译文章、公众号文章入库、本地文章入库、网页入库、GitHub仓库入库、文章知识库、article ingest、 知识库评估、覆盖度审计、知识库进化、进化面板。 支持所有来源:微信公众号 URL、普通网页 URL、GitHub 文档型仓库、本地文件(md/html/txt)。 不适用于:项目内部的 .omc/wiki 知识库(那是 oh-my-claudecode:wiki)、单纯的文件下载(用 wechat-article-down)。 |
基于 Karpathy LLM Wiki 方法论,将任意来源的文章编译为持久、可查询的结构化知识库。
使用场景:
- 用户给出一个或多个文章链接(微信公众号、博客、技术文档等),要求存入/编译进知识库
- 用户给出 GitHub 仓库链接(文档型仓库,如书籍、教程、知识库),要求整仓库摄入
- 用户给出本地文件路径,要求入库
- 用户要查询已有知识库的内容("知识库里有什么关于 X 的?")
- 用户要求对知识库做健康检查、刷新元信息、查看日志或概览
不使用场景:
- 仅下载微信文章而不编译入库 → 使用
wechat-article-down - 操作项目级
.omc/wiki/知识库 → 使用oh-my-claudecode:wiki - 普通的网页浏览或信息搜索 → 使用
web-access
用户不需要显式指定技能名称。以下裸命令直接路由到本技能:
| 用户输入 | 路由到 | 说明 |
|---|---|---|
wiki init <路径> |
llm-wiki | 指定知识库根目录,后续所有操作默认使用该路径 |
wiki ingest <URL或路径> |
llm-wiki | 根据 URL 类型自动分派获取方式 |
wiki query "问题" |
llm-wiki | 查询知识库 |
wiki lint |
llm-wiki | 健康检查 |
wiki refresh |
llm-wiki | 刷新 WIKI.md 元信息 |
wiki log |
llm-wiki | 聚合操作日志 |
wiki list |
llm-wiki | 精简知识概览 |
wiki evolve |
llm-wiki | 更新所有已评估分类的进化档案 |
wiki evolve <分类名> |
llm-wiki | 审计指定分类的覆盖度 |
wiki evolve --all |
llm-wiki | 全量评估所有分类(含未评估的) |
wiki graph |
llm-wiki | 部署知识图谱可视化 HTML 到知识库根目录 |
把这篇文章入库 + URL |
llm-wiki | 自然语言触发 |
知识库里有什么关于X的 |
llm-wiki | 自然语言查询 |
知识库评估 / 覆盖度审计 |
llm-wiki | 自然语言触发 evolve |
与其他 wiki 技能的关系:
llm-wiki是统一入口,已合并wechat-wiki和article-wiki的全部能力wechat-wiki/article-wiki仍可通过/wechat-wiki或/article-wiki显式调用,但裸wiki命令统一走llm-wikioh-my-claudecode:wiki是完全不同的技能,用于项目级.omc/wiki/知识库,不会与本技能冲突
Ingest 内部路由(根据输入自动判断获取方式):
wiki ingest <来源>
│
├─ https://mp.weixin.qq.com/... → 调用 wechat-article-down 技能下载
├─ https://github.com/{owner}/{repo}... → GitHub MCP 扫描+批量读取(仅文档型仓库)
├─ https://... 或 http://...(其他) → 用 chrome-devtools 抓取网页正文
└─ 本地路径(/、~/、./) → 用 Read 工具读取文件
RAG 每次查询都从原文重新推导知识。LLM Wiki 不同——LLM 预先把文章读完、理解完、整合进结构化 wiki,查询时读的是已编译的笔记,不是原文。每篇新文章入库都让整个 wiki 更丰富;每个好答案存回 wiki 都成为新的知识节点。知识复利积累,不是每次重新推导。
分工:用户负责筛选文章来源、提问、判断方向;LLM 负责所有维护工作——摘要、交叉引用、归档、更新、检查矛盾。
支持的来源类型:
- 微信公众号文章(
https://mp.weixin.qq.com/...)→ 调用wechat-article-down技能下载 - GitHub 文档型仓库(
https://github.com/{owner}/{repo})→ GitHub MCP 扫描+批量读取,整仓库合并为一篇文章 - 非微信在线文章(其他
http(s)://...)→ 用 chrome-devtools 抓取 - 本地文件(
.md、.html、.txt等)→ 用 Read 工具读取
WIKI.md 有两种 type,通过文件开头的 **类型**: 字段区分:
| 类型 | 含义 | 所在目录 |
|---|---|---|
wiki |
单个知识库的 schema | 知识库根目录(含 raw/、wiki/) |
collection |
多知识库注册表 | 包含多个知识库子目录的父目录 |
兼容旧格式:若 WIKI.md 中没有 **类型**: 字段,则通过目录结构推断——同级存在 raw/ 或 wiki/ 目录视为 type: wiki,否则检查是否有子目录含 WIKI.md 来判断是否为 collection。
执行任何操作前,必须先确定 wiki-root。按以下顺序检测,命中即停:
- 用户显式指定:命令中给出了路径(如
wiki ingest ~/my-wiki ...)→ 使用该路径 - 持久化配置:检查本技能目录下的
config.json文件(即SKILL.md同级目录),若其中存在wikiRoot字段且该路径存在 → 使用该路径。此配置由wiki init设置/更新,持久保存知识库根目录 - 当前目录有 WIKI.md:读取并检查类型:
type: wiki→ 当前目录就是 wiki-root,直接使用type: collection→ 读取其中的子知识库列表:- 1 个子知识库 → 自动使用,告知用户
- 多个子知识库 → 列出让用户选择
- 用户也可选择「创建新知识库」→ 创建新子目录并注册到 collection
- 扫描子目录:当前目录无 WIKI.md,但在直接子目录中查找
*/WIKI.md:- 找到 1+ 个 → 自动创建 collection 类型的 WIKI.md 注册已有知识库(使用
references/collection-schema-template.md模板),然后按第 3 步的 collection 逻辑处理 - 找到 0 个 → 进入第 5 步
- 找到 1+ 个 → 自动创建 collection 类型的 WIKI.md 注册已有知识库(使用
- 均未命中:询问用户是要在当前目录创建新知识库(type: wiki),还是指定其他路径;确认后再初始化
关键:绝不跳过探测直接创建默认知识库。用户可能在知识库内、在 collection 目录中、或在包含知识库子目录的父目录中。
在 collection 目录中创建新知识库时:
- 询问用户知识库名称和主题
- 创建子目录及
raw/、wiki/结构 - 用
references/wiki-schema-template.md生成子目录的 WIKI.md(type: wiki) - 更新父目录 WIKI.md(type: collection)的子知识库列表
<wiki-root>/ # 按上述规则定位
├── raw/ # 原始文章(LLM 只读不写,除了初次存入)
│ └── <文章标题>/
│ ├── article.md
│ └── images/ # 文章中的图片(本地副本,仅在线文章需要)
├── wiki/ # LLM 编译生成的知识页面(LLM 全权维护)
│ ├── index.md # 内容目录:每页一行链接+摘要,查询时首先读此文件
│ ├── log.md # 操作日志:追加式,记录每次 ingest/query/lint/evolve
│ └── *.md # 各概念/主题/分析/查询存档页面
├── evolve/ # 知识进化追踪(LLM 维护)
│ ├── index.md # 总控面板:所有分类评分 + 下一步建议
│ └── <分类名>.md # 每个主题的进化档案(覆盖度评估 + 进化向量 + 日志)
├── knowledge-graph.html # 交互式知识图谱可视化(由 graph/init 命令部署)
└── WIKI.md # 知识库 schema:结构约定、工作流规则(与用户协同演化)
将指定路径持久保存为知识库根目录,后续所有操作自动使用该路径,无需每次指定。
步骤:
- 用户提供路径(如
wiki init ~/my-wiki) - 路径验证:
- 路径不存在 → 询问用户是否创建目录结构(创建后继续)
- 路径存在但无 WIKI.md → 询问是否初始化为新知识库(按标准初始化流程创建)
- 路径存在且有 WIKI.md → 直接使用
- 写入持久化配置:将路径(绝对路径或
~开头的路径)写入本技能目录下的config.json文件(即SKILL.md同级目录),格式为{ "wikiRoot": "<路径>" } - 部署知识图谱:将本技能自带的
references/knowledge-graph.html复制到根目录(按「知识图谱部署位置规则」确定目标路径,若已存在则覆盖更新) - 输出确认:显示当前设置的知识库根目录路径、知识库基本信息(文章数、页面数等),提示用户可用浏览器打开
knowledge-graph.html查看知识图谱
后续效果:写入 config.json 后,Wiki-Root 定位规则的第 2 步会检测该文件。之后在任意目录执行 wiki ingest、wiki query 等操作时,都会自动使用该路径作为知识库根目录,无需重复指定。
用户提供文章来源(URL 或本地文件路径),获取并编译进知识库。建议逐篇摄入,保持参与感。
步骤:
-
定位 wiki-root:按「Wiki-Root 定位规则」确定路径。若已存在
WIKI.md,读取它确认结构,直接进入第 2 步;仅当确认为首次创建时才初始化——创建目录结构,读取本技能自带的references/wiki-schema-template.md,复制内容到<wiki-root>/WIKI.md,询问用户知识库主题后填入主题字段 -
获取文章内容:根据输入类型分支处理——
A. 微信公众号 URL(
https://mp.weixin.qq.com/开头):- 调用
wechat-article-down技能,指定--output <wiki-root>/raw/,使文章直接下载到raw/目录 - 已存在同名子目录则跳过
B. GitHub 仓库 URL(
https://github.com/{owner}/{repo}开头): 详见下方「GitHub 仓库 Ingest 流程」。整仓库合并为一个raw/<仓库标题>/article.md。C. 非微信在线 URL(其他
http://...或https://...,非 GitHub):- 使用
mcp__chrome-devtools__navigate_page打开页面 - 等待页面加载完成(使用
mcp__chrome-devtools__evaluate_script检查document.readyState) - 滚动页面触发懒加载(执行滚动脚本)
- 提取页面正文内容(执行提取脚本,见下方「通用网页提取脚本」)
- 从提取结果中获取标题和正文 Markdown
- 创建
raw/<标题>/article.md,写入内容(若已存在同名子目录则跳过) - 下载图片(见下方「图片下载流程」):提取正文中所有图片 URL,下载到
raw/<标题>/images/,并将 article.md 中的远程 URL 替换为本地相对路径
C. 本地文件(路径以
/、~/、./开头,或是已知存在的文件路径):- 用 Read 工具读取文件内容
- 判断格式:
.md文件:直接使用内容.html文件:提取正文文本,转为 Markdown.txt文件:直接使用内容- 其他文本格式(
.rst、.org等):转为 Markdown
- 从文件内容中提取或推断标题(优先用文件首行标题,其次用文件名)
- 创建
raw/<标题>/article.md,写入内容(若已存在同名子目录则跳过)
- 调用
-
编译知识:读取新文章
raw/*/article.md,对每篇:- 提取核心概念、观点、实体、要点
- 更新或新建
wiki/*.md页面(格式见本技能自带的references/page-format.md) - 发现矛盾用
> ⚠️ 矛盾:标注,不强行统一
-
更新 index.md:每个页面一行(链接 + 一句话摘要),按主题分组
-
追加 log.md:格式
## [YYYY-MM-DD] ingest | 文章标题,记录触及的页面列表
| 模式 | 判定为 | 处理方式 |
|---|---|---|
https://mp.weixin.qq.com/... |
微信公众号 URL | 调用 wechat-article-down 下载 |
https://github.com/{owner}/{repo}... |
GitHub 仓库 | GitHub MCP 扫描+批量读取(见下方详细流程) |
http://... 或 https://...(非微信、非 GitHub) |
通用在线 URL | 用 chrome-devtools 抓取 |
/、~/、./ 开头 |
本地文件路径 | 用 Read 工具读取 |
| 无前缀但文件存在 | 本地文件路径 | 用 Read 工具读取 |
无论来源类型,写入 raw/<标题>/article.md 时统一格式:
---
title: 文章标题
source: 来源路径或 URL
type: wechat | web | github | local
repo: owner/repo # 仅 type: github 时填写
files: 25 # 仅 type: github 时填写,合并的文件数
ingested: YYYY-MM-DD
---
(正文 Markdown 内容)在浏览器中执行以下脚本提取正文(通过 mcp__chrome-devtools__evaluate_script):
(() => {
const title = document.title || document.querySelector('h1')?.textContent || 'Untitled';
// 尝试常见正文容器
const selectors = [
'article', '[role="main"]', 'main',
'.post-content', '.article-content', '.entry-content',
'.content', '.post-body', '.article-body',
'#content', '#article', '#post-content'
];
let contentEl = null;
for (const sel of selectors) {
const el = document.querySelector(sel);
if (el && el.textContent.trim().length > 200) {
contentEl = el;
break;
}
}
if (!contentEl) contentEl = document.body;
// 递归提取为 Markdown
function toMd(node, depth = 0) {
if (node.nodeType === 3) return node.textContent;
if (node.nodeType !== 1) return '';
const tag = node.tagName.toLowerCase();
// 跳过无关元素
if (['script','style','nav','footer','header','aside','iframe','noscript'].includes(tag)) return '';
if (node.getAttribute('role') === 'navigation') return '';
const children = Array.from(node.childNodes).map(c => toMd(c, depth)).join('');
switch(tag) {
case 'h1': return `\n# ${children.trim()}\n`;
case 'h2': return `\n## ${children.trim()}\n`;
case 'h3': return `\n### ${children.trim()}\n`;
case 'h4': return `\n#### ${children.trim()}\n`;
case 'h5': return `\n##### ${children.trim()}\n`;
case 'h6': return `\n###### ${children.trim()}\n`;
case 'p': return `\n${children.trim()}\n`;
case 'br': return '\n';
case 'strong': case 'b': return `**${children.trim()}**`;
case 'em': case 'i': return `*${children.trim()}*`;
case 'code': return node.parentElement?.tagName.toLowerCase() === 'pre' ? children : `\`${children.trim()}\``;
case 'pre': return `\n\`\`\`\n${children.trim()}\n\`\`\`\n`;
case 'a': {
const href = node.getAttribute('href');
return href ? `[${children.trim()}](${href})` : children;
}
case 'img': {
const src = node.getAttribute('src') || node.getAttribute('data-src') || '';
const alt = node.getAttribute('alt') || '';
return src ? `\n\n` : '';
}
case 'li': return `- ${children.trim()}\n`;
case 'blockquote': return `\n> ${children.trim().replace(/\n/g, '\n> ')}\n`;
case 'hr': return '\n---\n';
default: return children;
}
}
const markdown = toMd(contentEl)
.replace(/\n{3,}/g, '\n\n')
.trim();
return JSON.stringify({ title: title.trim(), markdown, url: location.href });
})()(async () => {
const delay = ms => new Promise(r => setTimeout(r, ms));
const step = Math.floor(window.innerHeight * 0.8);
let y = 0;
const max = document.body.scrollHeight;
while (y < max) {
y += step;
window.scrollTo(0, y);
await delay(300);
}
window.scrollTo(0, 0);
await delay(500);
return 'scrolled';
})()对于在线 URL 抓取的文章,提取正文后需下载图片到本地:
- 创建图片目录:
mkdir -p raw/<标题>/images/ - 提取图片 URL:从 article.md 中找到所有
格式的图片引用 - 下载图片:使用
curl带Referer头下载每张图片到images/目录
curl -sL -H "Referer: <文章URL>" -o "raw/<标题>/images/<序号>-<描述>.jpg" "<图片URL>"- 命名规则:
<序号>-<简短描述>.<扩展名>,如01-架构图.jpg、02-流程对比.png- 序号两位数补零,按文中出现顺序编号
- 描述从图片上下文推断(如所在章节标题)
- 扩展名从 URL 或 Content-Type 推断(默认
.jpg)
- 替换引用:将 article.md 中的远程 URL 替换为本地相对路径
images/<文件名> - CDN 注意事项:
- 知乎(
zhimg.com):需Referer为文章 URL - 其他 CDN:先尝试无 Referer 下载,403 则加 Referer 重试
- 知乎(
本地文件摄入时:若 .md 或 .html 中引用了本地图片路径,将图片一并复制到 raw/<标题>/images/ 并更新引用。
仅适用于文档型仓库(书籍、教程、知识库等以 .md 文件为主体的仓库),不适用于常规代码仓库。全程使用 GitHub MCP 工具(mcp__plugin_github_github__get_file_contents),不依赖本地 git 命令。
步骤:
-
URL 解析:从 URL 中提取
owner和repo- 支持格式:
https://github.com/{owner}/{repo}、https://github.com/{owner}/{repo}.git、https://github.com/{owner}/{repo}/tree/{branch} - 剥离
.git后缀和/tree/...路径 - 若 URL 中包含分支信息(
/tree/{branch}),记录并传给 MCP 的ref参数;否则使用默认分支
- 支持格式:
-
扫描仓库结构(GitHub MCP):
- 调用
get_file_contents(owner, repo, path="/")获取根目录 - 对每个子目录并行调用
get_file_contents(owner, repo, path="子目录/")获取内容列表 - 递归扫描直到获得完整文件树(仅需扫描包含
.md文件的目录)
- 调用
-
文档型仓库判断:
- ✅ 文档型:
.md文件占仓库文本文件总数 ≥ 50%,且不存在典型代码目录(src/、lib/、pkg/)或代码配置文件(package.json、Cargo.toml、go.mod、pom.xml等) ⚠️ 非文档型:不满足上述条件时,提示用户"这看起来是代码仓库,不适合整仓库摄入",终止流程
- ✅ 文档型:
-
展示预览,等待用户确认:
📦 检测到 GitHub 仓库: lintsinghua/claude-code-book (main 分支) ✅ 文档型仓库(25 个 .md 文件,4 个分组目录) 将摄入以下文件: ├─ 00-前言.md ├─ 第一部分-基础篇/(6 个文件) │ 01-xxx.md, 02-xxx.md, ... ├─ 第二部分-核心系统篇/(8 个文件) ├─ ... 已跳过:README.md, .gitignore, cover.png, assets/ 确认摄入?(Y/n)自动过滤规则(从预览列表中排除):
- 根目录的
README.md、CONTRIBUTING.md、LICENSE*、CHANGELOG*、CODE_OF_CONDUCT* - 配置文件:
.gitignore、.github/*、.vscode/*、node_modules/* - 非文本文件:
*.png、*.jpg、*.gif、*.svg、*.ico、*.pdf - 代码配置:
package.json、tsconfig.json、*.lock - 内容过少的
.md(< 3 行,通常是占位符) - 子目录的 README.md 保留(可能是章节导读,用户可在预览中手动排除)
- 根目录的
-
批量读取文件内容(GitHub MCP):
- 对确认列表中的每个
.md文件调用get_file_contents(owner, repo, path="文件路径") - 尽量并行调用以提高速度
- MCP 返回的文件内容为 base64 编码,需解码为 UTF-8 文本
- 对确认列表中的每个
-
合并为 article.md:
- 排序规则:按目录结构组织,目录内文件按数字前缀自然排序(natural sort:
2-xxx排在10-xxx前面),无数字前缀的文件按字母序排在末尾 - 合并格式:每个顶层目录作为一级标题,文件按原有标题层级嵌入,文件之间用
---分隔 - 标题推断:优先用仓库的
README.md中的第一个#标题,其次用仓库名 - 写入
raw/<仓库标题>/article.md,frontmatter 如下:
--- title: 仓库标题(从 README 或仓库名推断) source: https://github.com/owner/repo type: github repo: owner/repo files: 25 ingested: YYYY-MM-DD --- # 前言 (00-前言.md 内容) --- # 第一部分 - 基础篇 ## 01-xxx (文件内容) ## 02-xxx (文件内容) --- # 第二部分 - 核心系统篇 ...
若
raw/<仓库标题>/已存在同名子目录,则跳过(与其他来源类型行为一致)。 - 排序规则:按目录结构组织,目录内文件按数字前缀自然排序(natural sort:
-
编译知识:
- 合并后文件 < 3000 行:一次性编译(复用 Ingest 步骤 3-5)
- 合并后文件 ≥ 3000 行:按顶层目录分段编译,每段独立提炼知识页面,最后做一次整合 pass 补充跨章节的交叉引用和综合洞察
对知识库分类进行覆盖度审计,识别进化向量,追踪知识成熟度变化。
命令:
| 用法 | 行为 |
|---|---|
wiki evolve <分类名> |
审计指定分类(模糊匹配 index.md 中的分类名) |
wiki evolve |
更新所有已评估过的分类(evolve/ 下已有文件的) |
wiki evolve --all |
全量评估所有分类(含未评估的) |
步骤:
- 定位 wiki-root,读取
wiki/index.md获取目标分类下所有页面列表 - 扫描页面元信息:读取每个 wiki 页面的标题、标签、来源数量(不读全文,控制 token)
- 五维评估:广度(覆盖范围)、深度(是否有源码/实战级内容)、实用性(是否可直接指导行动)、时效性(最近更新时间)、交叉引用(页面间互联程度)
- 识别进化向量:找出知识可生长的方向——缺什么主题、哪里可以更深、有没有过时内容
- 写入 evolve 文件:
- 新分类 → 创建
evolve/<分类名>.md(含 frontmatter、覆盖度评估、进化向量、进化日志) - 已有分类 → 更新评分、向量状态(🔴→🟡→🟢)、追加进化日志
- 新分类 → 创建
- 更新 evolve/index.md:更新对应行的评分、向量数、下一步建议
- 追加 wiki/log.md:
## [YYYY-MM-DD] evolve | <分类名> 覆盖度审计
进化向量格式:
### → 向量名称
**阶段**: 🔴 空白 → 🟡 有基础覆盖 → 🟢 成熟
**当前**: 🔴 空白
**价值**: 从 N → M(+X)
**线索**: [具体搜索方向或已知来源]进化日志格式:
| 日期 | 触发 | 事件 | 变化 |
|------|------|------|------|
| YYYY-MM-DD | evolve 主动 | 全面审计 | 建立基线 N 分 |
| YYYY-MM-DD | query 被动 | 查询"xxx"暴露盲区 | 新增 1 个向量 |回答关于知识库内容的问题。
步骤:
- 读取
wiki/index.md,定位相关页面(不遍历全部文件) - 读取相关 wiki 页面,综合给出结构化答案并注明来源页面
- 根据问题选择合适输出格式:对比表、分析页、概念梳理、时间线等
- 若回答有洞察价值(综合分析、对比结论、发现的连接),存为新页面:
- 文件名:
query-<主题>.md,如query-claude-vs-codex.md - 追加 log.md:
## [YYYY-MM-DD] query | 问题摘要
- 文件名:
- 被动进化评估(保守策略):回答完成后,判断是否出现以下明确信号:
- 有重要子问题在知识库中完全没有对应页面(不是"不够深",而是"完全没有")
- 回答时发现了页面间未被记录的事实性矛盾
- 若命中任一信号:更新对应的
evolve/<分类>.md(新增进化向量或更新状态),并在回答末尾附一行提示:💡 进化信号:本次查询发现「XXX」为知识盲区,已更新 evolve/<分类>.md - 若未命中:静默,不触发,不消耗额外 token
输出知识库健康报告,并追加 log.md:## [YYYY-MM-DD] lint | 发现 N 个问题
检查项:
- 矛盾:不同页面关于同一事实的相互矛盾表述
- 过时内容:被更新文章推翻的旧有结论(标记为
[STALE]) - 孤儿页面:未被 index.md 或任何页面引用的页面
- 概念缺页:多处提到某概念但尚无独立 wiki 页面
- 缺失交叉引用:页面中提到了其他 wiki 页面但未用
[[]]链接 - 超大页面:>500 行,建议拆分
- 数据空白:建议补充调查的话题或来源
根据知识库当前实际状态,重新生成 WIKI.md 的统计信息和结构描述。适用于多次 ingest 后 WIKI.md 与实际内容脱节的情况。
步骤:
- 定位 wiki-root:按「Wiki-Root 定位规则」确定路径
- 扫描实际状态:
- 统计
raw/下的文章数量和标题列表 - 统计
wiki/下的知识页面数量、分类分布 - 读取
wiki/index.md获取当前分类结构 - 读取
wiki/log.md获取最近操作时间和操作次数统计
- 统计
- 重新生成 WIKI.md:保留原有的工作流规则和页面格式约定不变,更新以下内容:
- 统计概览:文章总数、知识页面数、分类数、最近更新时间
- 知识分类:从 index.md 提取实际分类及每分类的页面数
- 最近活动:最近 5 次操作的精简摘要(从 log.md 提取)
- 健康状态:若最近有 lint 记录,附上最近一次 lint 的问题数
- 若为 collection 类型:同时更新父目录 WIKI.md 中该子知识库的描述行(含最新统计)
- 追加 log.md:
## [YYYY-MM-DD] refresh | 更新 WIKI.md 元信息
读取 wiki/log.md,输出精简的聚合摘要。去除冗余细节,每条操作压缩为一行,按日期分组。
步骤:
- 定位 wiki-root,读取
wiki/log.md - 解析所有操作条目:每个
## [日期] 操作类型 | 标题为一条 - 聚合输出,格式如下:
📊 知识库操作日志(共 N 条操作)
## 2026-04-14(1 条)
ingest 踏马的 Agent → +2 页(Harness-Engineering, Context-Engineering)
## 2026-04-13(10 条)
ingest 一文带你看懂Skills → +2 页, ~3 页
query CoT 横纵分析 → 存档 query-cot-横纵分析.md
lint 发现 6 个问题,修复 4 处
ingest 某博客文章 → +1 页, ~2 页(web 来源)
ingest 本地笔记.md → +1 页(local 来源)
统计:ingest 15 次 | query 1 次 | lint 4 次 | refresh 0 次
聚合规则:
- 每条一行,格式:
操作类型 标题缩写 → 变更摘要 - 标题超过 20 字截断加
… +N 页表示新建页面数,~N 页表示更新页面数- 底部附操作类型统计汇总
- 不修改 log.md 原文,仅输出聚合视图
输出知识库的精简概览,一屏可读,便于快速了解知识库全貌。
步骤:
- 定位 wiki-root,读取
wiki/index.md - 扫描补充信息:统计
raw/文章数、wiki/页面数、最近更新时间 - 输出格式:
📚 知识库概览
21 篇文章 → 23 个知识页面 | 3 个分类 | 最近更新: 2026-04-14
┌─ 知识管理(3 页)
│ LLM-Wiki · LLM-Wiki-核心思想 · RAG-vs-LLM-Wiki
│
├─ Agent 开发(14 页)
│ Harness-Engineering · Context-Engineering · 代码执行范式
│ Skill定义规范 · Skill实战踩坑指南 · Skill框架源码分析
│
└─ Prompt 工程(6 页)
Prompt语言选择 · 横纵分析法 · Chain-of-Thought
输出规则:
- 分类从 index.md 提取,保持原有分组
- 每分类显示页面数 + 页面名列表(用
·分隔,每行不超 70 字换行) - 头部一行统计:文章数 → 页面数 | 分类数 | 最近更新
- 若为 collection 类型,先列出所有子知识库概览,再询问是否展开某个
将知识库的交互式知识图谱 HTML 部署到 wiki 目录,用户可在浏览器中打开查看节点关系。
步骤:
- 定位 wiki-root:按「Wiki-Root 定位规则」确定路径
- 部署 HTML:读取本技能自带的
references/knowledge-graph.html,复制到根目录(按「知识图谱部署位置规则」确定目标路径,若已存在则覆盖更新) - 输出确认:告知用户文件路径,提示用浏览器打开后选择
wiki/目录即可查看知识图谱
说明:
- HTML 文件使用浏览器 File System Access API,打开后需用户手动选择
wiki/目录 - 自动解析
index.md中的分类结构和所有 wiki 页面的[[wikilink]]关系 - 支持力导向图布局、分类着色、搜索过滤、节点详情、明暗主题切换
wiki init时会自动执行此步骤,无需单独调用;wiki graph可随时手动更新
knowledge-graph.html 应部署到所有知识库的共同根目录,确保一个 HTML 文件即可浏览所有内容:
- wiki-root 为 collection 类型:复制到该 collection 目录下(与 collection 的
WIKI.md同级) - wiki-root 为 wiki 类型:检查其父目录是否存在 collection 类型的
WIKI.md:- 是 → 复制到该 collection 目录下
- 否 → 复制到该 wiki-root 目录下(与
raw/、wiki/、WIKI.md同级)
简而言之:有 collection 就放 collection 根目录,没有就放 wiki 根目录。
# 指定知识库根目录(持久化,后续操作自动使用该路径)
wiki init ~/my-wiki
wiki init ~/Documents/个人知识库
# 摄入微信公众号文章
wiki ingest https://mp.weixin.qq.com/s/xxxxx
# 摄入非微信在线文章
wiki ingest https://blog.example.com/some-article
# 摄入 GitHub 文档型仓库(整仓库合并为一篇文章)
wiki ingest https://github.com/lintsinghua/claude-code-book
# 摄入 GitHub 仓库(指定分支)
wiki ingest https://github.com/owner/repo/tree/dev
# 摄入本地 Markdown 文件
wiki ingest ~/notes/my-research.md
# 摄入本地 HTML 文件
wiki ingest ./downloads/blog-post.html
# 批量摄入(逐篇处理,可混合来源类型)
wiki ingest https://mp.weixin.qq.com/s/aaa ~/notes/b.md https://blog.example.com/c
# 查询
wiki query "我写过哪些关于 AI 编程工具的文章?核心观点是什么?"
wiki query "Claude Code 和 Codex 有什么区别,各自适合什么场景?"
# 进化追踪
wiki evolve skills # 审计 Skills 体系分类
wiki evolve # 更新所有已评估分类
wiki evolve --all # 全量评估所有分类
# 部署/更新知识图谱可视化
wiki graph
# 健康检查
wiki lint
# 刷新 WIKI.md 元信息
wiki refresh
# 查看聚合操作日志
wiki log
# 查看精简知识概览
wiki list
# 指定知识库路径(路径放在来源前面)
# 不指定时自动探测:当前目录 WIKI.md → 子目录 */WIKI.md → 询问用户
wiki ingest ~/my-wiki https://mp.weixin.qq.com/s/xxx
wiki ingest ~/my-wiki ~/notes/research.md
wiki query ~/my-wiki "你的问题"
references/wiki-schema-template.md:单知识库 WIKI.md 模板(type: wiki),初始化时复制并定制references/collection-schema-template.md:多知识库集合 WIKI.md 模板(type: collection),自动注册子知识库references/page-format.md:wiki 页面格式规范与示例(含 index.md、log.md 格式)references/knowledge-graph.html:交互式知识图谱可视化模板,由wiki graph或wiki init部署到知识库根目录(<wiki-root>/knowledge-graph.html)