好奇心造就科学家和诗人。——法朗士

last30days:每个月都重置一次的 AI 世界,它负责把你拉回“最新版本”

/last30days 不是那种“我去网上搜一下”就结束的助手。
它更像一位专门做情报的夜班编辑:你睡觉,它翻遍全网;你醒来,它把过去 30 天真正热过、吵过、赌过、拍过视频讲过的东西,整理成一份带引用、能落地的“新鲜情报简报”。

它的性格写在 README 里,几乎有点挑衅:

The AI world reinvents itself every month. This skill keeps you current.

AI 圈每个月都像换季:
上个月还在讨论 A 工具的最佳玩法,这个月大家已经在 B 平台用完全不同的套路冲榜。
你要是只靠旧帖子、旧教程、旧 prompt,很容易在新世界里拿着旧地图迷路。

/last30days 就是来干这个的:
它会在过去 30 天里,去这些地方“听风声、看热度、抓共识”:

  • Reddit
  • X
  • Bluesky
  • YouTube
  • TikTok
  • Instagram
  • Hacker News
  • Polymarket
  • 以及 web(博客、新闻、教程、文档)

它不只收集链接,而是把社区真正 upvote、转发、点赞、下注、在镜头前讲出来的内容,做评分、去重、再写成一个grounded narrative(有真实引用的叙事总结)。


它到底是什么(repo description 的那句话,够硬)

仓库描述开门见山:

AI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary

它不是“新闻聚合”,它是“多源研究 + 综合写作”,而且重点是 grounded:
写出来的不是玄学结论,而是能指回来源的叙事。


v2.9.5:它最近长了哪些“新器官”?

/last30days v2.9.5 一上来就说:我不只是更新,我还进化了。

1)Bluesky/AT Protocol 加入信号源(可选开启)

它现在把 Bluesky 也当成“舆论场”之一了,而且是一条完整流水线:

  • search
  • score
  • dedupe
  • render

开启方式很直白:在环境变量里放:

  • BSKY_HANDLE
  • BSKY_APP_PASSWORD(在 bsky.app/settings/app-passwords 创建)

它像一只新学会听“另一片森林”动静的鹿:不再只盯着 X 的风向,也会去 Bluesky 看新火苗。

2)Comparative mode:它会做对比评测,而且是并行三轮研究

你问 “X vs Y”,它不敷衍。它会做 3 parallel research passes,然后输出:

  • strengths
  • weaknesses
  • head-to-head table
  • data-driven verdict

README 给的例子很明确:

  • /last30 cursor vs windsurf

它像一个认真到有点较真的评测编辑:不是凭感觉站队,而是把证据摆到同一张桌面上。

3)Per-project .env:每个项目一套钥匙

你可以在项目根目录放:

  • .claude/last30days.env

它会覆盖全局的 ~/.config/last30days/.env
像它在说:“别把工作号和生活号混在一起,我懂。”

4)SessionStart config check:开局先体检

Claude Code session 启动时,它会自动验证你的配置。
像它自己先摸一摸脉搏:“钥匙带了吗?管道通了吗?别跑一半才发现缺 KEY。”

5)Expanded test coverage:455+ tests

它甚至把自己测试数写出来:455+ tests across all modules
像一位研究员同时也是工程师:不仅要跑得快,还要跑得稳。


v2.9.1:每次研究自动存档到 Documents,悄悄给你建知识库

v2.9.1 的变化很“低调但致命”:

Every run now saves the complete briefing as a topic-named .md file to your Documents folder.

路径是:

  • ~/Documents/Last30Days/

它像一个勤奋到会自己归档的助理:
你每问一次,它就帮你把“这次的世界状态”存一份,久而久之,你就有了自己的研究图书馆。


v2.9:ScrapeCreators 一把钥匙管三扇门(Reddit + TikTok + Instagram)

它把 Reddit 默认切到 ScrapeCreators:

  • SCRAPECREATORS_API_KEY 一个 key 覆盖三源:Reddit、TikTok、Instagram

它像突然学会了“合并通行证”:不用三套钥匙,不用多次配置,一个 key 让三条河都能流进来。

并且它还强化了:

  • Smart subreddit discovery:自动找到最合适的社区
  • Top comments elevated:把高赞评论提升权重并展示(带 💬 和 upvote 数)

安装:它给你三条路,分别适配不同的“宿主”

1)Claude Code 插件(推荐)

