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 --competitors flag runs N parallel pipelines for multi-way comparison. --competitors auto-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 .skill upload 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-file to 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-cli is 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.
  • --agent flag. 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 --raw to also stage the brief in raw/last30days/ for /compile routing.
  • bin/last30days-to-raw — Python helper that takes the engine’s *-raw.md output and stages it under karpathy-obsidian-vault-main-2/raw/last30days/last30days-<slug>-<date>.md with 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-plan JSON 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-cli is 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 Code for 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 xAI to 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" or bin/last30dental "Smile Marketing" --emit=html. Add --raw to stage the brief for /compile.
  • For agency operations integration, see last30days as Clawdbot’s 9th Channel — community-signal layer for monthly competitor reports.