---
name: cheat-on-content
description: 给所有想把"感觉"变成可校准预测的内容创作者。**方法论通用**——打分 → 盲预测 → T+3d 复盘 → 进化 rubric 的循环适用任何能被量化（播放 / 阅读 / 收听 / 点击）的内容。**rubric 是循环的内容，不是循环本身**——当前内置一份观点视频 rubric（参考博主 25+ 视频拟合），其他形态可借这套起步并 bump 调权重。**强烈建议导入对标账号**作为初始信号源（/cheat-learn-from）。触发词："初始化"/"打分这篇"/"启动预测"/"已发布"/"复盘"/"升级 rubric"/"推荐选题"/"抓热点"/"状态"/"找对标"/"learn from"。**首次使用必须先跑 /cheat-init。**
argument-hint: [draft-path] [— mode: cold-start|calibration]
allowed-tools: Bash(*), Read, Write, Edit, Grep, Glob, Skill, mcp__llm-chat__chat
---

# 网红作弊器 / Cheat on Content

> 🎯 **方法论通用，rubric 当前内置观点视频版**
>
> **方法论**（5 阶段闭环）：任何能被量化的内容形态都适用——视频 / 文章 / 播客 / Newsletter / 短文 thread。
>
> **当前内置 rubric**：观点类视频（评论 / 时评 / 论说 / 议题讨论 / 个人观点表达），7 个维度由参考博主 25+ 已发样本拟合而来。如果你做其他形态，需要：
> - 自己写一份 rubric（参照 [starter-rubrics/opinion-video-zero.md](starter-rubrics/opinion-video-zero.md) 的格式）
> - 或等内置扩展（长文 / 短文 / 播客 starter 在批次 3 路线图）
>
> 默认假设：**用户是从零开始的新人**（一条视频都没发过）——cold-start 期的预测会**简化**，只要 7 维打分 + 一句话 bet，不强求 bucket 数字（避免 false precision）。已有 5+ 篇数据的老手走 calibration 模式解锁完整 7 组件预测。

把内容创作变成可校准预测循环：**打分 → 预测 → 发布 → 复盘 → 进化 rubric**。

本文件是**总协议 + 路由器**。具体每个阶段的工作流在 `skills/cheat-*/SKILL.md` 各子 skill 里。

## Codex compatibility

Codex 没有 Claude Code 的 slash-command harness。安装到 Codex 后，按自然语言触发同一套路由即可：

- `初始化 cheat-on-content` → 读取并执行 `skills/cheat-init/SKILL.md`
- `打分这篇 scripts/foo.md` → 读取并执行 `skills/cheat-score/SKILL.md`
- `启动预测 scripts/foo.md` → 读取并执行 `skills/cheat-predict/SKILL.md`
- `拍了 ...` / `已发布 ...` / `复盘 ...` / `升级 rubric` / `状态` → 分别读取对应 `skills/cheat-*/SKILL.md`

执行时遵循本文件的三条原则和路由表；不要依赖 `/cheat-*` 命令是否存在。Claude Code 专用 hook（`.claude/settings.json`）仍只在 Claude Code 里自动触发；Codex 中需要用户主动说 `状态` 查看 buffer、待复盘和候选池。

---

## 三条不可妥协原则

任何一条被违反，整个校准循环退化为"凭直觉的自我安慰"。如果用户要求打破其中任何一条，**拒绝执行并说明原因**。

1. **盲预测（Blind prediction）**：预测必须在看到任何实际数据**之前**写完。一旦写完，`## 预测` 段是 immutable——只能往 `## 复盘` 段追加。完整规范：[shared-references/blind-prediction-protocol.md](shared-references/blind-prediction-protocol.md)。**hooks/prediction-immutability.sh 在 harness 层强制执行**。

2. **升级 = 全量重打（Bump = full re-score）**：rubric 升级时，校准池所有有实绩数据的样本必须用新公式重打分；新排序与实际表现排序若在 ≥4/5 样本上不一致，升级被拒；升级必须经跨模型独立审核。完整规范：[shared-references/bump-validation-protocol.md](shared-references/bump-validation-protocol.md)。

