登记一条视频已拍摄。**建 video folder + 询问实际拍摄稿是否与 scripts/<id>.md 一致 + buffer +1**。与 cheat-publish 配对:拍了进队列,发了出队列。触发词:"拍了"/"拍了 X"/"shot"/"shot it"/"已拍 X"/"录完了"。
68
84%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
把视频从"已写预测、未拍摄"状态推进到"已拍摄、未发布"状态。这一步:
videos/<同 id>/ 目录(之前没有的话)scripts/<id>.md 一致吗?"/cheat-predict — mode: v2 在原 prediction 文件 append ## 预测 v2 段cheat-shoot 自己不写预测内容——所有预测落盘逻辑在 cheat-predict。cheat-shoot 只负责检测改稿 + 派发。
为什么单独一个 skill:
[用户:拍了 scripts/2026-05-04_abc123_停止期待.md]
↓
[Phase 0: 解析路径 + 验证 prediction 已存在]
↓
[Phase 1: 检查是否已登记(避免重复)]
↓
[Phase 2: 建 videos/<id>/ + 询问"实际拍摄稿一致吗?"]
↓
[Phase 3: 写 videos/<id>/script.md]
↓
[Phase 4: append state.shoots]
↓
[Phase 5: 输出 buffer 状态]tools/diff_pct.py 调用:先 normalize(去 markdown header / 分隔线 / 列表标记 / 装饰标点 / 折叠所有空白),再算 char-level Levenshtein / max(len_a, len_b)。preferred backend rapidfuzz,fallback difflib.SequenceMatcher(stdlib,永远可用)。旧版 line-level 在口语化转录场景误报严重(draft 长 markdown 句 vs whisper 转录的短断句,内容几乎不变但 line-level 算出 ~200% diff)—— PR #14 修复diff -u | grep '^[+-]' | wc -l 算法| 必填 | 来源 |
|---|---|
<scripts-path-or-id> | 用户参数;缺失则询问 |
.cheat-state.json | 状态文件 |
scripts/*.md | pre-shoot 草稿 |
predictions/*.md | 验证对应预测存在 |
scripts/2026-05-04_abc123_停止期待.md2026-05-04_abc123_停止期待abc123 → glob scripts/*_abc123_*.md 找匹配scripts/<id>.md 存在:不存在 → 报错"找不到 pre-shoot 草稿"predictions/<同名>.md:
读 .cheat-state.json,检查 shoots[] 是否已含此 id:
videos/<id>_<short>/(同 scripts/ + predictions/ 的命名)拍 「<title>」 的时候,你实际用的稿子和 scripts/<id>.md 一致吗?
a) 一致——按草稿拍的
b) 改了一些——你能给我看下实际拍摄稿吗?我重新打分一次(v2 预测)
c) 大改了,基本是另一条 → 走 _redo 流程:
scripts/<id>_redo.md → 重新 cheat-predict → 再 cheat-shoot(原 prediction 留档脱钩)a 路径(一致):
cp scripts/<id>.md → videos/<id>/script.mdscript_consistency = consistentb 路径(改了):
询问用户实际拍摄稿——粘贴文本 / 文件路径 / 转录文件
若用户提供 → 写入 videos/<id>/script.md
若用户没保留(即兴)→ 标 script_lost,写占位文件 + 警告"v2 重判跳过——下次建议留稿(哪怕 voice memo 转录)",进 Phase 4
提供了的话:算 diff
# 解析 cheat-on-content 源码根(cheat-shoot 是 symlink 装的)
SKILL_REAL="$(readlink -f ~/.claude/skills/cheat-shoot 2>/dev/null || readlink ~/.claude/skills/cheat-shoot 2>/dev/null)"
if [[ -n "$SKILL_REAL" ]]; then
REPO_ROOT="$(cd "$SKILL_REAL/../.." && pwd)"
DIFF_TOOL="$REPO_ROOT/tools/diff_pct.py"
fi
if [[ -n "${DIFF_TOOL:-}" && -f "$DIFF_TOOL" ]] && command -v python3 >/dev/null 2>&1; then
# 默认 char-level Levenshtein on normalized text(rapidfuzz preferred, difflib fallback)
diff_pct=$(python3 "$DIFF_TOOL" "scripts/<id>.md" "videos/<id>/script.md")
else
# legacy line-level fallback——只在 python3 或 diff_pct.py 都不可用时用
added=$(diff -u scripts/<id>.md videos/<id>/script.md | grep -c '^+')
removed=$(diff -u scripts/<id>.md videos/<id>/script.md | grep -c '^-')
total_orig=$(wc -l < scripts/<id>.md)
diff_pct=$(( (added + removed) * 100 / total_orig ))
echo "⚠️ fallback 到 line-level diff——口语化转录会 inflate diff_pct,可能误触发 v2"
fi为什么 normalize + char-level:line-level diff 在创作者真实场景(draft 是 markdown 长句、拍摄稿是 whisper 转录的口语化短行)算出 ~200% 差异但内容几乎不变。char-level Levenshtein 在 normalize 后稳定反映内容差异,而非格式差异。详见 tools/diff_pct.py + tools/diff_pct_test.sh(3 fixture 在两个 backend 上全过)。
判定 v2 触发:
diff_pct >= 30 → 默认建议 v2 重判,主动调用 /cheat-predict — mode: v2 — prediction-file: predictions/<id>.md 传 videos/<id>/script.md 作 input。cheat-predict 走 v2 模式 append ## 预测 v2diff_pct < 30 → 询问用户:"只改了 N% 的内容,要重判吗?默认不(v1 预测仍有效)"。用户说要 → 同上调用;用户说不 → 跳过 v2,继续 Phase 4cheat-predict 完成 v2 落盘后,控制权回到 cheat-shoot 进 Phase 4
c 路径(大改):
videos/<id>/script.md,提示走 _redo 流程{
"shoots": [
...,
{
"video_folder": "videos/2026-05-04_abc123_停止期待/",
"prediction_file": "predictions/2026-05-04_abc123_停止期待.md",
"scripts_path": "scripts/2026-05-04_abc123_停止期待.md",
"shot_at": "<ISO timestamp>",
"script_consistency": "consistent" | "modified" | "lost",
"script_diff_pct": <0-100 int 或 null>,
"v2_prediction_written": <true/false>,
"script_hash_at_shoot": "<sha256:12 of videos/<id>/script.md>"
}
]
}v2_prediction_written: true 表示 prediction 文件里现在有 ## 预测 v2 段,cheat-retro 应读 v2 算偏差;false 表示沿用 v1。
读完 state 后立即算 buffer + 颜色(按 cadence-protocol.md 的派生规则):
✅ 已登记拍摄:videos/2026-05-04_abc123_停止期待/
预测文件:predictions/2026-05-04_abc123_停止期待.md
📦 当前 buffer:3 篇(🟢 绿色,正常)
按你的 cadence(隔日更)= 6 天 buffer,节奏稳定。
下一步:拍其他候选 / 等下个发布日 / 不动如果 buffer 颜色变了(如从绿到蓝)→ 高亮提醒:
📦 当前 buffer:6 篇(🔵 蓝色,**积压**)
⚠️ 建议暂停拍摄,全力发布存货 + 复盘。
按你的 cadence(日更)= 6 天预备,已超过健康上限。ad_hoc: true/cheat-predict 写完 prediction → 用户拍摄 → /cheat-shoot 登记/cheat-publish 发布时把对应项从 state.shoots 移除/cheat-status 看板的 buffer 数字直接来自 state.shoots.length/cheat-recommend 看 buffer 颜色调推荐策略{
"shoots": [
{
"video_folder": "videos/2026-05-04_abc123_停止期待/",
"prediction_file": "predictions/2026-05-04_abc123_停止期待.md",
"shot_at": "2026-05-04T18:30:00+08:00",
"ad_hoc": false // true if user shot without going through full flow
}
]
}按 shot_at 升序——最早拍的在前面。/cheat-status 显示最早一项的 days-since-shoot 警告(避免有视频拍了 30 天没发)。
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.