skills/last30days/SKILL.md
Researches any topic using sources tailored to the query — places (local papers, Ground News, city .gov), consumer products (Wirecutter, Serious Eats, Reddit, owner forums), tech/software (official changelogs, GitHub, awesome-lists), medical (PubMed, Cochrane, clinical guidelines), sports (ESPN, SBN blogs, team officials, ISW-style trackers), geopolitics (wire services, think tanks, credentialed analysts), and general trends (Reddit, X, YouTube, HN). Use this skill whenever the user mentions a place, product, person, team, event, a specific app/tool/library, a medical condition or drug, a sports matchup, current news, 'best X' recommendations, 'what's happening with Y,' 'prompts for Z,' or any topic where last-30-days context matters — even if they don't explicitly ask for research. Produces dated synthesis grounded in what sources actually say.
npx skillsauth add philoserf/claude-code-setup skills/last30daysInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Research ANY topic with a source mix tailored to the query shape. The source table and weighting overrides in Step 2/3 pick between general social (Reddit, X, YouTube, HN, web), place-based (local papers, Ground News, city .gov), consumer-product (Wirecutter-tier review aggregators, owner forums), tech/software (official changelogs, GitHub, awesome-lists), sports (league/team official, SBN blogs, ESPN), medical (PubMed, Cochrane, guidelines), geopolitics (wire services, specialist trackers, think tanks), and niche/stable-category (owner forums + durable community consensus). Surface what sources actually say right now — with dated attributions.
--quick/--deep/--days=N/--agent), Polymarket integration, sparse-results fallback.Three sub-steps: (1a) classify QUERY_TYPE, (1b) detect shape and domain signals, (1c) display parsing before searching.
Pick one:
Common patterns:
[topic] for [tool] → tool is specified; set TARGET_TOOLbest [topic] or top [topic] → RECOMMENDATIONS[City] [State] or a place name → LOCATION[topic] → GENERALTARGET_TOOL is where user will use prompts (if specified). Only set when query contains "for [tool]". Do NOT ask about target tool before research. Research first, ask after.
Compound topics. "X configuration, tips, and tricks" blends RECOMMENDATIONS + PROMPTING. Pick the dominant type for the output template — don't run both. For tips/tricks lists, RECOMMENDATIONS usually wins; note the blend in synthesis prose.
Scan the TOPIC for these signals. Multiple can apply.
Niche / discontinued / stable-category (a RECOMMENDATIONS sub-shape). Signals: discontinued product/vehicle, no mainstream-review coverage, community threads span 2020–2026 with consistent top picks. Examples: Honda Element seat covers, Saab 9-3 parts, vintage Nikon F lenses, Commodore 64 accessories, fountain-pen inks. When detected: lead synthesis with "stable-category topic — durable community consensus"; owner forums + Reddit tier-1; review aggregators often N/A. Named vehicle/hobby pattern for [Vehicle/product] + [accessory] shapes: dedicated sub → owner forum → enthusiast blog → manufacturer model-specific page.
Sports matchup ([Team A] vs [Team B]). Needs: H2H history + recent form + roster/injury news + past-vs-upcoming framing. Classify as NEWS. Source chain: league official → both team officials → SBN team blogs + The Athletic beat writers → ESPN game pages → highlight YouTube. Keep YouTube tier-1 (highlights are the medium). If <~3 dated-in-window findings, apply the honest-gap pattern (§4 synthesis).
High-stakes domain (medical, legal, financial, tax, geopolitics/conflict, elections/political). Triggers authority-inverted weighting (§3) and a standardized disclaimer at the top of synthesis (§4).
Ambiguous place name. Common collisions: Rockford, Springfield, Portland, Cambridge, Vienna, Venice, Georgia, Lebanon, Manchester. Disambiguate BEFORE searching — present candidates as a numbered list:
"Rockford" matches multiple places — which did you mean?
1. Rockford, IL (population ~150k, Illinois)
2. Rockford, MI (village near Grand Rapids)
3. Something else
A wrong disambiguation wastes the whole research run.
Product-name collision (common noun / short phrase that collides with a video game, band, movie, meme). Examples: "pepper grinder" → kitchen tool AND Devolver Digital game; "AirPods" → Apple earbuds AND Nike SB sneakers; "Obsidian" → note app AND gaming studio AND rock; "Cursor" → IDE AND generic UI term. Auto-append a disambiguating category term: pepper grinder kitchen, AirPods earbuds, Obsidian note-taking app. If first-pass results are dominated by the wrong meaning, flag and re-run with tighter terms.
Tailor the opening line to the source mix the detected shapes will trigger:
{Opening line per QUERY_TYPE — see below}
Parsed intent:
- TOPIC = {TOPIC}
- QUERY_TYPE = {QUERY_TYPE}
{- TARGET_TOOL = {TARGET_TOOL} — only if specified}
{- Shape: {niche/stable-category | sports matchup | high-stakes | ...} — only if detected}
Research typically takes {2-8 minutes | 2-10 for LOCATION}. Starting now.
Opening lines by QUERY_TYPE:
When halting for disambiguation (§1b): still display the parsed-intent block first so the user sees what you inferred, then the numbered-list disambiguation prompt, then stop. Don't run searches until the user picks.
Source mix depends on QUERY_TYPE. Run searches in parallel where possible. Use --quick or --deep to control search depth (see advanced.md).
For PROMPTING / RECOMMENDATIONS / NEWS / GENERAL, search in two passes: (1) always-consider platforms run on every query; (2) domain-specific sources activate only when TOPIC matches the trigger. Run in parallel within each pass.
Always-consider platforms (run on every non-LOCATION query):
| Source | Strategy |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Reddit | WebSearch {TOPIC} Reddit discussion 2026 — include "Reddit" in query instead of site:. Try subreddit-specific terms if subs emerge. |
| X/Twitter | WebSearch site:x.com {TOPIC}. If results are dominated by non-x.com URLs (site-scope ignored), re-query without site: and target known handles. Deprioritize for consumer-product RECOMMENDATIONS (affiliate-spam/joke noise). |
| YouTube | WebSearch {TOPIC} YouTube video 2026. Deprioritize for fast-moving tech (AI tools, CLIs, JS frameworks on weekly cadence) — text leads video. Keep tier-1 for stable evergreen (reviews, cooking, sports). |
| Hacker News | WebFetch https://hn.algolia.com/api/v1/search?query={TOPIC}&tags=story&hitsPerPage=10. Skip in first pass for software products older than ~3 years — results accumulate and skew pre-cutoff. |
| Web (general) | Supplemental web search per §2b. |
Domain-specific sources (activate only when TOPIC matches the trigger — check each against the TOPIC, include matching rows):
| Trigger — activate when... | Source class | Strategy (see source-catalog.md for full lists) |
| --------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| TOPIC names a specific app/CLI/SDK/library | Official changelog | WebFetch the vendor's /changelog, /releases, or /whats-new page directly. Tier-1 for app/tool topics — analogous to "local paper" in LOCATION mode. |
| TOPIC is a consumer product | Review aggregators | Catalog by category: kitchen (Wirecutter, Serious Eats, ATK…), audio (Wirecutter, RTINGS, SoundGuys…), outdoor (OGL, GearJunkie, REI…), tech (Wirecutter, Reviewed, Verge…). WebSearch best {TOPIC} 2026 Wirecutter Serious Eats and fetch top 2–3. Absence-is-signal: zero roundups means community is the authority — demote this row to N/A and promote owner forums + Reddit to tier-1. |
| TOPIC is vehicle/hobby/collector-specific | Owner/hobbyist forums | WebSearch "{product or vehicle} owners forum" or "{product} owners club". Catalog has canonical examples (elementownersclub, tacomaworld, fountainpennetwork, rokslide). Treat as peer of Reddit for niche/hobbyist RECOMMENDATIONS. |
| TOPIC is a developer/tooling/library topic | GitHub | WebSearch site:github.com {TOPIC} and separately "awesome-{topic-slug}" — curated lists and reference repos often the highest-signal source. |
| TOPIC is a plugin/extension/theme ecosystem | Ecosystem stats tracker | Look for a community stats/updates site (e.g., obsidianstats.com). WebSearch "{topic}stats" or "{topic} plugin updates 2026". One weekly tracker digest beats many single-day hits. |
| TOPIC is a sports team / matchup / league / athlete | Sports sources | League official + team official + SBN team blog + The Athletic beat writer + ESPN. Catalog has full list. On X: target team/league/beat-writer handles by name. On Reddit: r/{TeamName} + r/{league} explicitly. YouTube stays tier-1 (highlights are the medium). |
| TOPIC is a medical condition / drug / treatment | Medical/health sources | Peer-reviewed (PubMed, Cochrane), preprints (biorxiv, medrxiv), guidelines (ACC/AHA, USPSTF, NICE, WHO), clinical centers (Mayo, Cleveland, Hopkins, NIH), clinician media (Medscape, JAMA, NEJM Journal Watch). Catalog has tiered list. High-stakes — apply authority-inverted weighting (§3) and disclaimer (§4). |
| TOPIC is war / foreign-policy / conflict | Geopolitics/conflict | Wire services + specialist trackers (ISW, Russia Matters, DeepState, LiveUAmap) + think tanks (CSIS, CFR, Carnegie, RAND, Brookings, RUSI, IISS) + credentialed OSINT/analyst handles. Catalog has full list. High-stakes info-ops-contested — apply authority-inverted weighting (§3); attribute contested numbers to reporting source. |
| TOPIC is a rapidly-evolving current event | Daily/weekly trackers | Specialist tracker with consistent methodology: ISW for war, NWS/NHC for weather, Decision Desk HQ for elections, USGS for earthquakes, SEC EDGAR for filings. Analogous to "official changelog" for software. |
| TOPIC has a prediction market | Polymarket | WebSearch site:polymarket.com {TOPIC} for elections, crypto, policy, AI-capability bets, corporate milestones. Weave odds into narrative ("Polymarket has X at Y%, up Z% this month"). Include 📊 in stats block. Skip for topics unlikely to have markets. |
Why not site: for Reddit/YouTube/HN? WebSearch site: scoping fails intermittently for these domains. Keyword-inclusive queries return the same results more reliably.
Tech-topic heuristic: TOPIC names a CLI, SDK, AI tool, framework, library, or dev workflow → promote GitHub + official changelog to tier-1, demote YouTube, and consider skipping HN if the product is mature (>3 years).
For LOCATION queries, the default mix is wrong: HN is virtually always empty, YouTube surfaces evergreen "moving to X" SEO videos not 30-day news, and generic Reddit search pulls in same-name towns from other states. Use this mix instead:
| Source | Strategy |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ground News | WebFetch https://ground.news/interest/{slug}. US places: try {city}-{state} (e.g., rockford-michigan). International places: try city-only first (e.g., vicenza), fall back to {city}-{country} if that 404s. Aggregates dated local-news headlines across outlets. |
| Local papers (2-3) | Mid-size cities have multiple outlets — fetch 2–3, not one. Identify via a quick WebSearch for "{city} newspaper" or "giornale di {city}", then WebFetch each front page. Triangulation catches stories any one paper missed. |
| City .gov site | US places: WebFetch cityof{x}.gov / {city}.{state}.us news page — RFPs, closures, notices are primary civic news channel. International places: often less news-oriented; skip unless first pass is thin. |
| Reddit | WebSearch "{CITY} {STATE-or-COUNTRY}" site:reddit.com — quote the full phrase to avoid same-name collisions. US: look for metro sub (e.g., r/grandrapids for Rockford MI). International: topic subs (r/soccer, r/ItalyTravel) and r/{country} often carry more signal than a sparse metro sub. |
| X/Twitter | WebSearch site:x.com "{CITY} {STATE-or-COUNTRY}" — quote the full "City State" phrase. Look for local government, paper, and school accounts. |
| Mil-town specialty | If the place hosts a US military installation (Vicenza/Aviano IT, Ramstein/Kaiserslautern DE, Yokosuka/Okinawa JP, Bahrain, Stuttgart, etc.), add Stars & Stripes (stripes.com) and DVIDS (dvidshub.net) — they carry unique on-base coverage you won't see elsewhere. |
Skip HN and YouTube for LOCATION queries by default — include only if the user specifically asked about tech-industry or video coverage of the place.
After platform searches, run general web searches to fill gaps. Adapt queries to QUERY_TYPE:
Local-language query (mandatory for non-anglophone LOCATION). When the place is in a non-English-speaking country, run at least one supplemental query in the local language — this is almost always the highest-signal single query for hyperlocal cronaca/news/events that English searches miss. Examples:
Fall back to English-only only if no native-language outlet is reachable.
Fetch full page content selectively on high-signal results — X posts with engagement data, HN threads with deep discussion. Reddit and YouTube enrichment often hits rate limits or returns noise; skip unless the snippet alone is insufficient.
If a platform returns 0 results, omit it from synthesis and stats entirely.
WebSearch does NOT reliably filter to the last 30 days — results routinely leak older stories dated months or years back. For each finding, check the dateline:
Never present an older story as if it were from this month. If a date is not visible in the source, say "undated — likely recent" rather than assert a date you can't verify.
Durable-consensus exception. For certain TOPIC classes, the 90-day drop rule is wrong — older material is the answer because durable consensus, foundational science, or prior-season context is what everyone currently operating in that domain references. Include older sources as dated earlier-context; do not drop them. Flag the date provenance once upfront at the top of synthesis rather than burying a caveat in the footer. Named sub-cases:
When direct 30-day content is thin, combine this exception with the honest-gap pattern (§4 synthesis) — name the gap explicitly, then pivot to load-bearing durable context.
See examples.md for complete output examples. See advanced.md for depth flags, agent mode, Polymarket, and sparse results handling.
Weight sources by signal quality. The default weighting below applies to opinion/trend discovery for everyday topics; several overrides follow for software, high-stakes domains, and LOCATION — check those first if the TOPIC fits. If the TOPIC is a mature software product, a medical/legal/financial/geopolitical/electoral topic, or a place, skip the default and use the matching override.
Default weighting:
For mature software/tool topics (TOPIC is an app, CLI, library, framework), override to:
The default weighting is calibrated for opinion/trend discovery; for "what shipped" in software, vendor-authoritative sources beat social engagement.
For high-stakes domains (medical, legal, financial, tax, geopolitics/conflict, elections/political), authority-inverted weighting:
Engagement is not authority in these domains. A high-engagement X post from a non-credentialed account is lower-signal than an ISW daily assessment or an ACC/AHA guideline. Filter social by credential, not by likes. For war/geopolitics/elections specifically: expect info-ops contamination; attribute contested numbers to their reporting source ("per Ukrainian MoD", "per Russian MoD") rather than stating as neutral fact.
For LOCATION queries, use this weighting instead:
Cross-platform signals are strongest. When the same story appears on multiple platforms, lead with it.
Read research output carefully. Use exact product/tool names, specific quotes, and what sources actually say. Do NOT substitute your own knowledge for what the research found.
For any TOPIC in these domains, lead the synthesis with a one-line disclaimer — not buried in the footer. Use this standardized phrasing:
Place above the synthesis body, below the parsing-display. Keep it one line; no hedging elsewhere in the response needs compensatory softening.
If RECOMMENDATIONS — show a ranked list:
🏆 Most mentioned:
[Name] — ~{n} mentions (or {n}+ if you didn't track exactly)
Best for: [specific audience or use case — e.g., "budget-conscious home cooks", "one-handed grinding", "high-volume kitchens"]
Price: ~$X (when research surfaced it)
Sources: @handle1, r/sub, blog.com
[Name] — ~{n} mentions
...
Notable mentions: [others with 1-2 mentions]
Price: ~$X when the research surfaced a number or range; omit if not surfaced (don't fabricate).6 mentions). If you eyeballed, use ~6 or 6+ — never a bare 6x mentions count you didn't actually verify.Mainstream vs. community-canon split. For consumer-product RECOMMENDATIONS, watch for divergence between mainstream review publishers (Wirecutter, Serious Eats, etc.) and community forums (Reddit, niche subs). When they disagree, call it out explicitly — the split is itself the insight:
### Mainstream vs. community canon
- **Mainstream reviewers lead with:** [Peugeot Paris, Cole & Mason Derwent]
- **Community (r/BuyItForLife) canonizes:** [Unicorn Magnum, Pepper Cannon]
- **Why they diverge:** [mainstream tests a broad audience; community optimizes for decade-of-use durability]
Only add this section when divergence is meaningful (one camp's top pick is absent from the other's list); skip when they converge.
If LOCATION — group by recency (this week first, then earlier in the 30-day window), then patterns:
What I learned about {PLACE} (last 30 days):
### This week
**{Headline 1}** — [1-2 sentences, per Local Paper] (date)
**{Headline 2}** — [1-2 sentences, per @handle or City of X] (date)
### Earlier this month
**{Headline 3}** — [1-2 sentences, per {source}] (date)
### Key patterns
1. [Civic/infrastructure theme] — per {source}
2. [Business/employer theme] — per {source}
3. [Community/schools theme] — per {source}
Flag disambiguation risk explicitly when same-name towns surfaced noise in results.
If PROMPTING — narrative + patterns + the actual prompt (the prompt IS the primary deliverable, not a narrative map):
What I learned:
**{Topic 1}** — [1-2 sentences, per @handle or r/sub]
**{Topic 2}** — [1-2 sentences, per @handle or r/sub]
KEY PATTERNS from the research:
1. [Pattern] — per @handle
2. [Pattern] — per r/sub
### Copy-paste-ready prompt (based on research patterns)
{ONE prompt, formatted for the inferred TARGET_TOOL, with placeholders in [BRACKETS]}
<context>, <task>, <rules>)If NEWS/GENERAL — show narrative with patterns:
What I learned:
**{Topic 1}** — [1-2 sentences, per @handle or r/sub]
**{Topic 2}** — [1-2 sentences, per @handle or r/sub]
KEY PATTERNS from the research:
1. [Pattern] — per @handle
2. [Pattern] — per r/sub
3. [Pattern] — per @handle
Honest-gap pattern (applies to any QUERY_TYPE when direct 30-day content is thin — fewer than ~3 dated-in-window findings for a specific matchup, a niche intersection, or a quiet news cycle). Lead with the gap explicitly rather than padding:
### Direct 30-day content: thin
My 30-day window has {N} direct findings on {specific sub-topic}. Here's the load-bearing context that's shaping current coverage instead:
{dated earlier context + current-season/current-cycle material}
Don't silently substitute older material for recent findings — name the gap, then pivot honestly to durable context. This is how sports matchups with no 30-day H2H, niche intersections (e.g., "Obsidian with Claude Code"), and quiet news cycles should be handled.
Priority (most to least preferred). Default:
LOCATION priority:
Lead with people, not publications. In the prose synthesis, use publication/handle names ("per Il Giornale di Vicenza", "per @handle") — don't inline raw URLs mid-sentence. The WebSearch tool requires a "Sources:" section with markdown-linked URLs; put that at the END of the response, after the stats block. Prose readable → links parkable.
Summarize what the research actually found. Omit any platform that returned nothing. Pick the variant that matches the dominant source class; for mixed topics, combine rows.
Default (general + tech + RECOMMENDATIONS):
---
├─ 🟠 Reddit: {N} threads │ r/{sub1}, r/{sub2}
├─ 🔵 X: {N} posts │ {N} likes │ top: @{handle}
├─ 🔴 YouTube: {N} videos
├─ 🟡 HN: {N} stories │ {N} points
├─ 🐙 GitHub: {N} repos │ top: owner/repo
├─ 📊 Polymarket: {N} markets │ {brief top-odds summary}
├─ 🌐 Web: {N} pages — Source Name, Source Name
└─ 🗣️ Top voices: @{handle1}, @{handle2} │ r/{sub1}
---
LOCATION:
---
├─ 📰 Local paper: {Paper Name} — {N} headlines
├─ 🏛️ City .gov: {N} notices/RFPs
├─ 🌐 Ground News: {N} aggregated stories
├─ 🔵 X: {N} local accounts active │ top: @{handle}
├─ 🟠 Reddit: {N} threads in r/{metro-sub}
└─ 🗣️ Top voices: {Paper}, City of {X}, @{handle}
---
Medical / high-stakes:
---
├─ 📚 Peer-reviewed: {N} papers/reviews │ top: PubMed/Cochrane/JAMA
├─ 🏥 Clinical centers / guidelines: {N} │ top: Mayo, Cleveland, ACC/AHA
├─ 📰 Clinician media: {N} │ top: Medscape, NEJM Journal Watch
├─ 🔵 X: {N} credentialed posts │ top: @JAMACardio, @NEJM
├─ 🟠 Reddit: {N} threads (anecdote, not authority)
└─ 🗣️ Top voices: {guideline body}, {clinical center}, {credentialed handle}
---
Sports:
---
├─ 🏆 League/team official: {N} releases │ {teams cited}
├─ 📰 SBN team blogs + The Athletic: {N} articles │ top: {blog/writer}
├─ 📺 ESPN / wire: {N} game pages/recaps
├─ 🔴 YouTube: {N} highlight videos │ top: {channel}
├─ 🔵 X: {N} beat-writer/team posts │ top: @{handle}
├─ 🟠 Reddit: {N} threads in r/{TeamSub}, r/{league}
└─ 🗣️ Top voices: {beat writer}, {league official}, r/{sub}
---
Geopolitics / conflict:
---
├─ 🏛️ Wire services: {N} articles │ top: Reuters, AP, BBC, NPR
├─ 📊 Specialist trackers: {N} assessments │ top: ISW daily, Russia Matters weekly
├─ 🧠 Think tanks: {N} briefs │ top: CSIS, CFR, Carnegie
├─ 🔵 X (credentialed only): {N} posts │ top: @RALee85, @KofmanMichael
├─ 🟠 Reddit: {N} r/CredibleDefense / r/{country} threads
└─ 🗣️ Top voices: ISW, {analyst}, {wire service}
---
N in the stats block = count of distinct items that contributed to synthesis, not raw search-hit counts. If Reddit returned 12 results but only 4 were relevant and dated in-window, report 4 threads, not 12. Use approximate counts where exact engagement data wasn't available. Never fabricate precision.
After research, you are an expert on this topic.
Narrow follow-up exception (all QUERY_TYPES): if the user asks about a specific sub-topic, intersection, or sub-facet the broad research didn't cover — a particular neighborhood (LOCATION), a specific plugin/integration (tech), an intersection like "X with Y" — ONE targeted search is allowed. Say "let me check that specifically" first. Don't chain multiple searches — if one focused query doesn't surface it, tell the user and stop.
Intersections ("Obsidian with Claude Code", "Hugo for Notion users", "Django in a Kubernetes setup") are a recurring follow-up shape and always qualify for this exception. If research already covers the intersection adequately, answer from research; otherwise one targeted search.
When writing prompts:
Only do new broad research if the user asks about a DIFFERENT topic.
defuddle or WebFetch directlygit log and git blametesting
Audits ~/.claude/skills/ for unused entries, duplicate names, missing descriptions, and the longest descriptions. Use when trimming the user-level skill set, asking which skills are unused, finding duplicates, or auditing skill hygiene.
tools
Publishes and manages Flowershow sites with the `fl` CLI (the Go-based successor to the deprecated `@flowershow/publish` npm package). Use when publishing a note or folder to Flowershow, syncing updates to an existing site, managing auth, listing or deleting sites, or installing/upgrading the CLI.
tools
Copy edits prose while preserving voice and register. Use when asked to edit, copy edit, line edit, proofread, revise, polish, tighten, rewrite, or clean up essays, articles, drafts, or fiction. Flags wordiness, passive voice, clichés, hedging, and nominalizations with bracket markup or clean rewrites.
tools
Improves CLAUDE.md by analyzing conversation patterns. Use when Claude keeps repeating a mistake, when teaching a new preference, or when consolidating guidance from repeated instructions. Captures recurring corrections and style preferences into project instructions.