# Cheat Recommend

从 candidates.md 里按当前 rubric 排序推荐 top N 选题，每条带 composite + 一句 rationale +...

- 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-recommend -g -a claude-code -y`
Codex: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-recommend -g -a codex -y`
Cursor: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-recommend -g -a cursor -y`
Gemini CLI: `npx skills add XBuilderLAB/cheat-on-content --skill cheat-recommend -g -a gemini-cli -y`

## Description

从 candidates.md 里按当前 rubric 排序推荐 top N 选题，每条带 composite + 一句 rationale + 锚点对比。**candidates 不存在时给引导而非报错**。触发词："推荐选题"/"next topic"/"下一篇做什么"/"recommend topics"/"挑一个选题"。

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

# /cheat-recommend, 候选池排序推荐

读 candidates.md → 按 composite 排序 → 输出 top N 推荐，每条带评分细节 + 锚点对比 + 推荐理由。

## Overview

```
[用户：推荐选题]
  ↓
[Phase 0: 检查 candidates.md 存在性]   ← 不存在则引导，不报错
  ↓
[Phase 1: 解析 candidates 列表]
  ↓
[Phase 2: 过滤（tier / 安全性 / 已发过）]
  ↓
[Phase 3: 排序 by composite + 找锚点]
  ↓
[Phase 4: 输出 top N + 每条的 rationale + 锚点对比]
```

## Constants

- **TOP_N = 5**, 默认推荐 top 5
- **STRATEGY = stable+experimental**, 推 ≥2 时按 [cadence-protocol.md](../../shared-references/cadence-protocol.md) 的"1 稳分 + 1 实验性"策略；推 1 时只推 top 稳分
- **POOL_PATH = candidates.md**, 候选池路径
- **EXCLUDE_PUBLISHED = true**, 排除已发布的（与 `predictions/*.md` 去重）
- **EXCLUDE_REJECTED = true**, 排除用户主动跳过的（`tier=skip`）
- **REQUIRE_SCORED = true**, 只推荐已打分的, , 避免推没读过的素材
- **DUPLICATE_CATEGORY_LOOKBACK**, 派生自 `state.target_publish_cadence_days`：max(3, cadence_days × 3) 天内已发同类目候选不推（避免审美疲劳）

> 💡 调用时覆盖：`/cheat-recommend, top: 3, filter: safe`

## Inputs

| 必填 | 来源 |
|---|---|
| `candidates.md` | 用户项目根 |
| `predictions/*.md` | 用于去重 |
| `.cheat-state.json` | 当前 rubric_version |

## Workflow

### Phase 0: 候选池存在性检查

读 `candidates.md`：

| 状态 | 处理 |
|---|---|
| 文件不存在 | **不报错**。输出引导：见下方"无候选池引导" |
| 文件存在但空（< 1 个 entry） | 同上 |
| 文件存在且非空 | 进入 Phase 1 |

**无候选池引导**（核心：不让用户第一次遇到 cheat-recommend 时被劝退）：

```
你目前没有候选池（candidates.md 不存在或为空）。

绝大部分人没有候选池, , 这很正常。四个建立方式，挑一个：

1. 🌱 [推荐] 跑 /cheat-seed
   一次性的种子动作：3 个问题（兴趣 / 调性 / 红线）→ 拉公开热点 + Claude brainstorm
   → 输出 15 候选让你挑 5 → 默认顺带写 5 个 draft。5 分钟搞定。
   
   - 没发过历史的：纯 brainstorm（兴趣 × 热点）
   - 发过历史的（init 时已 import）：brainstorm 会基于"你过去做过什么"给推荐
   
   说："找选题" 或 "seed"

2. 🔥 [日常补充] 用 /cheat-trends 抓 20 条带打分的候选
   说："抓热点", 从 weibo-hot / zhihu-hot / b站热门 / HN / 你配的源各拉 N 条
   适合已经跑过 /cheat-seed、想日常补充候选池的用户

3. ✍️  手动建：把候选标题贴进 candidates.md，每行一条
   我会自动给每条粗打分

4. 📋 从 Notion / RSS 导入：跑 /cheat-init --mode add-pool 配置 adapter

你也可以跳过候选池，直接给我具体稿子说"启动预测"。

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