gyf0311/lorekit/wiki-ingest
- community
Checking that the SKILL.md file is still in the repository.
把新内容摄入 corpus,按 filing-rules 落盘并建反向链接。触发词:ingest、存一下、整理进知识库、收藏、归档、mp.weixin、公众号、带图文章,或用户直接发 URL / 文件路径。
Install
npx vskill@latest install gyf0311/lorekit/wiki-ingestSKILL.md
wiki-ingest
把外部内容(URL / 文件 / 粘贴文本)摄入当前 corpus:fetch → 写 wiki → 反链 → CLI 关账。
项目/domain skill 可以把 finished package、课程单元或客户材料路由到这里;它只补充来源分类、命名和验收规则,不重写 fetch/archive/wiki/lint/state 流程。
When to trigger
- 用户发来 URL / 文件路径 / 粘贴一段外部内容
- 用户说"ingest 这个"、"存一下"、"整理进知识库"、"收藏"、"归档一下"
- 用户发公众号链接(
mp.weixin.qq.com)且希望整理
不要触发:
- 对话中的洞察存回 →
wiki-fileback - 只是查询已有内容 →
wiki-query
分工边界(重要)
| CLI 负责(自动) | LLM 负责(你) | |
|---|---|---|
| URL 查重(fetch 内建) | 主语识别 / Notability 判断 | |
| 抽 publishDate / 写 frontmatter | Compiled Truth 写作 | |
死链检测(ingest check) | Timeline 措辞、反链选择 | |
刷 corpus/index.md 受控区(sync) | 建反链时的 timeline 追加 | |
写 corpus/log.md(record --log) | 一句话归纳本次 ingest 做了什么 | |
| 推进 ingest state machine(record) | 决定哪些主语该建独立页 | |
_INDEX.md / root index / doctor(sync) | — | |
| frontmatter 合规 / 死链 / 孤岛(lint) | — |
铁律:能让 CLI 做的就让 CLI 做。 不要手动 Edit index.md / log.md,不要先跑 lorekit search 做查重(fetch 已做)。
6 步流程
1. Fetch — lorekit fetch <url>
对任何 URL 统一调 lorekit fetch,按站点路由抓正文 + 图片,落 _工作台/收件/fetch/<slug>/。stdout 是单行 JSON:
| status | 含义 | 下一步 | |
|---|---|---|---|
ok | 抓取成功 | 读 markdown 字段、按需读关键图。fetcher 自动写 status:started, stepsDone:['fetch'] | |
duplicate | URL 之前已 ingest 过 | 读 duplicate.path 看已有页,跟用户确认覆盖/追加/取消;要重抓加 --force | |
in_progress | 上次 ingest 中断 | 读 ingestState.stepsDone + nextStep,从下一步继续,不要重抓 | |
error | 抓取失败 | 按 reason 字段判断回退路径(反爬走 web-access skill;gist/github raw 失败用 curl) | |
unsupported | 站点不直接处理(lark / x / pdf) | 按 suggest 字段用对应工具 |
支持的路由(按 host 自动分发):
| host | route | fetcher 行为 | |
|---|---|---|---|
mp.weixin.qq.com | rich | iPhone UA + 抽 ct 时间戳 + 懒加载图 | |
gist.github.com | gist | 解析 raw + 抽 <relative-time> 日期 | |
github.com | github | 仓库 → README;/blob/... → raw 文件 | |
| 其他 | rich | 通用 article/main/body + OpenGraph 日期 | |
feishu.cn / larkoffice.com | unsupported | 走 lark-cli docs | |
x.com / twitter.com | unsupported | 反爬强,粘截图或文本 | |
*.pdf | unsupported | 走 pdf skill |
本地文件 / 粘贴文本 不走 lorekit fetch,直接 Read。项目 evidence、课程原文、中间转写或 _工作台/** 文件不要因为"像 source"就自动 ingest;必须有明确入库意图,才整理进 原料/ 并编译到 知识库/。
1.5 来源类型判断(决定走哪条 ingest 流程)
抓完原料后先判断来源类型,不同类型 ingest 流程有差异。优先级由高到低:
- frontmatter
type: personal-writing→ 走个人写作流程(见下方 §个人写作流程) - 原料文件路径含
原料/个人写作/→ 走个人写作流程 - 其他(来自外部 URL / 外部文件) → 走外部来源标准流程(即本文档 Step 2-6)
为什么要区分:个人写作是先生自己的立场,不计 source_count(防自我背书),不生成客观 Summary 节,核心论点走 concept 页的 ## My Position 节。外部来源才是可信事实的证据。
2. 解析主语
读 article.md 全文(按需读关键图),抽:
- 标题、作者、日期(fetcher 已写进 frontmatter,直接用)
- 主语清单:人/组织/项目(→ 实体)、概念/方法(→ 概念)、跨源主题(→ 专题)
一条内容可能有多个主语——每个主语都要决定建页或追加 timeline。
3. 原文落地(mv 不 cp)
fetcher 产出的扁平结构(Obsidian 兼容,[[<归档路径>/<slug>]] 能按 basename 直接匹配):
按 系统/filing-rules.md 路由到归档目录:
| 原料类型 | 目标目录 | |
|---|---|---|
| 公众号 | 原料/剪藏/ | |
| 一般文章 / gist / GitHub README | 原料/文章/ | |
| 书籍笔记 | 原料/书籍/ | |
| 会议纪要 | 原料/会议/ |
mv 命令:.md 和 .assets/ 同名配对,两件一起搬:
铁律:
- 不要 cp——产物永远只存一份
- `.md` 和 `.assets/` 必须同名同级——不要拆开,否则 Obsidian 里图片引用断
- 不值得入档的低质量片段 → 用
trash扔回收站,绝不用 `rm`
铁律:保持 fetcher slug,禁止 LLM 自作主张 rename / 缩写
fetcher 已用 slugify(title) 生成的 slug 是先生希望的"文件名 = 真实标题"。 LLM 在 mv 时不许改名(即使觉得短英文 slug 更专业)。
❌ 错误示例(早期吃过的亏,2026-04-19 修复):
- title: "Web Access:一个Skill,拉满Agent联网和浏览器能力"
- fetcher slug:
Web-Access-一个Skill-拉满Agent联网和浏览器能力 - LLM 自作主张改成:
web-access-skill-yize← 错,先生看图谱时无法直观知道是哪篇
✅ 正确:
- mv
_工作台/收件/fetch/Web-Access-一个Skill-拉满Agent联网和浏览器能力.md原料/剪藏/Web-Access-一个Skill-拉满Agent联网和浏览器能力.md
保持 fetcher 给的 slug 一字不改。
original_path:搬家留指纹(工作台晋升件必做)
原件如果来自 _工作台/(先生手放的稿件、清算晋升件,而非 fetch 收件),mv 进 原料/ 后在原料文件 frontmatter 追加一行,保留搬家前的出处线索:
为什么:入库搬家常伴随改名/换目录,这是知识库页来源链接断掉(provenance 接续不上) 的头号原因。original_path 让断链修复和溯源有据可查;lorekit lint 会对知识库页 frontmatter 的 原料/ 引用做可解析校验(unresolved-source),入库后跑一次 lint 收尾。
3.5 aliases 对齐检查(提取概念前必做,防碎裂)
对每个要建 concept / entity 页的主语,先扫已有页的 aliases,避免同物异名建重复页:
- 生成当前概念的英文 slug(正规化:lowercase + kebab-case)
- Grep
知识库/概念/*.md与知识库/实体/*.md的 frontmatteraliases字段 - 若当前叫法命中已有页的 aliases(或相反——已有页的 title/slug 命中当前概念的叫法清单):
- 不新建,走"追加 Timeline"分支,把本次来源的信息合并到已有页
- 若确认无匹配 → 新建时
aliases字段必填,把当前概念的所有叫法(中文名 / 英文名 / 常见别名 / 缩写)都列进去
示例:要建"检索增强生成"页,先搜 aliases,命中已有 知识库/概念/RAG.md(其 aliases 含"检索增强生成")→ 追加 Timeline 到 RAG.md,不新建。
3.6 SHA-256 记录(source 页 + personal-writing 都做)
对落进 原料/ 的原料文件计算 SHA-256 哈希,写入对应 wiki source 页 frontmatter:
raw_sha256: <64-hex>— 原料文件哈希last_verified: YYYY-MM-DD— 本次 ingest 日期(即哈希校验成功日期)possibly_outdated: true— 若原料发表日期距今 超过 2 年(按source_date判)
为什么:为"原料是否被外部改动"(例如微信公众号偷偷改原文)的核查留下证据。 注意:当前 lorekit lint 不会重算哈希——SOURCE MODIFIED 自动检测尚未落地 CLI, 需要核查时由 AI 手动 shasum -a 256 对比 frontmatter 里的 raw_sha256。
4. 并行建 wiki 页(Notability gate)
对每个主语先问:"下次我会不会主动引用这个实体?"
- 是 → 在
知识库/{概念,实体,摘要,专题}/建新页 - 否 → 找最近相关页,往
## Timeline追加一条
铁律:多个独立 wiki 页必须并行 Write——单条消息里一次性发出 N 个 Write 调用,不要串行。串行是上次 ingest 慢的主因(每页 40-60s × N)。
页面结构按 corpus/CLAUDE.md 的"页面结构"章节:
Timeline 语义(三类标注)
Timeline 在本 corpus 已承担 Evolution Log 的角色。追加新条目时必须按以下三类打标注,让 LLM 能从 Timeline 看出页面是如何演化的:
| 标注 | 含义 | 什么时候用 | |
|---|---|---|---|
| 强化 | 新来源与已有 compiled truth 一致 | 结论被第 N 个来源进一步印证 | |
| 修正 | 新来源推翻 / 修订了原结论的一部分 | 需要改 compiled truth,Timeline 记录原因 | |
| 新增分歧 | 新来源与已有来源在某点冲突、但当前不做裁决 | 写入 ## Contradictions 节同时 Timeline 标注 |
格式:- YYYY-MM-DD(N sources)| [标注]:[一句话描述变化] [[来源页]]
示例:
- 2026-04-10(3 sources)| 强化:HyDE 在长查询上提升 ~10% 召回 [[知识库/摘要/rag-2024-survey]]- 2026-04-15(4 sources)| 修正:RAG 的上下文窗口问题原归因错误,应是 chunk 边界 [[知识库/摘要/xxx]]- 2026-04-18(4 sources)| 新增分歧:两个评估指标对召回质量的判断相反 [[知识库/摘要/yyy]]
写页时只用本次的原料作证据。禁止跨源污染:
- ❌ MEMORY.md / 老日记里的偏好
- ❌ CLAUDE.md / harness prefs
- ❌ 其他不相关的旧原料页(除非做跨源综合且标明来源)
- ❌ 纯脑补推测(年份、月份、具体事件)
自查:实体页写完逐条问"这句话证据在哪个 [[页面]]?"——答不上就删或改"(未提及)"。
5. 死链预检 — lorekit ingest check <wiki-page...>
写完页立即跑:
返回 JSON {checked, ok, broken}。
broken: []→ 进下一步broken: [{file, link}]→ 决定每条死链怎么处理:- 真该建独立页的(已存在主语但还没建) → 回 Step 4 补建
- 不该独立成页的(一次性提及) → Edit 把
[[xxx]]改成纯文本
死链清完再继续。不要让死链漏到 sync / lint 阶段。
6. 一次性关账 — lorekit ingest record ... --step ... --log ...
一条命令关账 + 写日志:
效果:
stepsDone一次性补齐 4 步--step含lint时 status 自动转completed--logbody 自动 prepend 到corpus/log.md顶部,带标准格式
然后跑 lorekit sync(仅针对已经 archive 到 原料/ / fileback 到 知识库/ 的 durable ingest):
- 自动刷
_INDEX.md - 自动 merge
corpus/index.md(新页追加 / 失踪页删除 / 人类手写摘要保留) - doctor 健康检查
工作台 note、daily fragment、临时学习记录或 HTML 展示产物的小改不触发即时 sync;阶段收口或转入 原料/ / 知识库/ 时再同步。
不要手动 Edit corpus/index.md 或 corpus/log.md——CLI 全包了。
最后跑一次 lorekit lint(可选)查 corpus health——只关注本次新建页的 issue,历史遗留可忽略。
6.5 清理已消费的工作台收件原件
当用户明确要求“入库 / ingest / 注入知识库 / 归档”,且本次来源已经完成以下条件时,_工作台/收件/ 里的中转原件不再承担保存职责:
- 原文已经移动或归档进
原料/canonical source; - 相关
知识库/页面已创建或更新; lorekit ingest check已通过,反链 / wikilink 已闭合;ingest record --step ... --log ...已写入 ingest state 和log.md;lorekit sync已完成。
满足以上条件后,默认用 lorekit trash 清理本次 ingest 明确消费掉的 _工作台/收件/ 原件。可清理范围包括:
- 已被移动或复制到
原料/的工作台.md; - 已被归档并由 canonical source 引用的同名
.assets/; - 只剩本次 ingest 自动生成
_INDEX.md或空壳的收件子目录。
不要清理这些内容:
- 只分析 / 只预览 / workbench-only 的材料;
- 无法证明已经进入
原料/的 assets、PDF、图片、批量目录或 sibling 文件; - 同一收件目录里与本次 ingest 无关的其他来源。
最终回复必须说明 canonical source 路径、工作台原件是否已移到回收站,以及验证命令结果。
7. QUESTIONS.md 匹配(ingest 结束前)
ingest 结束后、汇报前,Read corpus/QUESTIONS.md 的 Open Questions 列表:
- 用本次新来源的核心论点对每条 Open Question 做一次简短 relevance 判断
- 若本次来源能回答或部分回答某问题 → 主动提示先生:
> 此次 ingest 的来源 [[xxx]] 可能回答了 Open Question:"{问题描述}"。是否现在执行 QUERY 综合一次?
- 先生回 Y → 交给
wiki-queryskill 跑一次查询,答案端看到"这个问题已经被回答",可将 QUESTIONS.md 的此条从 Open Questions 移到 Resolved Questions(wiki-query里处理) - 先生回 N → 结束,不动 QUESTIONS.md
为什么:Open Questions 是先生留给自己的"研究钩子",新来源进来的一瞬间是最佳匹配时机。错过这个时点,问题就可能一直挂着。
个人写作流程(type: personal-writing 走这条)
与外部来源流程(Step 2-7)的关键差异:
| 环节 | 外部来源 | 个人写作 | |
|---|---|---|---|
| Compiled Truth | 2-3 段客观摘要 | 不生成 Summary 节(跳过客观摘要——个人立场不是事实综述) | |
| 核心论点落点 | 抽 concept / entity 建页 | 写入相关 concept 页的 ## My Position 节(标注"个人立场"来源) | |
| source_count | 参与计数(+1) | 不参与计数(防自我背书) | |
| Timeline 记录 | 标"强化 / 修正 / 新增分歧" | concept 页追加:- YYYY-MM-DD 个人写作 [[slug]] 确立了对此概念的明确立场 | |
| 外部引用 wikilink | 必做 | 若本文引用了外部来源,尽量与 知识库/摘要/ 建 wikilink |
示例:先生写了一篇《我对 RAG 的立场》,ingest 后:
- 原料留在
原料/个人写作/ - 不新建 summary 页,也不建 synthesis 页
- 在
知识库/概念/RAG.md的## My Position节追加"先生认为...(来自 [[原料/个人写作/...]])" - RAG.md Timeline 追加:
- 2026-04-19 个人写作 [[原料/个人写作/my-rag-position]] 确立了对此概念的明确立场 - RAG.md 的
source_count不变
意外中断怎么办
唯一数据源 .wiki/ingest-state.json,三档 status:started / completed / failed。
- 重跑
lorekit fetch <url>→ CLI 返回in_progress+nextStep,按提示从下一步继续 - 查所有中断:
lorekit ingest pending - 放弃一条:
lorekit ingest forget <url>或record --fail <reason> - 老 ingest 没 state 记录:
lorekit ingest reconcile(先--dry-run)
日期填写规则
| 优先级 | 方法 | |
|---|---|---|
| 1 | lorekit fetch 抽出来的 publishDate(已写进 frontmatter source_date) | |
| 2 | 原文正文明确日期("Posted on 2026-04-04") | |
| 3 | 用户确认 | |
| 4 | 留空 + timeline 写"(未标注)" |
禁止:猜年份 / 用"今年/去年" / 用 ingest 时间冒充发布日期 / 反爬一次就放弃(curl -A 抓原始 HTML 有戏)/ 从图片扒日期(二手考证不算原话)。
反链铁律
至少一条反向链接,防孤岛:
- 新建页里提到的
[[人物]]/[[项目]]/[[概念]]必须真存在 → 靠 Step 5 的ingest check兜底 - 被链的目标页也要在 timeline 留一条反向引用
- 没链接的信息等于没有
Output format
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/wiki-ingest/SKILL.md
Popularity
- Repository stars
- 5
- Repository forks
- 1
- 7-day trend score
- 9
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/gyf0311/lorekit/wiki-ingest)