面向 Obsidian 的个人知识库自动化管线:用 Firecrawl + 服务器 Codex 做情报搜索与译文加工,经 唯一人工终审 PR 合并进库;expand/index.md 维护全库索引(含 working/ 作品)。
博客网站:www.wsjaly.cn —— wiki/ 笔记会同步为“模块 → 子文件夹 → 笔记”的可评论知识库。
知识库规则见 agents.md。管线设计见 docs/superpowers/specs/2026-08-09-curate-pipeline-design.md。
- 双段情报(Research):Prompt A 强制调用 Firecrawl 搜索;Prompt B 做长分析并三档分流(
translate/index/observe) - 唯一终审 PR(Curate):值得翻译的条目由 Codex 产译文并落位
working/,同步 index / log / 知识图谱;整条流水线只开一次人工 PR - 索引权威:
references/articles.md为收录状态机;expand/index.md为全库总目录(wiki + expand + working) - 一致性门禁:K1–K7(
check_consistency.py)在 pre-commit 与 CI 强制执行 - 支撑流水线:每日 lint、周报、GC、凭据扫描、失败告警
- 博客发布:自动同步
wiki/到 WordPress,首页展示模块入口,模块内按子文件夹分组,文章默认开放评论
博客导航与本地知识库保持同一层级:
首页
└── 一级模块(wiki/ 的第一层目录)
└── 子文件夹(wiki/ 模块下的目录;没有子目录时显示“模块根目录”)
└── 笔记
同步范围、图片处理、评论修复、重复文章迁移和手动发布方式见 docs/blog-sync.md。
flowchart LR
R[research.yml<br/>每周/手动] -->|SSH| A[research.py]
A -->|Codex Prompt A<br/>Firecrawl| B[Codex Prompt B<br/>三档分流]
B -->|push| Q[pipeline/queue<br/>不开 PR]
R -->|同一次作业| C[curate.py<br/>--limit 0 全部]
Q --> C
C -->|Codex 翻译 + 落位| P[唯一 PR review/…]
P -->|人工合并| M[main]
| 分流 | 含义 | 落点 |
|---|---|---|
translate |
值得全文翻译 | 待处理队列 → curate → working/ |
index |
仅索引收录 | articles.md 编号正文(核心含脉络) |
observe |
暂不收录 | articles.md 观察项表 |
├── references/ # Phase 0:权威索引(articles.md 状态机 + 观察项)
├── wiki/ # Phase 1:个人笔记(只读,AI 不写)
├── expand/ # Phase 2:AI 思考/概念 + index / log / 知识图谱
├── working/ # Phase 4:可对外译文作品
├── prompts/ # research-search / research-tracker / curate 等
├── scripts/ # research.py / curate.py / kb_common.py / 门禁与巡检
├── .pipeline/ # 被忽略的 research/curate 中间产物(不进入 PR)
├── .github/workflows/ # research(含全量 curate)/ e2e / consistency / lint …
├── agents.md # 知识库总规则
└── README.md
| 流水线 | 触发 | 职责 |
|---|---|---|
research.yml |
每周一 06:00(UTC+8)/ 手动 | SSH → research.py → 立即 curate.py --limit 0(一次处理全部待处理)→ 唯一终审 PR |
blog-sync.yml |
main 的 wiki/** 变更 / 每周兜底 / 手动 |
SSH → WordPress 本机导入,保持博客与 wiki 同步 |
e2e-pipeline.yml |
手动 | 同上小批量冒烟(可改 research_max / curate_limit) |
| 流水线 | 触发 | 职责 |
|---|---|---|
consistency.yml |
PR / push | K1–K7 一致性(必需检查) |
lint.yml |
每天 08:30 | 巡检 |
gc.yml |
每周 | 熵管理报告 |
weekly-report.yml |
周五 | 周报 |
scan-secrets.yml |
push / PR | 凭据扫描 |
failure-notify.yml |
失败 | Webhook 告警 |
| 流水线 / 脚本 | 说明 |
|---|---|
dispatch-worker.yml |
原每 3h 轮询;已并入 research.yml 全量 curate |
finalize.yml / finalize.py |
落位已内联 curate;二次收录 PR 取消 |
collect.yml + collect/filter |
固定源采集,由 research 替代 |
ingest.yml + ingest.py |
旧 raw/→expand 深度笔记旁路 |
curate-review.md / worker.py |
后置 AI 打分 / 旧全自动 worker |
| 脚本 | 说明 |
|---|---|
research.py |
Prompt A(Firecrawl)+ Prompt B(分流)→ articles;push pipeline/queue |
curate.py |
默认一次处理全部待处理 → 落位 working + 同步索引 → 唯一 review/* PR |
kb_common.py |
slug、落位、index/log/图谱同步 |
check_consistency.py |
K1–K7(含 working/ 计入全库) |
retrack.py |
已收录清单(--list 注入 research 去重) |
lint.py / gc_report.py / weekly_report.py / scan_secrets.py |
巡检 / GC / 周报 / 凭据 |
| 文件 | 角色 |
|---|---|
prompts/research-search.md |
Prompt A:搜索(强制 Firecrawl MCP) |
prompts/research-tracker.md |
Prompt B:搜后长分析 + 三档分流 |
prompts/curate.md |
抓取原文 + 译文三件套 |
prompts/curate-review.md |
已废弃 |
- Python 3.12+
- 服务器:
codexCLI + Firecrawl(MCP 或 CLI),仓库克隆于/root/note-worker - GitHub Secrets:
WORKER_HOST/WORKER_USER/WORKER_SSH_KEY(SSH 调度);GH_TOKEN或 Actions token(开 PR)
cd /root/note-worker
export NOTE_GIT_REF=main # 可选;默认 main
python3 scripts/research.py --max 10
python3 scripts/curate.py --limit 0 # 0=全部待处理或在 GitHub Actions 手动触发 E2E 全流程测试(服务器 Codex)。
python scripts/check_consistency.py
python scripts/curate.py --dry-run
python scripts/research.py --dry-run
python scripts/lint.py --log expand/log.md- 等待
review/<timestamp>PR(标题如「待审:AI 产出 N 篇」) - 同意则合并;某篇不要则删对应
working/*-translation.md并改articles.md状态后再合并 - 不要再期待 research / finalize 的中间 PR
- 过滤宁缺毋滥;观察项防重复采集但不计编号正文
私密/gitignore;凭据扫描阻断合并- 分支保护:
main仅能经 PR + consistency 必需检查合并
MIT License(Copyright © 2026 ShiJie Wu),详见 LICENSE。