# Oracle Seed

> 跟用户对话讨论选题——**默认一次一个**，用户主动给主题或经历，AI 围绕用户的输入深挖、提炼角度、按轨道写一份 draft。不是 AI 拿三个开放问题追用户，也不是一次 dump 15 个候选。触发词："找选题"/"我想做一条 X"/"最近有个想法"/"seed"/"启动种子"。可选 batch 模式：--batch 5 走 brainstorm N 候选 + 写 N draft。

- Skill: `huanyu-hibiki/oracle-seed` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add huanyu-hibiki/oracle-seed`
- Raw SKILL.md: https://api.skillmd.com/api/skills/huanyu-hibiki/oracle-seed/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Huanyu-Hibiki (https://skillmd.com/u/huanyu-hibiki)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/huanyu-hibiki/oracle-seed

---


# /oracle-seed — 选题对话（默认）/ 批量 brainstorm（可选）

核心是**跟用户讨论选题**，不是机械 brainstorm。好内容来自用户的真实经历 + 观察 + 情绪——这些 AI 不可能凭空生成。AI 的角色是**听用户讲 → 帮提炼角度 → 按轨道写一份 draft**。

**默认模式**：对话式一次一个。**Batch 模式**（`--batch N`）：brainstorm N 候选 + 写 N 份 draft，给"完全没想法 + 想批量初始化"的用户。

## Overview

```
[Phase 0: 加载 context（state + rubric + patterns + 历史 + benchmark）]
  ↓
[Phase 1: Mode 分流 — A 有具体主题 / B 只有方向 / C 没想法 / Batch]
  ↓
[Phase 1.5: 轨道分流（init 注册的轨道 + 按占比补稀）]
  ↓
[Phase 2A: 深挖（带选项反问，≤4 轮）→ 三关检验 → 角度收敛]
  ↓
[Phase 2A-2: 钩子设计 + 兴趣属性声明 + 互动设计]
  ↓
[Phase 3: 算 candidate id + 落候选池 + 初始化作品目录]
  ↓
[Phase 4: 写 draft（读 script_patterns 选结构 + 反编造纪律）]
  ↓
