last30days-Skill 入门指南:Reddit/HN/Polymarket 一网打尽的情报收集器

2026年3月25日

入门 | 15 分钟 | 掌握跨平台情报收集,调研效率翻倍

TIP

last30days-Skill 是目前 ClawHub 上最全面的 AI 调研类 Skill,支持 10+ 信号源并行搜索,自动去重评分,生成带引用的事实性报告。

GitHub: mvanhorn/last30days-skill


目标读者画像

  • 1-5 年经验开发者
  • 日常需要做 AI 工具选型、竞品调研、技术趋势追踪
  • 有一定命令行基础,熟悉 Claude Code 或 Codex CLI
  • 希望摆脱"刷 Reddit/HN 找信息"的碎片化流程

核心依赖与环境

依赖说明必须
Node.js 18+Skill 运行环境
Python 3.10+主脚本语言
ScrapeCreators API KeyReddit/TikTok/Instagram 三合一
Claude Code 或 Codex CLISkill 运行载体
X AUTH_TOKEN / CT0X 搜索认证(可选)
Bluesky App PasswordBluesky 搜索(可选)
Polymarket Gamma API预测市场数据(免费)

完整项目结构树

last30days-skill/
├── SKILL.md                    # Skill 定义文件(部署到 ~/.claude/skills/)
├── SPEC.md                     # 完整技术规格文档
├── CLAUDE.md                   # Claude Code 开发指引
├── scripts/
│   ├── last30days.py           # Python 主入口(研究引擎)
│   ├── sync.sh                 # 部署同步脚本
│   └── lib/
│       ├── __init__.py         # 包入口(禁止急切导入)
│       ├── env.py              # 环境变量加载
│       ├── dates.py            # 日期范围与置信度计算
│       ├── cache.py            # 24h TTL 缓存
│       ├── http.py             # 标准库 HTTP 客户端
│       ├── models.py           # OpenAI/xAI 模型自动选择
│       ├── openai_reddit.py    # Reddit 搜索(OpenAI Responses API)
│       ├── xai_x.py            # X 搜索(xAI Responses API)
│       ├── reddit_enrich.py    # Reddit 帖子深度指标拉取
│       ├── hackernews.py       # Hacker News(Algolia 免费 API)
│       ├── polymarket.py       # Polymarket 预测市场(Gamma API)
│       ├── bluesky.py          # Bluesky/AT Protocol 搜索
│       ├── truthsocial.py      # Truth Social 搜索
│       ├── normalize.py        # 原始响应 → 规范 Schema
│       ├── score.py            # 多信号评分模型
│       ├── dedupe.py           # 近似重复检测
│       ├── render.py           # Markdown / JSON 报告渲染
│       └── schema.py           # 类型定义与校验
├── skills/last30days/
│   └── last30days.sh            # Shell 封装(Claude Code Skill 入口)
└── fixtures/                   # 测试固件数据

Step 1 安装与认证配置

1.1 Claude Code 插件方式安装(推荐)

如果你已经在用 Claude Code,直接用插件命令搞定:

/plugin marketplace add mvanhorn/last30days-skill
/plugin install last30days@last30days-skill

或者用官方工具 ClawHub 安装:

clawhub install last30days-official

WARNING

插件安装方式需要你的 Claude Code 版本支持 /plugin 命令。请先确认 claude --version >= 1.0。

1.2 手动 Git Clone 安装

不想用插件?直接克隆到本地:

# 克隆到 Claude Code skills 目录
git clone https://github.com/mvanhorn/last30days-skill.git \
  ~/.claude/skills/last30days

# 进入目录查看文件
cd ~/.claude/skills/last30days
ls -la scripts/

1.3 配置 ScrapeCreators API Key(必须)

这是 Reddit/TikTok/Instagram 三平台的统一入口,一个 Key 全搞定:

  1. 访问 scrapecreators.com 注册并获取 API Key
  2. 创建配置文件:
mkdir -p ~/.config/last30days

cat > ~/.config/last30days/.env << 'EOF'
# 必须:Reddit + TikTok + Instagram 三合一 Key
SCRAPECREATORS_API_KEY=sc_xxxxxxxxxxxxxxxxxxxx

# 可选:OpenAI API(Codex 登录后可省略)
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
EOF

chmod 600 ~/.config/last30days/.env  # 保护敏感文件

1.4 配置 X / Bluesky 可选认证

X 搜索(推荐方式)

# 1. 登录 x.com,打开浏览器 DevTools (F12)
# 2. Application → Cookies → 复制 auth_token 和 ct0 的 Value
# 3. 写入 .env

