一键导入
wiki-ingest
把新内容摄入 corpus,按 filing-rules 落盘并建反向链接。触发词:ingest、存一下、整理进知识库、收藏、归档、mp.weixin、公众号、带图文章,或用户直接发 URL / 文件路径。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
把新内容摄入 corpus,按 filing-rules 落盘并建反向链接。触发词:ingest、存一下、整理进知识库、收藏、归档、mp.weixin、公众号、带图文章,或用户直接发 URL / 文件路径。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
从任意项目跨库查询已注册的 LoreKit corpus:点名哪个库(总知识库/某个项目库)就路由哪个库,不点名默认总库。触发词:查总知识库、查我XX库、去XX知识库找。
从 corpus 检索已有内容并综合答案,按精确/模糊/图遍历三层路由。触发词:查、找、搜、知识库里有没有、记得吗、之前说过、关于 XXX。
用于显式配置目标 corpus 后,把跨项目 URL、文件、粘贴来源、文章、文档或外部资料摄入、归档、保存到该 LoreKit corpus。
工作台清算——on-demand 扫描 _工作台/ 淤积内容与复盘层 fileback 候选,AI 预判分组后出裁决账单,先生勾选后才执行(入库/归档/丢弃)。触发词:整理工作台、清算工作台、工作台该清了、triage、工作台清算。
对 corpus 做健康检查,扫 frontmatter 合规、断链、孤岛、来源可解析、复审到期(stale),只报告不自动修。触发词:lint、体检、检查 corpus、看看有没有问题、知识库健康。
用于显式配置目标 corpus 后,把跨项目随手记录、想法、观察、决策或临时信息捕获到该 corpus 的工作台收件箱。
| name | wiki-ingest |
| description | 把新内容摄入 corpus,按 filing-rules 落盘并建反向链接。触发词:ingest、存一下、整理进知识库、收藏、归档、mp.weixin、公众号、带图文章,或用户直接发 URL / 文件路径。 |
把外部内容(URL / 文件 / 粘贴文本)摄入当前 corpus:fetch → 写 wiki → 反链 → CLI 关账。
项目/domain skill 可以把 finished package、课程单元或客户材料路由到这里;它只补充来源分类、命名和验收规则,不重写 fetch/archive/wiki/lint/state 流程。
mp.weixin.qq.com)且希望整理不要触发:
wiki-filebackwiki-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 已做)。
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;必须有明确入库意图,才整理进 原料/ 并编译到 知识库/。
抓完原料后先判断来源类型,不同类型 ingest 流程有差异。优先级由高到低:
type: personal-writing → 走个人写作流程(见下方 §个人写作流程)原料/个人写作/ → 走个人写作流程为什么要区分:个人写作是先生自己的立场,不计 source_count(防自我背书),不生成客观 Summary 节,核心论点走 concept 页的 ## My Position 节。外部来源才是可信事实的证据。
读 article.md 全文(按需读关键图),抽:
一条内容可能有多个主语——每个主语都要决定建页或追加 timeline。
fetcher 产出的扁平结构(Obsidian 兼容,[[<归档路径>/<slug>]] 能按 basename 直接匹配):
_工作台/收件/fetch/
├── <slug>.md ← 原文(含 frontmatter)
└── <slug>.assets/ ← 图片(没图片时此目录不存在)
按 系统/filing-rules.md 路由到归档目录:
| 原料类型 | 目标目录 |
|---|---|
| 公众号 | 原料/剪藏/ |
| 一般文章 / gist / GitHub README | 原料/文章/ |
| 书籍笔记 | 原料/书籍/ |
| 会议纪要 | 原料/会议/ |
mv 命令:.md 和 .assets/ 同名配对,两件一起搬:
mv _工作台/收件/fetch/<slug>.md 原料/剪藏/<slug>.md
# 图片目录存在时一起搬(同名才能让 Obsidian 相对引用继续工作):
[ -d _工作台/收件/fetch/<slug>.assets ] && \
mv _工作台/收件/fetch/<slug>.assets 原料/剪藏/<slug>.assets
铁律:
.md 和 .assets/ 必须同名同级——不要拆开,否则 Obsidian 里图片引用断trash 扔回收站,绝不用 rm铁律:保持 fetcher slug,禁止 LLM 自作主张 rename / 缩写
fetcher 已用 slugify(title) 生成的 slug 是先生希望的"文件名 = 真实标题"。
LLM 在 mv 时不许改名(即使觉得短英文 slug 更专业)。
❌ 错误示例(早期吃过的亏,2026-04-19 修复):
Web-Access-一个Skill-拉满Agent联网和浏览器能力web-access-skill-yize ← 错,先生看图谱时无法直观知道是哪篇✅ 正确:
mv _工作台/收件/fetch/Web-Access-一个Skill-拉满Agent联网和浏览器能力.md 原料/剪藏/Web-Access-一个Skill-拉满Agent联网和浏览器能力.md
保持 fetcher 给的 slug 一字不改。
original_path:搬家留指纹(工作台晋升件必做)
原件如果来自 _工作台/(先生手放的稿件、清算晋升件,而非 fetch 收件),mv 进 原料/
后在原料文件 frontmatter 追加一行,保留搬家前的出处线索:
original_path: _工作台/草稿/<原文件名>.md
为什么:入库搬家常伴随改名/换目录,这是知识库页来源链接断掉(provenance 接续不上)
的头号原因。original_path 让断链修复和溯源有据可查;lorekit lint 会对知识库页
frontmatter 的 原料/ 引用做可解析校验(unresolved-source),入库后跑一次 lint 收尾。
对每个要建 concept / entity 页的主语,先扫已有页的 aliases,避免同物异名建重复页:
知识库/概念/*.md 与 知识库/实体/*.md 的 frontmatter aliases 字段aliases 字段必填,把当前概念的所有叫法(中文名 / 英文名 / 常见别名 / 缩写)都列进去示例:要建"检索增强生成"页,先搜 aliases,命中已有 知识库/概念/RAG.md(其 aliases 含"检索增强生成")→ 追加 Timeline 到 RAG.md,不新建。
对落进 原料/ 的原料文件计算 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。
# 计算哈希示例
shasum -a 256 原料/剪藏/<slug>.md | awk '{print $1}'
对每个主语先问:"下次我会不会主动引用这个实体?"
知识库/{概念,实体,摘要,专题}/ 建新页## Timeline 追加一条铁律:多个独立 wiki 页必须并行 Write——单条消息里一次性发出 N 个 Write 调用,不要串行。串行是上次 ingest 慢的主因(每页 40-60s × N)。
页面结构按 corpus/CLAUDE.md 的"页面结构"章节:
---
{ frontmatter — 见 系统/frontmatter-spec.md }
---
# 标题
## Compiled Truth
当下最好的理解,2-3 段。可被后续 ingest 重写覆盖。
---
## Timeline
- YYYY-MM-DD(N sources)| [标注]:[变化描述] [[双链到来源页]]
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]]写页时只用本次的原料作证据。禁止跨源污染:
自查:实体页写完逐条问"这句话证据在哪个 [[页面]]?"——答不上就删或改"(未提及)"。
lorekit ingest check <wiki-page...>写完页立即跑:
lorekit ingest check 知识库/实体/A.md 知识库/实体/B.md 知识库/概念/C.md
返回 JSON {checked, ok, broken}。
broken: [] → 进下一步broken: [{file, link}] → 决定每条死链怎么处理:
[[xxx]] 改成纯文本死链清完再继续。不要让死链漏到 sync / lint 阶段。
lorekit ingest record ... --step ... --log ...一条命令关账 + 写日志:
lorekit ingest record <url> \
--step archive,wiki,backlink,lint \
--archived-to "原料/剪藏/<slug>" \
--wiki-page "知识库/实体/A.md" \
--wiki-page "知识库/实体/B.md" \
--wiki-page "知识库/概念/C.md" \
--log "一句话归纳本次 ingest 的核心收获 / 主语 / 关键事实。CLI 自动补 URL/归档/页面清单。"
效果:
stepsDone 一次性补齐 4 步--step 含 lint 时 status 自动转 completed--log body 自动 prepend 到 corpus/log.md 顶部,带标准格式然后跑 lorekit sync(仅针对已经 archive 到 原料/ / fileback 到 知识库/ 的 durable ingest):
_INDEX.mdcorpus/index.md(新页追加 / 失踪页删除 / 人类手写摘要保留)工作台 note、daily fragment、临时学习记录或 HTML 展示产物的小改不触发即时 sync;阶段收口或转入 原料/ / 知识库/ 时再同步。
不要手动 Edit corpus/index.md 或 corpus/log.md——CLI 全包了。
最后跑一次 lorekit lint(可选)查 corpus health——只关注本次新建页的 issue,历史遗留可忽略。
当用户明确要求“入库 / ingest / 注入知识库 / 归档”,且本次来源已经完成以下条件时,_工作台/收件/ 里的中转原件不再承担保存职责:
原料/ canonical source;知识库/ 页面已创建或更新;lorekit ingest check 已通过,反链 / wikilink 已闭合;ingest record --step ... --log ... 已写入 ingest state 和 log.md;lorekit sync 已完成。满足以上条件后,默认用 lorekit trash 清理本次 ingest 明确消费掉的 _工作台/收件/ 原件。可清理范围包括:
原料/ 的工作台 .md;.assets/;_INDEX.md 或空壳的收件子目录。不要清理这些内容:
原料/ 的 assets、PDF、图片、批量目录或 sibling 文件;最终回复必须说明 canonical source 路径、工作台原件是否已移到回收站,以及验证命令结果。
ingest 结束后、汇报前,Read corpus/QUESTIONS.md 的 Open Questions 列表:
此次 ingest 的来源
[[xxx]]可能回答了 Open Question:"{问题描述}"。是否现在执行 QUERY 综合一次?
wiki-query skill 跑一次查询,答案端看到"这个问题已经被回答",可将 QUESTIONS.md 的此条从 Open Questions 移到 Resolved Questions(wiki-query 里处理)为什么:Open Questions 是先生留给自己的"研究钩子",新来源进来的一瞬间是最佳匹配时机。错过这个时点,问题就可能一直挂着。
与外部来源流程(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 后:
原料/个人写作/知识库/概念/RAG.md 的 ## My Position 节追加"先生认为...(来自 [[原料/个人写作/...]])"- 2026-04-19 个人写作 [[原料/个人写作/my-rag-position]] 确立了对此概念的明确立场source_count 不变唯一数据源 .wiki/ingest-state.json,三档 status:started / completed / failed。
lorekit fetch <url> → CLI 返回 in_progress + nextStep,按提示从下一步继续lorekit ingest pendinglorekit ingest forget <url> 或 record --fail <reason>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 兜底抓取:lorekit fetch → rich (L1, 12 images)
原文:mv 工作台/abc → 原料/剪藏/abc/
新建页面(并行 Write):
- [[知识库/实体/张三]]
- [[知识库/概念/RAG 评估]]
更新页面(追加 timeline):
- [[知识库/实体/lorekit]]
死链预检:3 file, 10 link ok, 0 broken
一次关账:record --step archive,wiki,backlink,lint --log "..."
sync:index.md +2 added, 6 _INDEX.md refreshed, doctor passed
清理:lorekit trash _工作台/收件/fetch/abc.md(canonical source: 原料/剪藏/abc.md)
日期来源:fetcher publishDate=2026-04-04
lorekit fetch <url> — URL 抓取入口(自动 dedupe + 抽 publishDate + 起 state)lorekit fetch <url> --force — 忽略 dedupe 强制重抓lorekit ingest check <files...> — 死链预检(写完页立刻跑)lorekit ingest record <url> --step a,b,c,d --log "..." — 多步一次关账 + 写 loglorekit ingest record <url> --complete / --fail <reason> — 显式收尾lorekit ingest pending / list / forget / reconcile — 状态管理lorekit sync — 一条命令:刷 _INDEX + merge index.md + doctorlorekit lint — corpus health(事后扫)mv / lorekit trash(删东西绝不用 rm)