Signal scan
Answer "what happened with {topic} in the last N days?" for any person, company, product, technology, or market term. The brief is ranked by what people actually engaged with — upvotes, likes, views, GitHub stars, prediction-market odds — not by SEO. Knowledge type: temporal-signal-brief (per .claude/rules/ontology.md); maturity: emergent (each run is fresh, time-bound — briefs are not locked).
Stolen MCP-native from mvanhorn/last30days-skill (MIT). The method is the steal — entity-resolution-before-search, peer expansion, story clustering, engagement ranking. The 1,036-line Python engine is not: every surface maps to an MCP we already run (Exa, Firecrawl, GitHub, youtube-transcript, Apify). Provenance + verdict table: .claude/discovery/0626-last30days-skill-steal-analysis.md.
When to run
Invoke for: what happened with {topic} in the last 30 days, recent activity on {company}, what's new with {technology}, signal scan on {market}, pre-call prospect prep, weekly newsletter sourcing, competitor recency checks.
Do NOT invoke for:
- Internal decision history / "what did we decide" →
/think(searches our own decision logs). - "What did we discuss in past sessions" →
/recall(session DB). - A deep, static, 13-dimension competitor dossier →
/competitor-research. (This skill is shallow + recent + topic-agnostic; it feeds that skill's "Recent changes" header.) - A curated newsletter from links you already collected →
/gtme-pulse(this skill sources the raw signal that feeds it).
Brain-first (mandatory): before any external call, run the .claude/rules/brain-first-lookup.md ladder — /recall {topic} + grep client folders. A locked client doc may already hold what a scan would rediscover. Annotate the brief if you went external after a brain miss.
Inputs + flags
Required: topic — the thing to scan (person / company / product / technology / market term). If ambiguous (e.g. "Pivot", "Base", "Bolt"), confirm the disambiguator before running.
Flags:
| Flag | Default | Effect |
|---|---|---|
--days N |
30 | Lookback window. --days 14 for fast-moving, --days 90 for slower markets. |
--compare "A vs B" |
off | Per-entity parallel pipelines, merged into a head-to-head brief. |
--emit=html |
markdown | Self-contained shareable HTML file instead of markdown. |
--x |
off | Add X/Twitter via Apify actor (credit-gated). |
--tiktok |
off | Add TikTok via Apify actor (credit-gated; thin for most B2B topics). |
--instagram |
off | Add Instagram via Apify actor (credit-gated; thin for most B2B topics). |
--markets |
off | Add Polymarket / Kalshi odds via Firecrawl (free; relevant only for forward-looking topics). |
The pipeline
Seven steps. Full detail → the premium reference. Surface→tool mapping → the premium reference.
- Brain-first check.
/recall {topic}+ grep client folders (perbrain-first-lookup.md). Use what's already known; only go external for the gap. - Resolve entities before searching. Find the topic's X/LinkedIn handle, GitHub user/org/repo, the subreddits where its category is discussed, and its domain — before any keyword search. This is the step that turns a keyword dump into signal. Kills collisions (searching "42" → Jackie Robinson jerseys; "Pivot" → gymnastics).
- Expand to peer communities. If the topic is a product in a known category, add the cross-product communities where practitioners actually compare tools (not just the brand's own mentions). Annotate the brief with the peer set used.
- Generate a query plan. You (the model) write the plan — intent / freshness mode / cluster mode / 1–4 subqueries with per-surface weights. Schema → the premium reference. No engine plans this; Claude does.
- Parallel fan-out, date-filtered. Run the resolved surfaces concurrently, each bounded to the
--dayswindow. Probe one surface before fanning out (pergoal-driven-loops.md). Free discovery before metered extraction (percrawl-cost-discipline.md). Gate every paid Apify call (perapify-credits.md). - Cluster + rank. Merge the same story across surfaces into one item (HN + Reddit + newsletter on the same launch = one clustered signal, not three). Rank by engagement (upvotes / likes / views / stars / odds) with recency decay.
- Synthesize a cited brief. Narrative prose, inline citations with access dates, per the premium reference. Default-on surfaces: Reddit, HN, news/funding, GitHub, G2/Trustpilot/Product Hunt, YouTube. Flag-gated: X/TikTok/IG/markets.
Credit gate
X / TikTok / Instagram run through Apify actors and are off by default. When a flag turns one on, follow .claude/rules/apify-credits.md: fetch-actor-details (free) first, estimate cost, gate before call-actor (soft <$5, hard ≥$5). Deep-Reddit via Apify is also credit-gated; the default Reddit surface uses free Exa site-filtered search. --markets (Firecrawl) and all default-on surfaces incur no Apify spend. Probe one item before any batch fan-out.
Quality gate (binary, before declaring done)
- Brain-first ladder run before any external call; brief annotated if it went external after a miss.
- Entities resolved before searching (handle / repo / subreddits named in the brief, or explicitly "none found").
- Peer set named when the topic is a product in a known category.
- Every claim has an inline citation + access date; no invented engagement numbers (mark
[Not available]). - Date window respected — nothing older than
--days Nin the brief (or flagged as background context). - Story-level dedup applied — no single story appearing 3× from 3 surfaces.
- Coverage footer lists which surfaces ran, were thin, or were skipped — no silent truncation.
- Apify flags: cost estimated + gated before any paid call.
Composition
| Rule | Role |
|---|---|
brain-first-lookup.md |
Step 1 — check the brain before external. |
exa-protocol.md |
Tool selection + citation standard for the default surfaces. |
crawl-cost-discipline.md |
Free discovery (spider_links / sitemap) before metered extraction. |
apify-credits.md |
Gate every paid Apify call (X/TikTok/IG/deep-Reddit). |
goal-driven-loops.md |
Probe-one-before-fan-out on the parallel surfaces. |
outbound-research-hygiene.md |
When a signal feeds outbound copy — dated, ≤12mo, current-company-only. |
output-tenets.md · output-simplicity.md · doc-output-structure.md · ai-speak-anti-patterns.md |
Brief voice + structure + source placement. |