weekly-digest
Research, score, and publish a weekly industry digest on any topic. Casts a wide net via web search (20+ candidates), verifies sources for AI-generated slop, scores each item on five parameters (Novelty, Relevance, Slopiness, Technical depth, Feasibility), selects the top items, and generates both markdown files and a Tufte-style HTML report. Use this skill whenever the user says "/weekly-digest", "run the weekly digest", "industry digest", "what's new in [topic]", "weekly roundup", "news digest on [topic]", "research what happened this week in [topic]", or any request to create a curated, scored summary of recent developments in a field. Also use when the user wants to monitor a topic area with quality filtering — the slopiness scoring is the key differentiator from a simple news search.
What this skill does
# Weekly Digest
A research-to-publication pipeline that produces a scored, source-verified industry digest. The workflow has seven phases: init, scoping, research, verification, scoring, output, and presentation.
## Phase 0: Init
Read `~/.claude/skills/weekly-digest/settings.json`. Two possible states:
**State A — file missing, or `subjects` is empty and file has no `version` field (fresh install):** Run onboarding using the `AskUserQuestion` tool to collect all setup inputs in a single structured prompt:
```
AskUserQuestion({
questions: [
{
question: "What topic do you want to track weekly?",
header: "Topic",
options: [
{ label: "Agent orchestration", description: "Multi-agent frameworks, enterprise deployments, governance" },
{ label: "Design innovation", description: "Design tools, AI-design convergence, award-winning products" },
{ label: "Climate tech", description: "Clean energy, carbon capture, sustainability startups" },
{ label: "AI regulation", description: "EU AI Act, governance frameworks, copyright disputes" }
],
multiSelect: false
},
{
question: "Any geographic focus for sources?",
header: "Geography",
options: [
{ label: "Global (no filter)", description: "Include sources from all regions" },
{ label: "Europe, UK, Asia — not US", description: "Deprioritize American sources" },
{ label: "Europe only", description: "EU and UK sources preferred" },
{ label: "Asia-Pacific", description: "Japan, Korea, China, Singapore, India, Australia" }
],
multiSelect: false
},
{
question: "How many top items should the digest include?",
header: "Digest size",
options: [
{ label: "5 items (Recommended)", description: "Good balance of depth and brevity" },
{ label: "3 items", description: "Quick scan, only the best" },
{ label: "10 items", description: "Comprehensive coverage" }
],
multiSelect: false
},
{
question: "Where should output files go?",
header: "Output",
options: [
{ label: "output/ (Recommended)", description: "Relative to current working directory" },
{ label: "~/Digests/", description: "Home directory, shared across projects" }
],
multiSelect: false
}
]
})
```
Adapt the example options to match the user's context if you know it from memory/profile. The user can always pick "Other" to type a custom value for any question.
After receiving answers:
1. Map the topic to a slug for `output_prefix` (lowercase, hyphenated, no spaces — e.g., "Agent orchestration" → "agent-orch")
2. Map geographic focus to `geo_focus` (null for "Global", string for others)
3. Parse `top_n` from the digest size answer (3, 5, or 10)
4. Write the full settings file with all defaults + the new subject:
```json
{ "version": 1, "top_n": 5, "target_candidates": 20, "lookback_days": 7,
"output_dir": "output", "language": "en",
"weights": { "novelty": 1, "relevance": 1, "slopiness": 1, "technical": 1, "feasibility": 1 },
"obsidian_vault": null, "subjects": [{ ... }] }
```
5. Validate `output_dir` exists (create if needed) before proceeding.
6. Confirm: "Saved. Run `/weekly-digest add [topic]` to add more subjects."
7. Proceed to Phase 1 with the newly configured subject.
The same `AskUserQuestion` pattern should be used for `/weekly-digest add` — ask topic, geo focus, and confirm the generated slug.
**State B — subjects exist, user ran `/weekly-digest` (no args):** Run all subjects sequentially.
**When subjects list is empty but `version` field exists (user cleared subjects intentionally):** Don't auto-onboard. Respond: "No subjects configured. Add one with `/weekly-digest add [topic]`."
For the full settings schema, see `settings.example.json` in the skill directory.
## Configuration
Settings live at `~/.claude/skills/weekly-digest/settings.json`.
### Settings schema
```json
{
"version": 1,
"top_n": 5,
"target_candidates": 20,
"lookback_days": 7,
"output_dir": "output",
"language": "en",
"weights": {
"novelty": 1,
"relevance": 1,
"slopiness": 1,
"technical": 1,
"feasibility": 1
},
"obsidian_vault": null,
"subjects": [
{
"topic": "agent orchestration",
"geo_focus": "European, UK, Asian — not American",
"output_prefix": "agent-orch"
}
]
}
```
All fields except `subjects` are optional — missing keys use defaults shown above. The `output_prefix` must be a lowercase hyphenated slug (no spaces).
### Managing subjects
- `/weekly-digest config` — show current settings
- `/weekly-digest add [topic]` — interactively add a new default subject (ask for geo focus and output prefix)
- `/weekly-digest remove [topic]` — remove a subject from defaults
- `/weekly-digest` (no args) — run all default subjects sequentially, producing separate file sets for each
- `/weekly-digest [topic]` — run a single topic as a one-off (ignores defaults)
### Settings reference
| Key | Default | What it does |
|-----|---------|-------------|
| `top_n` | 5 | How many items appear in the digest |
| `target_candidates` | 20 | How many candidates to aim for in research |
| `lookback_days` | 7 | How far back to search (appended to queries as date range) |
| `output_dir` | `"output"` | Directory for generated files (relative to cwd) |
| `language` | `"en"` | Preferred source language; non-matching sources deprioritized |
| `weights` | all 1.0 | Per-parameter multipliers for the overall score formula |
| `obsidian_vault` | null | Path to Obsidian vault; when set, digest is copied to `{vault}/Digests/YYYYMMDD-{prefix}.md` |
## Phase 1: Scope
Parse the user's request for:
- **Topic** (required, or from settings): e.g., "agent orchestration", "quantum computing", "climate tech"
- **Geographic focus** (optional, or from settings): e.g., "European, UK, Asian — not American". Default: no filter
Auto-detect today's date for file naming (YYYYMMDD format).
If the user gives a vague topic like "AI", push back and ask them to narrow it — broad topics produce generic results.
## Phase 2: Research
Run **4-6 parallel WebSearch queries** designed to cover different angles of the topic. The goal is `target_candidates` unique items (default 20). Use `lookback_days` to scope recency — include month/year in queries for the configured window. Structure searches like this:
| Query pattern | What it catches |
|---------------|-----------------|
| `[topic] breakthrough announcements [month] [year]` | Major launches, product releases |
| `[topic] startup funding [year] [geo]` | Funding rounds, new entrants |
| `[topic] open source release [year]` | OSS frameworks, tools |
| `[topic] research paper arxiv [year]` | Academic contributions |
| `[topic] enterprise production [year] [geo]` | Real deployments, case studies |
| `[topic] regulation governance [year] [geo]` | Policy, compliance, standards |
If a geographic focus is specified, add geographic terms to queries and add a dedicated regional search. When `language` is set, prefer sources in that language.
Deduplicate across search results. Aim for diversity — reject a candidate pool that's all from the same source type (e.g., all market forecasts or all press releases). Check that at least 3 of these 6 categories are represented.
**If fewer than 15 candidates are found:** widen one query by removing the year/month filter and run it again. If still below 15, proceed with what exists and note the shortfall in the raw file header.
## Phase 3: Source Verification
Select the **top 8-10 candidates for verification** using this pre-screening signal: pick items whose search snippets contain at least one of: a specific named person/organization, a specific date, a version number, or a dollar amount. Deprioritize items with exclusively superlative or vague language.
Use WebFetch on primary sources to check for slop indiRelated in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4→v5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.