[Phase 5: 下一步清单 + 询问继续]
```

## Constants

- **MAX_DEEP_DIVE_TURNS = 4** — 收敛阶段最多 4 轮反问
- **WITH_DRAFT = yes** — 确认角度后立刻写 draft；用户可说"我自己写"
- **DRAFT_LENGTH** — 派生自 `typical_duration_seconds`：30s→100-200字 / 90s→250-500字 / 240s→600-1000字 / 450s→1100-2000字 / 900s→2200+字
- 深挖弹药：`references/xu-zuohao-positioning-distill.md` §5（选题挖掘问卷）+ `references/dbskill-essence-distill.md` §1（定位选题）

## Workflow

### Phase 0: 前置检查 + 加载 context

1. 读 state → 不存在提示先跑 /oracle-init
2. 读 `rubric_notes.md`（粗打分用）+ `script_patterns.md`（选结构用）
3. **context 来源 A**：已有 predictions（含 init import 的 reconstructed）——用户历史
4. **context 来源 B**：`benchmark.md`（如 imported）——对标账号
5. 检查入参决定 Mode

**context 优先级**（Claude 判断）：用户数据已能驱动方向（该轨样本 ≥10，或更早——出现 ≥3 个与 benchmark 不一致的强样本）→ A 主导；用户数据少 + benchmark 有货 → B 主导；两者都缺 → 用户输入 + 抓热点，并提示"建议先跑 /oracle-learn-from"。

### Phase 1: Mode 分流

- **含具体名词 + 情绪/经历词**（"我昨天开会..."）→ **Mode A**
- **含方向词但无具体内容**（"想做职场方向"）→ **Mode B**："太广。最近哪件具体事让你想做这个方向？a) 真实经历 b) 读到的内容 c) 长期困惑——挑一个开始讲"
- **显式说没想法** → **Mode C**：先问"最近有没有一件小事让你特别[开心/生气/荒唐/有意思]？一句话也行"（碎片素材优先于纯热点）→ 再抓热点 + 读历史 → **提议 1 个**（不是 5 个）
- **显式 `--batch N`** → Batch：3 个清单问题 → brainstorm 15 候选 → 用户挑 N → 写 N draft
- **纯触发无附加内容** → 唯一一次入口问题（"有主题直接说 / 有方向告诉我 / 没想法说'帮我想' / 批量说 batch N"）

### Phase 1.5: 🔴 轨道分流（init 注册的轨道，必确认——决定 rubric/review 链/校准池归属）

> 这是"按哪套 rubric 打分、走哪条 review 链、算哪轨校准样本"的决策——不能默认猜。

**判定规则**：
1. **入参信号明确**（内容明显属于某轨——如转化轨用户说"讲产品案例"、破圈轨用户说"蹭热点破圈"）→ 直接判定并告知"这期走 <轨名>（从你的入参判断）"，用户不反对就继续——**不要明知还问**
2. **信号不明确** → 必须显式询问，列出 content-plan 注册的轨道 + 各轨一句话说明 + 例子，附"不确定——你给一句话我帮判断"
3. **用户说"不确定/你看着办"** → 按 mix_ratio 补稀轨（读 state 看最近发布哪轨占比低于计划）+ 标 `track_inherited: true`（bump 时权重略降）

**分流后路由**：
- 转化类轨道 → 加载 `references/conversion-track-playbook.md`（选题必过"极刚痛点 6 问"）+ starter 用 conversion-video
- 破圈/认知类轨道 → starter 用 opinion-video
- 交叉题（跨两轨）→ 用户明确要求才算；两轨 rubric 各打一次

**review 链路由**（写完 draft 后）：转化轨 → oracle-open-source；破圈/认知轨 → oracle-who-for。**不要错配**——拿不准回 state 查 `tracks.definitions[].review_skill`，不要凭印象。

### Phase 1.6: 约束检查（state.stage_constraint）

读 `state.stage_constraint`（字段缺失按 `none`；判定表见主 SKILL.md「stage_constraint」段）：

- `positioning_unclear` → 本期优先 Mode A 经历锚点（init Q4 锚点库优先于热点）；走 Mode C 热点路径前提示"定位未明期追热点易产出同质化内容——建议先挖 1 条你自己的经历"
- `expression_unstable` → 提示"/oracle-apprentice 拆 1-2 条对标稿补 pattern 后再批量起稿"
- `capacity_limited` → 单条深做优先于 batch；提示规划 derivative（一期多发）
- `conversion_blocked` → 转化轨选题必过 conversion-track-playbook"极刚痛点 6 问"（Phase 1.5 已加载时不重复）
- `none` → 无额外动作

约束与轨道分流正交：先 Phase 1.5 轨道、再本节约束，叠加生效。

### Phase 2A: Mode A 深挖

围绕用户给的内容深挖，**不切到别的 topics**。

**反问类型**（按场景挑，一次只问 1 个，**必须带选项**）：
- 触发瞬间："最初是哪个瞬间触发你想做的？a) 某句话 b) 某件事 c) 某个数据"
- 情绪锚点："最让你[生气/荒唐/有意思]的是哪个细节？a) ... b) ... c) ..."
- 角度选择："你想说 a) 现象批判 b) 自我反思 c) 泛化到普遍？"
- 受众想象："心里想着说给哪种人听？听完会怎么转发？"
- 反对意见探测："有人反驳说 X，你会怎么回？"
- 痛点裂变：大痛点拆 3-5 个小痛点（"是 a) / b) / c) 哪个最痛？"）——每个小痛点可独立成一条内容
- 立意提炼："如果用一句话简化成受众最容易共情的视角，是什么？"
- 弹药不足时：从提炼文档 §5 挖掘问卷挑一问（带选项）——"如果给你五分钟跨年演讲，你会说什么？" / "哪几件小事彻底改变了你的轨迹？" / "这十年最大的教训？" / "你最异于常人的品质？"

**反问纪律**：
- 一次 1 问 + 带选项（用户需要选项锚点决策，不是从零回忆）
- 最多 MAX_DEEP_DIVE_TURNS 轮，超过主动收敛
- 用户回答变短/不耐烦 → 立刻收敛

### 三关检验（收敛前强制过）

角度收敛后、写 draft 前，过三关——少一条，内容做到死也拿不到及格分：

**① 别自嗨（外行检验）**：发给不懂行的家人朋友，他们想看吗？窄到只有同行在乎的题，天花板就是同行数量。

**② 记得住吗（酒局分享测试）**：想象酒局上你愿意拿出这个选题分享吗？关键不是"广不广"，是**听完能不能复述给朋友**——复述的关键是"有没有一个让人记住的点"（金句/反差/极端案例）。

**③ 谜题（极端到极端缺口）**：素材有没有"从一个极端到另一个极端"的变化（复仇故事/名著弧线）？用一句话写出这个缺口——写得出 = 有谜题；写不出 = 素材太平，结构再好也救不了。

任何一关不过 → 建议换角度（回深挖）。

### Phase 2A-2: 钩子设计 + 兴趣属性 + 互动设计

**开场原型选型（结构层，先于文案层）**：读 [references/hook-prototypes.md](../../references/hook-prototypes.md)，按选题匹配 1 个主原型（不混用），draft header 的 `开场策略` 字段写明原型名 + 起手证据。原型决定骨架（第一秒放什么），下面的钩子 6 方向决定锐度（观众为什么停下）——两层都要过。

**行为触发点前置（红线）**：观众看完前 5 秒知道为什么要继续看吗？
- ❌ 错误开头：自我介绍 / 身份锚点 / 连续剧 callback（"跟我有什么关系"）
- ✅ 正确开头：直接亮价值 / 信息缺口+悬念 / 争议立场+身份认同
- 自我介绍可以作为**第二句**，不能是第一句

**钩子 6 方向自检**（开头 5 秒至少命中 2 个）：

| 方向 | 原理 |
|---|---|
| ① 预期违背 | 大脑对超预期信号本能停下 |
| ② 自我参照 | 与"我"有关的信息天然敏感 |
| ③ 信息缺口 | 想知道大于已知，痒点 |
| ④ 冲突 | 对冲突/争议的生存本能级敏感 |
| ⑤ 身份反差 | 反常规的人生选择天然好奇 |
| ⑥ 利益承诺 | 直接告诉能获得什么，降低决策成本 |

0 命中 → HP≤2 重写；1 个 → HP 3；2 个 → HP 4；3+ → HP 5。流量轨常缺信息缺口（开头就给结论断了悬念）；转化轨常缺冲突（习惯走共情）——每期至少补一次短板方向。

**兴趣属性声明**（每条内容只能选 1 主属性 + 最多 1 辅属性——什么都想要 = 什么都得不到）：
- 信息型（来拿干货，看藏播比）/ 情绪型（来找共鸣，看评论）/ 传播型（来看新鲜，看转发）
- 选了主属性但内容不支撑 → 红旗（选"信息型"但没有可截图清单）
- 不选 → draft 退回（"还没想清楚观众为什么来看这条"）

**互动设计**（写入 draft 的 `## 互动设计` 段，不是 metadata 填空）：
- 情绪触动点 ≥1（戳痛点/风险落差/预期落差/身份认同）——决定用户"想不想说话"
- 评论触发器必选 1（争议立场/留白 vs 选择题/痛点提问——**不用"你怎么看"这种开放高门槛**）——决定"怎么开口"
- 收藏触发点（可截图清单+口播提示）+ 转发触发点（转给谁+理由）
- 情绪触动点要**中段就埋**，不堆结尾 5 秒