cat >> ~/.config/last30days/.env << 'EOF'

# X 搜索认证(cookie 方式)
AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxx
CT0=xxxxxxxxxxxxxxxxxxxx

# X 备选:xAI API(不需要 cookie)
XAI_API_KEY=xai-xxxxxxxxxxxxxxxxxxxx
EOF

Bluesky 搜索

# 1. 去 bsky.app/settings/app-passwords 创建应用密码
# 2. 写入 .env

cat >> ~/.config/last30days/.env << 'EOF'

# Bluesky/AT Protocol
BSKY_HANDLE=yourhandle.bsky.social
BSKY_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
EOF

TIP

X cookie 和 Bluesky 密码都是可选的。不想折腾的话,直接用免费的 Polymarket、Hacker News 和 Reddit 就够覆盖大部分场景了。

1.5 验证安装成功

# 运行一个简单测试(--mock 用本地测试数据,不花 API 配额)
python3 ~/.claude/skills/last30days/scripts/last30days.py "Claude Code tips" --mock --emit=compact

看到类似输出就说明一切正常:

=== last30days Report: Claude Code tips ===
Sources: reddit, hackernews | Time: 2026-03-25 | Mode: mock
[results...]

Step 2 基本用法

2.1 /last30days 命令行

Claude Code 里直接打命令:

/last30days best Claude Code prompts

Codex CLI 方式:

python3 ~/.claude/skills/last30days/scripts/last30days.py "best Claude Code prompts" --emit=compact

TIP

默认搜索最近 30 天热门内容,涵盖 Reddit、X、YouTube、TikTok、Instagram、Hacker News、Polymarket、Bluesky 等 10+ 信号源。一次搜索最多耗时 2-8 分钟,niche 话题时间更长。

2.2 报告结构解读

跑完之后你会收到一份结构化报告,大致长这样:

# last30days Report: best Claude Code prompts

## Sources Searched (6 active)
reddit | x | hackernews | polymarket | youtube | reddit_threads

## Top Findings
...

## Best Practices (社区验证过的方法)
...

## Prompt Pack (可直接复制)
...

## Recent Developments
...

## References (带来源链接)
...

报告会自动:

  • 收敛检测:多个平台同时提到的内容权重更高
  • 去重处理:语义相似的帖子只保留最优一条
  • 时效衰减:越新的内容排名越靠前
  • 引用标注:每条结论都附有原始链接

2.3 --quick 快速模式

赶时间?加 --quick 跳过部分深度搜索:

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "Cursor AI vs Windsurf" \
  --quick \
  --emit=compact

2.4 --days=N 自定义时间窗口

不只是 30 天,可以自定义:

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "OpenClaw latest news" \
  --days=7 \
  --emit=compact

2.5 --refresh 强制刷新缓存

默认结果缓存 24 小时,想重新搜索:

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI code editors comparison" \
  --refresh \
  --emit=compact

Step 3 多来源并行搜索机制

3.1 Reddit 搜索原理

Reddit 是最重要的信号源。Skill 分两步走:

# scripts/lib/openai_reddit.py(简化版)
def search_reddit(query: str, days: int = 30) -> list[dict]:
    # 第一步:用 OpenAI Responses API + web_search 做初步发现
    response = openai.responses.create(
        model="gpt-4o",
        input=f"Find active Reddit discussions about: {query}",
        tools=[{"type": "web_search"}],
        max_tokens=2000
    )
    # 第二步:拉取原始帖子 JSON,获取真实点赞/评论数
    enriched = reddit_enrich.fetch_threads(response.urls, days)
    return enriched

TIP

v2.9 之后 Reddit 默认走 ScrapeCreators,一个 Key 覆盖 Reddit + TikTok + Instagram 三平台,比之前的独立方案更稳定。

3.2 Hacker News 集成

免费接入,不需要任何 API Key:

# scripts/lib/hackernews.py
def search_hackernews(query: str, days: int = 30) -> list[dict]:
    # HN Algolia API 是免费开放的
    url = "https://hn.algolia.com/api/v1/search"
    params = {
        "query": query,
        "tags": "story",
        "numericFilters": f"created_at_i>{cutoff_timestamp(days)}"
    }
    resp = requests.get(url, params=params)
    items = resp.json()["hits"]
    # 按 points + num_comments 综合排序
    return sorted(items, key=lambda x: x["points"] + x["num_comments"] * 2, reverse=True)

3.3 Polymarket 预测市场数据

