docs: add CHANGELOG.md, release notes, and v2.1 polish
Add CHANGELOG.md (Keep a Changelog format) and release-notes.md for the v2.1.0 GitHub Release. Also includes queued copy updates: plugin.json version bump to 2.1.0, YouTube added to descriptions, SKILL.md security/permissions section and ClawdBot metadata, updated watchlist examples, and v2.1 launch post refinements. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,8 @@
|
||||
"url": "https://github.com/mvanhorn"
|
||||
},
|
||||
"metadata": {
|
||||
"description": "Research any topic from the last 30 days across Reddit, X, and the web"
|
||||
"description": "Research any topic from the last 30 days across Reddit, X, YouTube, and the web",
|
||||
"version": "2.1.0"
|
||||
},
|
||||
"plugins": [
|
||||
{
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "last30days",
|
||||
"description": "Research any topic from the last 30 days across Reddit, X, and the web",
|
||||
"version": "2.0.0",
|
||||
"description": "Research any topic from the last 30 days across Reddit, X, YouTube, and the web",
|
||||
"version": "2.1.0",
|
||||
"author": {
|
||||
"name": "mvanhorn"
|
||||
},
|
||||
"repository": "https://github.com/mvanhorn/last30days-skill",
|
||||
"license": "MIT",
|
||||
"keywords": ["research", "reddit", "twitter", "x", "trends", "prompts"],
|
||||
"keywords": ["research", "reddit", "twitter", "x", "youtube", "trends", "prompts"],
|
||||
"skills": ["./"]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2.1.0] - 2026-02-15
|
||||
|
||||
### Highlights
|
||||
|
||||
Three headline features: watchlists for always-on bots, YouTube transcripts as a 4th source, and Codex CLI compatibility. Plus bundled X search with no external CLI needed.
|
||||
|
||||
### Added
|
||||
|
||||
- Open-class skill with watchlists, briefings, and history modes (SQLite-backed, FTS5 full-text search, WAL mode) (`feat(open)`)
|
||||
- YouTube as a 4th research source via yt-dlp -- search, view counts, and auto-generated transcript extraction (`feat: Add YouTube`)
|
||||
- OpenAI Codex CLI compatibility -- install to `~/.agents/skills/last30days`, invoke with `$last30days` (`feat: Add Codex CLI`)
|
||||
- Bundled X search -- vendored subset of Bird's Twitter GraphQL client (MIT, originally by @steipete), no external CLI needed (`v2.1: Bundle Bird X search`)
|
||||
- Native web search backends: Parallel AI, Brave Search, OpenRouter/Perplexity Sonar Pro (`feat(engine)`)
|
||||
- `--diagnose` flag for checking available sources and authentication status
|
||||
- `--store` flag for SQLite accumulation (open variant)
|
||||
- Conversational first-run experience (NUX) with dynamic source status (`feat(nux)`)
|
||||
|
||||
### Changed
|
||||
|
||||
- Smarter query construction -- strips noise words, auto-retries with shorter queries when X returns 0 results
|
||||
- Two-phase search architecture -- Phase 1 discovers entities (@handles, r/subreddits), Phase 2 drills into them
|
||||
- Reddit JSON enrichment -- real upvotes, comments, and upvote ratio from reddit.com/.json endpoint
|
||||
- Engagement-weighted scoring: relevance 45%, recency 25%, engagement 30% (log1p dampening)
|
||||
- Model auto-selection with 7-day cache and fallback chain (gpt-4.1 -> gpt-4o -> gpt-4o-mini)
|
||||
- `--days=N` configurable lookback flag (thanks @jonthebeef, [#18](https://github.com/mvanhorn/last30days-skill/pull/18))
|
||||
- Model fallback for unverified orgs (thanks @levineam, [#16](https://github.com/mvanhorn/last30days-skill/pull/16))
|
||||
- Marketplace plugin support via `.claude-plugin/plugin.json` (inspired by @galligan, [#1](https://github.com/mvanhorn/last30days-skill/pull/1))
|
||||
|
||||
### Fixed
|
||||
|
||||
- YouTube timeout increased to 90s, Reddit 429 rate limit fail-fast
|
||||
- YouTube soft date filter -- keeps evergreen content instead of filtering to 0 results
|
||||
- Eager import crash in `__init__.py` that broke Codex environments
|
||||
- Reddit future timeout (same pattern as YouTube timeout bug)
|
||||
- Process cleanup on timeout/kill -- tracks child PIDs for clean shutdown
|
||||
- Windows Unicode fix for cp1252 emoji crash (thanks @JosephOIbrahim, [#17](https://github.com/mvanhorn/last30days-skill/pull/17))
|
||||
- X search returning 0 results on popular topics due to over-specific queries
|
||||
|
||||
### New Contributors
|
||||
|
||||
- @JosephOIbrahim -- Windows Unicode fix ([#17](https://github.com/mvanhorn/last30days-skill/pull/17))
|
||||
- @levineam -- Model fallback for unverified orgs ([#16](https://github.com/mvanhorn/last30days-skill/pull/16))
|
||||
- @jonthebeef -- `--days=N` configurable lookback ([#18](https://github.com/mvanhorn/last30days-skill/pull/18))
|
||||
|
||||
### Credits
|
||||
|
||||
- @steipete -- Bird CLI (vendored X search) and yt-dlp/summarize inspiration for YouTube transcripts
|
||||
- @galligan -- Marketplace plugin inspiration
|
||||
- @hutchins -- Pushed for YouTube feature
|
||||
|
||||
## [1.0.0] - 2026-01-15
|
||||
|
||||
Initial public release. Reddit + X search via OpenAI Responses API and xAI API.
|
||||
|
||||
[2.1.0]: https://github.com/mvanhorn/last30days-skill/compare/v1.0.0...v2.1.0
|
||||
[1.0.0]: https://github.com/mvanhorn/last30days-skill/releases/tag/v1.0.0
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
**New in V2.1 - three headline features:**
|
||||
|
||||
1. **Open-class skill with watchlists.** Add any topic to a watchlist - your competitors, your partners, your board members, an emerging technology - and /last30days re-researches it on demand or via cron. Designed for always-on environments like [Open Claw](https://github.com/openclaw/openclaw) where a bot can run research on a schedule and accumulate findings over time.
|
||||
1. **Open-class skill with watchlists.** Add any topic to a watchlist - your competitors, specific people, emerging technologies - and /last30days re-researches it on demand or via cron. Designed for always-on environments like [Open Claw](https://github.com/openclaw/openclaw) where a bot can run research on a schedule and accumulate findings over time.
|
||||
2. **YouTube transcripts as a 4th source.** When yt-dlp is installed, /last30days automatically searches YouTube, grabs view counts, and extracts auto-generated transcripts from the top videos. A 20-minute review contains 10x the signal of a single post - now the skill reads it. Inspired by [@steipete](https://x.com/steipete)'s yt-dlp + [summarize](https://github.com/steipete/summarize) toolchain.
|
||||
3. **Works in OpenAI Codex CLI.** Same skill, same engine. Install to `~/.agents/skills/last30days` and invoke with `$last30days`. Claude Code and Codex users get the same research.
|
||||
|
||||
@@ -66,7 +66,7 @@ Same SKILL.md, same Python engine, same scripts. The `agents/openai.yaml` provid
|
||||
|
||||
### Open Variant (Watchlist + Briefings) - For Always-On Bots
|
||||
|
||||
**Designed for [Open Claw](https://github.com/openclaw/openclaw) and similar always-on AI environments.** Add your competitors, partners, board members, or any topic to a watchlist. When paired with a cron job or always-on bot, /last30days re-researches them on a schedule and accumulates findings in a local SQLite database. Ask for a briefing anytime.
|
||||
**Designed for [Open Claw](https://github.com/openclaw/openclaw) and similar always-on AI environments.** Add your competitors, specific people, or any topic to a watchlist. When paired with a cron job or always-on bot, /last30days re-researches them on a schedule and accumulates findings in a local SQLite database. Ask for a briefing anytime.
|
||||
|
||||
**Important:** The watchlist stores schedules as metadata, but nothing triggers runs automatically. You need an external scheduler (cron, launchd, or an always-on bot like Open Claw) to call `watchlist.py run-all` on a timer. In plain Claude Code, you can run `watch run-one` and `watch run-all` manually, but there's no background scheduling.
|
||||
|
||||
@@ -76,15 +76,13 @@ cp variants/open/SKILL.md ~/.claude/skills/last30days/SKILL.md
|
||||
|
||||
# Add topics to your watchlist
|
||||
last30 watch my biggest competitor every week
|
||||
last30 watch AI video generation tools
|
||||
last30 tell me once a month about what my board members are up to
|
||||
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
|
||||
|
||||
# Run research manually (or let your bot's cron handle it)
|
||||
last30 run all my watched topics
|
||||
|
||||
# Get your briefing
|
||||
last30 give me my briefing
|
||||
|
||||
# Search accumulated knowledge
|
||||
last30 what have you found about AI video?
|
||||
```
|
||||
|
||||
@@ -4,6 +4,29 @@ version: "2.1"
|
||||
description: "Research a topic from the last 30 days. Also triggered by 'last30'. Sources: Reddit, X, YouTube, web. Become an expert and write copy-paste-ready prompts."
|
||||
argument-hint: 'last30 AI video tools, last30 best project management tools'
|
||||
allowed-tools: Bash, Read, Write, AskUserQuestion, WebSearch
|
||||
homepage: https://github.com/mvanhorn/last30days-skill
|
||||
user-invocable: true
|
||||
disable-model-invocation: true
|
||||
metadata:
|
||||
clawdbot:
|
||||
emoji: "📰"
|
||||
requires:
|
||||
env:
|
||||
- OPENAI_API_KEY
|
||||
bins:
|
||||
- node
|
||||
- python3
|
||||
primaryEnv: OPENAI_API_KEY
|
||||
files:
|
||||
- "scripts/*"
|
||||
homepage: https://github.com/mvanhorn/last30days-skill
|
||||
tags:
|
||||
- research
|
||||
- reddit
|
||||
- x
|
||||
- youtube
|
||||
- trends
|
||||
- prompts
|
||||
---
|
||||
|
||||
# last30days v2.1: Research Any Topic from the Last 30 Days
|
||||
@@ -452,3 +475,27 @@ After delivering a prompt, end with:
|
||||
|
||||
Want another prompt? Just tell me what you're creating next.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Security & Permissions
|
||||
|
||||
**What this skill does:**
|
||||
- Sends search queries to OpenAI's Responses API (`api.openai.com`) for Reddit discovery
|
||||
- Sends search queries to Twitter's GraphQL API (via browser cookie auth) or xAI's API (`api.x.ai`) for X search
|
||||
- Runs `yt-dlp` locally for YouTube search and transcript extraction (no API key, public data)
|
||||
- Optionally sends search queries to Brave Search API, Parallel AI API, or OpenRouter API for web search
|
||||
- Fetches public Reddit thread data from `reddit.com` for engagement metrics
|
||||
- Stores research findings in local SQLite database (watchlist mode only)
|
||||
|
||||
**What this skill does NOT do:**
|
||||
- Does not post, like, or modify content on any platform
|
||||
- Does not access your Reddit, X, or YouTube accounts
|
||||
- Does not share API keys between providers (OpenAI key only goes to api.openai.com, etc.)
|
||||
- Does not log, cache, or write API keys to output files
|
||||
- Does not send data to any endpoint not listed above
|
||||
- Cannot be invoked autonomously by the agent (`disable-model-invocation: true`)
|
||||
|
||||
**Bundled scripts:** `scripts/last30days.py` (main research engine), `scripts/lib/` (search, enrichment, rendering modules), `scripts/lib/vendor/bird-search/` (vendored X search client, MIT licensed)
|
||||
|
||||
Review scripts before first use to verify behavior.
|
||||
|
||||
+58
-11
@@ -2,18 +2,23 @@
|
||||
|
||||
## Post 1 (Hook)
|
||||
|
||||
V2.1 of /last30days launches today. Three headline features:
|
||||
V2.1 of @slashlast30days launches today. Three headline features:
|
||||
|
||||
## Post 2 (Watchlist - THE KILLER FEATURE)
|
||||
1. @openclaw + watchlists - automated research on your competitors, people, and topics
|
||||
2. YouTube transcripts as a 4th source
|
||||
3. Works in OpenAI Codex
|
||||
|
||||
SET IT AND FORGET IT.
|
||||
## Post 2 (Watchlist + Open Claw - THE KILLER FEATURE)
|
||||
|
||||
Add your competitors, your partners, your board members to a watchlist. /last30days re-researches them automatically - daily or weekly - across Reddit, X, YouTube, and the web.
|
||||
@openclaw + WATCHLISTS.
|
||||
|
||||
Ask for a briefing anytime. The research runs while you sleep.
|
||||
Pair /last30days with @openclaw and it re-researches topics on a schedule across Reddit, X, YouTube, and the web.
|
||||
|
||||
`/last30days watch add "Competitor X product launches"`
|
||||
`/last30days briefing`
|
||||
"last30 watch my biggest competitor every week"
|
||||
"last30 watch Peter Steinberger every 30 days"
|
||||
"last30 watch AI video tools monthly"
|
||||
|
||||
Research that runs while you sleep. Designed for @openclaw and always-on bots.
|
||||
|
||||
## Post 3 (YouTube)
|
||||
|
||||
@@ -51,19 +56,61 @@ Asked it about @steipete.
|
||||
|
||||
Key reveal: OpenAI and Meta both made acquisition offers for OpenClaw. He said no. He's losing $10-20K/month maintaining it. "A fun project became a world project."
|
||||
|
||||
## Post 8 (Close)
|
||||
## Post 8 (Install)
|
||||
|
||||
Thank you to @hutchins for pushing me to add YouTube and to @steipete for the yt-dlp toolchain that made it possible.
|
||||
Tell your @openclaw bot:
|
||||
|
||||
Try it: /last30days [any topic]
|
||||
"Install the last30days skill from github.com/mvanhorn/last30days-skill"
|
||||
|
||||
That's it. One message.
|
||||
|
||||
## Post 9 (Close)
|
||||
|
||||
Thank you to @hutchins for pushing me to add YouTube and to @steipete whose summarize tool showed me how yt-dlp could power transcript extraction.
|
||||
|
||||
Try it: last30 [any topic]
|
||||
|
||||
github.com/mvanhorn/last30days-skill
|
||||
|
||||
PS: @steipete ClawHub login is broken right now so we can't publish the official skill there yet. Hoping for a fix soon.
|
||||
|
||||
---
|
||||
|
||||
## Standalone Posts
|
||||
|
||||
### Greg Isenberg best tips
|
||||
|
||||
Prompt: `last30 greg isenberg best tips`
|
||||
|
||||
1 Reddit thread. 6 X posts. 4 YouTube videos (all transcribed). 8 web pages.
|
||||
|
||||
His core playbook is ACP: Audience, Community, Product. Not the other way around.
|
||||
|
||||
Big thesis: "2026 is the GREATEST time to build a startup in 30 years." Boring industries, AI agents, rapid dev tools collapsing build time.
|
||||
|
||||
Most-watched: "Clawdbot Clearly Explained" (273K views), "Claude Code Built My $450K Marketing Campaign" (40K views), daily workflows with Kitze (83K views).
|
||||
|
||||
@gregisenberg @slashlast30days
|
||||
|
||||
### Lenny Rachitsky best learnings
|
||||
|
||||
Prompt: `last30 lenny rachitsky top learnings`
|
||||
|
||||
5 Reddit threads. 29 X posts. 20 YouTube videos (1.1M+ views, 5 transcribed). 30 web pages.
|
||||
|
||||
"Execution is no longer the bottleneck. Clarity is." That's the thesis running through everything @lennysan has been publishing lately.
|
||||
|
||||
He open-sourced 320 episode transcripts and the community went wild. 87 skills got built from them. Someone on Reddit distilled 86 discrete product skills from 100+ episodes.
|
||||
|
||||
Recent guest highlights: Sherwin Wu (OpenAI) says 95% of their engineers use Codex daily. Marc Andreessen: "This is as normal as it's going to be. It's going to be much weirder very soon." Dalton Caldwell (YC): "just don't die" and avoid tar pit ideas.
|
||||
|
||||
@lennysan @slashlast30days
|
||||
|
||||
---
|
||||
|
||||
## NOTES
|
||||
|
||||
- Thread leads with the watchlist as the killer feature - "research that runs while you sleep" is the sticky pitch
|
||||
- Thread leads with Open Claw + watchlist as the killer feature - pair with an always-on bot for automated research
|
||||
- YouTube is the #2 hero - the stats ("685K views, 4 transcripts read") prove it works
|
||||
- Codex compatibility is #3 - brief but shows cross-platform reach
|
||||
- Example posts prove quality with verified results from real runs
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
The AI world reinvents itself every month. This skill keeps you current.
|
||||
|
||||
`/last30days` researches your topic across **Reddit, X, YouTube, and the web** from the last 30 days, finds what the community is actually upvoting, sharing, and saying on camera, and writes you a prompt that works today, not six months ago.
|
||||
|
||||
## Three Headline Features
|
||||
|
||||
**1. Open-class skill with watchlists.** Add any topic to a watchlist -- your competitors, specific people, emerging technologies -- and /last30days re-researches it on demand or via cron. Designed for always-on environments like [Open Claw](https://github.com/openclaw/openclaw). SQLite-backed with FTS5 full-text search.
|
||||
|
||||
**2. YouTube transcripts as a 4th source.** When yt-dlp is installed, /last30days automatically searches YouTube, grabs view counts, and extracts auto-generated transcripts from the top videos. A 20-minute review contains 10x the signal of a single post -- now the skill reads it. Inspired by [@steipete](https://x.com/steipete)'s yt-dlp + [summarize](https://github.com/steipete/summarize) toolchain.
|
||||
|
||||
**3. Works in OpenAI Codex CLI.** Same skill, same engine, same four sources. Install to `~/.agents/skills/last30days` and invoke with `$last30days`.
|
||||
|
||||
Plus: **Bundled X search** -- vendored Bird GraphQL client (MIT). No external CLI, no npm install, no API keys needed. Just Node.js 22+ and your browser cookies.
|
||||
|
||||
## Real Results (verified Feb 15)
|
||||
|
||||
| Topic | Reddit | X | YouTube | Web |
|
||||
|-------|--------|---|---------|-----|
|
||||
| Nano Banana Pro | -- | 32 posts, 164 likes | 5 videos, 98K views, 5 transcripts | 10 pages |
|
||||
| Seedance 2.0 access | 3 threads, 114 upvotes | 31 posts, 191 likes | 20 videos, 685K views, 4 transcripts | 10 pages |
|
||||
| OpenClaw use cases | 35 threads, 1,130 upvotes | 23 posts | 20 videos, 1.57M views, 5 transcripts | 10 pages |
|
||||
| YouTube thumbnails | 7 threads, 654 upvotes | 32 posts, 110 likes | 18 videos, 6.15M views, 5 transcripts | 30 pages |
|
||||
| AI generated ads | 12 threads | 29 posts, 101 likes | 3 videos, 83K views, 3 transcripts | 30 pages |
|
||||
|
||||
## What's New
|
||||
|
||||
### Added
|
||||
- Open-class skill with watchlist, briefing, and history modes
|
||||
- YouTube search + transcript extraction via yt-dlp
|
||||
- OpenAI Codex CLI compatibility
|
||||
- Bundled Twitter/X search (vendored Bird GraphQL, MIT)
|
||||
- Native web search backends (Parallel AI, Brave, OpenRouter/Perplexity Sonar Pro)
|
||||
- `--diagnose` flag for source status checking
|
||||
- `--store` flag for SQLite accumulation
|
||||
- Conversational first-run experience (NUX)
|
||||
|
||||
### Changed
|
||||
- Two-phase search architecture (entity-aware drill-down)
|
||||
- Reddit JSON enrichment for real engagement metrics
|
||||
- Smarter query construction with auto-retry on 0 results
|
||||
- Engagement-weighted scoring (relevance 45%, recency 25%, engagement 30%)
|
||||
- `--days=N` configurable lookback (thanks @jonthebeef)
|
||||
|
||||
### Fixed
|
||||
- YouTube/Reddit timeout resilience
|
||||
- Reddit 429 rate limit fail-fast
|
||||
- Eager import crash in Codex environments
|
||||
- X search returning 0 results on popular topics
|
||||
- Windows Unicode crash (thanks @JosephOIbrahim)
|
||||
|
||||
## New Contributors
|
||||
|
||||
- @JosephOIbrahim -- Windows Unicode fix ([#17](https://github.com/mvanhorn/last30days-skill/pull/17))
|
||||
- @levineam -- Model fallback for unverified orgs ([#16](https://github.com/mvanhorn/last30days-skill/pull/16))
|
||||
- @jonthebeef -- `--days=N` configurable lookback ([#18](https://github.com/mvanhorn/last30days-skill/pull/18))
|
||||
|
||||
## Credits
|
||||
|
||||
- [@steipete](https://github.com/steipete) -- Bird CLI (vendored X search) and yt-dlp/summarize inspiration for YouTube transcripts
|
||||
- [@galligan](https://github.com/galligan) -- Marketplace plugin inspiration
|
||||
- [@hutchins](https://x.com/hutchins) -- Pushed for YouTube feature
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
# Claude Code
|
||||
git clone https://github.com/mvanhorn/last30days-skill.git ~/.claude/skills/last30days
|
||||
|
||||
# Codex CLI
|
||||
git clone https://github.com/mvanhorn/last30days-skill.git ~/.agents/skills/last30days
|
||||
```
|
||||
|
||||
30 days of research. 30 seconds of work. Four sources. Zero stale prompts.
|
||||
+2
-3
@@ -108,10 +108,9 @@ You can unlock more sources with API keys — just ask me how and I'll walk you
|
||||
Some examples of what you can do:
|
||||
- "last30 what are people saying about Figma"
|
||||
- "last30 watch my biggest competitor every week"
|
||||
- "last30 tell me once a month about what my board members are up to"
|
||||
- "last30 give me my morning briefing"
|
||||
- "last30 watch Peter Steinberger every 30 days"
|
||||
- "last30 watch AI video tools monthly"
|
||||
- "last30 what have you found about AI video?"
|
||||
- "last30 set a budget so you don't go crazy"
|
||||
|
||||
Just start with "last30" and talk to me like normal.
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user