com um clique
cheat-seed
// 跟用户对话讨论选题——**默认一次一个**,用户主动给主题或经历,AI 围绕用户的输入深挖、提炼角度、写一份 draft。不是 AI 拿三个开放问题追用户,也不是一次给 5 个候选。触发词:"找选题"/"我想做一条 X"/"最近有个想法"/"seed"/"启动种子"。可选 batch 模式:`/cheat-seed --batch 5` 走旧的 brainstorm 5 候选 + 写 5 draft 流程。
// 跟用户对话讨论选题——**默认一次一个**,用户主动给主题或经历,AI 围绕用户的输入深挖、提炼角度、写一份 draft。不是 AI 拿三个开放问题追用户,也不是一次给 5 个候选。触发词:"找选题"/"我想做一条 X"/"最近有个想法"/"seed"/"启动种子"。可选 batch 模式:`/cheat-seed --batch 5` 走旧的 brainstorm 5 候选 + 写 5 draft 流程。
给所有想把"感觉"变成可校准预测的内容创作者。**方法论通用**——打分 → 盲预测 → T+3d 复盘 → 进化 rubric 的循环适用任何能被量化(播放 / 阅读 / 收听 / 点击)的内容。**rubric 是循环的内容,不是循环本身**——当前内置一份观点视频 rubric(参考博主 25+ 视频拟合),其他形态可借这套起步并 bump 调权重。**强烈建议导入对标账号**作为初始信号源(/cheat-learn-from)。触发词:"初始化"/"打分这篇"/"启动预测"/"已发布"/"复盘"/"升级 rubric"/"推荐选题"/"抓热点"/"状态"/"找对标"/"learn from"。**首次使用必须先跑 /cheat-init。**
cheat-on-content 的首次 onboarding 与脚手架创建器。统一流程——所有用户都走相同 5 阶段闭环,唯一区别是"发过视频的人"会在 init 时多一步:抓取已有视频建立历史 context(用于后续 cheat-seed 给更贴合的选题、更准的 baseline)。触发词:"初始化"/"init"/"首次使用"/"我是新用户"/"setup cheat-on-content"。**必须在用户第一次会话执行;其他子 skill 在 .cheat-state.json 不存在时自动路由到此。**
T+N 天数据回收 + 复盘 + 把新观察写入 rubric_notes.md。这是校准循环的反馈环节——不复盘的预测等于占星。触发词:"复盘 [path]"/"retro this"/"T+3d 数据来了"/"抓数据 [path]"/"把这篇复盘了"。
从复盘评论数据派生 / 刷新账号的受众画像,写入 audience.md。这是和 rubric 平行的第二个派生物——rubric 答"怎么打分",persona 答"谁在看"。cheat-seed 选题 / 写稿时读它。**audience.md 含实绩信号,cheat-score-blind 硬禁读**。触发词:"构造受众画像"/"更新 persona"/"我的观众是谁"/"build persona"/"刷新受众画像"/"看看我的受众画像"。
INTERNAL sub-agent for blind 9-dim rubric scoring. **NOT a user-facing skill — do NOT invoke from main conversation.** Called via Task tool by cheat-score / cheat-predict / cheat-bump to get a context-isolated score on a script. Receives ONLY script_path + rubric_notes_path; refuses any other input. Outputs strict JSON: 9 dimensions × {score 0-5, confidence enum, one-line reason}. **Hard refuses to Read** .cheat-state.json, predictions/*, retro 段, or anything that could leak post-publish data. This is channel B in the 3-channel calibration model (A=main, B=blind sub, C=cross-model).
登记一条视频已拍摄。**建 video folder + 询问实际拍摄稿是否与 scripts/<id>.md 一致 + buffer +1**。与 cheat-publish 配对:拍了进队列,发了出队列。触发词:"拍了"/"拍了 X"/"shot"/"shot it"/"已拍 X"/"录完了"。
| name | cheat-seed |
| description | 跟用户对话讨论选题——**默认一次一个**,用户主动给主题或经历,AI 围绕用户的输入深挖、提炼角度、写一份 draft。不是 AI 拿三个开放问题追用户,也不是一次给 5 个候选。触发词:"找选题"/"我想做一条 X"/"最近有个想法"/"seed"/"启动种子"。可选 batch 模式:`/cheat-seed --batch 5` 走旧的 brainstorm 5 候选 + 写 5 draft 流程。 |
cheat-seed 的核心是跟用户讨论选题,不是机械地 brainstorm。好内容来自用户的真实经历 + 观察 + 情绪——这些是 AI 不可能凭空 brainstorm 出来的。AI 的角色是听用户讲 → 帮提炼角度 → 写一份 draft,不是 dump 15 候选让用户挑。
默认模式:对话式一次一个。
Batch 模式(--batch N):保留旧的 brainstorm N 候选 + 写 N 份 draft 流程,给"完全没想法 + 想批量初始化"的用户。
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 周的选题搞定"的用户。
关键纠正(与旧版的区别):
content_form 路由数据源,详见 shared-references/data-source-routing.mdstate.typical_duration_seconds:30s→100-200字 / 90s→250-500字 / 240s→600-1000字 / 450s→1100-2000字 / 900s→2200+字humanizer skill 过一遍,去掉 AI 写作 tells(em-dash 滥用 / rule of three / inflated 词汇 / 空泛归因等)。off 时直接出原始 AI draft。只 humanize 正文,不动 header 的"必须改写"警告| 必填 | 来源 |
|---|---|
.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 派生) |
.cheat-state.json → 不存在则提示先跑 /cheat-initrubric_notes.md 拿当前公式(粗打分用)script_patterns.md——写 draft 时按 cheat sheet 选结构benchmark.md(如存在)作为 context 来源 B(对标账号):
state.benchmark_status = imported → B 有内容,提取对标账号的样本主题分布、调性、Patternstate.benchmark_status = none / pending → B 为空audience.md(如存在且非空骨架)作为 受众镜子:
brainstorm 时的 context 优先级(Claude 判断——下面是参考默认):
calibration_samples ≥ 10,但 Claude 可以更早——如 N=5 但出现 ≥3 个与 benchmark 明显不一致的强样本)判断依据不是死磕样本数,而是看:
读用户输入,识别:
含具体名词 + 情绪 / 经历词("我昨天开会..." / "我看到 X 让我..." / "我对 Y 觉得...")→ Mode A(深挖;如话题是时事,Phase 2A.5 询问要不要拉外部数据)
含方向词但无具体内容("想做职场" / "AI 方向" / "婚恋")→ Mode B(单问"为什么想做这个"——用户内省窗口,不调任何热点工具)
显式说没想法("不知道做什么" / "帮我想" / "随便给个")→ Mode C(按 data-source-routing.md 调热点工具 + 用户挑 + 回到内省;都不行则走"聊经历"三选项兜底)
显式 --batch N(用户主动批量)→ Batch Mode
纯 /cheat-seed 无附加内容 → 询问入口问题:
你今天想干嘛?
- 有想做的主题 / 经历 → 直接告诉我("我想做一条 X" / "我最近 X...")
- 知道大致方向 → 告诉我("想做职场" / "AI 方向")→ 我会单问你为啥想做
- 完全没想法 → 说"帮我想"→ 我用 [aihot / trendradar] 拉今天的热点给你看
- 批量搞定 → 说 "batch <N>"
(我不会拿一堆开放问题追你——你给一句话我就开始)
注意这是唯一的开放式问题——只在用户纯触发 /cheat-seed 时问。如果用户已经在触发词里给了内容("/cheat-seed 我想做..." 或 "找选题 我最近开会..."),直接进 Mode A/B/C 不再问这一句。
核心原则:围绕用户给的内容深挖,不要切到别的话题。
反问类型(按场景挑):
反问纪律:
MAX_DEEP_DIVE_TURNS 轮(默认 4)——超过就主动收敛:"OK 我感觉够了,帮你提议一个角度试试"收敛输出:
我感觉这个角度能做:
[一句话立意: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,结束。
用户给了方向但不具体("想做职场" / "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 里产出选题更好。
用户完全没想法(直接显式说 / 从 Mode B 转过来)。这是唯一默认调热点工具的入口。
按 shared-references/data-source-routing.md 的路由规则:
拉外部素材(按 content_form 选 trend source):
tutorial-builder / AI 类 → 调 aihot skillopinion-video / long-essay / podcast / other → 调 trendradar-mcp(如启用)mixed → 两个都调聊经历兜底(用户拒绝看外部素材 / 外部素材都不感兴趣):
外部素材你都没感觉,那回到你自己。三个开口,挑一个开始讲:
a) 你最近真实接触到的某件具体事?("上周我看到我同事 X...")
b) 你最近读到 / 看到的某条让你想吐槽的内容?("知乎上有个回答...")
c) 你长期琢磨的某个 unsolved 困惑?("我一直没想明白为啥 X...")
随便挑一个开始讲。
拉到外部素材后,用 rubric 粗筛 + 按 content_form 过滤,留 5 条最契合的:
今天这 5 个跟你形态契合:
1. [标题 A](来源: trendradar / 微博热搜 / hot_score: 8.5)
2. [标题 B](来源: aihot / 模型类 / 精选)
3. ...
你哪个最有感觉?没感觉就回 '都没',我换方向问。
用户挑了一条 → 回到内省:
OK [标题 X]。你为啥对这条最有感觉?
是 [angle1] 还是 [angle2] 还是别的?
→ 用户答 → 转 Mode A 深挖。
用户回 "都没" → 转回 Mode C 第 2 步的"聊经历兜底"。
关键:热点不是"塞 5 候选让用户挑",是"给材料 + 强制问用户的个人 stake"——AI 不替用户决定哪条最值得做。
Mode A 默认深挖用户经历。但如果用户讲的本身是时事话题(产品名 + 时间词 / 人名 + 事件词),按 data-source-routing.md 的"时事判定"规则,询问用户要不要拉外部数据作参考:
💡 [话题] 是时事——我可以拉一下今天的舆论风向(各平台情绪 + 主要 angles)作参考。
要看吗?回 '看' 我调;回 '不用' 我直接跟你深挖你的角度。
用户回 "看" → 调对应 trend source → 把数据 inline 到深挖 context; 用户回 "不用" → 标准 Mode A 深挖,不动外部数据。
永远不主动调——用户的 angle 优先于外部数据,避免外部信息带偏用户视角。
--batch N)保留旧 brainstorm 流程:
详见 commit history(旧 cheat-seed 的 Phase 1-3)。这是 escape hatch,不是默认。
不管 Mode A/B/C 哪条路径,确认角度后:
sha256("seed-" + 立意 + 触发时间)[:12]candidates.md(按 candidate-schema.md 格式)tier=tier1 + read_status=deep_read(已经讨论过,不是 skim)WITH_DRAFT=yes → 顺次写到 scripts/<YYYY-MM-DD>_<id>_<short-title>.md:
写 draft 前必读 script_patterns.md —— 按"结构选型 cheat sheet"对应用户的 topic 选合适结构。如果文件还在抽象骨架阶段(用户没填几个 pattern),就用 starter rubric 对应的通用框架。
字数:按 DRAFT_LENGTH 派生(基于 typical_duration_seconds)。
模型的训练先验会把"视频脚本"默认写成提词器/字幕的短行格式。这是错的——cheat-seed 的 draft 是给用户改写的散文稿,不是拍摄字幕。字幕是剪映拍后自动断的,不是写作时的形态。
生成正文时,眼睛盯住下面这个对照:
❌ 字幕格式(不要这样写):
你有没有发现
所有审稿人都在说一样的话
你的研究太老套了
但你仔细看
他们引用的全是 5 年前的反应
✅ 段落版(必须这样写):
你有没有发现,所有审稿人都在说一样的话——你的研究太老套了。但你仔细看,他们引用的全是 5 年前的反应。AI 不是新东西,新的是这次大家集体觉醒了。
规则:
# [立意标题]
> ⚠️ **Draft by Claude — 你必须改写后再拍**
>
> 这是脚手架,不是成品。你的语气 / 节奏 / 个人经历无法 AI 生成。
> 改写流程:
> 1. **直接在本文件改写**(同 path:scripts/<...>.md)
> - 加你的语气、个人经历、真实金句
> - 砍铺垫、砍模型缩写、砍学术包装
> 2. 改完后跑 `/cheat-predict scripts/<本文件>.md`
> 3. 拍完跑 `/cheat-shoot scripts/<本文件>.md`
**Article ID**: <12 位 hash>
**调性**: [基于讨论得出的,不是清单 Q]
**目标时长**: <state.typical_duration_seconds 转换> 分钟
**目标字数**: <按时长派生>
**结构选型**: [按 script_patterns.md 的 cheat sheet 显式标,如 "metaphor 优先" / "数据反转开场"]
**用到的 patterns**: [编号 + 简短说明]
**讨论种子**: [一句话回顾 deep dive 出来的核心]
---
[draft 正文 —— **段落版**,3-6 段,每段 100-300 字,不是单句碎行]
WITH_DRAFT=no(用户说"我自己写")→ 跳过 Phase 4 + Phase 4.5。
draft 写完落盘后、在展示给用户前跑两步自检。顺序固定:先 4.5a 修版式,再 4.5b 去 AI 味——humanizer 处理散文,喂它字幕格式的碎行会乱。
为什么安全(不污染校准):cheat-seed 的 draft 不是被预测/发布的东西——用户改写后、cheat-predict 打分的是用户最终稿。这两步只是给用户更干净的起点。
Phase 4 的散文指令 + ❌/✅ 对照已经在生成时压先验,但生成仍可能跑偏。这一步是确定性兜底:
# 只看正文段(--- 分隔线之后)
body=$(awk '/^---$/{f=1;next} f' scripts/<id>.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 → 判定为字幕格式 → 自动重排:
不命中 → 跳过,正文已经是段落版。
HUMANIZE_DRAFT=on(默认)—— 用 humanizer skill 过一遍。Claude 自己写的初稿天然带 AI tells(em-dash 滥用 / rule of three / "inflated" 词汇 / 空泛归因 / -ing 浅层分析),这一步把它们清掉。
步骤:
humanizer skill 是否可用(~/.claude/skills/humanizer/ 存在):
git clone https://github.com/blader/humanizer 到 ~/.claude/skills/ 可启用自动去 AI 味)"humanizer,只传 draft 正文(--- 分隔线之后、4.5a 已重排好的段落版),绝不传 header:
⚠️ Draft by Claude — 你必须改写后再拍 警告是有意的脚手架标记,不是要 humanize 的散文videos/*/script.md)或填过 script_patterns.md,把最近 1-2 份作为 humanizer 的 voice 参考样本一起传——让它往"这个用户的声音"靠,而不是"通用人声"em-dash 滥用 ×3 / rule of three ×2 / inflated 词汇: "深刻" "本质上"),Phase 5 输出里展示纪律:
结构选型 / 用到的 pattern → 以 pattern 为准,那句回滚(pattern 是和用户讨论定的,humanizer 不该推翻)✅ Draft 写完:scripts/2026-05-04_<id>_<short>.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 重新分流。
/cheat-seed 时问一次入口问题,其他时候等用户给输入再深挖avg_chars_per_line < 15 且行数 ≥ 8 做确定性兜底,命中就重排。字幕是剪映拍后自动断的,不是写作时的形态--batch 5unmodified_ai_draft: true)/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?"humanizer skill(MIT,外部项目)。装在 ~/.claude/skills/humanizer/ 时 Phase 4.5 自动启用;未装则优雅跳过。不打包进 cheat-on-content——用户自己 clone/cheat-trends 区别:cheat-seed 是讨论 + 写 draft(重 conversation);cheat-trends 是多 adapter 抓 + 粗打分(重 fetch)。两者目的不同,不互相替代。