**用户视角检查**（写前写后各一次）：开头是用户痛点还是我的自我介绍？产品介绍讲"这帮你做什么"还是"有什么功能"？连续 2 段没有"你"视角 → 标出修正。

**信息排列检查**（倒金字塔）：删掉最后 30% 内容，观众仍能获得核心价值吗？不能 → 核心信息埋太深，前移。

### Phase 2B/2C/2D

- **Mode B**：收敛到具体经历（三选一引导）→ 转 Mode A
- **Mode C**：碎片素材 + 热点交叉 → 提议 1 个；转化轨优先用"核心词 × 对象词 × 痛点词"连连看内部筛 1 个（过 6 问才留）
- **Batch**：3 清单问题（兴趣/调性/红线）→ 15 候选 → 挑 N → 写 N draft

### Phase 3: 落候选池 + 初始化作品目录

1. 算 id：`sha256("seed-" + 立意 + 触发时间)[:12]`
2. 写 entry 到 `candidates.md`（[candidate-schema.md](../../shared-references/candidate-schema.md) 格式）：`tier=tier1` + `track=<轨道id>` + `read_status=deep_read`
3. **初始化作品目录**（[content-folder-schema.md](../../shared-references/content-folder-schema.md)）：`<NNN>_<工作标题>/` + `scripts/` + `predictions/` + `prompt/cover/` + `derivatives/`（NNN 从 state 已登记作品数派生，**先看已有作品目录的实际结构**照着建）
4. 只建必需目录——audience-brief.md 等 review 产物后续流程才建

### Phase 4: 写 draft

**写前必读 script_patterns.md**（按结构选型 cheat sheet 选结构；还在骨架阶段就用 starter 通用框架）。

