编程 last30days-skill 深度解析:当 AI 终端学会「全网记忆」,信息差终于被彻底粉碎

2026-04-10 03:42:48 +0800 CST views 5

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 → 多平台爬取 → 数据清洗 → 智能总结 → 输出报告

具体流程:

  1. 指令触发:在 Claude Code 中输入 /last30days [话题]
  2. 多平台并行爬取:同时向 Reddit、HN、X 等平台发起查询
  3. 时间窗口过滤:只保留过去 30 天的内容
  4. 相关性排序:基于讨论热度、点赞数、评论质量综合排序
  5. AI 合成总结:不是简单拼接,而是真正理解后的结构化输出
  6. 源链接溯源:每条结论都附带原始链接,可追溯验证

三、为什么这个工具值得 10K Stars?

3.1 解决了真正的痛点

市面上的「信息聚合工具」很多,但大多数都有这些毛病:

工具类型问题
RSS 阅读器信息被动推送,你需要自己过滤
Google Alerts只能搜新闻源,社区讨论完全遗漏
社交媒体搜索时间线混乱,无法回溯历史
AI 搜索引擎只给答案,不给来源;信息来源单一

last30days-skill 的独特之处:

  1. 主动查询,而非被动推送——你问什么,它就搜什么
  2. 跨平台统一检索——不用分别打开 Reddit、HN、X
  3. 时间窗口精确——过去 30 天,既不过时也不太旧
  4. 真实社区讨论——不是新闻稿,是真实用户的踩坑经验
  5. AI 智能总结——不是关键词堆砌,是结构化洞察
  6. 源链接可追溯——每条结论都有出处

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

这种设计的好处:

  1. 易于扩展:新增平台只需实现 Adapter 接口
  2. 解耦清晰:核心逻辑与平台细节分离
  3. 容错性强:某个平台挂了不影响其他平台

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-skillGoogle AlertsRSS 阅读器Perplexity AI
主动查询
社区讨论部分
时间窗口精确✅ 30天
AI 总结
源链接追溯部分
与 AI 终端集成
开源免费部分

核心优势

  1. 唯一真正覆盖「社区讨论」的工具
  2. 唯一与 AI 终端深度集成的工具
  3. 唯一提供「30 天时间窗口」的工具

八、局限性与改进空间

8.1 当前局限

  1. API Key 依赖:X、YouTube 等平台需要付费 API
  2. 语言限制:主要针对英文社区,中文社区覆盖有限
  3. 平台覆盖:暂未支持 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

复制全文 生成海报 AI工具 Claude Code 开源 GitHub 信息检索

推荐文章

markdown语法
2024-11-18 18:38:43 +0800 CST
#免密码登录服务器
2024-11-19 04:29:52 +0800 CST
Web 端 Office 文件预览工具库
2024-11-18 22:19:16 +0800 CST
随机分数html
2025-01-25 10:56:34 +0800 CST
markdowns滚动事件
2024-11-19 10:07:32 +0800 CST
Linux 网站访问日志分析脚本
2024-11-18 19:58:45 +0800 CST
浅谈CSRF攻击
2024-11-18 09:45:14 +0800 CST
js迭代器
2024-11-19 07:49:47 +0800 CST
php微信文章推广管理系统
2024-11-19 00:50:36 +0800 CST
赚点点任务系统
2024-11-19 02:17:29 +0800 CST
用 Rust 玩转 Google Sheets API
2024-11-19 02:36:20 +0800 CST
Nginx 跨域处理配置
2024-11-18 16:51:51 +0800 CST
JavaScript设计模式:桥接模式
2024-11-18 19:03:40 +0800 CST
企业官网案例-芊诺网络科技官网
2024-11-18 11:30:20 +0800 CST
如何配置获取微信支付参数
2024-11-19 08:10:41 +0800 CST
程序员茄子在线接单