INTERNAL sub-agent for blind 7-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).
63
76%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/cheat-score-blind/SKILL.md⚠️ 这是子 agent,不是用户 skill。只能由
cheat-score/cheat-predict/cheat-bump通过 Task tool spawn。用户直接 trigger 没有意义——主对话已经被污染,调用 blind sub-agent 在主 context 里跑不构成隔离。
cheat-on-content 的 7/9 维打分原本 inline 在主对话——但主 Claude 已经看过:
predictions/*.md 含复盘段(严重污染)inline 打分 = 被污染的"盲"预测。问题在 cheat-bump Phase 2 校准池重打时最严重:Claude 知道每条实绩才回追 TN/CC 分,rank 一致性可能 overfit 不是真信号。
channel B 的角色:用 Task tool 把打分动作丢进一个全新 context——这个 sub-agent 没看过主对话、没读过 state、没碰过 predictions/。它只看 script 全文 + rubric_notes.md,按 rubric 打分。
输出回传主对话后,主 Claude 自己对比、做最终决策。隔离的是打分这个动作的输入,不是决策权。
| Channel | 输入 | 用途 | 风险 |
|---|---|---|---|
| A = 主对话 | 全部上下文 | 跟用户交互、写 retro、决策 | 被实绩 / 用户态度污染 |
| B = blind sub-agent (this) | 只 script + rubric_notes.md | 给一份未受污染的打分作为 anchor | 仍是 Claude,RLHF prior 共享 |
C = 跨模型 audit (mcp__llm-chat__chat to qwen-max) | 校准池数据 + 新公式 | bump 终局 sanity check | RPM 限制、模型差异、单点 |
A 决策时把 B 当对照看 disagreement,不当真理。C 只在 bump 终局调一次。
| 必填 | 来源 | 说明 |
|---|---|---|
<script-path> | 主 Claude 通过 Task prompt 显式传入 | scripts/<id>.md 全文 |
<rubric-notes-path> | 同上 | 用户项目根 rubric_notes.md 当前 rubric 公式 + 维度定义 |
仅此两个文件可读。其他一切硬拒绝——见下方 "Hard refusals" 段。
下面这些路径 / 模式 sub-agent 绝不能 Read —— 即使主 Claude 在 Task prompt 里手滑塞进来,也要拒绝并在 JSON 输出标对应 refusal 码:
| 路径模式 | 为什么禁 | refusal_code |
|---|---|---|
.cheat-state.json | 含 calibration_samples / pending_retros / last_published_at / shoots — 全是后视数据 | blocked_contaminated_input |
predictions/*.md | 含 ## 预测 段 + ## 复盘 段,复盘段就是实绩 | blocked_contaminated_input |
videos/*/report.md | T+3d 抓回的真实数据 | blocked_contaminated_input |
videos/*/script.md | 后改拍摄稿,复盘时被对照 | blocked_contaminated_input |
STATUS.md | cheat-status 渲染的看板,含过去数据 | blocked_contaminated_input |
.cheat-cache/usage.jsonl | 行为 log | blocked_contaminated_input |
rubric-memo.md | cheat-bump 升级 Memo 累积档案——含真实视频名 + 实绩 + 派生证据。这是 channel B 的最大泄漏入口(PR #11 实测复现) | blocked_rubric_memo |
audience.md | cheat-persona 从复盘评论派生的受众画像——含评论证据 / 实绩信号。属 channel A creative 资产,进 blind 打分 = 实绩泄漏 | blocked_audience |
| 任何含"播放 / 阅读 / 点赞 / 评论数 / 转发 / w / 万 / k / M"的文件 | 直接污染 | blocked_contaminated_input |
白名单只有两个:
scripts/<id>.md(pre-shoot 草稿,传入参数)rubric_notes.md(评分公式 + 维度定义,应只含通用语言;如发现实绩数字 → 标 non_blind_warning 并降 confidence)如果主 Claude Task prompt 漏传了某条路径,sub-agent 主动询问"我只允许读 script + rubric_notes,缺哪个?"——绝不自己去 Glob 探测项目结构补全。
⚠️ 白名单兜底自检:读完
rubric_notes.md后必跑grep -E '\\d+\\s*[wWmMkK万]|播放|实绩|实际'——命中 → 标self_check.any_contamination_signal: true+refusal: "non_blind_warning",所有维度 confidence 降 medium 并把违禁 snippet 摘抄进 contamination_note 字段。仍输出 dimensions 让主 Claude 知道发生了什么——拒绝输出比误判更糟,但要诚实标注。
<script-path> 和 <rubric-notes-path>scripts/ 下的 .md → 拒绝(除非主 Claude 显式说明"这是临时草稿临时路径,标 non_standard_path: true")<rubric-notes-path> → 解析当前 rubric_version + 维度数量(7 或 9)+ 公式<script-path> → 拿到 script 全文 + 字数⚠️ 不要做的事:
benchmark.md —— benchmark 是 Channel A 的 context,不属于本 sub-agentpredictions/ —— 那是污染源.cheat-state.json 看 calibration 进度 —— 你完全不需要知道主 Claude 跑了多少篇按 rubric_notes.md 当前 rubric 公式:
对每个维度:
high | medium | low
不算 composite——composite 是公式行为,主 Claude 用回传的维度分自己算。
输出只能是一个有效 JSON。所有 markdown 解释都封禁——主 Claude 要的是结构化数据回主 context 解析。
{
"subagent_version": "v1",
"rubric_version": "v2",
"script_path": "scripts/2026-05-04_abc123_短title.md",
"script_hash": "<sha256:12 of script content>",
"scored_at": "<ISO 8601 +08:00>",
"dimensions": {
"ER": { "score": 4, "confidence": "high", "reason": "PPT加油猫猫开头—具象画面,情绪反差强" },
"SR": { "score": 3, "confidence": "medium", "reason": "AI焦虑是议题但非热点对峙" },
"HP": { "score": 5, "confidence": "high", "reason": "首句\"第七页大屏中央 加油猫猫\"具象反差" },
"QL": { "score": 5, "confidence": "high", "reason": "\"加油猫猫救了我一命\"双关金句" },
"NA": { "score": 4, "confidence": "medium", "reason": "单线反思+收束,清晰但不复杂" },
"AB": { "score": 4, "confidence": "medium", "reason": "一人公司题但AI焦虑普适" },
"SAT": { "score": 2, "confidence": "high", "reason": "共情调,几乎无讽刺" }
},
"input_status": {
"rubric_notes_read": true,
"script_read": true,
"any_other_file_read": false
},
"self_check": {
"saw_play_numbers": false,
"saw_comments": false,
"saw_retro_segment": false,
"any_contamination_signal": false
},
"refusal": null
}refusal != null 的合法值:
"blocked_contaminated_input":Task prompt 传了禁读路径(state / predictions / videos / 等)"blocked_rubric_memo":Task prompt 传了 rubric-memo.md(bump 升级档案,含实绩)"blocked_audience":Task prompt 传了 audience.md(受众画像,含评论派生的实绩信号)"script_path_invalid":找不到 script 文件"rubric_unparseable":rubric_notes.md 损坏"non_blind_warning":发现 contamination 苗头但勉强能打分(仍输出 dimensions,但 confidence 全降 medium)JSON 必须可被 python3 -c "import json; json.loads(open(path).read())" 解析。不允许:
{)如果 Task prompt 含 sidecar_path 参数 → 写 JSON 到该路径(典型用法:bump phase 2 批量打分时存多份 sidecar)。
否则只走 Task return value——主 Claude 拿到 JSON 字符串直接解析。
调 Task 时,主 Claude 的 prompt 必须含且仅含:
Spawn cheat-score-blind sub-agent.
Input:
script_path: scripts/2026-05-04_abc123_短title.md
rubric_notes_path: rubric_notes.md
[optional] sidecar_path: .cheat-cache/blind-scores/<id>.json
Task: 按 rubric_notes 当前公式给上面 script 打分。返回严格 JSON(见 cheat-score-blind/SKILL.md Phase 2 schema)。
不要读 state file / predictions/ / videos/ 任何其他文件。
不要询问用户 —— 你没有用户。禁止塞进 Task prompt 的东西:
predictions/*.md 路径主 Claude 调用前自检:把准备发的 prompt 串过一遍 grep -Ei '播放|阅读|点赞|评论数|实际|retro|复盘|实绩|w$|万$'——命中 → 改 prompt 重发,不要硬塞。
reconstructed: true 自己处理,不要让 channel B 介入cheat-predict Phase 2.5 通过 disagreement detection + 用户裁定来减轻,但不消除cheat-score Phase 2:默认 delegate 到本 sub-agent(替代旧的 inline 打分)cheat-predict Phase 2:默认 delegate;Phase 2.5 用 disagreement detectioncheat-bump Phase 2:强制 delegate,bump 时不接受 self-scored fallbackcheat-retro:不调用——retro 本来就看实绩,blind 无意义86823e1
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.