last30days-skill 深度解析:当 AI 终端学会「全网记忆」,信息差终于被彻底粉碎
一、背景:信息过载时代的「失忆症」
你有没有过这样的时刻——
想了解某个技术话题的最新动态,打开 Reddit 刷了半小时,全是噪音;转到 X(Twitter)看看大佬们在说什么,信息流已经被算法喂饱;去 Hacker News 翻翻,发现三天前的帖子已经沉底。
等你终于找到几条有价值的内容,已经过去了一个小时。而你还什么都没记住。
更讽刺的是,这些平台的搜索功能几乎形同虚设:
- Reddit 搜索:「related posts」永远不是你要找的
- X 搜索:不登录不让用,登录了又被算法绑架
- Hacker News:时间线是线性的,过了三天就再找不到
- YouTube:只能搜视频标题,评论区的金矿完全浪费
- TikTok/Instagram:这类平台根本就没有有效的「历史搜索」
这就是 2026 年的信息困境:数据在爆炸,但我们越来越「健忘」。
因为真正有价值的讨论,从来不在官方文档里,而是在这些社区的角落——某条高赞评论、某个技术大牛的随手吐槽、某个真实用户踩过的坑。
而 last30days-skill,就是要解决这个问题。
二、last30days-skill 是什么?
2.1 核心定位
last30days-skill 是一个专为 AI 终端(如 Claude Code、Gemini CLI)设计的扩展插件,它的核心功能非常聚焦:
跨平台抓取全网过去 30 天内,真实社区里关于某个话题的高质量讨论,并直接给你出一份带真实源链接的总结报告。
一句话概括:它是 AI 终端的「外置大脑」。
2.2 关键数据
- GitHub Stars:10.2K+(截至 2026 年 4 月)
- 开发语言:纯 Python
- 支持平台:Reddit、X(Twitter)、YouTube、Hacker News、Polymarket、Bluesky、TikTok、Instagram
- 默认免费平台:Reddit、Hacker News、Polymarket
- 需配置 API 平台:X、YouTube、Bluesky、TikTok、Instagram
2.3 工作原理
用户输入 → AI 终端 → last30days-skill → 多平台爬取 → 数据清洗 → 智能总结 → 输出报告
具体流程:
- 指令触发:在 Claude Code 中输入
/last30days [话题] - 多平台并行爬取:同时向 Reddit、HN、X 等平台发起查询
- 时间窗口过滤:只保留过去 30 天的内容
- 相关性排序:基于讨论热度、点赞数、评论质量综合排序
- AI 合成总结:不是简单拼接,而是真正理解后的结构化输出
- 源链接溯源:每条结论都附带原始链接,可追溯验证
三、为什么这个工具值得 10K Stars?
3.1 解决了真正的痛点
市面上的「信息聚合工具」很多,但大多数都有这些毛病:
| 工具类型 | 问题 |
|---|---|
| RSS 阅读器 | 信息被动推送,你需要自己过滤 |
| Google Alerts | 只能搜新闻源,社区讨论完全遗漏 |
| 社交媒体搜索 | 时间线混乱,无法回溯历史 |
| AI 搜索引擎 | 只给答案,不给来源;信息来源单一 |
last30days-skill 的独特之处:
- 主动查询,而非被动推送——你问什么,它就搜什么
- 跨平台统一检索——不用分别打开 Reddit、HN、X
- 时间窗口精确——过去 30 天,既不过时也不太旧
- 真实社区讨论——不是新闻稿,是真实用户的踩坑经验
- AI 智能总结——不是关键词堆砌,是结构化洞察
- 源链接可追溯——每条结论都有出处
3.2 与 AI 终端的深度集成
这不是一个独立的 Web 应用,而是 AI 终端的扩展。
这意味着:
- 你不需要切换窗口,直接在 Claude Code 里用
- 搜索结果可以被后续对话继续深挖
- 可以和其他 AI 能力组合使用(如代码生成、文档撰写)
举个例子:
你:/last30days Claude Code 新特性
[last30days-skill 返回过去30天社区讨论总结]
你:根据这些讨论,帮我总结 Claude Code 最近三个版本的更新重点
[AI 基于搜索结果生成结构化总结]
你:写一篇博客介绍这些新特性
[AI 直接生成文章草稿]
这就是「AI 原生」工作流——搜索不再是独立的动作,而是创作链条的一环。
3.3 技术实现的艺术
从技术角度看,last30days-skill 有几个亮点:
3.3.1 多平台 API 适配
# 核心架构示意(简化版)
class PlatformAdapter:
"""平台适配器基类"""
def __init__(self, api_key: str = None):
self.api_key = api_key
def search(self, query: str, days: int = 30) -> List[Post]:
raise NotImplementedError
class RedditAdapter(PlatformAdapter):
"""Reddit 适配器"""
def search(self, query: str, days: int = 30) -> List[Post]:
# 使用 Reddit API 搜索
# 支持按相关性、热度、时间排序
pass
class XAdapter(PlatformAdapter):
"""X (Twitter) 适配器"""
def search(self, query: str, days: int = 30) -> List[Post]:
# 需要 API Key
# 支持高级搜索语法
pass
class HackerNewsAdapter(PlatformAdapter):
"""HN 适配器"""
def search(self, query: str, days: int = 30) -> List[Post]:
# 使用 Algolia HN API
# 支持按 points、comments 排序
pass
每个平台都有独立的适配器,遵循统一的接口规范。新增平台只需实现 search 方法。
3.3.2 时间窗口过滤
def filter_by_time(posts: List[Post], days: int = 30) -> List[Post]:
"""时间窗口过滤"""
cutoff = datetime.now() - timedelta(days=days)
return [p for p in posts if p.created_at >= cutoff]
简单但有效——只保留过去 30 天的内容。
为什么是 30 天?因为:
- 太短(如 7 天):信息量不够,错过重要讨论
- 太长(如 90 天):信息过时,参考价值下降
- 30 天:刚好是一个「信息新鲜度」的黄金窗口
3.3.3 相关性排序算法
def rank_posts(posts: List[Post]) -> List[Post]:
"""基于多维度打分排序"""
scored_posts = []
for post in posts:
# 综合得分 = 热度 + 相关性 + 时效性
score = (
post.upvotes * 0.3 + # 点赞权重
post.comments * 0.2 + # 评论权重
post.relevance_score * 0.3 + # 文本相关性
recency_boost(post) * 0.2 # 时效性加成
)
scored_posts.append((score, post))
return [p for _, p in sorted(scored_posts, reverse=True)]
不是简单按时间或热度排序,而是多维度综合打分。
3.3.4 AI 总结生成
def generate_summary(posts: List[Post], topic: str) -> str:
"""AI 生成结构化总结"""
# 1. 提取关键信息
key_points = extract_key_points(posts)
# 2. 聚类分组
clusters = cluster_by_topic(key_points)
# 3. 生成结构化报告
report = f"""
# 过去30天「{topic}」社区讨论总结
## 核心观点
{generate_bullet_points(clusters['main'])}
## 热议话题
{generate_discussion_topics(clusters['hot'])}
## 踩坑经验
{generate_pitfalls(clusters['pitfalls'])}
## 推荐资源
{generate_resources(clusters['resources'])}
---
> 数据来源:{len(posts)} 条社区讨论,时间范围:过去30天
"""
return report
最终的输出不是流水账,而是结构化的洞察报告。
四、实战演示:从安装到使用
4.1 安装步骤
方法一:Claude Code Skills 目录安装
# 克隆仓库到 Claude Code skills 目录
cd ~/.claude/skills
git clone https://github.com/mvanhorn/last30days-skill.git
# 安装依赖
cd last30days-skill
pip install -r requirements.txt
方法二:通过 SkillHub 安装(推荐)
# 如果你已经安装了 SkillHub CLI
skillhub install last30days-skill
4.2 配置 API Key
默认情况下,Reddit、Hacker News、Polymarket 可以直接使用。
如果要解锁 X、YouTube、TikTok 等平台,需要配置相应的 API Key:
# 创建配置文件
mkdir -p ~/.config/last30days-skill
cat > ~/.config/last30days-skill/config.json << EOF
{
"twitter": {
"bearer_token": "your-twitter-bearer-token"
},
"youtube": {
"api_key": "your-youtube-api-key"
},
"tiktok": {
"api_key": "your-tiktok-api-key"
},
"instagram": {
"access_token": "your-instagram-access-token"
},
"bluesky": {
"handle": "your-handle.bsky.social",
"password": "your-app-password"
}
}
EOF
4.3 基本使用
在 Claude Code 中:
/last30days React 19 新特性
等待几秒钟,你会看到类似这样的输出:
# 过去30天「React 19 新特性」社区讨论总结
## 核心更新
### 1. Server Components 正式稳定
- Reddit r/reactjs 讨论热度:🔥🔥🔥
- 核心观点:性能提升明显,但迁移成本较高
- 踩坑:某些第三方库还不兼容
### 2. use() Hook 引入
- Hacker News 讨论:247 points
- 用法:可以在条件语句中调用,比 useEffect 更灵活
- 示例代码:[链接]
### 3. 并发渲染优化
- X 上 Dan Abramov 的解读:[链接]
- 实测数据:首屏加载提速 40%
## 热议话题
1. **「是否应该全面迁移到 Server Components?」**
- 正方:性能收益明显
- 反方:生态还不成熟,踩坑成本高
2. **「use() Hook 是否会取代 useEffect?」**
- 社区共识:不会,两者适用场景不同
## 踩坑经验
- 某些 UI 库在 React 19 下会报错(如 Material-UI 的部分组件)
- Server Components 与 Client Components 的边界划分是难点
## 推荐资源
- [React 19 官方迁移指南](https://react.dev/blog)
- [Reddit 热帖:我的 React 19 迁移血泪史](https://reddit.com/...)
4.4 高级用法
组合查询
/last30days "Claude Code" AND "最佳实践"
排除噪音
/last30days Python 性能优化 NOT asyncio
指定平台
/last30days Go 泛型 --platforms reddit,hn
五、应用场景:谁最需要这个工具?
5.1 技术选型决策者
场景:你要在团队引入一个新技术栈,但不确定是否成熟。
传统做法:
- 看官方文档(永远是「很好用」)
- 搜几篇博客(可能是软文)
- 问几个朋友(样本太小)
last30days-skill 做法:
/last30days Bun.js 生产环境踩坑
你会看到:
- 真实用户在生产环境遇到的问题
- 还没被官方文档记录的 edge case
- 社区公认的「最佳实践」
决策依据从「听谁说的」变成了「社区共识是什么」。
5.2 内容创作者
场景:你想写一篇技术文章,但不知道大家关心什么。
传统做法:
- 刷 GitHub Trending(可能已经过热了)
- 看技术媒体(可能是「造热点」)
- 凭感觉写(可能没人看)
last30days-skill 做法:
/last30days Rust Web 框架
你会看到:
- 最近 30 天最热的话题是什么
- 大家在争论什么
- 哪些痛点还没被解决
选题从「猜」变成了「数据驱动」。
5.3 开源项目维护者
场景:你想了解用户对项目的真实反馈。
传统做法:
- 看 GitHub Issues(只有主动反馈的人)
- 看 Discord 社区(用户可能不在那里)
- 等用户来抱怨(已经晚了)
last30days-skill 做法:
/last30days 你的项目名
你会看到:
- 用户在 Reddit/HN/X 上怎么说你的项目
- 哪些功能被吐槽最多
- 哪些竞品被频繁对比
反馈收集从「被动等待」变成了「主动挖掘」。
5.4 求职者
场景:你要准备面试,想知道某个公司的真实情况。
传统做法:
- 看公司官网(全是正面信息)
- 看知乎/脉脉(信息杂乱)
- 问熟人(样本有限)
last30days-skill 做法:
/last30days 某某公司 工作体验
你会看到:
- 员工/前员工在社交平台的真实分享
- 面试经验总结
- 行业内对公司的评价
信息从「精心包装」变成了「真实声音」。
六、技术深度解析
6.1 架构设计
last30days-skill 采用了经典的插件化架构:
┌─────────────────────────────────────────────────┐
│ AI Terminal (Claude Code) │
└─────────────────────┬───────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ last30days-skill Core │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Query Parser │ │ Summarizer │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────┬───────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Reddit │ │ HackerNews│ │ X/Twitter │
│ Adapter │ │ Adapter │ │ Adapter │
└───────────┘ └───────────┘ └───────────┘
│ │ │
▼ ▼ ▼
Reddit API HN Algolia Twitter API
这种设计的好处:
- 易于扩展:新增平台只需实现 Adapter 接口
- 解耦清晰:核心逻辑与平台细节分离
- 容错性强:某个平台挂了不影响其他平台
6.2 数据流详解
# 完整数据流(简化版)
def last30days_search(topic: str, platforms: List[str] = None):
# 1. 解析查询
query = parse_query(topic)
# 2. 并行调用各平台
all_posts = []
with ThreadPoolExecutor() as executor:
futures = []
for platform in platforms or DEFAULT_PLATFORMS:
adapter = get_adapter(platform)
futures.append(executor.submit(adapter.search, query))
for future in as_completed(futures):
try:
posts = future.result()
all_posts.extend(posts)
except Exception as e:
log_error(f"Platform {platform} failed: {e}")
# 3. 时间过滤
recent_posts = filter_by_time(all_posts, days=30)
# 4. 去重
unique_posts = deduplicate(recent_posts)
# 5. 相关性排序
ranked_posts = rank_posts(unique_posts)
# 6. 生成总结
summary = generate_summary(ranked_posts, topic)
return summary
关键点:
- 并行调用:多个平台同时查询,总耗时取决于最慢的平台
- 容错处理:某个平台失败不影响整体结果
- 去重逻辑:同一内容可能出现在多个平台,需要识别并合并
6.3 API 适配器实现细节
Reddit 适配器
import praw
class RedditAdapter(PlatformAdapter):
def __init__(self):
self.reddit = praw.Reddit(
client_id="YOUR_CLIENT_ID",
client_secret="YOUR_CLIENT_SECRET",
user_agent="last30days-skill/1.0"
)
def search(self, query: str, days: int = 30) -> List[Post]:
results = []
cutoff = datetime.now() - timedelta(days=days)
# 搜索多个相关 subreddits
subreddits = ["programming", "technology", "learnprogramming"]
for sub_name in subreddits:
subreddit = self.reddit.subreddit(sub_name)
for submission in subreddit.search(query, time_filter="month"):
if submission.created_utc >= cutoff.timestamp():
results.append(Post(
title=submission.title,
url=f"https://reddit.com{submission.permalink}",
upvotes=submission.score,
comments=submission.num_comments,
created_at=datetime.fromtimestamp(submission.created_utc),
content=submission.selftext,
platform="reddit"
))
return results
Hacker News 适配器
from algoliasearch.search_client import SearchClient
class HackerNewsAdapter(PlatformAdapter):
def __init__(self):
self.client = SearchClient.create("UJ5WYC0L7X", "..."
self.index = self.client.init_index("Item")
def search(self, query: str, days: int = 30) -> List[Post]:
cutoff = int((datetime.now() - timedelta(days=days)).timestamp())
results = self.index.search(query, {
"filters": f"created_at_i > {cutoff}",
"hitsPerPage": 100
})
posts = []
for hit in results["hits"]:
posts.append(Post(
title=hit.get("title", ""),
url=hit.get("url") or f"https://news.ycombinator.com/item?id={hit['objectID']}",
upvotes=hit.get("points", 0),
comments=hit.get("num_comments", 0),
created_at=datetime.fromtimestamp(hit["created_at_i"]),
content=hit.get("story_text", ""),
platform="hackernews"
))
return posts
6.4 性能优化
6.4.1 缓存策略
from functools import lru_cache
import hashlib
@lru_cache(maxsize=100)
def cached_search(query_hash: str, platform: str):
"""缓存搜索结果,避免重复调用 API"""
adapter = get_adapter(platform)
return adapter.search(query_hash)
def search_with_cache(query: str, platform: str):
query_hash = hashlib.md5(query.encode()).hexdigest()
return cached_search(query_hash, platform)
6.4.2 限流处理
import time
from ratelimit import limits, sleep_and_retry
class RateLimitedAdapter:
"""带限流的适配器基类"""
@sleep_and_retry
@limits(calls=60, period=60) # 每分钟 60 次
def search(self, query: str):
return self._do_search(query)
七、与同类工具对比
| 特性 | last30days-skill | Google Alerts | RSS 阅读器 | Perplexity AI |
|---|---|---|---|---|
| 主动查询 | ✅ | ❌ | ❌ | ✅ |
| 社区讨论 | ✅ | ❌ | 部分 | ❌ |
| 时间窗口精确 | ✅ 30天 | ❌ | ❌ | ❌ |
| AI 总结 | ✅ | ❌ | ❌ | ✅ |
| 源链接追溯 | ✅ | ✅ | ✅ | 部分 |
| 与 AI 终端集成 | ✅ | ❌ | ❌ | ❌ |
| 开源免费 | ✅ | ✅ | 部分 | ❌ |
核心优势:
- 唯一真正覆盖「社区讨论」的工具
- 唯一与 AI 终端深度集成的工具
- 唯一提供「30 天时间窗口」的工具
八、局限性与改进空间
8.1 当前局限
- API Key 依赖:X、YouTube 等平台需要付费 API
- 语言限制:主要针对英文社区,中文社区覆盖有限
- 平台覆盖:暂未支持 Discord、Telegram 等封闭社区
8.2 改进方向
# 未来可能的增强功能
# 1. 支持自定义时间窗口
/last30days React 19 --days 7 # 只看最近7天
/last30days React 19 --days 90 # 扩展到90天
# 2. 支持中文社区
/last30days Vue 3 --platforms zhihu,weibo,v2ex
# 3. 支持深度分析模式
/last30days Rust async --deep # 生成更详细的分析报告
# 4. 支持对比模式
/last30days React vs Vue --compare # 对比两个话题的讨论热度
九、总结:信息差的终结者
last30days-skill 的价值,不在于它「搜索」了什么,而在于它改变了信息获取的范式:
传统范式
信息源 → 算法推荐 → 你(被动接收)
last30days 范式
你(主动提问)→ 多平台搜索 → AI 总结 → 结构化洞察
从「被算法喂养」到「主动挖掘真相」。
这就是为什么它能在一周内冲上 GitHub Trending,收获 10K+ Stars。
因为它解决了一个真实存在的痛点,而且解决得足够优雅。
一句话总结:
last30days-skill 是 AI 终端的「外置大脑」,让你在几秒钟内掌握过去 30 天全网社区关于任何话题的真实讨论。
它不是搜索引擎,是「信息差粉碎机」。
项目地址:https://github.com/mvanhorn/last30days-skill
安装方式:skillhub install last30days-skill 或克隆到 Claude Code skills 目录
支持平台:Reddit、X、YouTube、Hacker News、Polymarket、Bluesky、TikTok、Instagram
开源协议:MIT License