- Xiaohongshu search via local MCP service (opt-in, zero impact if service not running) - Reddit public JSON fallback (works with zero API keys) - Reddit priority: ScrapeCreators -> OpenAI -> public fallback - Updated env.py: Reddit always available via public fallback Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8.6 KiB
title, type, date
| title | type | date |
|---|---|---|
| feat: Create GitHub Release for v2.1 | feat | 2026-02-17 |
Create GitHub Release for v2.1
Overview
The last30days skill is at v2.1 with 2,747 stars and 317 forks, but has zero git tags and zero GitHub Releases. The code is already live on the public repo (upstream/main). All marketing copy is written. This plan creates a proper v2.1.0 GitHub Release from existing materials.
Problem Statement
GitHub Releases provide:
- A landing page for each version with formatted release notes
- Discoverability (GitHub shows releases in the sidebar, feeds them to the Explore page)
- A stable reference point for users (
git checkout v2.1.0) - A "Full Changelog" diff link
- RSS feed for watchers
- New contributor callouts (community goodwill)
Currently users have no way to reference a specific version of the skill. The README says "v2.1" but there's nothing in git to anchor that.
Proposed Solution
Create the first GitHub Release (v2.1.0) on the public repo using existing marketing copy. Use an annotated tag (not lightweight) for proper git describe support and fork propagation.
Implementation Steps
Phase 1: Tag and Release
1. Create CHANGELOG.md
Create CHANGELOG.md following Keep a Changelog format. Source material already exists:
README.md"What's New in V2.1" and "What's New in V2" sectionsdocs/v2.1-tweets.md(raw verified test results, feature descriptions)docs/v2.1-launch-copy.md(feature copy, social posts)docs/pr-credits.md(contributor credits)- Git log (
git log --onelinefor commit references)
Structure:
# Changelog
## [2.1.0] - 2026-02-15
### Highlights
30 days of research. 30 seconds of work. Four sources. Zero stale prompts.
Three headline features...
### Added
- Open-class skill with watchlists (SQLite-backed, FTS5)
- YouTube as 4th research source via yt-dlp (search + transcript extraction)
- OpenAI Codex CLI compatibility ($last30days invocation)
- Bundled X search (vendored Bird GraphQL client, no external CLI)
- Native web search backends (Parallel AI, Brave, OpenRouter/Perplexity Sonar)
- Briefing and history modes (open variant)
- --diagnose flag for source status checking
- --store flag for SQLite accumulation
### Changed
- Smarter query construction (strips noise words, auto-retry)
- Two-phase search (Phase 2 entity-aware drill-down)
- Reddit JSON enrichment (real upvotes/comments from reddit.com/.json)
- Engagement-weighted scoring (relevance 45%, recency 25%, engagement 30%)
- Model auto-selection with 7-day cache
### Fixed
- YouTube timeout increased to 90s
- Reddit 429 rate limit fail-fast
- YouTube soft date filter (keeps evergreen content)
- Eager import crash in __init__.py (Codex compatibility)
### New Contributors
- @JosephOIbrahim - Windows Unicode fix
- @levineam - Model fallback for unverified orgs
- @jonthebeef - --days=N configurable lookback flag
### Credits
- @steipete - Bird CLI (vendored X search) and yt-dlp inspiration
- @galligan - Marketplace plugin inspiration
- @hutchins - Pushed for YouTube feature
## [1.0.0] - 2026-01-15
Initial public release. Reddit + X search via OpenAI and xAI APIs.
2. Create annotated tag on the public repo
cd /Users/mvanhorn/last30days-skill-private
# Tag on the current HEAD (which matches upstream/main)
git tag -a v2.1.0 -m "Release v2.1.0: Watchlists, YouTube transcripts, Codex CLI, bundled X search"
# Push to public repo
git push upstream v2.1.0
Use annotated tag (not lightweight) because:
- Stores tagger metadata and date
- Works with
git describe - Propagates to forks (317 forks)
- Supports GPG signing if desired later
3. Craft release notes
Assemble from existing copy. The release body should follow this structure:
## Highlights
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.
**Three headline features in v2.1:**
1. **Open-class skill with watchlists** - Track competitors, people, topics on a schedule.
Pair with Open Claw for automated briefings. SQLite-backed with FTS5 search.
2. **YouTube transcripts as a 4th source** - When yt-dlp is installed, searches YouTube,
grabs view counts, and reads the actual transcripts. A 20-minute review has 10x the
signal of one X post.
3. **Codex CLI compatibility** - Same skill, same engine, same four sources.
Install to `~/.agents/skills/last30days` and invoke with `$last30days`.
Plus: **Bundled X search** - Vendored Bird GraphQL client. No external CLI needed.
Just Node.js 22+ and browser cookies.
## Real Results (verified 2/15)
| Topic | Reddit | X | YouTube | Web |
|-------|--------|---|---------|-----|
| Nano Banana Pro | - | 32 posts, 164 likes | 5 videos, 98K views | - |
| Seedance 2.0 | 21 threads | 33 posts | 20 videos | 5 pages |
| OpenClaw use cases | 35 threads, 1,130 upvotes | 23 posts | 20 videos, 1.57M views | - |
| YouTube thumbnails | 7 threads, 654 upvotes | 32 posts | 18 videos, 6.15M views | - |
## 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)
- Native web search (Parallel AI, Brave, OpenRouter)
- `--diagnose` and `--store` flags
- 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
- Engagement-weighted scoring algorithm
### Fixed
- YouTube/Reddit timeout resilience
- Reddit 429 rate limit fail-fast
- Eager import crash in Codex environments
## New Contributors
- @JosephOIbrahim - Windows Unicode fix
- @levineam - Model fallback for unverified orgs
- @jonthebeef - `--days=N` configurable lookback
## Credits
- @steipete - Bird CLI and yt-dlp/summarize inspiration
- @galligan - Marketplace plugin inspiration
- @hutchins - Pushed for YouTube feature
## Install
```bash
# Claude Code
claude install-skill https://github.com/mvanhorn/last30days-skill
# Manual
git clone https://github.com/mvanhorn/last30days-skill ~/.claude/skills/last30days
Full Changelog: https://github.com/mvanhorn/last30days-skill/commits/v2.1.0
#### 4. Create the GitHub Release
```bash
gh release create v2.1.0 \
--repo mvanhorn/last30days-skill \
--verify-tag \
--title "v2.1.0 - Watchlists, YouTube Transcripts, Codex CLI" \
-F release-notes.md
No binary assets needed - this is an interpreted skill, and GitHub auto-generates source archives.
Phase 2: Future Automation (Optional)
5. Add .github/release.yml for auto-generated notes on future releases
changelog:
exclude:
labels:
- ignore-for-release
categories:
- title: "Breaking Changes"
labels: [breaking-change]
- title: "Features"
labels: [enhancement, feature]
- title: "Bug Fixes"
labels: [bug, fix]
- title: "Documentation"
labels: [documentation]
- title: "Other Changes"
labels: ["*"]
This enables gh release create v2.2.0 --generate-notes for future releases with automatic PR categorization.
Acceptance Criteria
CHANGELOG.mdexists in repo root following Keep a Changelog format- Annotated tag
v2.1.0exists on the public repo - GitHub Release
v2.1.0is published atgithub.com/mvanhorn/last30days-skill/releases - Release notes include: highlights, real results table, feature list, contributor credits, install instructions
- Release appears in the repo sidebar on GitHub
Key Decisions
-
v2.1.0 only - Don't retroactively create v1.0.0 or v2.0.0 tags. The git history doesn't have clean boundary commits for those versions, and retroactive tags add complexity without value.
-
Release on the public repo (
upstream), not the private repo. Users seemvanhorn/last30days-skill. -
CHANGELOG.md as source of truth - The release notes are derived from CHANGELOG.md, not the other way around. Future releases update CHANGELOG.md first, then create the release.
-
Update star count - The existing copy says "1.5K stars" but the repo now has 2,747. Update in release notes.
References
- Existing copy:
docs/v2.1-launch-copy.md,docs/v2.1-tweets.md - Contributors:
docs/pr-credits.md - README features:
README.md"What's New" sections - GitHub Releases docs: https://docs.github.com/en/repositories/releasing-projects-on-github
- Keep a Changelog: https://keepachangelog.com/en/1.1.0/