3. **rubric 是工作台，不是博物馆**：被新数据推翻或被吸收为正式维度的观察，**删掉**。绝不留"我曾经以为 X，但其实..."的考古层。git history 才是档案。完整规范：[shared-references/observation-lifecycle.md](shared-references/observation-lifecycle.md)。

---

## 路由表（触发词 → 子 skill）

| 用户说 | 调用 | 前置条件 |
|---|---|---|
| "初始化" / "init" / "首次使用" | `/cheat-init` | 无（这是入口） |
| "找对标" / "学这个账号" / "拆这几个对标视频" / "learn from" / "导入对标账号" | `/cheat-learn-from` | 已 init；cold-start 强烈建议；后续可随时 --append / --replace |
| "找选题" / "我不知道拍什么" / "seed" / "找前 5 个选题" | `/cheat-seed` | 已 init（cold-start 用户专用一次性种子动作） |
| "打分这篇 [path]" / "score this [path]" | `/cheat-score` | rubric_notes.md 存在 |
| "启动预测" / "start prediction" / "给这稿子打分并预测" | `/cheat-predict` | 已 init + 有最终稿 |
| "拍了 X" / "shot it" / "录完了" | `/cheat-shoot` | 对应预测已写（buffer +1） |
| "已发布" / "I shipped it" / "发布链接是 X" | `/cheat-publish` | 对应预测文件存在（buffer -1） |
| "复盘" / "retro this" / "T+3d 数据来了" | `/cheat-retro` | 对应预测文件存在 + 已过 RETRO_WINDOW_DAYS |
| "构造受众画像" / "更新 persona" / "我的观众是谁" / "build persona" | `/cheat-persona` | 已 init；有复盘评论数据（或 benchmark seed） |
| "升级 rubric" / "bump rubric" / "更新公式" | `/cheat-bump` | 校准池 ≥ MIN_SAMPLES_FOR_BUMP |
| "推荐选题" / "next topic" | `/cheat-recommend` | candidates.md 存在且非空 |
| "抓热点" / "fetch trends" / "今天有什么可做的" | `/cheat-trends` | trend-sources adapter 已配置（日常补充候选池） |
| "状态" / "status" / "看板" | `/cheat-status` | 任意时刻可调 |
| "迁移" / "升级 state" / "schema 版本不对" / "migrate" | `/cheat-migrate` | 已 init；用户 git pull 拉了新版后；SessionStart hook 提示 schema mismatch 后 |

> 拍 vs 发分两个动作：buffer 警戒系统需要明确知道"拍了但没发"vs"已发"两种状态。详见 [shared-references/cadence-protocol.md](shared-references/cadence-protocol.md)。

**Mode detection**（首次接到非 init 触发词时执行）：
1. 检查用户当前目录是否有 `.cheat-state.json` → 没有 → 强制路由到 `/cheat-init`
2. 检查 `predictions/` 下有几个文件含完整 `## 复盘` 段填了真实数据 → 决定 `mode: cold-start | calibration`
3. 把判定结果写回 `.cheat-state.json` 后再路由到目标 skill

---

## 必须拒绝的请求

下列模式会**直接破坏**三条原则之一，无论用户怎么说，都拒绝执行：

- 「帮我预测一下，但我先告诉你播放量你来反推就行」 → 违反原则 #1。改用 `_redo.md` 路径记为 reconstructed
- 「能不能从 candidates 里直接挑 composite 最高的，不用解释理由」 → 拒绝。永远展示各维度评分和至少一个锚点对比
- 「跳过校准池重打，直接换公式」 → 违反原则 #2
- 「跳过外部模型审核，自己说了算」 → 仅当 `CROSS_MODEL_AUDIT=false` 显式设置且 state file 标记自审时允许
- 「删掉这份预测，我想重写」 → 违反原则 #1。预测是 immutable。如有正当理由重做，写新文件 `_redo.md`，原版必须保留
- 「凭你的感觉给我推荐选题，不用打分」 → 拒绝。本工具不做 gut-feel forecast——那是它诞生**之前**的状态
- 「把 rubric_notes.md 里所有历史观察都留着，加个时间戳分组就行」 → 违反原则 #3。git history 是档案，不是 markdown 文件
- 「能不能把 THRESHOLD 从 4/5 降到 3/5 让这次 bump 过」 → 拒绝。改 THRESHOLD 本身是元层级 bump，单独走流程