它最推荐的安装方式:

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

它像在说:“我就是为 Claude Code 这身衣服量体裁衣的,别绕路。”

同时也给了 ClawHub 的一键安装:

1
clawhub install last30days-official

2)Gemini CLI

1
gemini extensions install https://github.com/mvanhorn/last30days-skill.git

3)手动安装(Claude Code / Codex)

它也允许你把它克隆到本地,像收编一个私人研究员:

1
2
# Clone the repo
git clone https://github.com/mvanhorn/last30days-skill.git ~/.claude/skills/last30days

然后配置你的钥匙串(如果你已经 codex login,OpenAI key 可省):

1
2
3
4
5
6
7
8
9
10
11
mkdir -p ~/.config/last30days
cat > ~/.config/last30days/.env << 'EOF'
SCRAPECREATORS_API_KEY=... # Reddit + TikTok + Instagram (one key, all three) - scrapecreators.com
OPENAI_API_KEY=sk-... # optional - legacy Reddit fallback if using `codex login`
AUTH_TOKEN=... # recommended for X search - copy once from x.com cookies
CT0=... # recommended for X search - copy once from x.com cookies
XAI_API_KEY=xai-... # optional - X fallback if you do not want cookie-based auth
BSKY_HANDLE=you.bsky.social # optional - Bluesky search (create app password below)
BSKY_APP_PASSWORD=xxxx-xxxx-xxxx # optional - bsky.app/settings/app-passwords
EOF
chmod 600 ~/.config/last30days/.env

它还支持“项目级别的钥匙覆盖”:

  • 在项目根目录创建 .claude/last30days.env(覆盖全局)

X 搜索认证:它更喜欢“明确的通行证”,不想每次弹窗问你要不要开门

它说得很清楚:X search prefers explicit env auth,原因是:

  • headless 本地运行更顺滑
  • 避免浏览器 cookie / macOS Keychain 提示

推荐流程:

  1. 登录 x.com
  2. 开 dev tools,复制 auth_tokenct0
  3. 保存为 AUTH_TOKENCT0
  4. 重跑 /last30days

验证命令:

1
node ~/.claude/skills/last30days/scripts/lib/vendor/bird-search/bird-search.mjs --whoami

要求:

  • Node.js 22+(用于 vendored Twitter GraphQL client)

如果你不想给 cookie,那也可以走另一条路:
设置 XAI_API_KEY,它会走 xAI 的 x_search 作为 fallback。


Codex CLI:同一份 SKILL,同一套引擎,只是换了个舞台

它也能在 OpenAI Codex CLI 里跑。安装路径变成:

1
git clone https://github.com/mvanhorn/last30days-skill.git ~/.agents/skills/last30days

调用方式:

  • $last30days
  • 或通过 /skills 菜单

它像一位会换场子的演员:换了剧院,台词没变,表演还是那套。


Open Variant:给“常驻机器人”准备的 watchlist + briefings + history

如果你在用 Open Claw 或类似 always-on 的环境,它还有一个 open variant。
这个版本不再满足于“一次性研究”,它要开始“长期盯盘”。

启用方式:

1
cp variants/open/SKILL.md ~/.claude/skills/last30days/SKILL.md

然后你可以像给一个情报员布置长期跟踪任务一样,把主题塞进 watchlist:

1
2
3
4
last30 watch my biggest competitor every week
last30 watch Peter Steinberger every 30 days
last30 watch AI video tools monthly
last30 Y Combinator hot companies end of April and end of September

手动跑(或者交给 cron/launchd/always-on bot):

1
last30 run all my watched topics

查历史积累:

1
last30 what have you found about AI video?

它像一个已经开始“自己建档案柜”的研究员:

  • Watchlist:按计划跟踪
  • Briefings:日/周 digest
  • History:全文检索你的研究数据库
  • Native web search:可选并行 web 搜索后端(Parallel AI / Brave / OpenRouter)

可选 web 搜索 key:

1
2
3
PARALLEL_API_KEY=...    # Parallel AI (preferred  - LLM-optimized results)
BRAVE_API_KEY=... # Brave Search (free tier: 2,000 queries/month)
OPENROUTER_API_KEY=... # OpenRouter/Perplexity Sonar Pro

检查各来源是否可用:

1
python3 scripts/last30days.py --diagnose

用法:一句话丢给它,它就去跑 2-8 分钟的“多源研究流水线”

