| name | cheat-score |
| description | 給單個任務規格/學習主題/Coding Spec 打 rubric 分。**只在控制台輸出,不寫文件,不預測**。觸發詞:"打分這篇 [path]"/"score this [path]"/"給這規格打分"/"先打分看看"。是 cheat-predict 之前的輕量探索動作。 |
| argument-hint | <draft-path> |
| allowed-tools | Read, Glob, Grep |
/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:前置檢查
- 讀
.cheat-state.json → 不存在則提示用戶先跑 /cheat-init,停止
- 讀
<draft-path> → 不存在或無內容 → 報錯並停止
- 讀
rubric_notes.md 找到當前生效的公式段
Step 2:識別公式與維度
從 rubric_notes.md 解析出:
- 當前 rubric_version
- 維度列表與權重
- 每個維度的 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。
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/ / sessions/ 任何其他文件。
不要詢問用戶 —— 你沒有用戶。
禁止塞進 Task prompt 的東西(cheat-score-blind/SKILL.md 的"主 Claude 調用契約"段):
- 用戶對話引用 / 摘錄
- 含實際結果數字(K%、RW%、Q分、完成時間等)
- "前一次預測是 X" / "實際結果是 Y" 等 hint
- 任何
predictions/*.md 路徑
調用前 grep 自檢:echo "<prompt>" | grep -Ei '實際|retro|復盤|實績|K%|RW%|完成時間|留存' 命中 → 改 prompt 重發。
Step 4:解析 sub-agent 回傳 JSON + review
sub-agent 返回嚴格 JSON。主 Claude:
- 解析 dimensions 段(含 score + per-dim confidence + reason)
- 校驗
self_check.any_contamination_signal == false,否則警告
- 按 rubric_notes 公式算 composite(公式邏輯在主,分數來自 sub-agent)
- 不修改 sub-agent 給的維度分——score 只是顯示。如果用戶挑刺("IR 給 3 不是 4"),主 Claude 記錄到
User Override 但 sub-agent 原始分留檔
如果 sub-agent 返回 refusal != null:
blocked_contaminated_input → 報告 Task prompt 含違禁字段,讓主 Claude 重發
script_path_invalid → 檢查路徑
rubric_unparseable → 提示用戶 rubric_notes.md 損壞
non_blind_warning → 仍接受 dimensions(但 confidence 全 medium),警告
Step 5:算 composite + 輸出
按當前公式算綜合分。控制台輸出(OUTPUT_DETAIL=full,以 ai-coding 為例):
📊 [draft.md 短標題] — 打分(rubric: v0)
| 維度 | 分 | 理由 |
|---|---|---|
| SP (規格清晰度) | 4 | "Spec 完整,邊界清晰,無歧義" |
| LV (AI槓桿點) | 3 | "依賴 3 個外部庫,中等槓桿" |
| TS (可測試性) | 3 | "tkinter + openpyxl,集成測試難" |
| CO (複雜度) | 4 | "功能邊界明確,複雜度可控" |
| IR (集成風險) | 2 | "多庫協同,集成風險偏高" |
公式:(SP + LV + TS + CO + IR) / 5
composite = (4 + 3 + 3 + 4 + 2) / 5 = **3.20**
下一步建議:
- 如果你已有完整規格、準備開始執行 → 說 "啟動預測"
- 如果想再改規格 → 改完再打一次(多次打分不留痕跡)
- 如果想看歷史相近 composite 的樣本 → 說 "找 composite 3.0-3.5 的錨點"
OUTPUT_DETAIL=compact 時僅輸出分數表 + composite,不附理由列。
Step 6:絕不做的事
- ❌ 寫任何文件(包括 predictions/、rubric_notes.md)
- ❌ 給 bucket 概率分布(那是 cheat-predict 的活)
- ❌ 觸發"已完成"或"復盤"邏輯
- ❌ 提議 rubric 升級(即使打分時發現明顯異常也只在控制台提示,不動 rubric)
Key Rules
- 打分走 sub-agent。主 Claude 不再 inline 打分。看 cheat-score-blind/SKILL.md 的隔離協議
- 整數分。不允許 4.5、3.7
- 盲打優先。sub-agent 只看 script + rubric,天然盲——這是它存在的全部理由
- 理由是診斷工具。每個維度的 1-30 字理由不是裝飾——復盤時用來找出哪個維度判斷錯了
- 不寫文件。這是 score 與 predict 的核心區別。score 是探索,predict 是承諾
Refusals
- 「打分順便預測一下」 → 拒絕。請改用
/cheat-predict。原因:predict 必須走 blind check + 寫 immutable 日誌,score 跳過這些
- 「打完分把分數寫進 rubric_notes.md 的觀察段」 → 拒絕。observation lifecycle 規定觀察必須有"實績 vs 預測"對比,光有打分不構成觀察
- 「跳過 blind sub-agent 讓主 Claude 直接打」 → cheat-score 不接受這種 escape hatch。score 是輕量探索,沒理由放棄隔離。如真的 Task tool 不可用 → 提示用戶配置後再試
Integration
- 是
cheat-predict 的前置探索:用戶可以反復 score 不同規格版本,確定一份再 predict
- score 不更新
.cheat-state.json——這是無副作用操作
- 如果用戶連續 score 同一規格 ≥3 次 → 控制台溫和提示"反復打分會引入決策疲勞,差不多可以決定了"