这是 last30days 区别于其他调研工具的核心亮点——它不只看"大家怎么说",还看"大家押注多少钱":

# scripts/lib/polymarket.py
def search_polymarket(query: str) -> list[dict]:
    # Gamma API 免费接入
    url = "https://gamma-api.polymarket.com/markets"
    resp = requests.get(url, params={"topic": query, "limit": 20})
    markets = resp.json()

    # 五因子评分模型
    for m in markets:
        m["composite_score"] = (
            m["text_relevance"] * 0.30 +
            m["volume_24h"] * 0.30 +
            m["liquidity"] * 0.15 +
            m["price_velocity"] * 0.15 +
            m["outcome_competitiveness"] * 0.10
        )
    return sorted(markets, key=lambda x: x["composite_score"], reverse=True)

实际效果:搜"OpenClaw",不仅能看到 Reddit 帖子,还能看到 Polymarket 上关于"OpenClaw 月活用户数"的预测市场数据——那些用真金白银押注的赔率,比任何帖子都有说服力。

3.4 多信号评分模型解析

所有来源的结果汇入统一评分管道:

# scripts/lib/score.py
def compute_composite_score(item: dict, query: str, days: int) -> float:
    # 1. 文本相关性(双向相似度 + 同义词扩展)
    text_score = bidirectional_similarity(item["text"], query)

    # 2. 互动热度归一化
    engagement_score = normalize_velocity(item["engagement"])

    # 3. 来源权威加权(HN > Reddit > X > TikTok)
    authority_score = SOURCE_WEIGHTS[item["source"]]

    # 4. 跨平台收敛加分(多平台同时提到 → 权重 bonus)
    convergence_score = detect_convergence(item, all_results)

    # 5. 时效衰减(每天乘以 0.98 的指数衰减)
    recency_score = 0.98 ** days_since_post(item["timestamp"])

    return (
        text_score * 0.35 +
        engagement_score * 0.25 +
        authority_score * 0.20 +
        convergence_score * 0.10 +
        recency_score * 0.10
    )

v2.5 的盲测评分从 v1 的 3.73/5.0 提升到了 4.38/5.0,提升约 17%。


Step 4 对比模式(X vs Y)

4.1 "Cursor vs Windsurf" 案例

last30days 最酷的功能之一——直接对比两个工具:

/last30days cursor vs windsurf

或者命令行:

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "cursor vs windsurf" \
  --emit=compact

4.2 并行三路调研机制

对比模式会触发三次独立调研:

# scripts/lib/score.py(对比模式分支)
def run_comparative_mode(query_a: str, query_b: str, base_query: str):
    # 三路并行搜索
    results_a = run_research(query_a)       # 路1:只搜 Cursor
    results_b = run_research(query_b)       # 路2:只搜 Windsurf
    results_base = run_research(base_query) # 路3:搜两者对比讨论

    # 生成侧边对比报告
    return render_comparison(results_a, results_b, results_base)

4.3 对比报告解读

输出的报告格式大致如下:

## Comparative Analysis: Cursor vs Windsurf

### Strengths

| Dimension | Cursor | Windsurf |
|---|---|---|
| 代码补全速度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 上下文理解 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 多文件编辑 | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 社区生态 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |

### Weaknesses

| Dimension | Cursor | Windsurf |
|---|---|---|
| 内存占用 | 高 | 中 |
| 离线支持 | 差 | 良 |

### Community Sentiment (30-day)
- Cursor: 78% positive (1,240 discussions)
- Windsurf: 65% positive (890 discussions)

### Data-Driven Verdict
Cursor leads in community engagement and code completion quality.
Windsurf excels in contextual understanding for complex refactors.
**Recommendation**: Use Cursor for daily coding; Windsurf for architecture planning.

Step 5 嵌入其他 Skill / CI 流水线

5.1 作为上下文注入

其他 Skill 可以直接引用 last30days 的研究结果:

## Recent Research Context
!python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "your research topic" \
  --emit=context

5.2 从文件读取上下文

## Research Context
!cat ~/.local/share/last30days/out/last30days.context.md

5.3 JSON 输出集成到 CI/CD

把调研结果注入自动化流水线:

# 输出 JSON 格式供程序使用
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "best LLM for code review 2026" \
  --emit=json > research.json