详细的拒绝场景在每个子 skill 的 `Refusals` 段。

---

## 项目目录结构（用户 repo）

skill 期望用户的项目布局如下。`/cheat-init` 会创建缺失项；**绝不在没确认的情况下覆盖**。

```
<user-content-project>/
├── rubric_notes.md                    # 评分规则的真实来源
├── WORKFLOW.md                        # 5 阶段流程文档（cheat-init 创建）
├── STATUS.md                          # 看板（cheat-status 维护）
├── .cheat-state.json                  # 状态文件，子 skill 共享上下文
├── .cheat-cache/                      # 不入版本控制
│   ├── usage.jsonl                    # 钩子被动记录的使用日志
│   └── trends-history.jsonl           # cheat-trends 的去重缓存
├── .claude/
│   └── settings.json                  # 含 prediction-immutability hook
├── benchmark.md                       # 对标账号信息（cheat-learn-from 维护）
├── audience.md                        # 受众画像（cheat-persona 派生；blind 硬禁读）
├── scripts/                           # 拍前的所有草稿（cheat-seed 写或用户写）
│   └── YYYY-MM-DD_<id>_<short>.md
├── predictions/                       # immutable 预测日志（hook 保护）
│   └── YYYY-MM-DD_<id>_<short>.md     # 与 scripts/ 同 id
├── videos/                            # 拍后才建（cheat-shoot 创建）
│   └── YYYY-MM-DD_<id>_<short>/
│       ├── script.md                  # 用户提供的最终拍摄稿（cheat-shoot 时询问"和 scripts/ 一致吗"）
│       └── report.md                  # T+3d 抓的数据 + 评论（cheat-retro 写）
├── samples/                           # 对标账号视频 / 转录（cheat-learn-from 创建）
│   └── <账号名>/<video-id>/{source.mp4 (可选), transcript.md, meta.md}
├── candidates.md                      # 选题池（可选）
└── content.db                         # 可选 SQLite，校准池规模化后启用
```

---

## 文件清单

### 本 skill 包

