核心金句:“Google aggregates editors.
/last30dayssearches people.” —— 这句话道出了整个项目的设计哲学。
引言
想象一个场景:你想了解「Cursor IDE」最近一个月的社区口碑,你会怎么做?
打开 Reddit 搜、去 X 上翻热门 thread、去 YouTube 看测评、去 Hacker News 翻讨论、去 GitHub 看 issue……每个平台各查一遍,最后还得自己消化整合。这一套流程下来,半天就过去了。
而last30days-skill要做的事情就是:你只需输入/last30days Cursor IDE,剩下的一切由 Agent 自动完成。
这个项目在 GitHub 上收获了超过39,000 Stars(截至 2026 年 6 月),长期占据 GitHub Trending 榜首。本篇文章将从架构设计、数据引擎、评分算法、v3 核心升级等维度,对它进行一次全景式的技术拆解。
一、先搞清楚它是什么:不是一个独立工具,而是一个 Agent Skill
这是理解 last30days-skill 最重要的一点。
它不是一个 CLI 工具,不是一个 SaaS 产品,不是一个传统的搜索引擎。它是一个Agent Skill——遵循agentskills.io规范的行为扩展包。
具体来说:
它本身不执行搜索——它注入一份行为规范给宿主 Agent,Agent 按规范调度 Python/Node.js 脚本来完成所有操作。这本质上是一种声明式编程:Skill 文件描述"应该做什么",Agent 负责"怎么执行"。
跨平台的 Skill 规范生态
| 宿主平台 | 安装方式 |
|---|---|
| Claude Code | /plugin marketplace add mvanhorn/last30days-skill |
| Codex / Cursor / Gemini CLI / Copilot 等 50+ | npx skills add mvanhorn/last30days-skill -g |
| claude.ai Web | 下载.skill文件 → Settings → Capabilities 上传 |
| OpenClaw | clawhub install last30days-official |
| 开发者手动安装 | git clone+ 软链到~/.claude/skills/last30days |
这种设计带来一个巨大的工程优势:一次编写,50+ harness 复用。Skill 作者不需要关心不同 Agent 框架的 API 差异——宿主 Agent 负责适配。
二、四层架构:整个系统的工程设计
深入源码后,我将 last30days-skill 的架构归纳为四个层次:
第一层:规范层(Specification Layer)
文件入口:skills/last30days/SKILL.md(README 明确声明此文件是 “source of truth”)
这是一份声明式的行为规范文档,定义了:
/last30days <topic>命令的完整行为- 数据源的调用顺序和并行策略
- 评分逻辑和输出格式
- 每个阶段的目标和约束
构建脚本skills/last30days/scripts/build-skill.sh将其打包为标准的.skill文件。
第二层:消歧层(Pre-research Engine)
这是v3 版本最关键的架构升级,由贡献者@j-sperling实现。
v2 的痛点:搜索 “OpenClaw” 可能命中名字相似的无关联项目;搜索 “Paperclip” 可能返回 1990 年代电影而非目标仓库。
v3 的解决方案:在触发任何平台搜索之前,先运行一个 Python pre-research brain 做实体消歧:
输入: "OpenClaw" ↓ Pre-research Engine (Python) ↓ 解析输出: - X handle: @steipete (Peter Steinberger) - GitHub: openclaw/openclaw 仓库 - Subreddit: r/openclaw, r/ClaudeCode - YouTube channel 正确链接 - TikTok hashtag 正确拼写 ↓ 带着解析后的实体 ← 才发 API 请求这解决了跨平台的同指异名问题(Entity Resolution),是保证搜索质量的第一道关口。
第三层:归一化层(Engagement Scoring)
这是整个系统最精巧的设计。
核心挑战:如何将 “Reddit 1,500 upvote” 与 “TikTok 360 万播放量” 放在同一维度下比较?
项目采用的设计哲学是“按人投票的信号强度归一化”——每一种信号都代表一个或多个人用行为投票:
| 数据源 | 归一化信号 | 成本 |
|---|---|---|
| upvote 排序 + top comments,公开 JSON API | $0 | |
| Hacker News | points / comments | $0 |
| Polymarket | % 赔率(非美元成交额) | $0 |
| GitHub | stars / PR velocity / release notes | $0 |
| X / Twitter | like 排序的 thread | 用户自有浏览器 cookie,免费 |
| YouTube | 全字幕提取,筛出 5 句 quote 级别关键句 | yt-dlp 免费 |
| TikTok / Instagram / Threads | engagement 排序 + 字幕 | ScrapeCreators API,100 次免费 |
| Bluesky | AT Protocol posts | App password 免费 |
| Perplexity Sonar | 带 citation 的 grounding web search | OpenRouter PAYG |
| Web 搜索 | 编辑型内容(“one signal of many”) | Brave Search 2000 次/月免费 |
| 小红书(RED) | 社区贡献接入 | 视上游 key |
| Truth Social | 社区贡献接入 | 视上游 key |
| Digg | X 上 1,000 个高信噪比 AI 账号 leaderboard | 视上游 |
关键设计约束:
- Per-author cap = 3:防止任何单一大 V 的声音主导结果
- Polymarket 显示 % 赔率而非成交量——设计理由是"$66K 成交量"对非交易者无意义,"74% 停火可能"才有信号
EXCLUDE_SOURCES=tiktok,instagram,threads:付费源可按查询粒度关闭,避免意外账单
第四层:融合层(Cross-source Cluster Merging + Judge Agent)
v2 的痛点:同一故事在 Reddit + X + YouTube 上报成 3 条独立结果。
v3 的解决方案:基于实体的重叠检测(Entity-based Overlap Detection),将同一事件的跨平台报道合并为 1 个 cluster。
一个真实的输出示例:
/last30days "Iran vs USA"输出:“Day 38 of the war. Trump’s Tuesday deadline for Iran to reopen the Strait of Hormuz. Two US warplanes downed. Oil at $126/barrel… Polymarket: ceasefire by Dec 31 at74%.27 X posts, 10 YouTube videos, 20 prediction markets—— folded into one narrative.”
这正是它与"搜 13 个平台然后粘贴 13 个结果"的本质区别。
最后,由双 Judge Agent 进行评审:
- Judge 1:相关性 / 事实性打分
- Judge 2:幽默分(Best Takes)—— 高赞金句会被嵌入最终简报
三、v3 杀手级功能一览
| 功能 | 命令示例 | 技术实现要点 |
|---|---|---|
| GitHub 人物模式 | /last30days Peter Steinberger --github-user=steipete | 切到 author-scoped 查询,展示"他/她最近在 ship 什么" |
| 自动竞品对比 | /last30days OpenAI --competitors | 推理模型先 WebSearch 找 2 个竞品(Anthropic、xAI),然后并行跑 3 路 pipeline |
| Best Takes | 默认启用 | 第二个 judge 给每条结果打"幽默分",高赞金句嵌入简报 |
| ELI5 模式 | /last30days Nano Banana Pro prompting eli5 on | 同一份数据用大白话重写 |
| 可分享 HTML 简报 | /last30days OpenClaw --emit=html | 输出自包含 dark-mode HTML 文件,零 JS 离线可看,可拖入 Slack/Notion |
四、完整数据流:一次查询的全生命周期
用户输入: /last30days <topic> │ ▼ ┌──────────────────────────────────┐ │ Phase 1: Pre-research Engine │ ← Python brain (v3 新增) │ 实体消歧 + 关系解析 │ │ "OpenClaw" → │ │ @steipete + openclaw 仓库 │ │ + r/openclaw + YouTube channel │ └──────────────┬───────────────────┘ ▼ ┌──────────────────────────────────┐ │ Phase 2: 并行 13 平台查询 │ │ 带着 resolved entity 发请求 │ │ Reddit | HN | X | YouTube | │ │ Polymarket | GitHub | TikTok | │ │ Bluesky | Perplexity | Web | │ │ 小红书 | Truth Social | Digg │ └──────────────┬───────────────────┘ ▼ ┌──────────────────────────────────┐ │ Phase 3: Engagement Scoring │ │ 异构信号归一化 │ │ + Cross-source Cluster Merging │ └──────────────┬───────────────────┘ ▼ ┌──────────────────────────────────┐ │ Phase 4: Judge Agent 双评审 │ │ Judge 1: 相关性/事实性 │ │ Judge 2: 幽默分 (Best Takes) │ └──────────────┬───────────────────┘ ▼ ┌──────────────────────────────────┐ │ Phase 5: 输出简报 │ │ 带引用的结构化摘要 │ │ 格式: Markdown / HTML / ELI5 │ └──────────────────────────────────┘五、生态系统契合:它为什么能在 2026 年爆发
last30days-skill的爆发不是偶然,而是踩中了 AI Agent 生态的几个关键转折点:
| 生态转折点 | last30days 的对应设计 |
|---|---|
| Agent Skill Marketplace 标准化 | 遵循agentskills.io规范,一次编写 50+ harness 复用 |
| 数据花园围墙被 cookie/key 攻破 | vendored Node.js Bird 客户端,用用户自有浏览器 cookie 访问 X 数据 |
| 真实信号优先于 SEO | Google 不索引 Reddit 评论、ChatGPT 看不到 X——跨平台并行是唯一开源方案 |
| Judge Agent 模式可审计 | Cross-source clustering + 多 judge 评分公开,工程细节可审计(对比 Perplexity 等黑盒) |
六、安装与使用快速上手
基础安装(适用 50+ Agent 平台)
# 全局安装npx skillsaddmvanhorn/last30days-skill-g# 指定宿主(如仅 Cursor)npx skillsaddmvanhorn/last30days-skill-g-acursor管理命令
npx skills list-g# 查看已安装的 skillsnpx skills update last30days-g# 更新npx skills remove last30days-g# 移除Claude Code 专用安装
/plugin marketplace add mvanhorn/last30days-skill /plugin install last30days使用示例
/last30days Cursor IDE /last30days React Server Components /last30days AI coding tools --emit=html /last30days OpenAI --competitors /last30days nvidia earnings reaction --save-dir ./research输出位置
| 系统 | 默认路径 |
|---|---|
| macOS / Linux | ~/Documents/Last30Days/ |
| Windows | C:\Users\<用户名>\Documents\Last30Days\ |
七、使用建议与局限性
✅ 最佳使用场景
- 开源项目近期热度调研
- 产品 / 公司 / 技术方向的社区反馈分析
- Reddit / HN / X 上用户真实讨论汇总
- 竞品分析、内容选题、市场观察
❌ 不适合的场景
- 需要 30 天以上历史数据的深度归档
- 需要实时数据流的监控系统
- 商业级合规报告
- 仅关注单一平台内容
- 需要 100% 全覆盖的精确搜索
最佳实践
把它当作社区舆情和近况整理工具,而不是"搜索引擎替代品"。
查某个具体产品时加上限制条件能获得更精准的结果:
/last30days Supabase auth developer experience /last30days Claude Code vs Cursor reddit /last30days Apple Vision Pro developer sentiment八、总结:一个时代的缩影
last30days-skill的成功折射出 AI Agent 生态在 2026 年的三个重要趋势:
从 SaaS 到 Skill:能力不再需要封装为独立产品,一个
.skill文件 + 标准规范就能接入 50+ 平台。分发成本趋近于零,网络效应极大化。从搜索到"计算事实":传统搜索引擎聚合编辑内容,但 Reddit 评论区的真实反馈、Polymarket 的赔率、X 上社区投票形成的共识——这些"人的信号"才是更有价值的信息来源。last30days 做的不是搜索,是计算"人用 upvote / like / 真金白银投出来的事实"。
从黑盒到可审计:Perplexity 等闭源 AI 搜索的评分逻辑是黑盒,你永远不知道为什么某条结果排在前面。last30days 的公开评分算法、双 judge 评审、cross-source clustering 让整个过程可审计、可质疑、可改进。
它的核心设计哲学可以浓缩为一句话:“Google aggregates editors./last30dayssearches people.”