cheat-on-content
给所有想把"感觉"变成可校准预测的内容创作者。**方法论通用**——打分 → 盲预测 → T+3d 复盘 → 进化 rubric 的循环适用任何能被量化(播放 / 阅读 / 收听 / 点击)的内容。**rubric 是循环的内容,不是循环本身**——当前内置一份观点视频 rubric(参考博主 25+…
从配置的热点源(HN / Reddit / YouTube trending / B 站热门 / 等)抓今天的热门话题,去重 + 粗打分 + 写入 candidates.md。**绝大部分人没有候选池——这是让"我没素材"问题在 onboarding 第二步就消失的钥匙**。触发词:"抓热点"/"fetch trends"/"今天有什么可做的"/"trending now"/"找选题"。
$ npx -y skills add LiHongwei-cn/lihongwei-cn --skill cheat-trends --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/cheat-trendsContext preview
The summary Claude sees to decide when to auto-load this skill.
从配置的热点源(HN / Reddit / YouTube trending / B 站热门 / 等)抓今天的热门话题,去重 + 粗打分 + 写入 candidates.md。**绝大部分人没有候选池——这是让"我没素材"问题在 onboarding 第二步就消失的钥匙**。触发词:"抓热点"/"fetch trends"/"今天有什么可做的"/"trending now"/"找选题"。
name: cheat-trends description: 从配置的热点源(HN / Reddit / YouTube trending / B 站热门 / 等)抓今天的热门话题,去重 + 粗打分 + 写入 candidates.md。**绝大部分人没有候选池——这是让"我没素材"问题在 onboarding 第二步就消失的钥匙**。触发词:"抓热点"/"fetch trends"/"今天有什么可做的"/"trending now"/"找选题"。 argument-hint: [— sources: <comma-separated>] [— max-per: 20] allowed-tools: Bash(*), Read, Write, Edit, Glob, WebFetch, Skill
多 adapter 模式:读各 `trend-sources` adapter 的输出 → 去重 → 粗打分 → 写入 `candidates.md`。
[用户:抓热点] ↓ [Phase 0: 读 .cheat-state.json 拿 enabled adapters] ↓ [Phase 1: 对每个 adapter 调 fetch] ↓ [Phase 2: normalize 到 candidate-schema] ↓ [Phase 3: 去重(vs candidates / predictions / trends-history)] ↓ [Phase 4: 对每个新 item 粗打分(调 cheat-score 内联逻辑)] ↓ [Phase 5: 排序 + 询问用户哪些加入 candidates.md] ↓ [Phase 6: 写入 + 更新 trends-history.jsonl 缓存]
> 💡 调用时覆盖:`/cheat-trends — sources: manual-paste,hackernews,bilibili-popular — max-per: 10`
| 必填 | 来源 | |---|---| | `.cheat-state.json` | 默认 sources | | `adapters/trend-sources/<name>.md` | 各 adapter 的实现描述 | | `candidates.md` | 去重对照 | | `predictions/*.md` | 去重对照(已发的不再推) | | `.cheat-cache/trends-history.jsonl` | 历史抓取去重缓存 |
# 伪代码
state = read('.cheat-state.json')
enabled_adapters = args.sources or state.get('enabled_trend_sources', ['manual-paste'])如 enabled_adapters 为空 → 输出引导:
你目前没有启用任何热点源。 最快配法: - 临时跑:/cheat-trends — sources: manual-paste,hackernews - 永久启用:编辑 .cheat-state.json 的 enabled_trend_sources 数组 可用 adapter(详见 adapters/trend-sources/): - manual-paste(默认,永远能用) - hackernews(HN Algolia API,无需 key) - reddit-rising(公开 .json 端点) - youtube-trending(需 YouTube Data API key) - bilibili-popular(公开端点,偶有变动) - xhs-explore / douyin-hot(fragile,需 cookie) - thirdparty-paid(新榜 / 飞瓜,需自己接 API)
对每个 adapter,读其 `adapters/trend-sources/<name>.md` 中描述的 fetch 接口(实际是 Bash 调底层 Python / shell / WebFetch):
| Adapter | 实现机制 | |---|---| | `manual-paste` | 询问用户:"粘贴你今天的候选 URL/标题列表(每行一条)" → 解析每行,对 URL 做 WebFetch 拓展 snippet | | `hackernews` | WebFetch HN Algolia API:`https://hn.algolia.com/api/v1/search?tags=front_page&hitsPerPage={N}` → 提取 title/url/snippet | | `reddit-rising` | WebFetch Reddit JSON:`https://www.reddit.com/r/<subreddit>/rising.json?limit={N}` | | `youtube-trending` | 需 API key 配置在 `.env` 或 .cheat-state.json,调 YouTube Data API v3 `videos?chart=mostPopular` | | `bilibili-popular` | WebFetch B 站 popular 接口 | | `xhs-explore` / `douyin-hot` | 需用户提供 cookie 路径,调对应 platform-stub 描述的接口;缺 cookie → skip 该 adapter | | `thirdparty-paid` | schema only——读 `adapters/trend-sources/thirdparty-paid.md`,让用户自己接 |
每个 adapter 输出符合 [candidate-schema.md](../../shared-references/candidate-schema.md) 的 items。
**优雅降级**:单 adapter 失败(API key 缺失 / 端点 503 / cookie 失效)→ skip 该 adapter,**不抛异常**,在汇总里说明:
✅ hackernews: 拉到 18 条 ⚠️ youtube-trending: 跳过(缺 API key——配置见 adapters/trend-sources/youtube-trending.md) ✅ bilibili-popular: 拉到 15 条 ❌ douyin-hot: 跳过(cookie 文件不存在)
按 [candidate-schema.md](../../shared-references/candidate-schema.md) 的"去重协议":
1. 对每个 item 算 id(`sha256(source_type + normalized_title + url_path)[:12]`) 2. 检查 `candidates.md` 已含此 id → 跳过 3. 检查 `predictions/*.md` 已含此 id → 跳过 4. 检查 `.cheat-cache/trends-history.jsonl` 已含此 id 且 `rejected_at != null` → 跳过
去重统计写到汇总报告里。
`AUTO_SCORE=true` 时,对每条新 item: 1. 用 item 的 `snapshot_text` 作为输入 2. 按当前 rubric 给 7 维打分(**不**调 `/cheat-score` 子 skill 走 IO;inline 复用打分逻辑) 3. 算 composite 4. 给一句 rationale
**注意**:粗打分 ≠ 正式预测。预测必须基于最终稿(用户改过的),这里的打分只是"是否值得展开写"的粗筛。
`AUTO_SCORE=false` 时,items 写入 candidates.md 时 composite=null,需要后续手动 `/cheat-score`。
按 composite 降序,过滤掉 composite < `MIN_COMPOSITE_TO_SUGGEST` 的:
🔥 抓热点完成。各源拉取统计: - manual-paste: 5 条(用户输入) - hackernews: 18 条 - bilibili-popular: 15 条 跳过 douyin-hot(缺 cookie) 去重后剩 27 条新 item。 粗打分后 12 条 composite ≥ 6.0: | # | 标题 | source | composite | bucket | rationale | |---|---|---|---|---|---| | 1 | 为什么我们都讨厌主动联系朋友 | hackernews | 8.4 | 30-100w | ER+QL 双 5,AB 普适 | | 2 | "她不一样"的一千种变体 | bilibili-popular | 8.1 | 30-100w | MS 候选维度高 | | 3 | ...... | 哪些加入 candidates.md? - 全部加 → 回 "all" - 选几个 → 回 "1, 3, 5" - 都不要 → 回 "none"(这些会被记到 trends-history 避免下次重复推)
用户响应后: 1. 选中的 items → 按 [candidate-schema.md](../../shared-references/candidate-schema.md) 的"Markdown 表示"格式追加到 `candidates.md` 2. 所有抓回来的 items(不管选中与否)→ append 到 `.cheat-cache/trends-history.jsonl`:
{"id": "...", "title": "...", "source": "...", "snapshot_at": "...", "rejected_at": null|"<ISO>", "fetched_at": "<ISO>"}{
"last_trends_run_at": "<ISO>",
"last_trends_added_count": 5
}1. **不抛异常**。单 adapter 失败 → skip + 报告。多 adapter 全失败 → 报错"所有源都失败",附排查指引 2. **manual-paste 永远在**。即使其他所有 adapter 都坏了,manual-paste 模式必须能跑——它是兜底 3. **去重是硬约束**。同 id 不重复推;用户拒绝过的 6 个月内不再推 4. **粗打分要诚实标注**。在 candidates.md 的 entry 里标 `composite (rough, snapshot-based)`,避免与 prediction 的精打分混淆 5. **不直接进 predictions/**。trends 只产 candidates,predict 是另一个动作
每个 `adapters/trend-sources/<name>.md` 必须文档化以下: 1. **依赖
MUNDO - THE EMPEROR. Complete AI orchestration system with 1208 skills, 25 capability modules, self-evolving, collective consciousness. GitHub Actions 24/7 automation.
Repo: LiHongwei-cn/lihongwei-cn
给所有想把"感觉"变成可校准预测的内容创作者。**方法论通用**——打分 → 盲预测 → T+3d 复盘 → 进化 rubric 的循环适用任何能被量化(播放 / 阅读 / 收听 / 点击)的内容。**rubric 是循环的内容,不是循环本身**——当前内置一份观点视频 rubric(参考博主 25+…
提议并执行 rubric 或 bucket 升级。两种模式:**完整 rubric bump**(最高风险动作,5 步强制 + 跨模型审核)和 **--bucket-only 轻量重校**(只换 bucket 边界,不动 rubric 公式)。**Phase 2 强制走 cheat-score-blind…
cheat-on-content 的首次 onboarding 与脚手架创建器。统一流程——所有用户都走相同 5 阶段闭环,唯一区别是"发过视频的人"会在 init 时多一步:抓取已有视频建立历史 context(用于后续 cheat-seed 给更贴合的选题、更准的…
从对标账号导入 script + 数据 → 拆 pattern + 派生 base rubric 信号 → 写到 benchmark.md / script_patterns.md / rubric_notes.md。**这是工具最早期信号的来源**——cold-start…
把老用户的 .cheat-state.json 升级到当前 schema_version。读 migrations/registry.md 算迁移链,按顺序应用每一步迁移文件。幂等:跑两次结果一样。失败停在中间版本不前进。触发词:"迁移"/"升级 state"/"migrate"/"我的 state…
从复盘评论数据派生 / 刷新账号的受众画像,写入 audience.md。这是和 rubric 平行的第二个派生物——rubric 答"怎么打分",persona 答"谁在看"。cheat-seed 选题 / 写稿时读它。**audience.md 含实绩信号,cheat-score-blind…