Source: Mvanhorn Last30Days Skill 2026 04 27
last30days-skill (Matt Van Horn, github.com/mvanhorn/last30days-skill) is a Claude/Codex/Hermes skill that aggregates current information about any topic from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub, and the open web — then ranks results by real engagement metrics (upvotes, likes, views, money on Polymarket) instead of editorial curation. Type /last30days <topic> and it returns a research brief based on what people actually engaged with in the last 30 days. MIT, 25.8k GitHub stars (2026-05-14), 1,012 passing tests, Python 3.12+, current version 3.2.1. The vault has a dental-vertical wrapper at bin/last30dental and a raw-ingest helper at bin/last30days-to-raw (both added 2026-05-14) — see Implementation section.
Key Takeaways
- Pre-research brain (v3 engine). Resolves the topic to relevant people, communities, and hashtags before the API calls fire. “Kanye West” maps to
r/hiphopheads,@kanyewest, the right YouTube review channels and TikTok hashtags. v3 architecture by @j-sperling. - Multi-source scoring. Ranks by upvotes, likes, views, and Polymarket odds — including real money backing. Merges duplicate stories across platforms into single clusters and filters to the last 30 days only.
- Synthesis features. Pulls full YouTube transcripts and Reddit comment threads with engagement counts. “Best Takes” section highlights viral quotes. Per-author caps prevent any single voice from dominating. ELI5 mode produces plain-language explanations.
- Comparison mode. A topic containing “vs”/“versus” or the
--competitorsflag runs N parallel pipelines for multi-way comparison.--competitorsauto-discovers peers via the hosting reasoning model’s WebSearch (Claude Code, Codex, Hermes, Gemini); engine flag mode is kept for headless/cron use. Per-entity sub-runs each produce their own slug-raw.md with a Resolved Entities block. - Zero-config defaults. Works immediately against Reddit, Hacker News, Polymarket, and GitHub (free public data). Optional sources unlock with keys/setup: X/Twitter (browser login or birdclaw cookie session), YouTube (yt-dlp install), TikTok/Instagram/Threads/Pinterest (ScrapeCreators API), Perplexity Sonar (OpenRouter key), Brave Search.
- Multi-runtime. Distributes as a Claude Code plugin, an OpenClaw skill, a
.skillupload for Claude.ai, and a manual clone. Same engine across runtimes. - Privacy stance. No tracking, no analytics — research stays on the local machine. MIT licensed.
v3.1 → v3.2 additions (since the 2026-04-27 ingest)
- Shareable HTML briefs via
--emit=html— self-contained dark-mode files saved to~/Documents/Last30Days/{topic}-brief.html. Inline CSS, no JS, no markdown leak. Engine can also accept--synthesis-fileto convert any markdown synthesis to HTML standalone. - Best Takes section — a second judge scores results for humor / wit / virality alongside relevance. The cleverest one-liners and most viral quotes get mixed into the synthesis where they fit.
- GitHub person-mode (
--github-user) — author-scoped queries return PR velocity, top repos, release notes. Useful for tracking what specific AI-vendor engineers are shipping. - 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 simultaneously. Same depth, ~3 minutes.
- Auto-discovered competitor comparisons via
--competitors=N— hosting reasoning model discovers top N peers via WebSearch and the engine fans out N parallel pipelines, merges into a multi-way comparison. - Five net-new sources: Digg AI 1000 (curated story clusters from ~1,000 high-signal AI accounts on X — no X auth required, auto-enables when
digg-pp-cliis on PATH), Threads, Pinterest, Bluesky (app password), Perplexity Sonar (via OpenRouter — paid). YouTube comments + TikTok comments are now also opt-in via ScrapeCreators. - 8-LAW output contract. Strict synthesis style enforced in SKILL.md: no em-dashes, no
##section headers in body (except comparison queries), no trailing Sources block, mandatory engine emoji-tree footer pass-through, inline-markdown-link citations only. --agentflag. Skips intro display and pauses, emits the report directly without further interaction. The flag that makes scheduled / cron / Hermes-driven runs clean.
Vault wrappers (added 2026-05-14)
The skill ships with a strict 8-LAW output contract that clashes with the wiki’s article conventions (no ## headers in body vs the wiki’s required ## Key Takeaways). Rather than fighting the contract, the vault wraps the skill in two helpers:
bin/last30dental— dental-vertical preset that bakes in WEO defaults (subreddits: Dentistry, askdentists, dentalhygiene, dentalstudent, DentalSchool, Invisalign, Periodontal, Endodontics, Dental_Marketing, Cosmetic_dentistry; TikTok hashtags pinned for when ScrapeCreators is configured; save-dir defaults to~/Documents/Last30Days/WEO). Operates in free-tier mode by default — Brave web search, yt-dlp, birdclaw for X cookie session. Override every default via flags or env. Append--rawto also stage the brief inraw/last30days/for/compilerouting.bin/last30days-to-raw— Python helper that takes the engine’s*-raw.mdoutput and stages it underkarpathy-obsidian-vault-main-2/raw/last30days/last30days-<slug>-<date>.mdwith vault-schema frontmatter (source_type: last30days,triage: pending, full source path, brief HTML link). Routes through the existing two-phase inbox-refresh → compile workflow on the consume side without colliding with inbox-refresh’s flat per-item file shape (distinct prefix + distinct subfolder).
bin/refresh also embeds a last30days hint into every Tier-2 dispatch prompt — community-signal supplementation becomes automatic for >90-day-old article refreshes where adoption / sentiment matters.
Clawdbot-side integration as a 9th data channel is specced separately at last30days as Clawdbot’s 9th Channel.
Implementation
Tool/Service: last30days-skill v3.2.1 (mvanhorn/last30days-skill, MIT — bumped from v3.0.14 in 2026-04-27 ingest)
Setup (Claude Code):
/plugin marketplace add mvanhorn/last30days-skill
Setup (OpenClaw):
clawhub install last30days-official
Setup (Claude.ai web): Download the .skill bundle from the repo’s releases tab, then upload via Settings → Capabilities → Custom skills.
Setup (manual / dev): Clone the repo, install Python 3.12+, optionally install yt-dlp for YouTube transcripts and add API keys for the optional sources you want.
Cost: Free skill. Optional API costs: ScrapeCreators (per-call), OpenRouter (Perplexity Sonar usage), Brave Search (free tier available). Reddit / HN / Polymarket / GitHub are zero-cost.
Integration notes:
- The skill is built on top of yt-dlp for YouTube transcript and metadata extraction. Install yt-dlp first if YouTube coverage matters.
- Pre-research relies on the hosting model’s WebSearch. Works best where the host has a real search tool configured (Claude Code with WebSearch, Codex, Hermes).
- v3.0.13+ supports the
--competitors-planJSON flag for handing the engine a per-entity plan (X handle, related accounts, subreddits, GitHub user/repos, context) so the hosting model can drive discovery and the engine just executes the fanout. - Free-tier-only operation is fully supported. Reddit (full comments via public JSON), Hacker News, Polymarket, GitHub are zero-config. X via birdclaw cookie session (free). YouTube via yt-dlp (free). Web search via Brave (2k queries / month free tier). Digg AI 1000 (no X auth required) when
digg-pp-cliis on PATH. Skip ScrapeCreators-gated platforms (TikTok / Instagram / Threads / Pinterest) for B2B and dental-practice-side use cases — those gates only matter for patient-acquisition / consumer-trend use cases.
Try It
- Run
/last30days Claude Codefor an engagement-ranked snapshot of what people are actually saying about Claude Code right now — verify against your own intuition. - Use
/last30days OpenAI vs Anthropic vs xAIto test comparison mode; check whether the auto-discovered peers match your mental model and whether the synthesis surfaces non-obvious differences. - Pair with
[[claude-ai/social-media-skills-charlie-hills|social-media-skills]]for a “research → write” pipeline: last30days for what to talk about, social-media-skills for the post itself. - For dental-vertical research, use the vault wrapper:
bin/last30dental "dental SEO 2026"orbin/last30dental "Smile Marketing" --emit=html. Add--rawto stage the brief for/compile. - For agency operations integration, see last30days as Clawdbot’s 9th Channel — community-signal layer for monthly competitor reports.
Related
- Claude Code Plugins and Marketplaces — distribution channel for this skill
- yt-dlp — required dependency for YouTube transcript extraction
- social-media-skills (Charlie Hills) — natural pairing on the writing side
- Marketing Skills Bundle (Corey Haines) — sibling community skill collection covering broader marketing surface
- Claude Skills Hub (claudeskills.info) — third-party directory where skills like this get aggregated
- Claude Code Skills Ecosystem — wider context on the skills surface
- AI Marketing — adjacent topic for downstream content workflows