# Cheat Score

给单篇稿子打 rubric 分。**只在控制台输出，不写文件，不预测**。触发词："打分这篇 [path]"/"score this...

- Repository: https://github.com/XBuilderLAB/cheat-on-content (7435 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-26
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-score -g -a claude-code -y`
Codex: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-score -g -a codex -y`
Cursor: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-score -g -a cursor -y`
Gemini CLI: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-score -g -a gemini-cli -y`

## Description

给单篇稿子打 rubric 分。**只在控制台输出，不写文件，不预测**。触发词："打分这篇 [path]"/"score this [path]"/"给这稿子打分"/"先打分看看"。是 cheat-predict 之前的轻量探索动作。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# /cheat-score, 单稿打分

打分但**不预测**。用户用它快速看稿子的 composite，决定是否值得进入正式预测流程。

## Overview

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

## Constants

- **RUBRIC_PATH = rubric_notes.md**, 当前 rubric 来源
- **OUTPUT_DETAIL = full**, full: 含每维度理由；compact: 仅分数表

> 💡 调用时覆盖：`/cheat-score draft.md, OUTPUT_DETAIL: compact`

## Inputs

| 必填 | 来源 |
|---|---|
| `<draft-path>` | 用户作为参数传入；如缺失则在对话里询问 |
| `rubric_notes.md` | 用户项目根 |
| `.cheat-state.json` | 用户项目根（用于读当前 `rubric_version` 与 mode） |

## Workflow

### Step 1：前置检查

1. 读 `.cheat-state.json` → 不存在则提示用户先跑 `/cheat-init`，停止
2. 读 `<draft-path>` → 不存在或无内容 → 报错并停止
3. 读 `rubric_notes.md` 找到当前生效的公式段（一般在"当前评分维度"或"综合分公式"位置）

### Step 2：识别公式与维度

从 `rubric_notes.md` 解析出：
- 当前 rubric_version
- 维度列表与权重（如 `ER×1.5 + SR×1.5 + HP×1.5 + QL + NA + AB + SAT`）
- 归一化常数（如 `/ 8.5 × 2.0`）
- 每个维度的 0-5 含义（从"当前评分维度"段表格读）

如果 `rubric_notes.md` 格式与预期不符（用户手改过结构）→ 询问用户当前公式是哪一行，**不要自己猜**。

### Step 3：**delegate 到 blind sub-agent**（不再 inline 打分）

主对话已经被用户对话 / 已发数据 / 历史 retro 段污染, , inline 打分等于带着后视镜判分。

改成**通过 Task tool 调 `/cheat-score-blind` sub-agent**，主 Claude 只做调度 + review。详见 [skills/cheat-score-blind/SKILL.md](../cheat-score-blind/SKILL.md)。

**Task prompt 模板**（**只能含**下面这些）：

```
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/ 任何其他文件。
不要询问用户, , 你没有用户。
```

**禁止**塞进 Task prompt 的东西（[cheat-score-blind/SKILL.md](../cheat-score-blind/SKILL.md) 的"主 Claude 调用契约"段）：
- 用户对话引用 / 摘录
- 含播放数 / 万 / w / k 等字眼
- "前一次预测是 X" / "实际播放是 Y" 等 hint
- 任何 `predictions/*.md` 路径

调用前 grep 自检：`echo "<prompt>" | grep -Ei '播放|阅读|点赞|评论数|实际|retro|复盘|实绩|w$|万$'` 命中 → 改 prompt 重发。

### Step 4：解析 sub-agent 回传 JSON + review

sub-agent 返回严格 JSON。主 Claude：

The rest: https://github.com/XBuilderLAB/cheat-on-content/blob/HEAD/skills/cheat-score/SKILL.md
