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:
Matt Van Horn
2026-02-17 12:16:01 -08:00
parent 4547a095bf
commit a03ad2d1bd
8 changed files with 253 additions and 25 deletions
+2 -1
View File
@@ -5,7 +5,8 @@
"url": "https://github.com/mvanhorn" "url": "https://github.com/mvanhorn"
}, },
"metadata": { "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": [ "plugins": [
{ {
+3 -3
View File
@@ -1,12 +1,12 @@
{ {
"name": "last30days", "name": "last30days",
"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.0.0", "version": "2.1.0",
"author": { "author": {
"name": "mvanhorn" "name": "mvanhorn"
}, },
"repository": "https://github.com/mvanhorn/last30days-skill", "repository": "https://github.com/mvanhorn/last30days-skill",
"license": "MIT", "license": "MIT",
"keywords": ["research", "reddit", "twitter", "x", "trends", "prompts"], "keywords": ["research", "reddit", "twitter", "x", "youtube", "trends", "prompts"],
"skills": ["./"] "skills": ["./"]
} }
+63
View File
@@ -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
+5 -7
View File
@@ -4,7 +4,7 @@
**New in V2.1 - three headline features:** **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. 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. 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 ### 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. **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 # Add topics to your watchlist
last30 watch my biggest competitor every week last30 watch my biggest competitor every week
last30 watch AI video generation tools last30 watch Peter Steinberger every 30 days
last30 tell me once a month about what my board members are up to 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) # Run research manually (or let your bot's cron handle it)
last30 run all my watched topics last30 run all my watched topics
# Get your briefing
last30 give me my briefing
# Search accumulated knowledge # Search accumulated knowledge
last30 what have you found about AI video? last30 what have you found about AI video?
``` ```
+47
View File
@@ -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." 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' argument-hint: 'last30 AI video tools, last30 best project management tools'
allowed-tools: Bash, Read, Write, AskUserQuestion, WebSearch 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 # 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. 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
View File
@@ -2,18 +2,23 @@
## Post 1 (Hook) ## 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"` "last30 watch my biggest competitor every week"
`/last30days briefing` "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) ## 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." 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 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 ## 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 - 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 - Codex compatibility is #3 - brief but shows cross-platform reach
- Example posts prove quality with verified results from real runs - Example posts prove quality with verified results from real runs
+73
View File
@@ -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
View File
@@ -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: Some examples of what you can do:
- "last30 what are people saying about Figma" - "last30 what are people saying about Figma"
- "last30 watch my biggest competitor every week" - "last30 watch my biggest competitor every week"
- "last30 tell me once a month about what my board members are up to" - "last30 watch Peter Steinberger every 30 days"
- "last30 give me my morning briefing" - "last30 watch AI video tools monthly"
- "last30 what have you found about AI video?" - "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. Just start with "last30" and talk to me like normal.
""" """