Skip to content

Release history

Last30Days Skill releases

All releases

14 shown

Review required
v3.3.0 New feature
Auth Dependencies

Keychain + Brave + EXCLUDE_SOURCES

v3.2.0 New feature
Notable features
  • Digg AI 1000 source auto‑enabled when `digg-pp-cli` is on PATH, providing clustered story summaries and X‑post quotes without requiring X authentication.
  • --emit=html option for generating shareable, print‑friendly HTML research briefs
Full changelog

Added

  • Digg AI 1000 source (auto-enabled when digg-pp-cli is on PATH). Surfaces clustered story summaries from the AI 1000 leaderboard and pulls attributable X-post quotes into the brief as [@handle](xUrl) via Digg AI 1000: … lines. No X auth required for the inline quotes since they flow through Digg's read-only endpoints. Footer line: ⛏️ Digg AI 1000: N clusters │ K posts │ M authors. (#370)
  • --emit=html for shareable, print-friendly HTML research briefs. (#332)
v3.1.0 New feature
Notable features
  • Added xurl CLI as alternative X search backend (official API v2 via OAuth2)
  • Introduced --competitors flag for auto-discovered comparison fan-out
  • Implemented vs mode N full passes with automatic competitor discovery and title formatting
Full changelog

What's Changed

  • fix: output contract + planner breadth + entity grounding (Hermes Agent Use Cases) by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/285
  • feat: inline markdown links on narrative citations by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/289
  • [codex] Make memory directory configurable by @davemorin in https://github.com/mvanhorn/last30days-skill/pull/290
  • test: skip docs/ in memory-dir-paths sweep by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/291
  • feat: attribute top comments with u/ and @ handles in evidence lines by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/292
  • fix: Step 0.55 category-peer subreddit expansion by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/305
  • feat: add xurl CLI as alternative X search backend (official API v2 via OAuth2) by @chaosreload in https://github.com/mvanhorn/last30days-skill/pull/130
  • feat: --competitors flag for auto-discovered comparison fan-out by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/308
  • fix: per-entity Step 0.55, LAW 7 sub-run quiet, default 2, canonical SKILL.md by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/311
  • feat: vs mode N full passes + --competitors auto-discovery + (/Last30Days) title by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/312
  • chore(release): v3.1.0 — consolidate 3.0.10-3.0.14 + OpenClaw republish prep by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/314

New Contributors

  • @davemorin made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/290
  • @chaosreload made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/130

Full Changelog: https://github.com/mvanhorn/last30days-skill/compare/v3.0.9...v3.1.0

v3.0.9 New feature
Notable features
  • TikTok and YouTube top comments now render alongside Reddit's top comment in synthesis output
  • Added Hermes AI Agent as a first‑class deployment target
  • Multi‑key SCRAPECREATORS_API_KEY rotation for automatic failover on rate limits
Full changelog

v3.0.9 - The Self-Debug Release

Highlights

v3.0.9 is live. New user-facing capabilities, broader cross-platform support, and a skill that now runs reliably on Claude Code, Codex, Hermes, Gemini, claude.ai, and OpenClaw. The headline fix: the engine refuses "birthday gift for 40 year old" style queries with a clarifying question instead of 5 minutes of junk output. The headline feature: TikTok and YouTube top comments now render alongside Reddit's, so the most-engaged voice from every source makes it into the synthesis.

The label - "The Self-Debug Release": I handed 5 separate Opus 4.7 instances their own failed outputs and asked them to debug themselves. Three converged on "SKILL.md is too big and the LAWs are too deep." Two converged on "the engine should refuse demographic-shopping queries outright" and "the WebSearch Sources reminder is overriding LAW 1." I copy-pasted their diagnoses into code. Validation: 5/5 canonical compliance on the topics that had failed.

New capabilities

  • TikTok and YouTube top comments render alongside Reddit's. PR #260 made the top-engagement comment from each TikTok video and YouTube video first-class in the output - same prominent 💬 Top comment treatment Reddit's top comment already got. This is the biggest user-facing output change since 3.0.0 and it was never announced. The community inspiration trace: @uppinote20's original push for richer Reddit comments (PR #143) seeded the pattern; this PR generalized it across TikTok and YouTube. PR #265 followed up by fixing the ScrapeCreators url= param + new response shape for YouTube comments/transcripts so the enrichment actually works.

  • last30days runs on Hermes AI Agent now. @stephenmcconnachie's PR (#228) added Hermes as a first-class deploy target. scripts/sync.sh detects ~/.hermes/skills/research and deploys the full skill (SKILL.md, scripts, lib modules, fixtures) to Hermes's skills directory alongside Claude Code and Codex. This is one of the biggest surface-area expansions in v3 - last30days is now usable inside the Hermes agent's research workflows without any manual wiring.

  • Multi-key SCRAPECREATORS_API_KEY rotation. @zaydiscold's PR (#268) added automatic key rotation. Set SCRAPECREATORS_API_KEY_1, SCRAPECREATORS_API_KEY_2, etc. and the engine rotates when a key hits rate limits instead of failing the whole run. For power users running daily queries, this is the difference between rate-limit 429s and zero-touch reliability.

  • The skill works on Windows now. @Chelebii's PR (#227) stabilized the vendored Bird X search client on Windows. Previously the bundled X backend had subtle runtime issues on Windows terminals; now it runs clean. Pair this with @Gujiassh's UTF-8 encoding fix (#225) for saved output and Windows users get the full v3 experience without workarounds.

  • Linux permission checks stopped false-warning. @george231224's PR (#216) fixed check_perms on Linux by preferring GNU stat's syntax over the BSD stat that the skill was calling. Linux users were getting spurious permission warnings on .env files that were already correctly 600-chmod'd. Now the check matches reality.

  • Gemini CLI got a first-class install path. @hnshah's docs PR (#224) added the Gemini CLI install note and workaround for a rough edge in the Gemini skill loader. Gemini users now have a one-paragraph install flow in the README instead of having to reverse-engineer the plugin layout.

  • Offline quality evaluation. @j-sperling's PR (#233) added eval_topics.json as a fixture. Contributors and I can now run quality-regression checks on synthesis output without burning live API credits. This is the scaffolding that made the plan 015 validation gate affordable - without eval fixtures, testing 5/5 canonical compliance on every release would cost real money every time. Ships as contributor infrastructure but shows up as stability for end users.

  • Reddit client got a cleaner HTTP layer. @iliaal shipped three architecture PRs back-to-back (#207, #208, #209) that consolidated Reddit's HTTP handling into http.get(params=...), rejected garbage input in _parse_date, and unified _sc_headers into http.scrapecreators_headers. End-user benefit: fewer flaky timeouts, fewer "weird parse error" crashes, a codebase that's easier for future contributors to touch without breaking Reddit. These aren't sexy PRs; they're the kind of refactor that prevents six future bug reports.

  • The --days=N flag keeps working. @BryanTegomoh's PR (#230) restored backcompat for the legacy --days alias so anyone who'd scripted against it in 2.x doesn't break on v3. Small PR, meaningful reliability gain for existing users.

  • INCLUDE_SOURCES has a sane default. @hnshah's PR (#223) defaulted the env var to empty string instead of unset. Missing env no longer breaks source inclusion on fresh installs.

  • Version metadata stays in sync. @Gujiassh's PR (#217) aligned the SKILL.md version header with the sync target version, and @shalomma's PR (#229) closed the remaining drift between the SKILL.md header and plugin.json. "Which version am I actually on" is no longer an adventure.

  • Bird X engagement handling got hardened. @j-sperling's PR (#234) made bird_x skip all-None engagement dicts instead of crashing on them. Rare condition, but the kind of thing that silently kills a run on a specific topic.

  • Dev workflow hygiene. @j-sperling's gitignore PR (#232) dropped .venv, .coverage, htmlcov, and .memsearch from the tracked tree. Contributor quality-of-life; keeps PR diffs clean.

  • The skill installs to claude.ai. PRs #242 and #244 shipped scripts/build-skill.sh plus the .gitattributes + export-ignore plumbing that packages last30days into a claude.ai-upload-ready .skill file under the 200-file cap. The skill is no longer Claude-Code-only - it installs directly on claude.ai, too. README has the upload workflow.

  • OpenAI Codex CLI discovers the skill natively. PR #219 added .agents/skills/last30days/SKILL.md as a real file (not symlinked - Codex's loader skips symlinks) plus .codex-plugin/plugin.json as the namespace marker. The skill now shows up as last30days:last30days when Codex runs in a checkout. Inspired by @Jah-yee (#153) and @dannyshmueli on X.

  • /last30days as a slash command. PR #267 added commands/last30days.md so plugin users can type /last30days <topic> and Claude Code autocomplete prefix-matches it to the canonical /last30days:last30days form. No more typing the double-namespace.

The self-debug technique, for anyone rebuilding this elsewhere

The breakthrough wasn't the individual fixes. It was the realization that instead of guessing why the model was ignoring the rules, I should ask the model. Five separate Opus 4.7 sessions debugged their own outputs:

  • "Did you read SKILL.md?" → "I tried Read, hit the 25K token cap, and bailed instead of chunked-reading."
  • "Why the trailing Sources block?" → "The WebSearch tool's own reminder said MANDATORY. Precedence was unclear."
  • "Why the section headers?" → "I had strong priors on Peter Steinberger and wrote my thesis instead of passing through."
  • "Why the wrong file?" → "I read .agents/skills/last30days/SKILL.md first because it appeared in the path glob."

Three of the five said "move the LAWs to the top." Two said "make the engine enforce it so the model can't not comply." I shipped both. That's the whole technique: when the LLM-under-orchestration keeps breaking the contract, don't argue with it - ask it to debug itself, and build structural enforcement around whatever it names as the root cause.

Thank you

Community PR authors since v3.0.0:

  • @j-sperling - v3 engine architecture, eval fixtures, gitignore hygiene, Bird X hardening (#232, #233, #234)
  • @stephenmcconnachie - Hermes AI Agent support (#228)
  • @zaydiscold - Multi-key SCRAPECREATORS rotation (#268)
  • @iliaal - Reddit HTTP helper + GitHub date parsing + ScrapeCreators header consolidation (#207, #208, #209)
  • @Chelebii - Windows Bird X stability (#227)
  • @george231224 - Linux check_perms stat (#216)
  • @Gujiassh - UTF-8 saved output + version metadata alignment (#217, #225)
  • @hnshah - INCLUDE_SOURCES default + Gemini install docs (#223, #224)
  • @shalomma - SKILL.md v3.0.0 version header (#229)
  • @BryanTegomoh - --days alias backcompat (#230)

v3 roadmap contributors (issues and PRs that shaped the v3 feature set):

  • @uppinote20 - rich Reddit comments (#143)
  • @zerone0x - GitHub as a first-class source (#134, #136)
  • @thinkun - Reddit enrichment timeout handling (#116)
  • @thomasmktong - pure-Python Reddit fallback (#124)
  • @fanispoulinakisai-boop - Reddit timeout report (#100)
  • @pejmanjohn - plugin directory naming (#99, #78)
  • @zl190 - HN trending merge (#115)
  • @hnshah - Watchlist features (#84, #85, #86)
  • @Jah-yee, @dannyshmueli - Codex CLI discovery
  • @Cody-Coyote - marketplace validation bug report (#204)

The five Opus 4.7 instances that debugged their own failures on v3.0.7 and v3.0.8 and converged on the fixes. The convergence was the breakthrough; this release is their diagnosis in code.

Install / Update

/plugin marketplace add mvanhorn/last30days-skill
/plugin install last30days@last30days-skill

Or if already installed:

/plugin update last30days
/reload-plugins

Verify

cat ~/.claude/plugins/cache/last30days-skill/last30days/*/.claude-plugin/plugin.json | grep version

Should print "version": "3.0.9".

Smoke test

/last30days birthday gift for 40 year old

Should ask a clarifying question before running. If it runs the engine anyway, the cache is stale - repeat the plugin update.

Full Changelog: https://github.com/mvanhorn/last30days-skill/compare/v3.0.5...v3.0.9

What's Changed

  • feat: multi-key rotation for SCRAPECREATORS_API_KEY by @zaydiscold in https://github.com/mvanhorn/last30days-skill/pull/268
  • feat: make default fun level actually surface comedy by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/272
  • revert: default fun surfacing (#272) by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/273
  • feat: wire compare.sh and CLAUDE.md for /last30days-beta channel by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/276
  • feat: release v3.0.6 - promote plans 003-009 from private beta to public by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/277
  • fix: v3.0.7 - restore mandatory first-line badge + pin SKILL_ROOT + skill-specificity anchor by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/278
  • fix: v3.0.8 - SKILL.md was too big and LAWs too deep (model-self-debug grounded) by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/279
  • fix: v3.0.9 - engine refuses Class 1 keyword traps, delete stale SKILL.md files, reinforce LAW 1 over WebSearch by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/280
  • docs: v3.0.9 release notes - The Self-Debug Release by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/281

New Contributors

  • @zaydiscold made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/268

Full Changelog: https://github.com/mvanhorn/last30days-skill/compare/v3.0.5...v3.0.9

v3.0.5 Breaking risk
⚠ Upgrade required
  • Remove the now-obsolete skills/last30days-nux/ directory to avoid duplicate autocomplete entries
  • Run `/plugin update last30days` followed by `/reload-plugins` after upgrading to v3.0.5
Notable features
  • Added /last30days slash command via commands/last30days.md registration
Full changelog

What's new

Ships `/last30days` as a real Claude Code slash command for plugin users. Type `/last30days ` and Claude Code's autocomplete prefix-matches it to the canonical `/last30days:last30days` form (same way every other plugin command in the ecosystem works).

Recovery

```
/plugin update last30days
/reload-plugins
```

If you were on v3.0.1 - v3.0.3 and saw the `Path escapes plugin directory: ./ (skills)` error, that was fixed in v3.0.4. v3.0.5 adds the slash command on top.

Changes

  • Added `commands/last30days.md` for slash-command registration
  • Removed `skills/last30days-nux/` (byte-identical duplicate of root `SKILL.md`) that was creating confusing `/last30days:last30days-nux` autocomplete entries

Closes

  • #239 (path-escape error)
  • Supersedes #257 (workaround obsolete after v3.0.4)

What's Changed

  • fix: enforce pre-research protocol + override WebSearch Sources mandate by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/266
  • fix(youtube): YouTube comments enrichment broken - SC param + response shape by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/265
  • fix: add commands/last30days.md and remove skills/last30days-nux duplicate (v3.0.5) by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/267

Full Changelog: https://github.com/mvanhorn/last30days-skill/compare/v3.0.4...v3.0.5

v3.0.4 Breaking risk
Breaking changes
  • Removed the "skills": ["./"] key from .claude-plugin/plugin.json; its presence now causes path-escape errors in Claude Code v2.1.109 and later.
Full changelog

Fix

Drops the `"skills": ["./"]` line from `.claude-plugin/plugin.json`. That value was accepted by older Claude Code but current versions (v2.1.109 and recent v2.1.x) reject it with `Path escapes plugin directory: ./ (skills)`. Removing the key lets Claude Code auto-discover `skills/*/SKILL.md` the same way every other plugin in the marketplace ecosystem does.

Recovery

```
/plugin update last30days
/reload-plugins
/doctor
```

`/doctor` should now report zero errors for last30days. `/last30days` should appear in autocomplete.

What's Changed

  • fix(build): strip skills/ and .claude-plugin/ from .skill bundle (fixes v3.0.3 CI) by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/263
  • fix: drop plugin.json skills key to clear path-escape on Claude Code v2.1.109 (v3.0.4) by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/264

Full Changelog: https://github.com/mvanhorn/last30days-skill/compare/v3.0.3...v3.0.4

v3.0.3 Bug fix
⚠ Upgrade required
  • Run `/plugin update last30days` followed by `/reload-plugins` to restore the full plugin manifest.
  • If autoUpdate is enabled, the next session will automatically pull v3.0.3.
Full changelog

Who needs this

Anyone who installed or updated last30days between v3.0.1 and v3.0.2 (roughly 2026-04-14 to 2026-04-15 morning). Users on pre-v3.0.1 cached installs are unaffected but should update to stay current.

What happened

v3.0.1 added `.gitattributes` rules that excluded `skills/` and `.claude-plugin/` from `git archive` output, to shrink the claude.ai `.skill` bundle under the 200-file cap. Claude Code's `/plugin install` fetches the same archive, so users installing v3.0.1 or v3.0.2 got a tarball with no plugin manifest and no skill files. Install appeared successful but the plugin was empty.

Proof

```
git archive v3.0.0 | grep 'skills/|.claude-plugin/' | wc -l # 8
git archive v3.0.1 | grep 'skills/|.claude-plugin/' | wc -l # 0
git archive v3.0.2 | grep 'skills/|.claude-plugin/' | wc -l # 0
git archive v3.0.3 | grep 'skills/|.claude-plugin/' | wc -l # 8
```

Recovery

```
/plugin update last30days
/reload-plugins
```

If autoUpdate is on, next session start pulls v3.0.3 automatically.

Credit

Thanks to whoever triggered the diagnosis by installing on Claude Code v2.1.109 where the loader is strict enough to surface the missing-manifest issue.

v3.0.2 Bug fix
Notable features
  • Surface YouTube and TikTok top comments alongside Reddit
  • Stop publishing internal ce:plan docs to the repository
Full changelog

Fixes two regressions that silently broke `/last30days` for every user on Claude Code v2.1.105+.

What broke

  • `/last30days ` returned `Unknown command` even though `/plugin list` showed the plugin as installed.
  • `/doctor` reported: `Path escapes plugin directory: ./ (skills)`.
  • Some users ended up with a duplicate phantom `last30days-3@last30days-skill` user-scope install colliding with the correct project-scope install.

What this fixes

  • `.claude-plugin/plugin.json` now declares `"skills": ["skills"]` instead of `["./"]`, so the skill loader discovers `skills/last30days-nux/` without triggering the path-escape security check.
  • `.claude-plugin/marketplace.json` and `plugin.json` now agree on version `3.0.2` (previously drifted between 3.0.0 and 3.0.1).

How to recover

```
/plugin update last30days
/reload-plugins
```

If `/doctor` still reports errors, uninstall and reinstall the plugin from the marketplace.

See the full changelog entry and PR #261 for details.

What's Changed

  • chore: stop publishing internal ce:plan docs to the repo by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/259
  • feat: surface YouTube + TikTok top comments alongside Reddit by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/260
  • fix: restore /last30days slash command on Claude Code v2.1.105+ by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/261

Full Changelog: https://github.com/mvanhorn/last30days-skill/compare/v3.0.1...v3.0.2

v3.0.1 New feature
Notable features
  • Add Hermes AI Agent support
  • Claude.ai distribution push (Units 1‑4 of plan 002)
  • Increase skill upload file limit to 200
Full changelog

What's Changed

  • docs(v3): drop redundant What's New list and remove stale @steipete credit by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/221
  • fix(sync): skip OpenClaw variant branch when variants/open is absent by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/222
  • fix(bird_x): skip all-None engagement dicts by @j-sperling in https://github.com/mvanhorn/last30days-skill/pull/234
  • feat: add eval_topics.json fixture for offline quality evaluation by @j-sperling in https://github.com/mvanhorn/last30days-skill/pull/233
  • chore: gitignore dev artifacts (.venv, .coverage, htmlcov, .memsearch) by @j-sperling in https://github.com/mvanhorn/last30days-skill/pull/232
  • fix(cli): restore --days alias compatibility by @BryanTegomoh in https://github.com/mvanhorn/last30days-skill/pull/230
  • Bump SKILL.md version header from v2.9.5 to v3.0.0 by @shalomma in https://github.com/mvanhorn/last30days-skill/pull/229
  • feat: add Hermes AI Agent support by @stephenmcconnachie in https://github.com/mvanhorn/last30days-skill/pull/228
  • fix(cli): Write saved output using UTF-8 encoding by @Gujiassh in https://github.com/mvanhorn/last30days-skill/pull/225
  • fix: use GNU stat first in check_perms (Linux false-warn) by @george231224 in https://github.com/mvanhorn/last30days-skill/pull/216
  • docs: add Gemini CLI install note and workaround by @hnshah in https://github.com/mvanhorn/last30days-skill/pull/224
  • fix: align v3 skill version metadata and sync target by @Gujiassh in https://github.com/mvanhorn/last30days-skill/pull/217
  • fix(windows): stabilize bundled Bird X search by @Chelebii in https://github.com/mvanhorn/last30days-skill/pull/227
  • refactor(reddit): migrate to http.get(params=...) helper by @iliaal in https://github.com/mvanhorn/last30days-skill/pull/207
  • fix(github): reject garbage in _parse_date; consolidate date parsing by @iliaal in https://github.com/mvanhorn/last30days-skill/pull/208
  • refactor: consolidate _sc_headers into http.scrapecreators_headers by @iliaal in https://github.com/mvanhorn/last30days-skill/pull/209
  • fix(env): default INCLUDE_SOURCES to empty string by @hnshah in https://github.com/mvanhorn/last30days-skill/pull/223
  • fix: skill upload 200-file cap + packaging hygiene (3.0.1) by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/242
  • feat: claude.ai distribution push (Units 1-4 of plan 002) by @mvanhorn in https://github.com/mvanhorn/last30days-skill/pull/244

New Contributors

  • @BryanTegomoh made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/230
  • @shalomma made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/229
  • @stephenmcconnachie made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/228
  • @Gujiassh made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/225
  • @george231224 made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/216
  • @Chelebii made their first contribution in https://github.com/mvanhorn/last30days-skill/pull/227

Full Changelog: https://github.com/mvanhorn/last30days-skill/compare/v3.0.0...v3.0.1

v3.0.0 New feature
Notable features
  • Intelligent pre‑research brain resolves X handles, GitHub repos, subreddits, TikTok hashtags, and YouTube channels before searching.
  • Best Takes section scores results for humor, wit, and virality alongside relevance.
  • Cross‑source cluster merging combines duplicate stories from Reddit, X, and YouTube into single entries.
Full changelog

The AI world reinvents itself every month. This skill keeps you current.

/last30days researches your topic across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, GitHub, and 5+ more sources from the last 30 days, finds what the community is actually upvoting, sharing, betting on, and saying on camera, and writes you a grounded narrative with real citations.

v3 is the intelligent search release

v3 is a ground-up engine rewrite by @j-sperling. The old engine searched keywords. The new engine understands your topic first, then searches the right people and communities.

Type "OpenClaw" and v3 resolves @steipete, r/openclaw, r/ClaudeCode, and the right YouTube channels and TikTok hashtags before a single API call fires. Type "Peter Steinberger" and it resolves his X handle and GitHub profile, switches to person mode, and shows what he shipped this month at 85% merge rate across 22 PRs. None of that was on Google.

Headline features

Intelligent pre-research

The killer feature. A new Python pre-research brain resolves X handles, GitHub repos, subreddits, TikTok hashtags, and YouTube channels before searching. Bidirectional: person to company, product to founder, name to GitHub profile. The right subreddits, the right handles, the right hashtags, all resolved before a single API call.

Best Takes

A second LLM judge scores every result for humor, wit, and virality alongside relevance. Every brief now ends with a Best Takes section surfacing the cleverest one-liners and most viral quotes. The Reddit and X people are funny, and the old engine buried their best stuff.

Cross-source cluster merging

When the same story hits Reddit, X, and YouTube, v3 merges them into one cluster instead of three duplicates. Entity-based overlap detection catches matches even when the titles use different words.

Single-pass comparisons

"X vs Y" used to run three serial passes (12+ minutes). v3 runs one pass with entity-aware subqueries for both sides at once. Same depth, 3 minutes.

GitHub person-mode and project-mode

When the topic is a person, the engine switches from keyword search to author-scoped queries. PR velocity, top repos by stars, release notes for what shipped this month, woven into the narrative alongside X posts and Reddit threads.

When the topic is a project, it pulls live star counts, READMEs, releases, and top issues from the GitHub API. No stale blog posts.

ELI5 mode

Say "eli5 on" after any research run. The synthesis rewrites in plain language. No jargon. Same data, same sources, same citations, just clearer. Say "eli5 off" to go back.

13+ sources

v3 adds Threads, Pinterest, Perplexity, Bluesky, and Parallel AI grounding to the existing Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, GitHub, and Web lineup. Perplexity Deep Research (--deep-research) gives you 50+ citation reports for serious investigation.

Per-author cap and entity disambiguation

Max 3 items per author prevents single-voice dominance. Synthesis trusts resolved handles over fuzzy keyword matches.

Install

Claude Code:

/plugin marketplace add mvanhorn/last30days-skill

OpenClaw:

clawhub install last30days-official

OpenAI Codex CLI: run codex from a checkout of this repo and v3's skill at .agents/skills/last30days/SKILL.md will be discovered automatically. Or copy SKILL.md to ~/.agents/skills/last30days/SKILL.md for a global install.

Zero config. Reddit, Hacker News, Polymarket, and GitHub work immediately. Run it once and the setup wizard unlocks X, YouTube, TikTok, and more in 30 seconds.

v3 Community

v3 was shaped by community contributors whose PRs and issues inspired core features. Their code wasn't merged directly (v3 was a ground-up rewrite), but their ideas drove what shipped.

Thanks to @uppinote20, @zerone0x, @thinkun, @thomasmktong, @fanispoulinakisai-boop, @pejmanjohn, @zl190, and @hnshah. See CONTRIBUTORS.md for the full list.

Contributors who shaped the release itself:

  • @Jah-yee (#153) surfaced the need for a real Codex CLI integration, which shipped in #219
  • @Cody-Coyote (#204) reported the marketplace validation bug that needed fixing before v3 could ship cleanly
  • @dannyshmueli pushed for v3 and Codex family support publicly on X

Full Added / Changed / Fixed detail lives in CHANGELOG.md under [3.0.0].

Earlier contributors

From the v1 and v2 lineage:

30 days of research. 30 seconds of work. Thirteen sources. Zero stale prompts.

v2.9.0 Breaking risk
⚠ Upgrade required
  • Set `SCRAPECREATORS_API_KEY` instead of using `OPENAI_API_KEY` for Reddit search
  • Reddit no longer requires `OPENAI_API_KEY` after this update
Breaking changes
  • `primaryEnv` → `SCRAPECREATORS_API_KEY` (one key for Reddit, TikTok, Instagram)
  • Reddit engagement scoring changed from `0.55/0.40/0.05` to `0.50/0.35/0.05/0.10`
Notable features
  • ScrapeCreators Reddit backend with keyword search and subreddit discovery
  • Smart subreddit discovery using relevance‑weighted scoring (`frequency × recency × topic‑word match`) with a `UTILITY_SUBS` blocklist
  • Top comment weighting (10 % of engagement score) and prominent rendering with `💬`
Full changelog

The AI world reinvents itself every month. This skill keeps you current.

/last30days researches your topic across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web from the last 30 days, finds what the community is actually upvoting, sharing, betting on, and saying on camera, and writes you a grounded narrative with real citations.

Three Headline Features in v2.9

1. ScrapeCreators Reddit as default. One SCRAPECREATORS_API_KEY now covers Reddit, TikTok, and Instagram — three sources, one key. No more OPENAI_API_KEY required for Reddit search. Faster, more reliable, and simpler to configure.

2. Smart subreddit discovery. Relevance-weighted scoring replaces pure frequency count. Each candidate subreddit is scored by frequency × recency × topic-word match, and a UTILITY_SUBS blocklist filters noise subs like r/tipofmytongue. Search "Claude Code skills" and get r/ClaudeAI, r/ClaudeCode, r/openclaw — not generic programming subs.

3. Top comments elevated. The best comment on each Reddit thread now carries a 10% weight in engagement scoring and displays prominently with 💬 and upvote counts. Reddit's value is in the comments — now the skill surfaces them.

Plus: Instagram Reels (v2.8), Polymarket prediction markets (v2.5), YouTube transcripts (v2.1), bundled X search — no external CLI needed.

Beta Test Results (v2.9)

| Topic | Time | Threads | Discovered Subreddits |
|-------|------|---------|----------------------|
| Claude Code skills | 77.1s | 99 | r/ClaudeAI, r/ClaudeCode, r/openclaw |
| Kanye West | 71.7s | 84 | r/hiphopheads, r/NFCWestMemeWar, r/Kanye |
| Anthropic odds | 68.0s | 65 | r/Anthropic, r/ClaudeAI, r/OpenAI |
| Best rap songs lately | 68.9s | 114 | r/BestofRedditorUpdates, r/rap, r/TeenageRapFans |
| Nano Banana Pro | 66.6s | 99 | r/GeminiAI, r/nanobanana2pro, r/macbookpro |

What's New

Added

  • ScrapeCreators Reddit backend with keyword search and subreddit discovery
  • Smart subreddit discovery with relevance-weighted scoring
  • Utility subreddit blocklist (UTILITY_SUBS)
  • Top comment scoring (10% engagement weight) and prominent rendering
  • Comment excerpts increased to 400 chars, insights raised to 10

Changed

  • primaryEnvSCRAPECREATORS_API_KEY (one key for Reddit, TikTok, Instagram)
  • Reddit engagement scoring: 0.55/0.40/0.050.50/0.35/0.05/0.10
  • SKILL.md synthesis instructions emphasize quoting top comments

Fixed

  • Utility sub noise in subreddit discovery
  • Reddit no longer requires OPENAI_API_KEY

New Contributors

  • @JosephOIbrahim -- Windows Unicode fix (#17)
  • @levineam -- Model fallback for unverified orgs (#16)
  • @jonthebeef -- --days=N configurable lookback (#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

Install

# 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. Eight sources. Zero stale prompts.

v2.8.0 Breaking risk
⚠ Upgrade required
  • Update configuration: set `SCRAPECREATORS_API_KEY` in ~/.config/last30days/.env and remove `APIFY_API_TOKEN`.
  • Sign up at scrapecreators.com for the API key (100 free credits, then PAYG).
Breaking changes
  • `APIFY_API_TOKEN` is no longer used. Replace with `SCRAPECREATORS_API_KEY`.
Notable features
  • Instagram Reels added as the 8th signal source, providing trending reels with views, likes, and transcripts.
  • TikTok migrated to ScrapeCreators API; a single SCRAPECREATORS_API_KEY now covers both TikTok and Instagram.
Full changelog

What's New in v2.8

Instagram Reels is now the 8th signal source. Search any topic and get trending Instagram Reels with views, likes, and spoken-word transcripts — scored and ranked alongside Reddit, X, YouTube, TikTok, HN, Polymarket, and the web.

TikTok migrated to ScrapeCreators API. Same functionality, new backend. Replace APIFY_API_TOKEN with SCRAPECREATORS_API_KEY in your config. One key now covers both TikTok and Instagram.

Setup

Sign up at scrapecreators.com (100 free credits, then PAYG) and add your key:

echo 'SCRAPECREATORS_API_KEY=your_key' >> ~/.config/last30days/.env

Breaking Change

  • APIFY_API_TOKEN is no longer used. Replace with SCRAPECREATORS_API_KEY.

Bug Fixes

  • Fixed web source URLs leaking into stats display
  • Fixed Instagram/TikTok not running when used with --search= flag
v2.6.0 New feature
⚠ Upgrade required
  • Run `git pull` or reinstall the skill and execute `bash scripts/sync.sh` to upgrade.
  • Skill now supports agent‑native invocation via the `--agent` flag for non‑interactive reports.
Notable features
  • Hacker News added as a searchable source (Algolia API, no auth required)
  • Polymarket prediction markets integrated with outcome‑aware query expansion
  • X handle resolution automatically searches official X posts for people/brands/products
Full changelog

The AI world reinvents itself every month. This skill keeps you current.

`/last30days` researches your topic across Reddit, X, YouTube, Hacker News, Polymarket, and the web from the last 30 days, finds what the community is actually upvoting, sharing, and betting on, and writes you a prompt that works today.

Headline Features

1. Hacker News as a 5th source. Every run now searches HN stories and comments via the Algolia API. No API key, no setup — it just works. Developer and technical topics especially benefit.

2. Polymarket prediction markets as a 6th source. Real money on real outcomes. When markets exist for your topic, odds surface as the highest-signal data points in the research. Outcome-aware scoring finds markets where your topic is an outcome in a broader market, not just the title — so `/last30days Arizona Basketball` finds the NCAA Tournament Winner market even though "Arizona" only appears as an outcome.

3. X handle resolution. For people, brands, and products, the skill automatically resolves the official X handle and searches their posts directly — surfacing content they posted that doesn't mention their own name.

4. Agent-native invocation. The skill can now be called by other agents via the Skill tool. Pass `--agent` for non-interactive report output — skips the intro, clarifying questions, and wait prompts, and returns a complete structured research report the calling agent can use directly.

5. Cross-source linking. Items that appear across multiple platforms (Reddit + HN, X + YouTube) are flagged with `[also on: ...]` tags and weighted higher in synthesis — cross-platform signals are the strongest evidence.

What's New Since v2.1.0

Added

  • Hacker News source (Algolia API, free, no auth)
  • Polymarket prediction markets source with outcome-aware query expansion
  • Polymarket synthesis instructions — odds woven into narrative as supporting evidence
  • X handle resolution for person/brand/product topics
  • Cross-source linking and YouTube relevance scoring
  • `--agent` flag for non-interactive agent-mode report output
  • OpenAI 429 rate limiting with exponential backoff (thanks @tjarko)

Fixed

  • Zero-result source lines now hidden from stats (no more "0 stories (no results this cycle)")
  • HN ordering in stats block
  • X search: unfiltered handle search no longer skipped for entity-extracted handles
  • Handle resolution broadened to products/tools/brands with parody account detection
  • Polymarket: two-pass query expansion for outcome-based market discovery

Changed

  • Stats block format: `├─ 📊 Polymarket` with market count + top odds inline
  • Synthesis prioritizes cross-platform signals over single-source findings
  • Security docs updated: skill is now agent-invocable (inline mode, not forked)

Upgrading

git pull

Or reinstall to your skill directories and run `bash scripts/sync.sh`.


Community contributors: @tjarko — OpenAI rate limit fix

v2.1.0 New feature
Notable features
  • Open-class watchlist functionality with on‑demand or cron re‑search
  • Automatic YouTube search, view count retrieval, and transcript extraction via yt-dlp
  • Compatibility with OpenAI Codex CLI for command‑line invocation
Full changelog

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. 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's yt-dlp + 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)
  • @levineam -- Model fallback for unverified orgs (#16)
  • @jonthebeef -- --days=N configurable lookback (#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

Install

# 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.

Beta — feedback welcome: [email protected]