scholar-wendao — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited scholar-wendao (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
问道于古今学者 · Ask the way of scholars across time
学者问道不造人,构建分析镜片。
人文社科研究者真正需要的不是"和福柯聊天",而是把福柯的分析镜片装到自己的研究流程里——读到一段材料,能立刻问"用这个学者的概念框架看,会怎么解读"。
一个好的学者 perspective skill 是一套可运行的学术分析工具箱:
关键区分:捕捉的是 HOW they analyze,不是 WHAT they wrote。
与人格 skill 通用工具的根本差异:
scholar-wendao 的执行被显式分为两个独立可触发的子工作流,加一个共享数据层。
┌─ _library_config.md (配置)
共享数据层 ──────────────┼─ _acquisition_manifest.{md,json} (资料状态 + 4 tier 标注)
├─ {Vault}/Library/{_files,Cards}/ (Vault 内的真源)
└─ examples/{slug}-perspective/_pdf_evidence/ (蒸馏证据)
┌─ Workflow A · 图书馆建设(Library Building)─────────────────────┐
│ 触发: "搜集 X 的资料" / "为 X 建库" / "build-library X" │
│ A.0 配置(_library_config.md) │
│ A.1 Metadata 全收集(无漏 manifest) │
│ A.2 Tier 1+2 自动下载(OA / yt-dlp / scrape) │
│ A.3 Tier 3+4 manifest 输出(待手动 / 浏览器助手项) │
│ A.4 用户主动导入 ← intake_manual_pdf.py(可重复跑) │
│ A.5 generate_library_cards(Library → Cards) │
│ 退出: Library 增长 + acquisition_manifest 标记当前覆盖率 │
└──────────────────────────────────────────────────────────────────┘
│ (可独立运行多轮)
│
┌─ Workflow B · 学者蒸馏(Scholar Distillation)────────────────────┐
│ 触发: "蒸馏 X" / "做 X 的分析镜片" / "distill X" │
│ 前置: Workflow A 至少跑过一次(Library 有 ≥ 5 部 PDF 推荐) │
│ B.1 extract_pdf_evidence(基于 Library 当前状态) │
│ B.2 7 agent 调研(research / biography) │
│ B.3 框架提炼(concepts / heuristics / genealogy / etc.) │
│ B.4 SKILL.md 构建 │
│ B.5 质量验证 │
│ B.6 Vault 同步(回灌 wikilinks) │
│ 退出: Perspective Skill 产出 + Vault wikilinks 更新 │
└──────────────────────────────────────────────────────────────────┘
默认入口 "学者问道 X" = A → B 串行(向后兼容 v0.4.1 端到端流程)
增量入口:
- "更新 X 库" / "为 X 补料" → 仅跑 A(含 A.4 主动导入)
- "重蒸 X" / "用新资料重做 X 镜片" → 仅跑 B(基于扩充后 Library 整体重做)
- "更新 X 的 skill" → 轻量 update(v0.4.1 既有逻辑,仅增补不重写)_archive/;与"轻量 update"不同。| Tier | 自动化程度 | 适用源 | 工具 |
|---|---|---|---|
| 1 · 完全 API | 100% 自动 | OpenAlex / Crossref / Semantic Scholar / arXiv / OAPEN / DOAB / unpaywall | harvest_works.py |
| 2 · 友好 scrape | 90% 自动 | YouTube 元数据 / Vimeo / 学者主页 / ARS Industrialis / Internation / 出版社 OA 落地页 | 4 个新 harvester(v0.4.3) |
| 3 · 浏览器助手 | 50% 自动 | annas / paywall(机构 access) / Cairn 锁定文章 | 用户浏览器解 captcha → 导出 cookies → 工具用 cookies 调 API |
| 4 · 完全手动 | 0% 自动,工具辅助归档 | annas 严格反爬 / Sci-Hub / 闭源专著 / 罕见档案 | intake_manual_pdf.py(用户拖入 PDF → 自动改名 + 移到 Library + 生成 Card) |
每条资料在 _acquisition_manifest.json 中标注 acquisition_tier: 1/2/3/4 + priority: P0/P1/P2。Phase A.3 输出 Tier 3+4 列表给用户决策;Phase A.4 把用户手动下的 PDF 标记为 intake_completed。
v0.4.x 默认 framework 为当代单一作者优化(Stiegler 验证)。v0.5 加传统学者支持,Workflow B 内部按 scholar_type 分流:
Workflow B(蒸馏)
├── B.0 学者类型判定(Phase 0A 第 6 项 scholar_type)
│
├── [contemporary] → B.3a 现代单一作者蒸馏(向后兼容 v0.4.x)
│ Phase 2.1-2.8 现有流程不变
│ 默认输出:单一第三人称分析镜片
│
├── [traditional] → B.3b 传统学者蒸馏(v0.5 新增)
│ 新增 Phase 2.0' Lineages 提炼(4-6 派代表学者 + reading strategy)
│ Phase 2.1' 概念地图扩展为「概念 × 派」二维矩阵
│ Phase 2.5' biography 降级 + intellectual genealogy 升级
│ Phase 2.7' 古典引文系统(Bekker / Stephanus / 中典页码)
│ 默认输出:multi-perspective(本人 + N 派各自看)
│
└── [topic] → B.3c 主题/流派蒸馏(已有的 v0.4 主题模式)| 维度 | contemporary | traditional(v0.5 新增) | topic |
|---|---|---|---|
| 概念地图 size | 3-7 | 5-15(允许大概念集) | 5-10 |
| 默认输出 mode | 单一第三人称 | multi-perspective(本人+N 派) | 领域共识+各家分歧 |
| Lineages 一等公民 | 否 | 是(必填 4-6 派) | 否(流派 = 主题本身) |
| 概念结构 | 概念→单一定义 | 概念→本人+N 派 reading 差异 | 共识概念+争议概念 |
| 引文系统 | PDF page anchor | Bekker/Stephanus 编号 + 译本页码并存 | 引代表论文 page anchor |
| biography 重要性 | 高(强 BRACKETING) | 低(生平稀少不可靠,重 genealogy) | 不需要 |
| 一手分级 | A+ → C(8 级) | + 派学者「子一手」 A^(Aquinas/Avicenna 自己写的"是 X 这样想"著作) | 不适用 |
每个 traditional 学者的 SKILL.md 必须含 lineages 章节(4-6 派):
lineages:
- name: "经院派 / Thomism"
representative: "Thomas Aquinas"
period: "13世纪"
key_works:
- "Summa Theologiae"
- "Commentary on Nicomachean Ethics"
reading_strategy: "把 Aristotle 形质论 / 四因说整合进基督教神学"
distinctive_claims:
- "首要 ousia = essence + esse(存在)"
- "灵魂作为实体形式"
representative_concept_reading:
ousia: "essence + esse"
virtue: "infused virtue 高于 acquired virtue"
- name: "阿拉伯派"
representative: "Avicenna (Ibn Sina)"
...## [Aristotle 本人]
基于 *EN* 1097b22-1098a20,Aristotle 会说……
[此段引文用 Bekker 编号 + 现代译本页码并标]
## [经院派 / Aquinas]
他会重读这段为……,因为对他而言 *eudaimonia* 不只是地上活动 (operatio),
而是指向至福直观 (visio beatifica)。
[引 *Summa Theologiae* I-II Q.3]
## [Heidegger 派]
他会跳过命题层,看到 *eudaimonia* 的存在论意义被遮蔽为"幸福感"。
他会回到 *physis* 与 *aletheia* 的发生……
[引 *Sein und Zeit* §40 + *Brief über den Humanismus*]
## [Anglo-American analytic / MacIntyre]
他会形式化为:德性是 practice 内部 goods 的获取条件……
[引 *After Virtue* ch.14]用户在调用时若说"用 X 派看这个材料"或"X 派会怎么想 Y" → 工具直接走该派的 reading strategy 输出。
scholar_type: contemporary 时走 v0.4.x 流程)收到用户请求后,先判断触发哪个 workflow + 哪条路径:
| 用户输入意图 | Workflow | 后续路径 |
|---|---|---|
| "搜集 X 的资料" / "为 X 建图书馆" / "build-library X" | A 单跑 | A.0 → A.5 |
| "蒸馏 X" / "做 X 的分析镜片" / "distill X" | B 单跑 | 检查 Library 覆盖率 → B.1 → B.6 |
| "学者问道 X" / "为 X 建一个 skill"(默认端到端) | A → B | 完整流程 |
| "重蒸 X" / "用新资料重做 X 镜片" | B 重做模式 | 旧 SKILL.md 进 _archive/ → B.1-B.6 重做 |
| "更新 X 的 skill" | B 轻量 update | 仅增补不重写(v0.4.1 既有逻辑) |
| "我有一份 PDF 想加到 X 的库" / "import PDF for X" | A.4 单步 | 直接跑 intake_manual_pdf.py |
学者识别(直接路径 / 主题 / 诊断)的判断与 v0.4.1 一致:
| 用户输入 | 路径 | 示例 |
|---|---|---|
| 明确的学者名 | 直接路径 → Phase 0A | "蒸馏 Bernard Stiegler"、"为福柯建一个 skill" |
| 明确的方法论主题 | 主题路径 → Phase 0A(主题模式) | "构建批判理论分析工具"、"民族志方法 perspective" |
| 模糊的研究需求 | 诊断路径 → Phase 0B | "我研究农村教育,想要一种能看穿权力关系的视角" |
收到明确学者名后,确认六件事(v0.5 加第 6 项「学者类型」):
~/.claude/skills/[scholar]-perspective/ 是否已存在判断启发式:
默认行为:用户没有更多信息 → 全面镜片 + 学术分析用途 + 无本地语料(走网络+开放档案) + scholar_type 自动判定 → 进入 Phase 0.5。
用户不知道该蒸馏谁,只有困惑或需求。这时学者问道的工作是从研究需求反推最合适的学者。
#### Step 1: 需求维度定位
通过 1-2 个追问定位用户的核心研究需求:
| 需求维度 | 典型表达 | 学者方向 |
|---|---|---|
| 权力分析 | 「想看穿表面话语下的权力运作」「制度如何塑造主体」 | 福柯、布尔迪厄、葛兰西、阿甘本 |
| 技术与人 | 「想理解技术如何重塑人类」「数字资本主义」 | Stiegler、Simondon、芒福德、麦克卢汉 |
| 行动者-网络 | 「想避免人/物二元论」「物的行动力」 | 拉图尔、Mol、Haraway |
| 资本主义批判 | 「想分析资本逻辑对生活的渗透」 | 马克思、Wendy Brown、Boltanski、Streeck |
| 文化与象征 | 「想分析符号系统如何运作」 | 列维-斯特劳斯、Geertz、Bourdieu(作为符号社会学家) |
| 现代性反思 | 「想批判性看待启蒙、进步」 | 韦伯、阿多诺/霍克海默、查尔斯·泰勒 |
| 诠释学 | 「文本/材料的意义如何解读」 | 伽达默尔、利科、Charles Taylor |
| 知识社会学 | 「知识如何被生产、流通、合法化」 | 曼海姆、布尔迪厄、Latour |
| 殖民与后殖民 | 「想批判性分析现代性的另一面」 | Said、Spivak、Mbembe |
| 性别与身体 | 「想分析性别建构与身体经验」 | Butler、Haraway、Wittig |
追问原则:
#### Step 2: 候选推荐
基于需求维度推荐 2-3 个候选学者。先判断:人物 skill 还是主题 skill?
两个来源:
来源 A:本地已有 skill——扫描 ~/.claude/skills/*-perspective/,匹配现有学者镜片。已存在的零成本调用。
来源 B:新蒸馏候选——基于需求维度匹配。每个候选的展示格式:
### 候选 1: [学者名] ⚡已有 skill / 🆕需要蒸馏
**核心镜片**:[此学者分析问题的独特视角,一句话]
**为什么适合你**:[直接对应用户研究需求,匹配逻辑要具体]
**学派定位**:[他属于什么传统、与同代人的差异]
**局限**:[这个视角的盲区——什么类型的问题这个镜片不擅长]
**语料可获取性**:[原文语种 + 是否有充足英/中译]推荐原则:
#### Step 3: 用户选择
收到确认后立即执行,在调研之前完成。
#### 双路径架构(核心设计)
学者问道把"轻产物"与"重材料"严格分开,避免 skill 仓库被版权 PDF 与大文件污染:
路径 A · Skill 产物(轻量,可上 git)
~/.claude/skills/[scholar]-perspective/
├── SKILL.md # 最终产物
├── scripts/ # 工具脚本(来自 scholar-wendao)
└── references/
├── research/ # 7 个 agent 的调研结果(markdown 综述)
│ ├── 01-monographs.md
│ ├── 02-interviews.md
│ ├── 03-style.md
│ ├── 04-secondary.md
│ ├── 05-debates.md
│ ├── 06-genealogy.md
│ └── 07-archive.md # 多语言全文献清单(含获取链接)
└── biography/ # 生平人格素材(独立章节)
├── timeline.md
├── personality.md
├── relations.md
└── controversies.md
路径 B · Library 重材料(永远不进 git,永久持有)
$SCHOLAR_WENDAO_LIBRARY/[scholar-slug]/
├── works/
│ ├── fr/ # 学者母语原版 PDF
│ ├── en/ # 英译本
│ └── zh/ # 中译本(如有)
├── interviews/ # 访谈与讲座 transcript
├── secondary/ # 二手研究 PDF
└── biographies/ # 传记类 PDF#### Library 路径配置
$SCHOLAR_WENDAO_LIBRARY 是用户全局学术档案目录。优先级:
$SCHOLAR_WENDAO_LIBRARY → 使用之export SCHOLAR_WENDAO_LIBRARY="$HOME/Documents/Obsidian/Library/_files"$HOME/scholar-wendao-library/(脚本自动创建)#### Library 归档布局(v0.4 新增)
用户的 Library 可能采用两种命名约定,本框架两种都支持但必须显式配置,否则下载脚本可能造成污染(例:v0.3 实战中 download_open_access.sh 自动创建 _files/fr/ _files/en/ 子目录与扁平命名约定冲突):
| 布局 | 命名 | 例 |
|---|---|---|
flat | 全部 PDF 在 _files/ 根目录,前缀+年份+语种 | Stiegler2010_le_circuit_fr.pdf |
by-language | 按语种子目录 _files/{fr,en,zh}/ | _files/fr/2010_le_circuit.pdf |
Phase 0.5 必须把所选布局写入 references/research/_library_config.md 的 archive_layout 字段。下载脚本(download_open_access.sh、annas_acquire.py)读此字段决定输出路径。Phase 0.5 完成前必须确认布局——询问用户「你的 Library 是扁平命名(建议)还是按语种子目录?」
为什么这样设计:
#### Library 覆盖率扫描(v0.4 新增·"本地优先模式"判断条件具体化)
v0.3 实战暴露的问题:「在 Library 有一些 PDF」介于无和全有之间,无清晰处理路径。v0.4 把这一步具体化为可计算指标:
LOCAL_PDFS=$(find "$SCHOLAR_WENDAO_LIBRARY" -iname "*[Ss]cholarSlug*.pdf" -type f | wc -l)
EXPECTED_BOOKS=$(估算自学者主要专著数,可先用 5 作为 fallback)
COVERAGE=$((LOCAL_PDFS * 100 / EXPECTED_BOOKS))| 覆盖率 | 模式 | 行为 |
|---|---|---|
| 0% | 纯网络 | 7 agent 全网络采集 |
| 1-30% | 本地补 | 网络 agent 优先;本地 PDF 进入 evidence 提取 |
| 31-70% | 本地优先 | 本地 PDF 全量进入 evidence;网络仅补缺口 |
| 71-100% | 纯本地 | 跳过部分网络 agent;evidence 提取作为主蒸馏源 |
扫描结果写入 _library_config.md 的 coverage_report 字段。
#### Phase 0.5 自动检查
~/.claude/skills/[scholar]-perspective/$SCHOLAR_WENDAO_LIBRARY,路径 B 目录已创建(按 slug 子目录或扁平命名前缀,依 archive_layout)flat / by-language,写入 _library_config.md)references/research/07-archive.md 中的下载脚本调用使用路径 B 作为 --output,并传入 archive_layoutreferences/research/_library_config.md 记录使用的 Library 路径(供后续 update 时参照)完成检查(自动执行):
sources/ 或登记入 _library_config.md,标记为本地优先模式关键规则:
references/research/),绝不存到外部目录。Skill 必须自包含——复制目录就能独立使用,便于开源分发v0.4.2 拆分提示:本节包含三件事,分属两个 workflow: -harvest_works.py+ 4 harvester(metadata 全收集)= A.1 -download_open_access.sh+ Tier 1+2 自动下载 = A.2 - 7 agent 调研产出 research / biography 文档 = B.2
>
单跑 Workflow A 时只跑前两件;单跑 B 时只跑 7 agent(基于 A 已下载的 Library 素材)。
#### 模式判断:本地语料 vs 网络搜索
| 模式 | 触发条件 | 策略 |
|---|---|---|
| 纯网络 | Library 覆盖率 0%,无用户语料 | 7 个 agent 全部走网络+开放档案 |
| 本地补 | Library 覆盖率 1-30% | 网络 agent 主线;Phase 1.0 同步抽取本地 evidence |
| 本地优先 | Library 覆盖率 31-70% 或用户提供 PDF | Phase 1.0 抽取本地 evidence 为主,网络补缺口 |
| 纯本地 | Library 覆盖率 ≥ 70% 或用户明确"只用我给的" | Phase 1.0 evidence 为唯一来源,网络仅补传记类信息 |
本地优先的执行逻辑:
#### Phase 1.0 / [Workflow B.1]:PDF 证据强制提取(v0.4 新增·本地优先 / 纯本地模式触发)
为什么这一步必须存在:v0.3 实战暴露——Phase 1 只读了用户已整理的 Obsidian Card 元数据,任何一部本地 PDF 全文都没进入 Phase 2 蒸馏,导致引文/页码/概念分期等关键细节失真(v0.3 SKILL.md 中至少 2 条引文页码不可在本地 PDF 验证)。
v0.4 强制 Phase 1.0 在 7 个 agent 启动之前完成:
python3 scripts/extract_pdf_evidence.py \
--library "$SCHOLAR_WENDAO_LIBRARY" \
--filter "{ScholarSlug}*.pdf" \
--concepts examples/{slug}-perspective/_pdf_evidence/_concepts.json \
--out examples/{slug}-perspective/_pdf_evidence \
--head 30 --tail 30_concepts.json 的多语言术语映射先用学者 1-2 个最高确定性概念冷启动(基于学者 Wikipedia 条目术语表),后续 Phase 2.1 蒸馏过程中可补全。
输出:每部 PDF → _pdf_evidence/{book_basename}.md,含:
_index.json + _navigator.md(概念 × 书命中矩阵 + OCR backlog 报告)OCR Backlog 自动检测(v0.4 新增):
extract_pdf_evidence.py 输出的 _index.json 含 empty_pages 字段。Phase 1.0 完成后必须扫描:
# 任意 PDF 的 empty_pages / total head+tail pages > 50% → 标 OCR backlog
ocr_backlog = [r for r in index if r["empty_pages"] / 60.0 > 0.5]OCR backlog 列表写入 _pdf_evidence/_ocr_backlog.md,每条记录:文件名、页数、PDF 元数据推断的真实书名、估计语言。提示用户:
⚠️ 检测到 N 部 PDF 无文字层(疑扫描版)。Phase 2 蒸馏将不能从这些书中抽证据。建议执行: ``brew install ocrmypdf # 或 pip install ocrmypdf ocrmypdf --language fra+eng+chi_sim --skip-text input.pdf input.pdf`OCR 完成后重跑extract_pdf_evidence.py --force`。
Phase 1.0 退出条件:
_navigator.md 已生成(含 9 概念 × top-3 书矩阵)#### 7 个 Agent 的任务分配(标准网络模式)
| Agent | 搜索目标 | 提取重点 | 输出文件 |
|---|---|---|---|
| 1 专著 | 学者出版的专著、代表论文、长篇序言 | 系统性论点、自创概念、引用习惯、章节结构 | 01-monographs.md |
| 2 访谈 | 学术访谈、公开讲座、研讨会问答、播客 | 即兴回答中暴露的判断方式、被追问时的应对、改变立场的瞬间 | 02-interviews.md |
| 3 风格 | 学者本人的写作样本(专著节选+论文+长访谈) | 行文节奏、概念使用频率、术语网络、定义习惯、辩护与让步的语态 | 03-style.md |
| 4 二手 | 二手研究、书评、批评、传记、学位论文 | 学派分类、主要批评点、与同行比较、被引用次数最高的作品 | 04-secondary.md |
| 5 论战 | 公开论战、立场转变、争议事件 | 论战对象与争议焦点、立场前后变化、面对批评的反应 | 05-debates.md |
| 6 谱系 | 生平传记、师承关系、学术影响地图 | 师承(受谁影响)、学派归属、对后人的影响、与同代人的关系 | 06-genealogy.md |
| 7 档案(新) | 多语言全著作清单(OpenAlex/Crossref/Semantic Scholar/PhilPapers/BnF/CNKI 等) | 完整著作元数据:标题、年份、语种、出版社、ISBN/DOI、引用数、OA 链接、获取路径 | 07-archive.md |
#### 7 号 Agent 的特别说明(学术档案采集)
调用 scripts/harvest_works.py(包装 Academix MCP)。Agent 7 的任务流:
07-archive.md 含完整书目 + 待采购清单(标注闭源版本的获取建议)scripts/download_open_access.sh 自动下载到 sources/works/scripts/annas_acquire.py(包装 annas-mcp),按"原版语言 > 英译 > 其他译本"优先级,确保至少一个语言版本被获取#### 每个 Agent 的硬性要求
references/research/0X-xxx.md#### 信息源优先级
| 来源类型 | 揭示什么 | 权重 |
|---|---|---|
| 用户提供的一手语料 | 完整原文,未经二手过滤 | 最高+ |
| 学者本人专著 | 系统性思考 | 最高 |
| 学者本人长访谈 | 即兴思维过程 | 最高 |
| 学者本人讲座 transcript | 教学场景的论证展开 | 高 |
| 同行评审论文 | 经过过滤的展演自我 | 高 |
| 实际学术决策(编辑作品/合作者选择) | 真实判断 vs 声称 | 高 |
| 二手学术研究 | 外部视角、定位、批评 | 中 |
| 传记 | 生平+人格,但有传记作者修辞 | 中-(需多源交叉) |
| 学生回忆 | 私下场景,但带回忆者偏见 | 中- |
| 维基百科 | 入门参考 | 低 |
#### 信息源黑名单(永远排除)
中文权威媒体可用:CNKI、万方、商务印书馆等学术出版社、《思想的境界》《一席》《文化纵横》《读书》《澎湃新闻·思想市场》、B 站原始讲座视频(非搬运号)、小宇宙学术播客。
触发条件:Workflow A 跑完 A.1+A.2 后。所有未能自动下载(Tier 3+4)的资料必须在此输出可读 manifest。
_acquisition_manifest.json 标准 schema(v0.4.2):
{
"scholar": "Bernard Stiegler",
"scholar_slug": "stiegler",
"generated_at": "2026-XX-XX",
"library_root": "/path/to/Library/_files",
"items": [
{
"id": "stiegler-1994-tt1-fr",
"title": "La technique et le temps, 1: La faute d'Épiméthée",
"year": 1994,
"language": "fr",
"type": "book",
"publisher": "Galilée",
"isbn": "...",
"doi": null,
"openalex_id": "W...",
"acquisition_tier": 4,
"priority": "P0",
"acquisition_status": "pending",
"acquisition_hints": [
"annas-archive.org(反爬严格,浏览器手动)",
"Galilée 出版社官方网站可购电子版",
"中国国家图书馆 / 大学图书馆机构外借"
],
"intended_filename": "Stiegler1994_T_et_T_1_fr.pdf",
"intake_completed_at": null
}
]
}字段含义:
acquisition_tier:1/2/3/4 按 4 层架构标注priority:P0(核心专著,必须有)/ P1(重要论文)/ P2(补充)acquisition_status:pending / intake_completed / acquired_via_browser / skippedacquisition_hints:人类可读的"获取建议"列表(多条)intended_filename:建议的扁平命名(用于 intake 自动重命名)输出:
_acquisition_manifest.json(机器可读)_acquisition_manifest.md(人类可读,按 priority 排序,每条带建议)用户决策点:用户阅读 manifest 后决定:
触发条件:用户已手动下载若干 PDF(从 annas / 出版社 / 机构图书馆)。
python3 scripts/intake_manual_pdf.py \
~/Downloads/Bifurquer-Stiegler.pdf \
--config examples/stiegler-perspective/references/research/_library_config.md \
--year 2020 \
--slug Bifurquer \
--lang fr \
[--manifest-id stiegler-2020-bifurquer-fr] # 可选:关联 manifest 条目自动行为:
{file_prefix}{year}_{slug}_{lang}.pdf{library_files_path} 目录extract_pdf_evidence.py(仅对该新 PDF)→ _pdf_evidence/{slug}.mdgenerate_library_cards.py(增量)→ Card_acquisition_manifest.json 中标记 acquisition_status: intake_completedPhase A.4 是可重复入口:用户可以每天补一两本,scholar-wendao 累积式增长 Library。
#### Step 1.5.0:主流程文件存在性兜底验证(v0.4 新增·P1 #3 修复)
所有 agent 返回后,主流程必须立刻执行:
for f in references/research/0{1..7}-*.md; do
if [ ! -s "$f" ]; then
echo "❌ 缺失或空文件: $f"
# 主流程兜底:根据 agent 返回消息中的内容自写该文件
# 如果消息中也无内容 → 标记为"信息不足维度"
else
echo "✓ $f ($(wc -l < "$f") 行)"
fi
done触发条件:v0.3 实战中至少 3 个 agent 出现"返回声明完成但文件不存在 / 写到错误路径"。Phase 1.5 第一步永远是 ls -la references/research/ 验证 + 缺失项兜底。
#### Step 1.5.1:调研质量摘要
所有 agent 完成 + 文件存在性验证通过后,暂停展示调研质量摘要:
┌──────────────────┬──────────┬──────────────────────────┐
│ Agent │ 来源数量 │ 关键发现 │
├──────────────────┼──────────┼──────────────────────────┤
│ 1 专著 │ 12 本 │ 核心概念: 第三持存、组织学..│
│ 2 访谈 │ 8 段 │ 立场转变: 2015 年后... │
│ 3 风格 │ 30K 字样本│ 高频术语: tertiary.. │
│ 4 二手 │ 25 篇 │ 主要批评: ... │
│ 5 论战 │ 4 起 │ 与 Latour 之争... │
│ 6 谱系 │ 完整 │ 师承: 德里达... │
│ 7 档案 │ 47 本+200篇│ OA 覆盖率: 60%, 闭源 X 本│
├──────────────────┼──────────┼──────────────────────────┤
│ Phase 1.0 PDF │ N 部 │ M 部可读 / K 部 OCR backlog│
├──────────────────┼──────────┼──────────────────────────┤
│ 矛盾点 │ 3 处 │ Agent1 vs Agent4 在 Y... │
│ 信息不足维度 │ 1 处 │ 私人通信很难采集到 │
└──────────────────┴──────────┴──────────────────────────┘用户确认调研质量 OK → Phase 2。 用户觉得某维度不够 → 补充调研后再继续。
7 个 agent 的素材汇总后,执行结构化提炼。先读取 references/extraction-framework.md 获取学者版三重验证方法论。
#### 2.1 概念地图提取(3-7 个核心概念)
学者的"心智模型" = 他的核心理论概念及其相互关系。不是普通用词,是被他系统化为分析工具的术语。
操作步骤:
01-monographs.md 到 05-debates.md 列出所有候选概念_pdf_evidence/_navigator.md 的「概念 × 书」矩阵读出 top-3 anchor 书_pdf_evidence/{book}.md,读完该概念在该书的所有 hitsp.{N})_pdf_evidence/{book}.md 出现及命中数v0.4 概念条目模板:
### 核心概念 N:{中文名} *{原语}* / {English}
**定义**({学者+年}+{源著}, p. {N}):…
**[v0.4 选填] 子分期 / 进化 / 内部分类**(来自 evidence 系统讲述,例如 Stiegler 的"四阶段第三持存"必须直接来自 _pdf_evidence/Stiegler2020_Nanjing_Lectures.md pp. 22-39):…
**反复出现的著作**:
- *Book A*(year)— evidence: `_pdf_evidence/{book_A}.md` (N hits)
- *Book B*(year)— evidence: `_pdf_evidence/{book_B}.md` (M hits)
**典型应用场景**:…
**与其他概念的关系**:…(每条尽量挂一个 page anchor)
**局限**:…
**关键引文**(必须可在 evidence 中定位):
> "..." —— *{Book}*, p. {N}
**证据来源**(v0.4):
- `_pdf_evidence/{book_A}.md` — N hits(主源)
- `_pdf_evidence/{book_B}.md` — M hits
- `_pdf_evidence/{book_C}.md` — K hits#### 2.2 方法论手稿(5-10 条分析进路)
学者面对一个新现象时,他的第一步问什么、用什么数据、怎么组织论证。可表述为"如果碰到 X 类材料/问题,则按 Y 路径展开分析"。
格式示例(Stiegler):
#### 2.3 学术坐标
| 维度 | 提取内容 |
|---|---|
| 学派归属 | 后结构主义?批判理论第二代?分析哲学?混合? |
| 主要立场 | 在该领域的核心分歧上他站哪边 |
| 自我定位 vs 他者定位 | 学者自称属于 X,但学术界普遍归他为 Y |
| 时代位置 | 在该领域思想史上的承前启后 |
#### 2.4 行文风格 + 概念语言
不是"语气"或"幽默感",而是学者在写作中如何使用概念、组织论证、回应反对:
| 维度 | 提取内容 |
|---|---|
| 概念引入方式 | 自创术语?借用并重定义?保持开放性的隐喻? |
| 定义习惯 | 总是先精确定义?还是边写边演化? |
| 论证节奏 | 演绎链条?归纳堆叠?多线索辩证? |
| 反对处理 | 直接驳斥?容纳吸收?战略性沉默? |
| 引用习惯 | 主要引同代人还是经典?引敌手吗?引谁的频率最高? |
| 自我修正 | 公开承认前期错误吗?默默改?还是从不承认? |
#### 2.5 智识谱系
[受谁影响] → 学者本人 → [影响了谁]
↕
[横向对话/争论] ← 同代人
明确标注:
- 师承(导师/直接受教)
- 远程谱系(精神导师)
- 重要对话者(同代)
- 批判对象
- 被批判的位置
- 后继者#### 2.6 论战与立场转变
学者最有信息量的不是稳定论点,而是改变立场的瞬间和论战中暴露的判断。
每条记录格式:
#### 2.7 人格与处世(独立章节)
学者的思想与生平经常深度耦合(Stiegler 的"技术外在化"理论与他狱中读哲学的经验)。但生平整合必须严格分级标注信息源:
[事件] · 时间 · 事件描述
├ 来源类型: [本人自述 / 他者描述 / 传记作者推断]
├ 多源交叉验证: [是 / 否 / 部分]
└ 与思想的关联: [本人明确说 / 他者推断 / 我们的判断]人格描写的来源分级(参见 references/biography-protocol.md):
| 来源 | 可信度 | 限制 |
|---|---|---|
| 学者本人在访谈中谈自己 | 中(自我呈现) | 公开自我可能有修饰 |
| 学者私人通信(已出版) | 高 | 但已被编辑选择过 |
| 终身合作者/亲属回忆 | 中-高 | 有情感倾向 |
| 学生回忆 | 中 | 师生关系不对等可能扭曲 |
| 学术对手回忆 | 中- | 可能贬损 |
| 传记作者描述 | 低-中 | 文学化处理严重 |
| 媒体二手报道 | 低 | 普遍失真 |
#### 2.8 诚实边界(最厚的章节)
参见 references/humble-epistemics.md,必须明确写出六大局限:
#### 2.9 / [Workflow A.5] Library Card 自动生成(v0.4.1 新增 · 学者问道核心差异化)
为什么这一步存在:scholar-wendao 的真正定位不是只产出 SKILL.md,而是 同时为用户的图书馆体系增建标准 Card——让蒸馏过程变成研究知识库的实际增长。每个进入 Library 的 PDF 都应当配套生成符合用户 Vault 命名约定的 markdown Card,这样研究者在写作时可直接 [[Cards/{ScholarSlug}{year}]] 引用。
触发条件:本地优先 / 纯本地模式(即 _pdf_evidence/ 已生成)。
操作步骤:
调用 scripts/generate_library_cards.py,对每部已抽取 evidence 的 PDF 执行:
_pdf_evidence/{book}.md(PDF 提取的页码上下文 + 概念命中)references/research/07-archive.json(OpenAlex 元数据:title / year / language / coauthors / DOI / publisher){vault_cards_path}/{ScholarSlug}{year}.md)—— 增量更新模式,保留用户手写的"文献笔记 wikilink""引用章节"等references/library-card-template.md):title / author / year / grade / has_pdf / status / tags / versions{vault_archive_path}/{vault_cards_path}/{ScholarSlug}{year}.mdv0.4.1 关键设计点:Library Cards 写到用户的 Vault,不写到项目仓库的 examples/{slug}-perspective/。项目仓库内的 examples/{slug}-perspective/ 仅保留:
SKILL.md(perspective skill 主产物)_vault_paths.md(指向 Vault 内真实素材路径的索引)这样的双源架构:用户 Vault 是单一真源 + 项目仓库是开源共享层。
Phase 2 完成后暂停展示提炼摘要:
提炼结果摘要:
- 核心概念:N 个(列出名称及原语)
- 方法论进路:N 条
- 学术坐标:[学派 / 立场 / 时代位置]
- 行文风格:[3 个关键特征]
- 智识谱系:[N 位上游 / N 位下游 / N 位横向对话者]
- 重大立场转变:N 处
- 内在张力:N 对
- 信息分级标注:一手 X% / 二手 Y% / 传记类 Z%用户确认 → Phase 3。 不满意 → 回到 Phase 2 调整。
将 Phase 2 提炼结果组装为可运行的 SKILL.md。
#### Step 1: 读取模板 读取 references/scholar-template.md 获取标准结构。
#### Step 2: 填充内容
| 模板 Section | 填充来源 |
|---|---|
| frontmatter description | 学者名 + 学派 + 触发词 + "默认第三人称分析镜片,对话模式 opt-in" |
| 激活默认模式(核心) | 第三人称分析("从 [学者] 的 [概念] 视角看...") |
| 可选对话模式(opt-in) | 用户主动说「切换到对话模式」「让我和 [学者] 直接对话」时启用,但全程保持元意识标注 |
| 学术身份卡 | 学派 + 学术坐标 + 一句话核心镜片 |
| 概念地图 | Phase 2.1 结果 |
| 方法论手稿 | Phase 2.2 结果 |
| 学术坐标 | Phase 2.3 结果 |
| 行文风格 + 概念语言 | Phase 2.4 结果 → 转为分析时如何使用术语的指引 |
| 智识谱系 | Phase 2.5 结果 |
| 重大论战与立场转变 | Phase 2.6 结果 |
| 人格与处世 | Phase 2.7 结果(独立章节,不塞进时间线) |
| 诚实边界 | Phase 2.8 结果(每条具体到操作层面) |
| 调研来源 | 7 个 agent 的引用汇总,分一手/二手/传记/访谈各自标注 |
| 创建者归属 | 固定内容:"本 skill 由 学者问道 生成 / 致敬 女娲.skill 的方法论启发" |
#### Step 3: 默认输出模式(关键差异化)
生成的 perspective skill 默认是分析镜片模式:
## 激活规则(默认:分析镜片模式)
**本 skill 激活后,以学术分析者身份,使用 [学者] 的概念地图和方法论进路分析用户提供的材料或问题。**
### 输出格式
- 第三人称引用学者:"从 [学者] 的 [概念 X] 视角看..."、"按照 [学者] 的方法论进路,分析这个材料应该先..."
- 显式标注使用了哪个概念:"此处运用 [概念 Y],因为..."
- 指出概念局限:"但 [学者] 这个镜片对此类材料有以下盲区..."
- 不假装自己是该学者
- 不模仿语气、不模仿口头禅
- 必要时承认"超出 [学者] 思考过的范围,这是我(分析者)基于其框架的推断"
### 学术合规
- 涉及具体引用时附上来源(书名+章节)
- 区分"[学者] 明确说过"和"基于 [学者] 框架推断"
- 遇到本镜片不擅长的问题,明确说"此问题超出 [学者] 框架的有效范围"
### 可选:切换到对话模式(opt-in)
当用户**明确**说「切换到对话模式」「让我直接和 [学者] 对话」「角色扮演 [学者]」时,可以进入对话模式。但:
- 必须在第一回合声明:"我以 [学者] 的视角与你对话,基于公开著作推断,**非本人观点**。任何此对话内容不可作为 [学者] 真实立场引用"
- 整个对话过程保持元意识:遇到无法基于 [学者] 著作推断的问题,明确退出角色说"超出范围"
- 用户说「退出」「切回分析模式」时立即恢复#### Step 4: 质量自检
读取 references/extraction-framework.md 末尾的质量自检清单,逐项检查。不通过的项标注,回到对应 Phase 修复。
#### Step 5: 输出
将完成的 SKILL.md 写入 ~/.claude/skills/[scholar]-perspective/SKILL.md,并在 ~/.agents/skills/ 创建软链接。
生成 skill 后,用子 agent 执行 4 项测试(独立 agent 避免自评偏差):
#### 4.1 已知测试(Sanity Check) 选 3 个该学者公开表态过的议题,spawn 子 agent 带新 skill 分析,对比实际立场。
#### 4.2 边缘测试(Edge Case) 选 1 个该学者没公开讨论过但相关的议题,用 skill 推断。
#### 4.3 漫画化检测(Caricature Test)⭐ 学者问道独有 用 skill 分析一段日常材料(如新闻报道、社交媒体帖子)。
#### 4.4 默会知识声明检查 检查 SKILL.md 是否明确包含:
humble-epistemics.md 第六项)#### 4.5 引文 page-anchor 强制核验(v0.4 新增·P0 #2 实施)
触发条件:本地优先 / 纯本地模式(即 _pdf_evidence/ 已生成的情况)。
检查规则:
# 概念地图中每条带页码的引文:
# 模式 "p. N" 或 "p.{N}" 或 "页 N"
for citation in extract_citations(skill_md):
book = citation.source_book
page = citation.page
quote = citation.quote_text
evidence_md = f"_pdf_evidence/{slug(book)}.md"
if not evidence_md_exists:
warn("引文 anchor 不可证(evidence 文件缺失)")
continue
# 读 evidence_md 中 p.{page} 段落,比对 quote 头 80 字符
if not quote_substring_in_evidence_page(quote, evidence_md, page):
FAIL(f"引文不可定位: '{quote[:60]}...' 标 {book} p.{page},"
f"但 evidence_md 该页无此文本")v0.3 实战教训:v0.3 SKILL.md 至少 2 条引文页码不可证(WMLWL 引文 p.19 不存在 / Pharmacology organology 定义实际在 p.43 而非 p.46)。这些引文都是凭 Obsidian Card 摘录或印象写出。v0.4 必须 fail-fast。
不通过处理:
#### 4.6 Narrative-Bracketing 自动检测(v0.4 新增·P1 #4)
触发条件:人格与处世章节(Phase 2.7 输出),尤其是含"形成性事件"段落。
v0.3 教训:Stiegler "1978 年武装抢劫服刑 5 年期间读哲学"段落,子 agent 的 prompt 强调了 narrative-bracketing(事实层 + 叙事层并标),但主 SKILL.md 输出无强制校验,结果可能出现"狱中读哲学"作为浪漫化叙事写入而无双层标注。
检查:
formative_events = extract_formative_events(skill_md) # heuristic:日期+事件+影响
for event in formative_events:
has_fact_layer = bool(re.search(r"事实层|fact-level|来源等级", event.text))
has_narrative_layer = bool(re.search(r"叙事层|narrative-level|学者自述|传记修辞", event.text))
if not (has_fact_layer and has_narrative_layer):
WARN(f"形成性事件 '{event.summary[:40]}' 缺 BRACKETING 双层标注")#### 4.7 通过标准
| 检查项 | 通过标准 | 不通过信号 |
|---|---|---|
| 概念地图数量 | 3-7 个,每个有 ≥2 来源 | <3 或 >10 |
| 每个概念的局限性 | 明确写出失效条件 | 只写优点 |
| 方法论进路具体性 | 可被新材料触发 | 只适用于原始案例 |
| 智识谱系完整性 | 上游+横向+下游都有 | 单线孤立 |
| 信息源分级 | 每条调研有等级标注 | 无标注/混淆 |
| 一手来源占比 | >50% | 主要靠二手转述 |
| 漫画化检测 | PASS | FAIL |
| 诚实边界(六项) | 全部声明(含自杀-尊重边界) | 缺任意一条 |
| 引文 page-anchor 核验 | 100% 引文可在 evidence 定位 | 任何一条不可证 |
| Narrative-Bracketing | 形成性事件双层标注 | 缺事实/叙事层 |
| PDF Evidence 覆盖 | 每核心概念 ≥1 个证据来源 | 0 evidence 来源 |
验证通过 → 交付。不通过 → 标注薄弱环节,回到对应 Phase。 迭代上限:Phase 2→4 最多循环 2 次。2 轮后仍不达标 → 在诚实边界中标注薄弱维度,交付当前最优版本。
参考 女娲.skill 的 Phase 5,但增加学术合规检查维度。
并行启动:
Agent A(结构评估):
Agent B(学术合规审):
biography-protocol.md 的分级标准主 agent 综合两份报告 → 应用不冲突的改进 → 展示变更摘要请用户确认。
为什么这一步存在:scholar-wendao 是为 agent 准备的 学术研究全栈工作流系统——它的输出不只是给 GitHub 看的 demo,而是要 进入用户的真实研究知识库。前面所有 Phase 产出的素材如果只留在项目仓库的 examples/{slug}-perspective/,就只是 demo。Phase 5.5 的工作是把它们落到用户 Vault 的对应位置,让蒸馏过程同时增长用户的图书馆 + 概念笔记 + 谱系网络。
触发条件:用户在 _library_config.md 中配置了 vault_archive_path 字段。
配置项(_library_config.md):
vault_archive_path: "$HOME/Documents/Obsidian/MyVault/02 · Knowledge"
library_files_path: "Library/_files" # PDF 落点(已有路径)
library_cards_path: "Library/Cards" # Card 落点
concepts_path: "Concepts" # 概念笔记落点
permanent_notes_path: "Permanent Notes" # 谱系永久笔记落点
moc_path: "MOC Maps" # 主题地图落点
people_path: "People" # 人物志落点
project_workspace_path: "Projects/scholar-wendao/{slug}" # research/biography 落点操作步骤:调用 scripts/sync_to_vault.py 执行:
_files/{ScholarSlug}{year}.pdf 已经在用户 Vault 里(download_open_access.sh 直接下到那里)—— 不需移动flat archive_layout)_pdf_evidence/ + 07-archive.json 生成 → 写到 {vault}/{library_cards_path}/{ScholarSlug}{year}.md第三持存.md){vault}/{moc_path}/{学者中文名}研究 MOC.md 是否存在{ScholarName}.md 末尾追加 v{X} 蒸馏 biography 的精华摘录 + 完整文档 wikilinkreferences/research/ + references/biography/ 到 {vault}/{project_workspace_path}/examples/{slug}-perspective/ 生成 _vault_paths.md(索引,内容是 Vault 路径列表)references/ 和 _pdf_evidence/(仅保留 SKILL.md + _vault_paths.md)references/research/ 7 篇 + _pdf_evidence/_navigator.md,作为开源访客可见的"产出形态"参考Phase 5.5 退出条件:
examples/{slug}-perspective/ 已按选项 a/b/c 处理_vault_paths.md 写入完整路径索引为什么这一步存在:scholar-wendao 的开源价值在于 整套工作流可被其他研究者复用。Phase 6 把项目仓库的更新提交并推送,让蒸馏成果可被开源社区追溯。
触发条件:在 Phase 5.5 完成后,且项目仓库有 staged 改动。
操作步骤:
v{X}: {ScholarName} perspective skill — distilled from {N} PDFs + {M} non-book sourcesCreated by https://github.com/tizzy916/scholar-wendao-skill git add SKILL.md scripts/ references/ examples/{slug}-perspective/ README.md
git commit -F <(echo "$COMMIT_MSG")origin/maindev_branch,推送到 dev 分支让用户 review 后 mergePhase 6 不应该:
git push --force 或修改历史v0.4.2 区分三种"再次跑"的语义。agent 必须根据用户表达准确路由:
触发:用户已有 X 的 skill + Library,想新加几本书 / 几个讲座链接到库里。
行为:仅跑 Workflow A(A.0/A.1/A.2/A.3/A.4/A.5),不动 SKILL.md。
触发:用户已有 X 的 skill,最近有新文献 / 新讲座,想增量补充而非重做。
行为:v0.4.1 既有逻辑:
触发:Library 经过多轮 A.4 大幅扩充(如新加了 10+ 部关键专著),现有 SKILL.md 基于的 evidence 已不充分,需要整体重做。
行为:
examples/{slug}-perspective/SKILL.md 移到 examples/{slug}-perspective/_archive/SKILL_v{X}_{date}.md模式 C 与模式 B 的区别:B 是"加几条",C 是"基于扩充后 evidence 重新组织所有概念定义、引文、谱系"。
| 原则 | 一句话 |
|---|---|
| 概念体系化 > 金句 | 一个反复使用的术语网络比 50 句精彩论断更揭示思维 |
| 论战 > 一致 | 改变立场和被批评的瞬间最有信息量 |
| 一手 > 二手 | 直接读学者本人,比读"X 学者研究"更接近真相 |
| 局限 > 包装 | 把局限明确说出来,比把局限藏起来更可信 |
| 镜片 > 替身 | 我们要的是分析工具,不是代言人 |
输入不是单个学者而是方法论传统时:
| Phase | 人物 skill | 主题 skill 变体 |
|---|
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.