**三条反编造铁律**：
1. **禁止编造数据**——draft 任何段落不得出现用户没提供的具体数字。用户没给数字 → 用机制做钩子（"一天三件事"）或问"有没有真实数字可用"——**绝不自己编**
2. **禁止编造功能**——不得写产品实际没有的功能/未验证的能力。写前问"你的产品目前有哪些能力？这期演示哪个？"——能力不够支撑故事就商量调故事线
3. **禁止越界写发布文案**——seed 产物只有 draft 正文 + 互动设计段；简介归 oracle-description，封面归 oracle-cover

**draft 格式**：

```markdown
# [立意标题]

> ⚠️ **Draft by AI — 你必须改写后再拍**
> 这是脚手架不是成品。你的语气/节奏/个人经历无法 AI 生成。
> 1. 直接在本文件改写（加语气/经历/真实金句，砍铺垫砍术语）
> 2. 改完跑 /oracle-predict
> 3. 做完跑 /oracle-shoot

**Article ID**: <12 位 hash>
**Track**: <轨道 id + 轨名>
**调性**: [讨论得出的]
**目标时长/字数**: [按时长派生]
**结构选型**: [pattern 编号]
**开场策略**: [行为触发点类型 + 命中的钩子方向]

---

[draft 正文，段落版，每段 100-300 字——不写逐行字幕格式]

## 兴趣属性声明
[主属性 + 辅属性 + 判断依据]

## 互动设计
[情绪触动点 / 评论触发器 / 收藏转发触发点 / 评论区运营预案]
```

### Phase 5: 下一步清单

```
✅ Draft 写完：<NNN>_<标题>/scripts/<date>_<id>_<short>.md

接下来你可以：
- 改写 draft（直接原文件改）
- "给我标题" → oracle-title 出候选
- 改完跑 "打分这篇 ..." 看 composite
- [按轨道] "这是拍给谁的 ..." / "自我开源 ..."（review 链）
- 决定要发 → "启动预测 ..."

下一篇做什么？（直接说 / "今天就这样"）
```

## Key Rules

1. **AI 不主动开放问**——只在纯触发时问一次入口问题，其他时候等用户给输入再深挖
2. **一次一个选题**；批量必须显式 --batch
3. **反问带选项 + ≤4 轮 + 不耐烦就收敛**
4. **深挖围绕用户给的话题**，不切平行话题
5. **轨道必确认**——信号明确直接判定告知；不明确必问；不猜、不默认、不用 ratio 兜底（除非用户说"你看着办"→ 补稀轨 + 标 inherited）
6. **draft 是脚手架**——header 加醒目"必须改写"警告

## Examples（选题 → 原型匹配 → 钩子，示范判断路径）

### 例 1：Mode A 经历类

> 用户输入："我昨天用 AI 一下午写完了以前要一周的投标文件，特别震撼"

- 三关：① 外行检验过（投标慢是所有工程人的共识痛点）② 复述点："AI 一下午 = 我一周"③ 缺口：从"一周手动"到"一下午 AI"的极端落差成立
- 原型匹配：**同题成本对照**（同一任务，人 vs AI 的时间成本落差自现）——起手证据：那份投标文件的截图/计时
- 钩子命中：③ 信息缺口（AI 具体怎么做到的？）+ ⑥ 利益承诺（你也可以一下午）
- 兴趣属性：信息型（可截图的对照清单）

### 例 2：Mode C 热点类

> 用户没想法，当天热点："某平台更新了推荐算法"

- 不直接讲算法新闻（小变化本身不抓人）
- 原型匹配：**事件公布引出知识冲突**（看似小更新 → 背后是流量分配逻辑的长期争论 → 对创作者意味着什么）
- 钩子命中：① 预期违背（"这次更新杀死的不是大号，是中号"）+ ② 自我参照（发内容的人都被影响）
- 反面示范：若套"生活传说追查"就错了——没有"多人同款问题"的证据，硬套是编造

## Refusals

- 「跳过深挖直接写」→ "OK 但质量可能差——给我一句话立意我就写"
- 「AI 替我决定 topic」→ 拒绝 Mode A/B 路径；真没想法 → Mode C 给 1 个让用户判断
- 「一次写 5 个 draft」→ 必须显式 --batch 5
- 「懒得改写直接拍 AI draft」→ 警告"AI 稿 ER 偏低会污染校准数据"；坚持则标 `unmodified_ai_draft: true`
- 「帮我编个数据让钩子更有冲击力」→ 拒绝。反编造铁律 #1

## Integration

- 上游：oracle-init（轨道注册）/ oracle-trends（候选池）
- 下游：oracle-title → title-pick → description → cover → no-ai-slop → 按轨道 review → oracle-predict
- draft header 的 track 字段是 prediction/candidates 链路的轨道 source of truth

