--- name: cheat-seed description: 跟用户对话讨论选题——**默认一次一个**,用户主动给主题或经历,AI 围绕用户的输入深挖、提炼角度、写一份 draft。不是 AI 拿三个开放问题追用户,也不是一次给 5 个候选。触发词:"找选题"/"我想做一条 X"/"最近有个想法"/"seed"/"启动种子"。可选 batch 模式:`/cheat-seed --batch 5` 走旧的 brainstorm 5 候选 + 写 5 draft 流程。 argument-hint: "[— batch: N] [— sources: ]" allowed-tools: Bash(*), Read, Write, Edit, Glob, WebFetch, Skill --- # /cheat-seed — 选题对话(默认)/ 批量 brainstorm(可选) cheat-seed 的核心是**跟用户讨论选题**,不是机械地 brainstorm。好内容来自用户的真实经历 + 观察 + 情绪——这些是 AI 不可能凭空 brainstorm 出来的。AI 的角色是**听用户讲 → 帮提炼角度 → 写一份 draft**,不是 dump 15 候选让用户挑。 **默认模式**:对话式一次一个。 **Batch 模式**(`--batch N`):保留旧的 brainstorm N 候选 + 写 N 份 draft 流程,给"完全没想法 + 想批量初始化"的用户。 ## 三种 Mode(自动识别) ``` Mode A — 用户主动给主题(**最常见**): 用户:"/cheat-seed" + 直接说"我想做一条关于 X 的" 或:"/cheat-seed 我最近开会被领导..." ↓ AI 围绕 X / 这件事**深挖**——什么瞬间触发?最让你 [情绪 / 不爽 / 觉得有意思] 的是哪点? ↓ 收敛到一个具体角度 → 提议 → 用户认可 → 写 1 份 draft → 完成 ↓ 问"下一篇?" 或用户说"今天就这样" Mode B — 用户给方向但不具体: 用户:"最近想做点关于 [职场 / 婚恋 / AI / ...] 的" ↓ AI:"[范围] 太广。最近你接触到的具体哪件事让你想做这个方向?" ↓ 收敛到 Mode A 的具体经历 Mode C — 用户完全没想法(少见): 用户:"我不知道做什么" / "帮我想个题" ↓ AI:"好,进 brainstorm 模式——先抓热点 + 你之前的兴趣方向,给你 1 个建议" ↓ 跑 trend-sources 抓热点 + 读 candidates.md / predictions/ 看用户历史 ↓ 提议 1 个角度(不是 5 个) → 用户认可 → 写 draft Batch Mode — 用户显式要批量(`/cheat-seed --batch 5`): 按旧版 brainstorm 流程:3 问题 → 15 候选 → 用户挑 → 写 5 draft。 给"今天想一次性把未来 2 周的选题搞定"的用户。 ``` **关键纠正**(与旧版的区别): - AI **不主动开放问**——等用户给输入再深挖 - 一次一个选题,不是 5 个 - 默认对话式 + 一次一个,batch 是 escape hatch ## Constants - **DEFAULT_TREND_SOURCES = ["manual-paste"]** — 仅 Mode C / Mode A 灰色场景 / Batch 用到。用户可在 state 里加 aihot / trendradar-mcp - **TREND_TOOL_ROUTING** — 按 `content_form` 路由数据源,详见 [shared-references/data-source-routing.md](../../shared-references/data-source-routing.md) - **MODE_B_MAX_REPROBE_TURNS = 2** — Mode B "为什么" 反问最多 2 轮;超过则转 Mode C - **MAX_DEEP_DIVE_TURNS = 4** — Mode A 收敛阶段最多 4 轮反问,避免 AI 过度盘问 - **WITH_DRAFT = yes** — 默认确认角度后立刻写 draft;用户可说 "等下,我自己写" 跳过 - **DRAFT_LENGTH** — 派生自 `state.typical_duration_seconds`:30s→100-200字 / 90s→250-500字 / 240s→600-1000字 / 450s→1100-2000字 / 900s→2200+字 - **HUMANIZE_DRAFT = on**(默认)/ off —— 写完 draft 后用 `humanizer` skill 过一遍,去掉 AI 写作 tells(em-dash 滥用 / rule of three / inflated 词汇 / 空泛归因等)。off 时直接出原始 AI draft。**只 humanize 正文,不动 header 的"必须改写"警告** ## Inputs | 必填 | 来源 | |---|---| | `.cheat-state.json` | 读 calibration_samples / typical_duration / cadence | | `rubric_notes.md` | 读当前 rubric(粗打分用) | | `script_patterns.md` | 读已有 pattern(写 draft 时按 cheat sheet 选结构) | | `predictions/*.md`(如有) | 已发历史,brainstorm 时作为 context | | `audience.md`(如有) | 受众画像——选题 / 写稿时的"谁在看"镜子(由 `/cheat-persona` 派生) | ## Workflow ### Phase 0: 前置检查 + 加载所有 context(**核心:3 个 context 来源**) 1. 读 `.cheat-state.json` → 不存在则提示先跑 `/cheat-init` 2. 读 `rubric_notes.md` 拿当前公式(粗打分用) 3. 读 `script_patterns.md`——写 draft 时按 cheat sheet 选结构 4. **读已有 prediction 文件**(含 init 时 import 的 reconstructed)作为 **context 来源 A**(用户自己历史): - 0 个 → A 为空 - ≥1 个 → A 有内容,提取 (title / 7 维 / 实绩) 5. **读 `benchmark.md`**(如存在)作为 **context 来源 B**(对标账号): - `state.benchmark_status = imported` → B 有内容,提取对标账号的样本主题分布、调性、Pattern - `state.benchmark_status = none / pending` → B 为空 6. **读 `audience.md`**(如存在且非空骨架)作为 **受众镜子**: - Confidence 🟡 以上(有真实复盘数据派生)→ 选题 / 写 draft 时作为"这个 persona 会在乎吗"的检验视角 - Confidence 🔴/🟠(空 / 仅 benchmark seed)→ 当弱参考,不当硬约束 - **不进粗打分**——audience.md 是 creative lens,粗打分仍只用 rubric。persona 影响"写什么 / 哪个角度",不影响分数 7. 检查用户的入参——是否含具体 topic / 经历,决定走 Mode A/B/C/Batch **brainstorm 时的 context 优先级**(**Claude 判断**——下面是参考默认): - **A 主导**(用户自己数据):当 Claude 判断用户数据已能驱动方向时(参考默认:`calibration_samples ≥ 10`,但 Claude 可以更早——如 N=5 但出现 ≥3 个与 benchmark 明显不一致的强样本) - **B 主导**(benchmark):用户数据少 + benchmark 有内容时 - **B 缺席**(benchmark 为空)+ 用户数据少:纯靠用户 input + 抓热点;明确告诉用户"没 benchmark 也没足够自己数据,建议跑 /cheat-learn-from 后再回来 brainstorm" 判断依据**不是死磕样本数**,而是看: - 用户最近 N 个样本的实绩**是否与 benchmark 的高表现样本类型一致**——一致说明 benchmark 仍有借鉴价值;不一致说明用户已经走自己的路 - 用户的样本**多样性**——3 篇都是同类内容不算成熟;3 篇覆盖不同类目反而比 10 篇同类更可信 ### Phase 1: Mode 分流 读用户输入,识别: **含具体名词 + 情绪 / 经历词**("我昨天开会..." / "我看到 X 让我..." / "我对 Y 觉得...")→ **Mode A**(深挖;如话题是时事,Phase 2A.5 询问要不要拉外部数据) **含方向词但无具体内容**("想做职场" / "AI 方向" / "婚恋")→ **Mode B**(单问"为什么想做这个"——用户内省窗口,**不调任何热点工具**) **显式说没想法**("不知道做什么" / "帮我想" / "随便给个")→ **Mode C**(按 [data-source-routing.md](../../shared-references/data-source-routing.md) 调热点工具 + 用户挑 + 回到内省;都不行则走"聊经历"三选项兜底) **显式 `--batch N`**(用户主动批量)→ **Batch Mode** **纯 `/cheat-seed` 无附加内容** → **询问入口问题**: ``` 你今天想干嘛? - 有想做的主题 / 经历 → 直接告诉我("我想做一条 X" / "我最近 X...") - 知道大致方向 → 告诉我("想做职场" / "AI 方向")→ 我会单问你为啥想做 - 完全没想法 → 说"帮我想"→ 我用 [aihot / trendradar] 拉今天的热点给你看 - 批量搞定 → 说 "batch " (我不会拿一堆开放问题追你——你给一句话我就开始) ``` 注意这是**唯一的开放式问题**——只在用户**纯触发** `/cheat-seed` 时问。如果用户已经在触发词里给了内容("/cheat-seed 我想做..." 或 "找选题 我最近开会..."),直接进 Mode A/B/C 不再问这一句。 ### Phase 2A: Mode A 深挖(用户给了具体 topic / 经历) **核心原则**:围绕用户给的内容**深挖**,**不要切到别的话题**。 **反问类型(按场景挑)**: - 触发瞬间:"你说 X 这件事,最初是哪个具体瞬间触发你想做的?" / "是什么让你觉得这值得讲一条视频?" - 情绪锚点:"这里面最让你 [生气 / 觉得荒唐 / 觉得有意思] 的是哪个细节?" - 角度选择:"你想说的是 [角度 a:现象批判] 还是 [角度 b:自我反思] 还是 [角度 c:泛化到普遍]?" - 受众想象:"你心里想着是说给哪种人听?她/他听完会怎么想 / 怎么转发?" - 反对意见探测:"如果有人反驳说 [反方观点 X],你会怎么回?"——逼用户先想清楚立场 **反问纪律**: - 一次只问 **1 个**问题(不要塞 3 个连珠炮) - 最多 `MAX_DEEP_DIVE_TURNS` 轮(默认 4)——超过就主动收敛:"OK 我感觉够了,帮你提议一个角度试试" - 用户的回答如果含 emoji / 简短 / 不耐烦 → 立刻收敛,不要逼 **收敛输出**: ``` 我感觉这个角度能做: [一句话立意:50 字以内] 走法: - 用 [Pattern X 结构](来自 script_patterns.md) - 钩子:[具体场景 / 句子] - 主体:[3 个观察是什么] - 收尾:[MVP 句方向] 粗打分(v0 等权 7 维):ER=X HP=X QL=X NA=X AB=X SR=X SAT=X → composite ≈ X.X Confidence: 🔴 极低 (你才校准 0/N 篇) 要不要让我先写一份 draft?(yes / 换角度 / 我自己写) ``` 用户回 yes → Phase 4 写 draft。 用户说"换角度" → 回 Phase 2A 深挖更多。 用户说"我自己写" → 把 candidate 加进 candidates.md 标 tier1,结束。 ### Phase 2B: Mode B — 单问"为什么",触发用户内省 用户给了方向但不具体("想做职场" / "AI 方向" / "婚恋")。**这阶段不调任何热点工具**——是用户内省的窗口,外部信息会污染。 只问一个问题,**单刀直入**: ``` 为什么想做这个主题? ``` 不要问"a/b/c 三种例子"——那是 dump 选项让用户挑,破坏内省。让用户自己组织语言。 **根据用户回答分流**: | 用户答 | 分类 | 行为 | |---|---|---| | 含具体经历 / 个人卡点("我自己经常加班" / "我看到 X 让我...") | **真动机** | 转 Mode A 深挖(Phase 2A) | | 抽象热度归因("这话题最近热" / "别人都在做" / "听说能涨粉") | **空动机** | 反问"那你自己对这个话题最有感觉的角度是啥?"——逼出个人 stake;继续空 → 转 Mode C | | "我也不知道" / "朋友说赚钱" / 模糊推搡 | **真没想法** | 直接转 Mode C | **反问纪律**:最多 2 轮。第 2 轮还问不出真动机 → 直接转 Mode C,**不要无限挖**。 > 设计意图:Mode B 是"过滤器",不是"工厂"。用户来这里要么暴露真实动机(→ 进 Mode A)要么暴露自己其实没想法(→ 进 Mode C)。两条都比硬要在 Mode B 里产出选题更好。 ### Phase 2C: Mode C — 外部素材 + 用户挑 + 回到内省 用户完全没想法(直接显式说 / 从 Mode B 转过来)。**这是唯一默认调热点工具的入口**。 按 [shared-references/data-source-routing.md](../../shared-references/data-source-routing.md) 的路由规则: 1. **拉外部素材**(按 `content_form` 选 trend source): - `tutorial-builder` / AI 类 → 调 aihot skill - `opinion-video` / `long-essay` / `podcast` / `other` → 调 trendradar-mcp(如启用) - `mixed` → 两个都调 - 都不可用 → 走 manual-paste(询问用户:"今天看到啥可以拍的?粘几条 URL/标题") 2. **聊经历兜底**(用户拒绝看外部素材 / 外部素材都不感兴趣): ``` 外部素材你都没感觉,那回到你自己。三个开口,挑一个开始讲: a) 你最近真实接触到的某件具体事?("上周我看到我同事 X...") b) 你最近读到 / 看到的某条让你想吐槽的内容?("知乎上有个回答...") c) 你长期琢磨的某个 unsolved 困惑?("我一直没想明白为啥 X...") 随便挑一个开始讲。 ``` 3. **拉到外部素材后**,用 rubric 粗筛 + 按 content_form 过滤,留 5 条最契合的: ``` 今天这 5 个跟你形态契合: 1. [标题 A](来源: trendradar / 微博热搜 / hot_score: 8.5) 2. [标题 B](来源: aihot / 模型类 / 精选) 3. ... 你哪个最有感觉?没感觉就回 '都没',我换方向问。 ``` 4. **用户挑了一条 → 回到内省**: ``` OK [标题 X]。你为啥对这条最有感觉? 是 [angle1] 还是 [angle2] 还是别的? ``` → 用户答 → 转 Mode A 深挖。 5. **用户回 "都没"** → 转回 Mode C 第 2 步的"聊经历兜底"。 **关键**:热点不是"塞 5 候选让用户挑",是"给材料 + 强制问用户的个人 stake"——AI 不替用户决定哪条最值得做。 ### Phase 2A.5: Mode A 灰色场景 — 用户讲了时事话题 Mode A 默认深挖用户经历。但如果**用户讲的本身是时事话题**(产品名 + 时间词 / 人名 + 事件词),按 [data-source-routing.md](../../shared-references/data-source-routing.md) 的"时事判定"规则,**询问**用户要不要拉外部数据作参考: ``` 💡 [话题] 是时事——我可以拉一下今天的舆论风向(各平台情绪 + 主要 angles)作参考。 要看吗?回 '看' 我调;回 '不用' 我直接跟你深挖你的角度。 ``` 用户回 "看" → 调对应 trend source → 把数据 inline 到深挖 context; 用户回 "不用" → 标准 Mode A 深挖,不动外部数据。 **永远不主动调**——用户的 angle 优先于外部数据,避免外部信息**带偏**用户视角。 ### Phase 2D: Batch Mode(用户显式 `--batch N`) **保留旧 brainstorm 流程**: 1. 问 3 个清单问题(兴趣 / 调性 / 红线)—— Batch 模式才问这些 2. 抓热点 + Claude brainstorm 15 候选 3. 用户挑 N 4. 写 N 份 draft 到 scripts/——**每份都走 Phase 4 的段落版格式 + Phase 4.5 自检**(line-format + humanizer),不因为批量就跳过 详见 commit history(旧 cheat-seed 的 Phase 1-3)。这是 escape hatch,不是默认。 ### Phase 3: 计算 candidate ID + 落候选池 不管 Mode A/B/C 哪条路径,确认角度后: 1. 算 candidate id:`sha256("seed-" + 立意 + 触发时间)[:12]` 2. 写一行 entry 到 `candidates.md`(按 [candidate-schema.md](../../shared-references/candidate-schema.md) 格式) 3. 标 `tier=tier1` + `read_status=deep_read`(已经讨论过,不是 skim) ### Phase 4: 写 draft `WITH_DRAFT=yes` → 顺次写到 `scripts/__.md`: **写 draft 前必读** `script_patterns.md` —— 按"结构选型 cheat sheet"对应用户的 topic 选合适结构。如果文件还在抽象骨架阶段(用户没填几个 pattern),就用 starter rubric 对应的通用框架。 **字数**:按 `DRAFT_LENGTH` 派生(基于 `typical_duration_seconds`)。 #### ⚠️ 正文必须是段落版,不是字幕格式(**最常见的生成跑偏**) 模型的训练先验会把"视频脚本"默认写成提词器/字幕的短行格式。**这是错的**——cheat-seed 的 draft 是给用户**改写**的散文稿,不是拍摄字幕。字幕是剪映拍后自动断的,不是写作时的形态。 生成正文时,眼睛盯住下面这个对照: ``` ❌ 字幕格式(不要这样写): 你有没有发现 所有审稿人都在说一样的话 你的研究太老套了 但你仔细看 他们引用的全是 5 年前的反应 ✅ 段落版(必须这样写): 你有没有发现,所有审稿人都在说一样的话——你的研究太老套了。但你仔细看,他们引用的全是 5 年前的反应。AI 不是新东西,新的是这次大家集体觉醒了。 ``` 规则: - **每段 100-300 字**,逗号 / 句号 / 破折号自然连,**不在句子边界硬断行** - 段与段之间空一行(自然的主题切换才换段) - 一份 draft 正文一般 3-6 段,**不该有几十个单句行** #### 格式: ```markdown # [立意标题] > ⚠️ **Draft by Claude — 你必须改写后再拍** > > 这是脚手架,不是成品。你的语气 / 节奏 / 个人经历无法 AI 生成。 > 改写流程: > 1. **直接在本文件改写**(同 path:scripts/<...>.md) > - 加你的语气、个人经历、真实金句 > - 砍铺垫、砍模型缩写、砍学术包装 > 2. 改完后跑 `/cheat-predict scripts/<本文件>.md` > 3. 拍完跑 `/cheat-shoot scripts/<本文件>.md` **Article ID**: <12 位 hash> **调性**: [基于讨论得出的,不是清单 Q] **目标时长**: 分钟 **目标字数**: <按时长派生> **结构选型**: [按 script_patterns.md 的 cheat sheet 显式标,如 "metaphor 优先" / "数据反转开场"] **用到的 patterns**: [编号 + 简短说明] **讨论种子**: [一句话回顾 deep dive 出来的核心] --- [draft 正文 —— **段落版**,3-6 段,每段 100-300 字,不是单句碎行] ``` `WITH_DRAFT=no`(用户说"我自己写")→ 跳过 Phase 4 + Phase 4.5。 ### Phase 4.5: draft 自检 pass(版式 + 去 AI 味) draft 写完落盘后、**在展示给用户前**跑两步自检。**顺序固定:先 4.5a 修版式,再 4.5b 去 AI 味**——humanizer 处理散文,喂它字幕格式的碎行会乱。 **为什么安全**(不污染校准):cheat-seed 的 draft 不是被预测/发布的东西——用户改写后、cheat-predict 打分的是**用户最终稿**。这两步只是给用户更干净的起点。 #### Phase 4.5a: line-format 自检(字幕格式 → 段落版) Phase 4 的散文指令 + ❌/✅ 对照已经在生成时压先验,但生成仍可能跑偏。这一步是**确定性兜底**: ```bash # 只看正文段(--- 分隔线之后) body=$(awk '/^---$/{f=1;next} f' scripts/.md) line_count=$(printf '%s\n' "$body" | grep -c .) # 非空行数 char_count=$(printf '%s' "$body" | wc -m | tr -d ' ') avg_chars_per_line=$(( char_count / (line_count > 0 ? line_count : 1) )) ``` 判定:**`avg_chars_per_line < 15` 且 `line_count >= 8`** → 判定为字幕格式 → **自动重排**: - 把句子边界的硬断行合并回自然段落 - 按主题切换分 3-6 段,每段 100-300 字 - 用 Edit 替换正文段(header 不动) - 在 Phase 5 输出里标一行:"📐 检测到字幕格式,已重排为段落版" 不命中 → 跳过,正文已经是段落版。 #### Phase 4.5b: humanizer 去 AI 味 `HUMANIZE_DRAFT=on`(默认)—— 用 `humanizer` skill 过一遍。Claude 自己写的初稿天然带 AI tells(em-dash 滥用 / rule of three / "inflated" 词汇 / 空泛归因 / -ing 浅层分析),这一步把它们清掉。 步骤: 1. 检查 `humanizer` skill 是否可用(`~/.claude/skills/humanizer/` 存在): - 不可用 → 跳过 4.5b,在 Phase 5 输出里加一行"(humanizer 未装,draft 是原始 AI 版——`git clone https://github.com/blader/humanizer` 到 ~/.claude/skills/ 可启用自动去 AI 味)" 2. 可用 → 通过 Skill tool 调 `humanizer`,**只传 draft 正文**(`---` 分隔线之后、4.5a 已重排好的段落版),**绝不传 header**: - header 的 `⚠️ Draft by Claude — 你必须改写后再拍` 警告是**有意的脚手架标记**,不是要 humanize 的散文 - **voice calibration**:如果用户有历史脚本(`videos/*/script.md`)或填过 `script_patterns.md`,把最近 1-2 份作为 humanizer 的 voice 参考样本一起传——让它往"**这个用户的声音**"靠,而不是"通用人声" 3. humanizer 返回去 AI 味的正文 → 用 Edit 替换 draft 文件的正文段(header 不动) 4. 记录 humanizer 报告的"修了哪些 tell"(如 `em-dash 滥用 ×3 / rule of three ×2 / inflated 词汇: "深刻" "本质上"`),Phase 5 输出里展示 **纪律**: - humanizer 是**去 AI 味**,不是**替用户改写**。它让 draft 不那么像机器写的,但**仍不是用户的声音**——header 的"必须改写"警告依然成立,Phase 5 输出要重申 - 如果 humanizer 把某句改得偏离了 `结构选型` / 用到的 pattern → 以 pattern 为准,那句回滚(pattern 是和用户讨论定的,humanizer 不该推翻) - humanizer **不负责版式**——断行问题在 4.5a 已经修完,humanizer 拿到的已是段落版 ### Phase 5: 输出"下一步" + 询问继续 ``` ✅ Draft 写完:scripts/2026-05-04__.md 📐 版式自检:通过(段落版) ← 或"检测到字幕格式,已重排为段落版" 🧹 humanizer 过了一遍:修了 em-dash 滥用 ×3 / rule of three ×2 / inflated 词汇 2 处 (draft 现在不那么"机器味"了——但这仍是脚手架,不是你的声音) 接下来你可以: - 改写这份 draft(直接在原文件改)—— 加你的语气、经历、真实金句 - 改完跑 "打分这篇 scripts/<...>.md" 看 7 维评分 - 决定要拍 → "启动预测 scripts/<...>.md" 下一篇你想做什么? (直接告诉我具体经历 / topic,或者说"今天就这样"结束) ``` > humanizer 那行只在 `HUMANIZE_DRAFT=on` 且 skill 可用时出现。未装时换成一行提示如何启用。 用户说"今天就这样" → 结束 cheat-seed。 用户给新 topic → 回 Phase 1 重新分流。 ## Key Rules 1. **AI 不主动开放问**——只在用户纯触发 `/cheat-seed` 时问一次入口问题,其他时候**等用户给输入再深挖** 2. **一次一个选题**——默认 Mode A/B/C 都给 1 个建议;用户主动要批量才走 Batch 3. **反问纪律**:一次问 1 个,最多 4 轮,用户不耐烦立刻收敛 4. **深挖围绕用户给的话题**,不要切到别的——你说"开会被领导骂",AI 不该问"那你最近有没有觉得 AI 让大家..."这种平行话题 5. **写 draft 必须读 script_patterns.md**——按用户已有 pattern 选结构 6. **draft 是脚手架**——header 加醒目警告"必须改写" 7. **humanizer 只去 AI 味,不替用户改写**——Phase 4.5b 让 draft 不那么机器味,但它仍不是用户的声音;"必须改写"的警告不因为过了 humanizer 就失效 8. **正文是段落版不是字幕格式**——生成时盯 Phase 4 的 ❌/✅ 对照;Phase 4.5a 用 `avg_chars_per_line < 15 且行数 ≥ 8` 做确定性兜底,命中就重排。字幕是剪映拍后自动断的,不是写作时的形态 ## Refusals - 「跳过深挖,直接写 draft」 → 询问"你想直接给主题让我写吗?OK 但 draft 质量可能差——我不知道你的角度。给我一句话立意我就写" - 「AI 替我决定 topic」 → 拒绝。Mode A/B/C 路径里 AI 永远只**呈现外部素材** + **问用户角度**,不替用户拍板"做哪条" - 「Mode B 我懒得回答为什么,直接给我 5 个候选吧」 → 拒绝。Mode B 的"为什么"是过滤器——你答不出来就不该用 Mode B 的方向。要么进 Mode A 给具体经历,要么进 Mode C 我帮你找素材 - 「Mode A 时直接帮我拉热点,不问我同意」 → 拒绝。Mode A 用户已经有 angle,未经允许拉外部数据会污染他的视角。详见 [data-source-routing.md](../../shared-references/data-source-routing.md) - 「一次写 5 个 draft」 → 不在默认流程。用户必须显式 `--batch 5` - 「我懒得改写,直接拍 AI draft」 → 警告"AI 直接生成的稿子拍出来 ER 偏低,会污染你的校准数据",但用户坚持也允许(标 `unmodified_ai_draft: true`) ## Integration - 上游:`/cheat-init` Phase 5 末尾在 `pool_status=none + calibration_samples=0` 时主动询问"现在跑 /cheat-seed?" - 上游:`/cheat-recommend` 在 candidates 空时引导文案中提及 `/cheat-seed` - 上游:`/cheat-status` 在 `pool_status=none + 距 init >24h` 时提示"还没拍——跑 /cheat-seed?" - 下游:用户的 candidate → candidates.md(tier1,已 deep_read) - 下游:(默认)draft → Phase 4.5 humanizer 去 AI 味 → scripts/.md → 用户改写 → /cheat-predict - 可选依赖:[`humanizer`](https://github.com/blader/humanizer) skill(MIT,外部项目)。装在 `~/.claude/skills/humanizer/` 时 Phase 4.5 自动启用;未装则优雅跳过。**不打包进 cheat-on-content**——用户自己 clone - 与 `/cheat-trends` 区别:cheat-seed 是**讨论 + 写 draft**(重 conversation);cheat-trends 是**多 adapter 抓 + 粗打分**(重 fetch)。两者目的不同,不互相替代。