ワンクリックで
cheat-retro
// T+N 天数据回收 + 复盘 + 把新观察写入 rubric_notes.md。这是校准循环的反馈环节——不复盘的预测等于占星。触发词:"复盘 [path]"/"retro this"/"T+3d 数据来了"/"抓数据 [path]"/"把这篇复盘了"。
// T+N 天数据回收 + 复盘 + 把新观察写入 rubric_notes.md。这是校准循环的反馈环节——不复盘的预测等于占星。触发词:"复盘 [path]"/"retro this"/"T+3d 数据来了"/"抓数据 [path]"/"把这篇复盘了"。
给所有想把"感觉"变成可校准预测的内容创作者。**方法论通用**——打分 → 盲预测 → 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 不存在时自动路由到此。**
从复盘评论数据派生 / 刷新账号的受众画像,写入 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).
跟用户对话讨论选题——**默认一次一个**,用户主动给主题或经历,AI 围绕用户的输入深挖、提炼角度、写一份 draft。不是 AI 拿三个开放问题追用户,也不是一次给 5 个候选。触发词:"找选题"/"我想做一条 X"/"最近有个想法"/"seed"/"启动种子"。可选 batch 模式:`/cheat-seed --batch 5` 走旧的 brainstorm 5 候选 + 写 5 draft 流程。
登记一条视频已拍摄。**建 video folder + 询问实际拍摄稿是否与 scripts/<id>.md 一致 + buffer +1**。与 cheat-publish 配对:拍了进队列,发了出队列。触发词:"拍了"/"拍了 X"/"shot"/"shot it"/"已拍 X"/"录完了"。
| name | cheat-retro |
| description | T+N 天数据回收 + 复盘 + 把新观察写入 rubric_notes.md。这是校准循环的反馈环节——不复盘的预测等于占星。触发词:"复盘 [path]"/"retro this"/"T+3d 数据来了"/"抓数据 [path]"/"把这篇复盘了"。 |
抓 T+N 天的实际表现 → 对比预测 → 提炼新观察 → 写入 rubric_notes.md。只追加 ## 复盘 段,绝不改预测段。
[用户:复盘 predictions/2026-05-04_...]
↓
[Phase 0: 校验 immutability + 校验时间窗口]
↓
[Phase 1: 抓数据(manual paste 或 adapter)]
↓
[Phase 2: 写实绩段 + top 评论关键词]
↓
[Phase 3: 验证/推翻预测的各假设]
↓
[Phase 4: 提炼新观察]
↓
[Phase 5: 落盘(追加到 ## 复盘 段)]
↓
[Phase 6: 写入 rubric_notes.md 的"观察记录"段]
↓
[Phase 7: 检测是否触发 bump 候选 → 提示用户跑 /cheat-bump]
💡 调用时覆盖:
/cheat-retro <file> — window: 7 — source: adapter
| 必填 | 来源 |
|---|---|
<prediction-file> 或 <video-folder> | 用户参数;缺失则从 .cheat-state.json 的 pending_retros[0] |
rubric_notes.md | 用户项目根 |
.cheat-state.json | 状态文件 |
用户给的可能是:
predictions/2026-05-04_<id>_<short>.md → 直接用这个 prediction 文件videos/2026-05-04_<id>_<short>/ → 找对应的 prediction 文件(按 id 匹配)+ 把 report.md 写到该 video folder 里pending_retros[0] 取最早的<prediction-file>,确认存在## 预测... 段(可能含 ## 预测、## 预测 v1、## 预测 v2 等):
## 预测 vN 作为本次校准的依据(v2 存在则用 v2;只有 v1 则用 v1;legacy 单段 ## 预测 直接用)v2_prediction_written 应与"是否存在 v2 段"一致——不一致则警告(state 与文件脱节)## 预测... 段的内容(用于 Phase 5 后核对——全部段不可改,不只是有效段)Published at → 没登记的不能复盘,提示用户先 /cheat-publishearly_retro: true)按 state.data_collection 字段分两条路径——抓回数据后写到 video folder 的 report.md(如果 prediction 关联 video folder),同时解析摘要 inline 到 prediction 的复盘段。
DATA_SOURCE=manual(候补方案)comments_unavailable,但这次复盘价值打折。"videos/<...>/report.md(如有 video folder)DATA_SOURCE=adapter按 prediction header 的 Platform 字段 + state 的 enabled_perf_adapters 决定调哪个:
| Platform | Adapter | 调用方式 |
|---|---|---|
douyin | adapters/perf-data/douyin-session/ | bash <adapters-dir>/douyin-session/run.sh <aweme_id> <video_folder> |
xhs | adapters/perf-data/xhs-explore/ | bash <adapters-dir>/xhs-explore/run.sh <note_id> <video_folder> |
youtube | adapters/perf-data/youtube-data-api/(待) | 调 YouTube Data API(需 API key) |
bilibili | adapters/perf-data/bilibili-stat/(待) | 调 B 站官方 stat 接口 |
| 其他 | 无 adapter | 优雅降级到 Path A |
<adapters-dir>= 克隆源码处的cheat-on-content/adapters/perf-data/(install.sh 不复制 adapter 到 ~/.claude/skills,只复制 15 个 skill)。定位:find ~ -path '*/cheat-on-content/adapters/perf-data' -type d | head -1。
douyin-session 的特殊处理:
https://v.douyin.com/abc123)→ 短链解析 → 提取 aweme_id.auth/);不存在则提示用户先跑 python <adapter>/crawler.py login<video_folder>/report.md(adapter 的 renderer.py 已经按这个格式写)xhs-explore 的特殊处理:
https://www.xiaohongshu.com/explore/<note_id>?xsec_token=... 或 https://xhslink.com/xxx)→ 提取 note_id.auth-xhs/);不存在则提示先跑 python <adapter>/crawler.py loginview_count 等已写死);万一接口改版导致某项为 0,看 report.md 末尾 galaxy 原始 JSON,把新 key 加进 crawler.py 的 _normalize_note任何 adapter 失败(cookie 过期 / 接口变化 / 网络)→ 优雅降级到 manual,提示用户:"adapter 调用失败,原因 [X]。改用 manual 模式——粘下面的数据"。不阻塞流程。
不管 Path A 还是 B,最终:
videos/<...>/report.md 含完整原始数据(数字 + top 评论)实绩数据格式(参考 prediction-anatomy.md 的复盘段格式):
### 实绩数据
- 播放:71.1w(落在 `30-100w` 桶内偏高,相对中枢 50w **+42%**)
- 点赞:2.4w(赞播比 3.38%)
- 评论:899(评播比 0.126%)
- 收藏:5251
- 分享:1.8w(分播比 2.53%,强)
数据点之间的派生比率(赞播比、评播比、分播比)必须算出来——它们是单纯播放数无法暴露的信号。
top 评论关键词聚类:
对 prediction 文件里的每一项(推理因素表、关键校准假设、反事实场景),逐项判定:
### 哪些预测被验证 ✅ / 推翻 ❌
**验证 ✅**:
- 关键校准假设完全成立:本篇 71.1w / 谁问你了 11.7w = 6.07x,远超我押的 1.5-2x
- ER=5 主导情感传播力 → H1 强证据
- HP=5 验证:分播比 2.53% 与"金句被高频引用"匹配
**推翻 ❌**:
- 中枢 50w 被超出 +42%
- 反事实推理里"必须搭配强社会议题才能破 30w" 完全错误
- SR 押注("H2 SR 应上调")反向被推翻:SR 在情感向场景几乎不贡献
关键纪律:
打分维度 / 公式 / bucket 边界相关的观察:
### 需要写进 rubric_notes.md 的新观察
1. **ER 在情感向场景的真实权重应 ≥ ×2.0**:与谁问你了 6x 流量比是 v2 rubric 最强的反事实证据
2. **议题分享冲动 (TS) 是隐藏维度**:joker / "她不一样" / 滤镜重构提供了安全的自嘲身份,转发不暴露处境,TS=5 的样本
3. ……
每条观察必须可追溯到具体数据点(不写"情感很重要"——写"ER5/SR2 vs ER3/SR4 同 composite 下流量差 6x")。
Diff scripts/<id>.md(pre-shoot 草稿,可能是 cheat-seed 写或用户写)vs videos/<id>/script.md(实际拍摄稿——cheat-shoot 时用户提供的版本),找出改动且对流量有明显影响的部分:
| 用户做了什么 | 流量影响 | 是否提议追加 pattern |
|---|---|---|
| 砍掉某段 | 实绩 ≥ 中枢 → "砍掉没伤流量"——验证那段冗余 | 是,加到 script_patterns.md "用户改稿历史观察"表 |
| 加了某句 / 互动钩子 | 实绩超中枢 → 可能是新 pattern | 是,候选 Pattern N,标 ≥1 样本待验证 |
| 改了风格(如开头软化) | 高于同类样本 → 风格改动有效 | 是,候选 Pattern N |
| 没动结构 / 改动与流量无关 | — | 不追加 |
输出格式:
### 需要写进 script_patterns.md 的新 pattern 候选
1. **用户改稿模式**: 砍掉 [X 段] / 加了 [Y]
- 流量影响:实绩 [N] vs 中枢 [M],[偏差 / 命中]
- 建议:追加到 script_patterns.md 的"用户改稿历史观察"表
2. **新 pattern 候选 N**:[一句话描述]
- 单样本支持
- 触发条件:[何时该用]
- 建议:追加到 script_patterns.md 末尾的"新发现的 Pattern"段,标 ≥1 样本待验证
询问用户:"要把这些追加到 script_patterns.md 吗?(yes / no / 选择哪几条)"。用户确认后才追加——避免把单点观察直接写成正式 pattern。
rubric 进化 ≠ 写作进化——两者解耦:
- rubric_notes.md 学的是"哪些维度真的预测流量"
- script_patterns.md 学的是"什么写法真的能起作用" 可能有交叉(如 MS 维度与"互动钩子" pattern),但记录在两个文件里是因为作用域不同——rubric 改了影响所有未来打分,pattern 改了影响所有未来 draft。
如果 videos/<id>/script.md 缺失(cheat-shoot 时用户标 script_lost) → 跳过 4b,没法 diff。
如果 script_consistency = "consistent"(用户拍时没改稿)→ 4b 仍然有意义(diff 也许是空),但可以快速跳过细查。
如果 script_consistency = "modified"(用户拍时改了)→ 4b 是核心,重点学这次改动 → 流量影响。
用 Edit 工具,仅追加到现有 ## 复盘 段(如有占位 (待填) 行先删除):
## 复盘
**复盘时间**: 2026-05-07(发布 T+3d)
**抓取时间**: 2026-05-07 09:30
**数据来源**: manual paste
### 实绩数据
[Phase 2 内容]
### Top 评论关键词
[Phase 2 内容]
### 哪些预测被验证 / 推翻
[Phase 3 内容]
### 需要写进 rubric_notes.md 的新观察
[Phase 4 内容]
写完后再次校验:读取保存后的文件,对比所有 ## 预测... 段(v1 / v2 / legacy)的合并哈希应等于 Phase 0 cache 的合并哈希。任一段被改 → 报错并回滚。
按 observation-lifecycle.md 的"观察记录模板"格式,追加到 rubric_notes.md 的 ## 观察记录 段:
### YYYY-MM-DD [标题简称] (id) — [一句话定性]
- 预测:composite=X.XX,bucket=Y
- 实绩:播放 / 点赞 / 评论 / 转发(带 T+Nd 标注)
- Top 评论关键词:[简短摘录 + 赞数]
- 判断:哪个维度被验证/推翻?为什么?
- Rubric 调整:[如果有,写明 "下次打 XX 类文章时改 YY"]
- 详见:[predictions/<file>.md]
检测跨样本 pattern:扫描已有"观察记录",看新观察是否与某条已有观察形成 ≥2 样本支持。命中则按 observation-lifecycle.md 升级到"重大跨视频观察"段。
如 Phase 4b 用户回 "yes" 或选择性确认了某几条:
新 pattern 候选的格式(同 script_patterns.template.md 的 Pattern 11/12 示例):
### Pattern N(来自 [视频简称],单样本待验证)
**现象**:[Phase 4b 描述]
**原理**:[为什么有效——基于这一次观察的猜测]
**触发条件**:[何时该用]
**待验证**:需要 ≥2 样本支持才能升正式 pattern。
跨样本 pattern 升正式:扫描"新发现的 Pattern"段,看是否有 ≥2 样本支持同一现象 → 升到核心 pattern 库 + 删 "待验证" 标记。
如用户在 Phase 4b 全否("no")→ 跳过 6b,rubric_notes.md 仍照写。
读 .cheat-state.json 的 consecutive_directional_errors 字段,按本次复盘判定向更新:
["high"] + 记录 deviation_magnitude(如 0.5x / 0.3x)["low"] + 记录 deviation_magnitudeClaude 判断是否提议 bump(不是固定门槛):
判断维度:
1. 连续同向次数(参考默认:≥3)
2. 单次偏差幅度(参考默认:>2x 或 <0.5x 算极端)
3. 偏差是否能解释为单一维度漏判(如 ER 或 SR 一致偏离)
4. 用户是否在复盘里反复提到同一现象
任一足够强 → 提议 bump:
- 3 次连续同向,每次都中等偏差 → 提议
- 1 次极端偏差(如 ≥10x),即使没连续 → 提议("一次性强信号")
- 2 次同向 + 评论区出现一致的反向证据 → 提议("评论 + 数据双信号")
不提议的情况:
- 3 次同向但每次都很小(<25%)→ 可能只是噪声
- 偏差跨多个维度无清晰方向 → bump 不知道改什么
提议时输出:
🚨 检测到 [系统性偏差信号] / [极端单点偏差] 。
[简短描述:连续 N 次 / 1 次极端 / 评论双信号 等]
这可能是 rubric 系统性偏差的信号。建议:
- 跑 /cheat-bump 看是否需要升级公式
- 或先看 /cheat-status 详细分析
注:本次提议是 [default-aligned: 满足 ≥3 同向] / [judgment-driven: 1 次 10x 强偏差]
更新 state file:
{
"calibration_samples": <+1>,
"pending_retros": [<剔除本次>],
"last_retro_at": "<ISO>",
"consecutive_directional_errors": [...]
}
数据来源: manual paste 或 数据来源: adapter:douyin-session 写进复盘段/cheat-bump——避免一次操作做两件事early_retro: true,bump 时这种样本权重降级/cheat-publish 已登记 + 时间窗口达到consecutive_directional_errors 满 3 → 触发 /cheat-bump 提议calibration_samples +1(这是 cheat-status 显示进度的关键)