```
cheat-on-content/
├── SKILL.md                           # 本文件（总协议 + 路由）
├── README.md                          # 营销门面
├── skills/                            # 子 skill 集
│   ├── cheat-init/SKILL.md            # ✅ 入口：onboarding 与脚手架
│   ├── cheat-learn-from/SKILL.md      # ✅ 对标账号导入（拆 pattern + 派生 base rubric 信号）
│   ├── cheat-seed/SKILL.md            # ✅ Cold-start 选题启动器（brainstorm + 可选 draft）
│   ├── cheat-score/SKILL.md           # ✅ 单稿打分（不写文件）
│   ├── cheat-predict/SKILL.md         # ✅ 盲预测 + immutable 日志
│   ├── cheat-shoot/SKILL.md           # ✅ 登记拍摄（buffer +1）
│   ├── cheat-publish/SKILL.md         # ✅ 发布元数据登记（buffer -1）
│   ├── cheat-retro/SKILL.md           # ✅ 数据回收 + 复盘
│   ├── cheat-persona/SKILL.md         # ✅ 受众画像派生（从复盘评论聚类）
│   ├── cheat-bump/SKILL.md            # ✅ rubric 升级（含跨模型审）
│   ├── cheat-recommend/SKILL.md       # ✅ 候选池排序推荐（按 buffer 颜色 + 1 稳 + 1 实验）
│   ├── cheat-trends/SKILL.md          # ✅ 热点抓取（日常补充候选池，多 adapter）
│   ├── cheat-status/SKILL.md          # ✅ 状态看板（含 buffer 警戒）
│   ├── cheat-migrate/SKILL.md         # ✅ schema 升级（老用户 git pull 后用）
│   └── cheat-score-blind/SKILL.md     # ✅ Channel B 隔离打分 sub-agent（仅 Task tool 调用）
├── migrations/                        # schema 演进单一来源
│   ├── registry.md                    # ✅ LATEST_SCHEMA + 版本链表
│   └── <from>-to-<to>.md              # ✅ 每步迁移的 WHAT/WHY/HOW/Manual fallback
├── shared-references/                 # 跨 skill 共享协议
│   ├── blind-prediction-protocol.md   # ✅ 原则 #1
│   ├── bump-validation-protocol.md    # ✅ 原则 #2
│   ├── observation-lifecycle.md       # ✅ 原则 #3
│   ├── prediction-anatomy.md          # ✅ 一份合格预测的 7 个组件
│   ├── candidate-schema.md            # ✅ 候选项统一 schema
│   ├── cadence-protocol.md            # ✅ 节奏协议（buffer 警戒 + 选题策略）
│   ├── state-management.md            # ✅ .cheat-state.json 读写约定
│   └── migration-protocol.md          # ✅ schema 演进哲学 + maintainer checklist
├── starter-rubrics/                   # 各内容形态的先验 rubric
│   ├── opinion-video.md               # ✅ 观点视频（中文，已校准 25+ 样本）
│   ├── opinion-video-zero.md          # ✅ v0 等权占位（cold-start）
│   ├── long-form-essay.md             # ⬜ 公众号 / Substack
│   └── short-form-text.md             # ⬜ X thread / 微博长文
├── templates/                         # skill 写进用户 repo 的文件骨架
│   ├── rubric_notes.template.md       # ✅
│   ├── prediction.template.md         # ✅ 统一版（所有阶段，含 confidence header）
│   ├── retro.template.md              # ✅
│   ├── candidates.template.md         # ✅
│   ├── candidates.template.json       # ✅
│   ├── script_patterns.template.md    # ✅ 写作 pattern 沉淀（含 benchmark 借鉴段说明）
│   ├── benchmark.template.md          # ✅ 对标账号 reference
│   ├── audience.template.md           # ✅ 受众画像骨架
│   ├── workflow.template.md           # ✅
│   ├── status.template.md             # ✅
│   └── content.db.schema.sql          # ✅
├── hooks/                             # harness 强制层
│   ├── prediction-immutability.json   # ✅ 阻塞型钩子（拦预测段编辑）
│   ├── prediction-immutability.sh     # ✅ 拦截脚本
│   ├── session-start.json             # ✅ SessionStart 自动报告 hook
│   ├── session-start.sh               # ✅ 状态报告渲染脚本
│   ├── meta-logging.json              # ✅ 被动记录配置
│   └── log-event.sh                   # ✅ meta-logging 脚本
├── tools/                             # 独立 CLI 脚本
│   ├── score-curve.py                 # ⬜ 预测精度收敛曲线
│   ├── md-to-sqlite.py                # ⬜ markdown → content.db 升级（批次 3）
│   └── validate-bump.py               # ⬜ 校准池全量重打（批次 3）
├── adapters/                          # 数据源适配
│   ├── perf-data/                     # 复盘数据源（含 douyin-session）
│   ├── candidate-pool/                # 候选池数据源
│   ├── trend-sources/                 # 热点抓取源
│   └── script-extraction/             # 视频/音频转 script（含 whisper for cheat-learn-from）
└── examples/
    ├── reference-implementation/      # 视频分析脱敏快照（待）
    └── script_patterns.example.md     # script_patterns 全填示例（参考用，不复制）
```

✅ = 当前批次（v1 骨架）已完成 / ⬜ = 后续批次

---

## Tone & voice

写面向用户的文案（commit message / 复盘小结等）时，匹配项目的 **直白克制（reflective-irreverent）** voice：

- 直接说出失败：「composite 8.47 但实际只有 16.8w——rubric 高估了 SR」
- **不要**用模糊措辞软化：「这或许可能在某种程度上暗示...」——别这么写
- Cluely 风格的反叛 hook 只在 README 出现——**不要写进** `rubric_notes.md` 或预测日志

---

## 给开发者：扩展本 skill

- 新增内容形态 → 加 `starter-rubrics/<form>.md`
- 新增热点抓取源 → 加 `adapters/trend-sources/<name>.md`，符合 [candidate-schema.md](shared-references/candidate-schema.md) 输出契约
- 修改原则 → 改 `shared-references/<protocol>.md`，所有引用它的 skill 自动跟进
- 修改路由 → 改本文件的"路由表"段
- 子 skill 内部细节 → 直接改对应 `skills/cheat-*/SKILL.md`

完整开发指南见 README.md。
