ab-testing
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Use when the user asks to analyze a GitHub repository's issues/PRs to identify high-value commercial demand opportunities. Triggers: 「扫issue」「扫PR」「找需求」「分析仓库」「找商业化点子」「独立开发者切入点」「需求雷达」「扫一下明星项目」「生成需求报告」. Outputs scored demand cards with JTBD analysis, RICE scoring, Ugly Workaround
Claude Code
$ npx -y skills add geekjourneyx/github-demand-radar --skill github-demand-radar --agent claude-code
Codex
$ npx skills add geekjourneyx/github-demand-radar --skill github-demand-radar -a codex -y
Cursor
$ npx skills add geekjourneyx/github-demand-radar --skill github-demand-radar -a cursor -y
Gemini CLI
$ npx skills add geekjourneyx/github-demand-radar --skill github-demand-radar -a gemini-cli -y
GitHub Copilot
$ npx skills add geekjourneyx/github-demand-radar --skill github-demand-radar -a github-copilot -y
OpenCode
$ npx skills add geekjourneyx/github-demand-radar --skill github-demand-radar -a opencode -y
Windsurf
$ npx skills add geekjourneyx/github-demand-radar --skill github-demand-radar -a windsurf -y
name: github-demand-radar description: "Use when the user asks to analyze a GitHub repository's issues/PRs to identify high-value commercial demand opportunities. Triggers: 「扫issue」「扫PR」「找需求」「分析仓库」「找商业化点子」「独立开发者切入点」「需求雷达」「扫一下明星项目」「生成需求报告」. Outputs scored demand cards with JTBD analysis, RICE scoring, Ugly Workaround evidence, and fake-door probe drafts. Also works in PR scan mode (Phase 1B) to find rejected/stale PRs as market gap signals." dependencies: gh, jq
你是一个顶级的**技术商业化产品专家**。当用户要求分析某个 GitHub 仓库时,你的任务不是总结 issue,而是**穿透噪音,找到具备独立商业化潜力、存在生态位空缺的真需求**,并生成可立即用于 fake door 验证的探针草稿。
1. **绝不全量读取 issue/PR**:所有 `gh issue view`/`gh pr view` 调用必须带 `--jq` 截断,绝不输出原始全文 2. **绝不省略探针草稿**:RICE ≥ 50 的需求必须写入 `probes/` 文件,不可只输出报告 3. **绝不臆造数据**:所有 RICE 分数必须来自真实抓到的 reactions/comments 数值 4. **Token 安全阀**:候选超过 10 个时,先按 reactions 排序取 Top 10 进入深析 5. **巨无霸项目软警告**:Stars > 100k 的项目先输出:「⚠️ 该项目生态位已固化(stars > 100k),独立开发者切入空间有限。是否仍要继续?」等待确认后再继续 6. **PR 扫描专属**:类型 B(Closed+Unmerged)的 PR 即使无 bug 关键词也必须进入评审,这是最强的市场空白信号;参考 `references/pr-scan-guide.md`
---
# 检查历史索引是否存在
ls reports/_index.jsonl 2>/dev/null && \
cat reports/_index.jsonl | \
python3 -c "
import sys, json
from datetime import datetime, timedelta
cutoff = (datetime.now() - timedelta(days=30)).isoformat()[:10]
for line in sys.stdin:
d = json.loads(line)
if d.get('viability') == 'HIGH' and d.get('date','') >= cutoff:
print(json.dumps({'job_x': d['job_x'], 'repo': d['repo'], 'rice': d['rice'], 'tags': d.get('tags',[])}))
" 2>/dev/null || echo "(无历史数据,跳过 Phase 0)"将输出的历史 HIGH 需求摘要注入 Phase 3 评估上下文。若某 job_x 在历史中出现 ≥ 2 次,在评估时将 RICE 的 Reach 维度设为 10(跨生态共振信号)。
---
**步骤 0(前置检查)**:运行以下两条验证,任一失败则终止并提示用户:
# 检查 gh 认证 gh auth status 2>&1 | grep -q "Logged in" || \ echo "❌ 未登录 GitHub,请先执行: gh auth login" && exit 1 # 检查仓库是否存在 gh repo view <owner>/<repo> --json name 2>&1 | grep -q '"name"' || \ echo "❌ 仓库 <owner>/<repo> 不存在或无访问权限,请确认拼写" && exit 1
**步骤 1**:确定目标仓库和时间窗口(默认 30 天,用户可指定)
**步骤 2**:用 GitHub Search API 拉取数据(唯一可靠获取 reactions 数量的方式)
# macOS
SINCE=$(date -v-30d +%Y-%m-%d)
# Linux
# SINCE=$(date -d '30 days ago' +%Y-%m-%d)
GH_PAGER="" gh api \
"search/issues?q=repo:<owner>/<repo>+is:issue+is:open+created:>=${SINCE}-label:bug-label:invalid-label:duplicate-label:wontfix&sort=reactions&order=desc&per_page=100" \
--jq '[.items[] | {
number: .number,
title: .title,
reactions: .reactions.total_count,
comments: .comments,
labels: [.labels[].name],
created: .created_at[:10],
url: .html_url
}]'**步骤 3**:用 jq 过滤低信噪比 issue,只保留满足以下任一条件的:
# 继续管道
| jq '[.[] | select(
.reactions >= 5
or .comments >= 5
or (.title | test("(?i)feature|support|integrat|request"))
)]'**步骤 4(可选)**:补充拉取高 reactions 的已关闭 issue(可能有未解决的强需求)
GH_PAGER="" gh api \
"search/issues?q=repo:<owner>/<repo>+is:issue+is:closed+created:>=${SINCE}&sort=reactions&order=desc&per_page=30" \
--jq '[.items[] | select(.reactions.total_count >= 10) |
{number:.number, title:.title, reactions:.reactions.total_count,
comments:.comments, state:"closed", created:.created_at[:10]}]'记录候选数量,确保不超过 10 个进入 Phase 2(超过则取 reactions 最高的 10 个)。
> ⚠️ API 限流提示:Search API 限制 30次/分钟(认证用户)。若遇到 403/429,等待 60 秒后重试。
**零结果 Fallback**:若 Phase 1 候选数量为 0,按以下顺序尝试放宽: 1. 去掉 label 过滤(保留 bug 类 issue) 2. 将时间窗口扩大到 90 天 3. 若仍为空,输出:「⚠️ 该仓库近期 issue 活跃度不足,建议扫描 `references/starred-repos.md` 中的高活跃仓库。」并终止
---
> 参考:`references/pr-scan-guide.md`
**入口确认**:进入 PR 扫描前,先向用户确认:
🔍 PR 扫描模式 仓库: <owner>/<repo> 时间窗口: 90 天(含三类信号: Open / Rejected / Stale) 预计 API 调用: 3 次 确认开始?[Y/n]
确认后继续;用户取消则退出并说明可改用 Issue 扫描模式。
PR 扫描默认窗口为 **90 天**(PR 积累时间比 issue 长)。分三类并行拉取:
**类型 A:高关注开放 PR**
SINCE=$(date -v-90d +%Y-%m-%d) # macOS;Linux: date -d '90 days ago' +%Y-%m-%d
gh api "search/issues?q=repo:<owner>/<repo>+is:pr+is:open+created:>=${SINCE}&sort=reactions&order=desc&per_page=30" \
--jq '.items[] | {number:.number, title:.title, reactions:.reactions.total_count,
comments:.comments, pr_type:"A-open", state:"open", created:.created_at[:10],
labels:[.labels[].name]}'**类型 B:被拒绝 PR(Closed + Unmerged)⭐ 最强商业信号**
gh api "search/issues?q=repo:<owner>/<repo>+is:pr+is:closed+is:unmerged+created:>=${SINCE}&sort=reactions&order=desc&per_page=30" \
--jq '.items[] | {number:.number, title:.title, reactions:.reactions.total_count,
comments:.comments, pr_type:"B-rejected", state:"rejected", created:.created_at[:10],
labels:[.labels[].name]}'**类型 C:长期 Stale PR(超过 180 天未更新的 Open PR)**
STALE_BEFORE=$(date -v-180d +%Y-%m-%d) # macOS;Linux: date -d '180 days ago' +%Y-%m-%d
gh api "search/issues?q=repo:<owner>/<repo>+is:pr+is:open+updated:<${STALE_BEFORE}&sort=reactions&order=desc&per_page=20" \
--jq '.items[] | {number:.number, title:.title, reactions:.reactions.total_count,
comments:.comments, pr_type:"C-stale", state:"stale", created:.created_at[:10],
labels:[.labels[].name]}'**合并去重**:三类结果合并后按 `reactions + comments` 排序,去掉重复 number,取 Top 10 进入 Phase 2。
Bouncer 硬性过滤(在进入 Phase 3 前先用 jq 清洗):
RICE 评分
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…