SuperAPI AI Directory

cheat-score

General & other

View repository

Updated 10-15 23:47

About this skill

/cheat-score — single-draft scoring

scoring butnot predicting. Users use it to quickly check a draft's composite and decide whether it's worth entering the formal prediction process.

Overview

[用户:打分这篇 draft.md]
  ↓
[读 draft.md + rubric_notes.md]
  ↓
[逐维度打 0-5 + 写一行理由 + 算 composite]
  ↓
[控制台输出:评分 + composite + 推荐下一步]
  ↓
[结束 — 不写任何文件]

Constants

  • RUBRIC_PATH = rubric_notes.md — current rubric source
  • OUTPUT_DETAIL = full — full: includes per-dimension reasons; compact: score table only

💡 Overrides when invoking:/cheat-score draft.md — OUTPUT_DETAIL: compact

Inputs

required source
<draft-path> passed by the user as a parameter; if missing, ask in the conversation
rubric_notes.md user project root
.cheat-state.json user project root (used to read the current rubric_version and mode)

Workflow

Step 1: Pre-checks

  1. Read .cheat-state.json → if it doesn't exist, prompt the user to run /cheat-init, stop
  2. Read <draft-path> → if it doesn't exist or has no content → report an error and stop
  3. Read rubric_notes.md and find the currently effective formula section (usually in the "current scoring dimensions" or "composite score formula" location)

Step 2: Identify the formula and dimensions

From rubric_notes.md , parse out:

  • current rubric_version
  • dimension list and weights (e.g. ER×1.5 + SR×1.5 + HP×1.5 + QL + NA + AB + SAT)
  • normalization constant (e.g. / 8.5 × 2.0)
  • the 0-5 meaning for each dimension (read from the "current scoring dimensions" section table)

If rubric_notes.md format doesn't match expectations (the user manually changed the structure) → ask the user which line the current formula is on,do not guess。

Step 3:delegate to blind sub-agent(no longer score inline)

The main conversation is already polluted by user dialogue / sent data / historical retro sections—inline scoring means judging with hindsight.

change tocall via the Task tool /cheat-score-blind sub-agent, and the main Claude only does scheduling + review. See skills/cheat-score-blind/SKILL.md。

Task prompt template(may only containthe following):

Spawn cheat-score-blind sub-agent.

Input:
  script_path: <用户给的 draft path>
  rubric_notes_path: rubric_notes.md

Task: 按 rubric_notes 当前公式给上面 script 打分。返回严格 JSON(见 cheat-score-blind SKILL.md Phase 2 schema)。
不要读 state file / predictions/ / videos/ 任何其他文件。
不要询问用户 —— 你没有用户。

