Opinion extraction engine. Finds contradictions in raw fragments (tweets, notes, drafts, tech notes), drills user with targeted questions, scores answers in real-time, and produces publishable drafts. Supports tech retrospective mode for architecture decisions, migration stories, and production incident reviews. Use when user says "逼稿", "凿", "unearth", "帮我整理观点", "我有一堆素材", "帮我理清思路", "技术复盘", or pastes raw material fragments.
Process: $ARGUMENTS
config.yaml. Fallback: ./unearth/topic_bank/30-创作/选题库/./unearth/style_fingerprint.yaml./unearth/qa_history/Override:
/unearth "素材" — vault: D:/MyVault, max rounds: 6
If ./unearth/config.yaml missing → ask Obsidian vault path (optional) → generate from templates/config.yaml → create qa_history/ dir.
Copy and track progress:
Unearth progress:
- [ ] Part 1: Digest material → material map + type classification
- [ ] Part 2: Drill (6-10 rounds, score each answer)
- [ ] Draft outline (🟢🟡🔴 triage)
- [ ] Part 3: Write (long / short / one-liner)
- [ ] Part 4: Topic bank + QA archive
Full rules:
skills/part1-digest.md
Read all fragments → number them (#1, #2...) → extract 3-5 viewpoints → mark contradictions → classify:
| Map type | Condition | Drill strategy |
|---|---|---|
| conflict | contradictions ≥ 1 | probe contradictions, force stance |
| deep-dig | contradictions = 0, viewpoints ≤ 2 | probe origins, boundaries, counter-arguments |
| divergent | contradictions = 0, viewpoints ≥ 3 unrelated | user picks direction first, then reclassify |
| tech-retro | fragments mention specific tech decisions, tools, migrations, production incidents | probe pitfalls, decision context, trade-offs, what you'd do differently |
Output material map. Never synthesize conclusions — map only.
Full rules:
skills/part2-drill.md
Core constraint: only use words the user has already said. No new vocabulary.
Questions grow from the material map, not generic templates. Follow map-type strategy.
Exit when any: all contradictions covered with clear stances / 2 consecutive specificity=3 / MAX_ROUNDS / user says stop.
QA history: if qa_history/ has data, read last 3 sessions. Prefer high-scoring question patterns, avoid failed ones.
Signal handling: density drop or defensive moves → back off, find new angle. Never say "be more specific."
Full rules:
skills/part25-score.md
Scores visible to user. Pressure is by design.
| Dim | Max | 0 | max score |
|---|---|---|---|
| Specificity | 3 | pure abstract | only-you detail |
| Progression | 2 | just answered | pushed new contradiction |
| Stance | 2 | both-sides | committed position |
| Publishability | 3 | unusable | copy-paste ready |
Per-round output format:
[Score] Specificity X/3 | Progression X/2 | Stance X/2 | Publishability X/3 → X/10
[Feedback] (coach-style: what's good, what's missing, what next question targets)
[Material] 🟢 usable / 🟡 needs work / 🔴 not concrete enough yet
[Topic?] yes — reason / no
Example — high score:
[Score] 3/3 | 2/2 | 2/2 | 2/3 → 9/10
[Feedback] 答辩被导师问住那个瞬间可以做开头钩子。"准备充分反而更脆弱"是新判断,有展开空间。
[Material] 🟢
[Topic?] yes — "准备充分反而更脆弱"可独立成篇
Example — low score:
[Score] 1/3 | 0/2 | 1/2 | 1/3 → 3/10
[Feedback] 方向有意思但还没落地——"风格和审美"具体指什么?下一问帮你找到那个具体的瞬间。
[Material] 🔴
[Topic?] no
Triage: 🟢🟡 → article. 🔴 → topic bank if direction valuable.
Topic triggers: progression=2 / new concrete direction / user self-nominates.
Style fingerprint: cumulative merge after session. ≥3 occurrences = stable. Contradictions coexist. See skills/part25-score.md.
Auto-generate after drill:
Full rules:
skills/part3-write.md
Hard rules:
Versions:
Full rules:
skills/part4-topics.md
Sources: unexpanded angles / 🔴 with valuable direction / high-score highlights (progression=2, new direction, user self-nom).
Obsidian: one md per topic → {vault}/{TOPIC_DIR}/. Fallback: ./unearth/topic_bank/.
Lifecycle: seed → growing (heat≥3) → ready → used → archived (60d untouched)
QA archive: full session → qa_history/qa_YYYY-MM-DD_topic.yaml
Dashboard: show stats at session end.