它的调用方式很简单:

1
2
/last30days [topic]
/last30days [topic] for [tool]

示例(README 原样列的):

  • /last30days prompting techniques for ChatGPT for legal questions
  • /last30days iOS app mockups for Nano Banana Pro
  • /last30days What are the best rap songs lately
  • /last30days remotion animations for Claude Code

它还坦诚了取舍:

  • 找得多、跑得深,所以慢:2-8 minutes
  • 但有 --quick 给你“速度优先”
  • --deep 给你“彻底优先”

它会做什么:三段式人格——研究、综合、交付

README 把它的工作定义成三步:

  1. Researches:扫过去 30 天的讨论(多平台)
  2. Synthesizes:找模式、找 best practices、找“真正有效的”
  3. Delivers:要么输出可复制的 prompts,要么输出 curated 的专家级答案

它就像一台自动运转的编辑部:
记者出去跑线索 → 编辑做归纳 → 主编写成能直接发布的稿子。


选项(Options):它不是只有一根油门,它是一整套变速箱

Flag Description
--days=N 回看 N 天(例如 --days=7 做周报)
--quick 更快、来源更少、跳过 supplemental search
--deep 更深、来源��多、supplemental 更扩展
--debug 详细日志
--sources=reddit 只查 Reddit
--sources=x 只查 X
--include-web 加入 native web search(需要 web search API key)
--store 写入 SQLite(用于 watchlist/briefing)
--diagnose 输出可用性诊断后退出

Requirements:它像一位带着工具箱的研究员,也会提前告诉你“缺什么别怪我”

它列得很清楚:

  • Reddit:需要 OpenAI auth(OPENAI_API_KEYcodex login
  • X:需要 AUTH_TOKEN + CT0,或 XAI_API_KEY 作为替代
  • Node.js 22+:用于 X search(bundled GraphQL client)
  • yt-dlp(可选):用于 YouTube 搜索 + transcript 提取
    • brew install yt-dlppip install yt-dlp

一句话总结就是它自己说的那句:
At least one auth path is required.


它怎么做到的:Two-Phase Search Architecture(先广撒网,再精准补刀)

它的架构有两阶段,像一场真正的调研:

Phase 1:Broad discovery(先把湖面扫一遍)

  • OpenAI Responses API 的 web_search(reddit.com 范围)
  • Vendored Twitter GraphQL(或 xAI fallback)
  • YouTube + transcript(通过 yt-dlp)
  • HN(Algolia API)
  • Polymarket(Gamma API)
  • WebSearch(博客、新闻、教程、文档)
  • Reddit .json 富化(真实 upvotes/comments)
  • 统一 scoring:recency、relevance、engagement

Phase 2:Smart supplemental search(从第一轮里挖出“关键坐标”,再二次定向搜索)

  • 从 Phase 1 提取实体:X 的 @handles,Reddit 的 subreddit
  • 进行 targeted follow-up:from:@handle topic、subreddit scoped 搜索
  • 用 Reddit 的免费 .json endpoint(不额外要 key)
  • 合并 + 去重
  • --quick 会跳过,--deep 会扩展

它像一只懂得复盘的猎犬:
第一圈闻到味道后,不会傻跑,而是锁定踪迹再追。


模型回退链:它不轻易放弃,会自己找下一条路

Reddit search(via OpenAI)会自动 fallback:

  • gpt-4.1 -> gpt-4o -> gpt-4o-mini

如果你的 org 没权限,它不会卡死,而是换下一台发动机继续跑。


安全与隐私:它会告诉你“哪些数据会出门”,也会告诉你“哪些数据留在家里”

它把“数据去哪了”列成表:

  • 你的研究 topic(query string)会发给对应的 API provider
  • 本地会存:
    • API keys:~/.config/last30days/.env
    • watchlist DB:~/.local/share/last30days/research.db
    • briefings:~/.local/share/last30days/briefs/

并强调 key 隔离:
每把钥匙只发给自己的门口,OpenAI key 不会跑去 xAI/Brave/Parallel 之类的地方。


它的尾声:像一句海报文案,也像一句自嘲

README 最���用两句话把它的灵魂钉在墙上:

30 days of research. 30 seconds of work. Eight sources. Zero stale prompts.

它像在说:
“别再用过期 prompt 了。世界已经换季了。把问题扔给我,我去把过去 30 天的真实声音捞出来。”