# 检查推荐的 Top 3 模型
python3 -c "
import json
data = json.load(open('research.json'))
for r in data['top_results'][:3]:
    print(f\"- {r['title']} (score: {r['score']:.2f})\")
"

5.4 项目级 .env 覆盖

不想全局配置?在项目根目录放一个 .claude/last30days.env,会覆盖全局配置:

mkdir -p .claude

cat > .claude/last30days.env << 'EOF'
# 只对这个项目生效的 API Key
SCRAPECREATORS_API_KEY=sc_project_specific_key
OPENAI_API_KEY=sk-project-specific-key
EOF

TIP

这在团队协作时特别有用——每个人可以用自己的 Key,但 Skill 行为保持一致。

5.5 Session 启动自动校验

v2.9.5 新增了 Session 启动时的配置检查。Claude Code 每次启动会自动验证你的 .env 配置是否完整:

# 手动触发校验
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  --validate-config

缺失必要 Key 时会明确提示:

❌ SCRAPECREATORS_API_KEY is missing (required)
✅ OPENAI_API_KEY found
⚠️  BSKY_HANDLE is missing (optional)

常见问题排查

Q1: 运行报 SCRAPECREATORS_API_KEY 缺失错误

原因:环境变量未正确加载。

解决

# 确认 Key 存在
cat ~/.config/last30days/.env | grep SCRAPECREATORS_API_KEY

# 如果用插件安装,试试手动同步
bash ~/.claude/skills/last30days/scripts/sync.sh

Q2: X 搜索一直返回空结果

原因:AUTH_TOKEN / CT0 cookie 过期或无效。

解决

# 1. 重新登录 x.com
# 2. 重新复制最新的 auth_token 和 ct0
# 3. 更新 .env

# 或者用 xAI API 备选方案(不需要 cookie)
echo "XAI_API_KEY=xai-你的key" >> ~/.config/last30days/.env

Q3: 搜索很慢(超过 10 分钟)

原因:默认最多并行 10 个来源,niche 话题需要更多 API 重试。

解决

# 1. 用 --quick 跳过部分深度搜索
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "niche topic" \
  --quick

# 2. 检查是否有来源持续超时
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "topic" \
  --sources=reddit  # 只搜 Reddit,加速调试

Q4: Polymarket 返回的市场不相关

原因:Polymarket 话题匹配基于关键词,部分话题没有活跃市场。

解决

# 手动指定关键词扩展
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI coding assistant" \
  --polymarket-tags="artificial intelligence,llm,gpt" \
  --emit=compact

Q5: Claude Code 提示 Permission denied on scripts

原因:shell 脚本没有执行权限。

解决

chmod +x ~/.claude/skills/last30days/skills/last30days.sh
chmod +x ~/.claude/skills/last30days/scripts/last30days.py

Q6: 报告里 Reddit 帖子很少,但明明 Reddit 上有大量讨论

原因:v2.9 之后默认走 ScrapeCreators,Key 配了但格式不对。

解决

# 验证 ScrapeCreators Key 是否有效
curl -H "x-api-key: sc_你的key" \
  https://api.scrapecreators.com/v1/reddit/search?q=test

# 如果 Key 有效但仍然没数据,检查是不是走了 OpenAI 备选
# 在 .env 里加一行强制用 ScrapeCreators
echo "FORCE_SCRAPECREATORS=1" >> ~/.config/last30days/.env

扩展阅读 / 进阶方向

1. 深入评分模型调优

scripts/lib/score.py 里的权重是硬编码的,如果你对某个来源有特殊偏好,可以 fork 之后修改:

# 把 Hacker News 的权威权重从 0.20 提到 0.35
SOURCE_WEIGHTS = {
    "hackernews": 0.35,   # ↑ 从 0.20 改
    "reddit": 0.25,
    "x": 0.15,
    "polymarket": 0.15,
    "youtube": 0.10,
}

2. 自定义来源接入

想加入 GitHub Issues 或 LinkedIn?参考 hackernews.py 的接口规范,在 scripts/lib/ 下新建一个模块,然后在 last30days.py 里注册即可。SPEC.md 有完整的接口定义。

3. 定时调研自动化

用 cron 定期跑调研,自动更新你的研究库:

# 每天早上 8 点跑一次 "AI tools weekly" 调研
0 8 * * * python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI developer tools weekly" \
  --days=7 \
  --emit=md \
  --output ~/Documents/Last30Days/ai-tools-weekly-$(date +\%Y-\%m-\%d).md

4. 与知识库联动

把调研结果直接注入你的个人知识库(RAG pipeline):

# 生成带引用的 context,直接喂给另一个 Skill
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "Claude Code advanced techniques" \
  --emit=context > ~/.knowledge/last30_context.md

相关资源

Updated 2026年3月25日