Prohibitedthings to stuff into the Task prompt (cheat-score-blind/SKILL.md 's "main Claude invocation contract" section):

  • user dialogue quotes / excerpts
  • contains words like view count / 10k / w / k
  • hints like "the previous prediction was X" / "the actual view count is Y"
  • any predictions/*.md path

grep self-check before invoking:echo "<prompt>" | grep -Ei '播放|阅读|点赞|评论数|实际|retro|复盘|实绩|w$|万$' hit → revise the prompt and resend.

Step 4: Parse the sub-agent's returned JSON + review

The sub-agent returns strict JSON. Main Claude:

  1. parses the dimensions section (including score + per-dim confidence + reason)
  2. verify self_check.any_contamination_signal == false, otherwise warn
  3. compute composite using the rubric_notes formula (the formula logic is in the main, scores come from the sub-agent)
  4. do not modify the dimension scores given by the sub-agent—score is display only. If the user nitpicks ("AB gave 3, not 4"), main Claude records it to User Override but the sub-agent's original score is kept on file

If the sub-agent returns refusal != null:

  • blocked_contaminated_input → report that the Task prompt contains prohibited fields, and have the main Claude resend
  • script_path_invalid → check the path
  • rubric_unparseable → prompt the user that rubric_notes.md is corrupted
  • non_blind_warning → still accepts dimensions (but confidence is all medium), warning

Step 5: compute composite + output

Compute the composite score using the current formula. Console output (OUTPUT_DETAIL=full):

📊 [draft.md 短标题] — 打分(rubric: v2)

| 维度 | 分 | 理由 |
|---|---|---|
| ER (情感共鸣)        | 5 | "半夜三点翻聊天记录" 极端具象 |
| HP (钩子强度)        | 5 | IS 句一句锁定受众 |
| QL (金句密度)        | 5 | MVP 句"间歇性希望"独立可传 |
| NA (叙事性)          | 3 | 平铺直叙,弱弧线 |
| AB (受众广度)        | 5 | 暗恋/前任普适 |
| SR (社会议题共振)    | 2 | 纯个人情感,无社会托底 |
| SAT (讽刺深度)       | 4 | 致谢段自指反讽 |

公式:(ER×1.5 + SR×1.5 + HP×1.5 + QL + NA + AB + SAT) / 8.5 × 2.0
composite = (5×1.5 + 2×1.5 + 5×1.5 + 5 + 3 + 5 + 4) / 8.5 × 2.0 = **8.24**

📍 落在 30-100w 桶(基于 starter-rubrics 的 bucket 边界)

下一步建议:
- 如果你已写定最终稿、准备发布 → 说 "启动预测"
- 如果想再改稿子 → 改完再打一次(多次打分不留痕迹)
- 如果想看历史相近 composite 的样本 → 说 "找 composite 8.0-8.5 的锚点"

When OUTPUT_DETAIL=compact, output only the score table + composite, without the reasons column.

Step 6:Neverthings to do

  • ❌ Write any files (including predictions/, rubric_notes.md, candidates.md)
  • ❌ Give bucket probability distributions (that's cheat-predict's job)
  • ❌ Trigger "published" or "retrospective" logic
  • ❌ Propose rubric upgrades (even if obvious anomalies are found during scoring, only prompt in the console, do not touch the rubric)

Key Rules

  1. Scoring goes through a sub-agent. The main Claude no longer scores inline. See cheat-score-blind/SKILL.md 's isolation protocol
  2. Integer scores. 4.5, 3.7 are not allowed
  3. Blind scoring takes priority. The sub-agent only sees the script + rubric, naturally blind—this is the entire reason it exists
  4. Reasons are a diagnostic tool. The 1-30 character reason for each dimension is not decoration—it is used during retrospective to find which dimension was judged wrong
  5. Do not write files. This is the core difference between score and predict. score is exploration, predict is commitment
  6. Do not compute candidate composite. The composite field in candidates.md is written in cheat-trends/cheat-recommend—score only serves "specific drafts that have already been written"

Refusals

  • "Score and also predict while you're at it" → refuse. Please use /cheat-predict. Reason: predict must go through blind check + write an immutable log, score skips these
  • "After scoring, write the score into the observation section of rubric_notes.md" → refuse. The observation lifecycle requires observations to have a "actual results vs prediction" comparison; scoring alone does not constitute an observation
  • "Can you just tell me whether it will go viral" → refuse. Giving a specific composite + bucket judgment requires going through the predict process; score only outputs the mechanical calculation under the current rubric
  • "Skip the blind sub-agent and let the main Claude score directly" → cheat-score does not acceptthis escape hatch (unlike cheat-predict; cheat-predict has --skip-blind). score is lightweight exploration, there is no reason to give up isolation. If the Task tool is truly unavailable → prompt the user to configure it and try again

Integration

  • is cheat-predict 's prerequisite exploration: the user can repeatedly score different draft versions, settle on one, then predict
  • score does not update .cheat-state.json—this is a side-effect-free operation
  • If the user scores the same draft ≥3 times in a row → gently prompt in the console "repeated scoring introduces decision fatigue, it's about time to decide"