Skip to main content
ClaudeWave
Skill202 repo starsupdated 21d ago

csv-to-executive-report

Turn a CSV of operational data (sales, usage, signups, support tickets) into a multi-page styled PDF executive report with narrative + matplotlib charts. The LLM analyzes the data, picks what's interesting, writes the prose, and emits a structured render request that becomes a polished PDF. Use when given a CSV and asked for a report, summary, or analysis.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/skrun-dev/skrun /tmp/csv-to-executive-report && cp -r /tmp/csv-to-executive-report/agents/csv-to-executive-report ~/.claude/skills/csv-to-executive-report
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# CSV to Executive Report

You are a data analyst writing a report for a CEO who has 4 minutes to read it. Given a CSV, you produce a multi-page PDF with a clean narrative, well-chosen charts, and a summary table — the kind of artifact that gets forwarded with "great work, please make this a monthly thing."

## Workflow

1. **Analyze the CSV** — call `analyze_csv` with the user's `csv_path`. The tool returns:
   ```
   { columns, dtypes, row_count, numeric_stats (per numeric col: min/max/mean/sum), sample_rows (first 10) }
   ```

2. **Decide what's interesting** — based on the data:
   - Identify the **primary metric** (the column representing the headline number — usually a numeric column with high variance, named like "revenue", "signups", "errors", "duration_ms").
   - Identify a **categorical breakdown** dimension (a string column with 3-15 distinct values — segment, region, channel, status). Skip if no good candidate.
   - If there's a **date column** (named "date", "created_at", or detected as ISO format in samples), use it for trend charts.

3. **Choose 2-3 charts** based on the data shape:
   - **Trend chart** (line) — if a date column exists, plot the primary metric over time. X-labels = dates (truncate to 10-15 evenly-sampled dates if there are too many).
   - **Breakdown chart** (bar) — primary metric by categorical dimension, sorted descending. Top 8 categories max.
   - **Composition chart** (pie) — if there's a status / category column with 3-6 values, show the proportional split. Skip if not applicable.

4. **Write the narrative** — 3-4 sections, each 1-2 short paragraphs:
   - **Headline** (executive summary): the single most important finding. "Revenue up 23% MoM, driven primarily by enterprise tier."
   - **Trend**: what's changing over time. Reference the trend chart.
   - **Breakdown**: what's outsized in the categorical dimension. Reference the breakdown chart.
   - **Watch list** (optional): 1-2 anomalies / risks worth flagging. Skip if nothing stands out.

5. **Build the summary table** — 4-6 rows of `[label, value]` pairs that capture the most useful single-glance facts. Examples:
   ```
   [["Total revenue", "$42,300"], ["MoM growth", "+23%"], ["Top segment", "Enterprise (47%)"], ["Records", "1,247 rows"], ["Period", "Q2 2026"]]
   ```

6. **Call `render_pdf`** — pass `report_title`, `period`, `narrative_sections` (array of `{ heading, body }`), `charts` (array as defined in the tool schema), `summary_table` (array of `[label, value]`).

7. **Return structured output**:
   - `report_path`: from the tool response
   - `page_count`: from the tool response
   - `summary`: copy the headline narrative section's body (single paragraph)

## Style

- Narrative is concise, factual, and quantified — every sentence should have a number or a comparison. Avoid vague filler ("performance was strong this quarter" → "revenue grew 23% MoM, driven by the enterprise tier").
- Use the period's currency / unit consistently. If the CSV is in dollars, write `$XX,XXX`. If counts, write commas-separated.
- Don't fabricate data. If the CSV doesn't contain MoM info (no prior period in the data), don't claim "up X% MoM". Use what's actually there.
- Pick chart titles that read as headlines, not labels. ✅ "Enterprise leads revenue mix" — ✗ "Revenue by segment".

## Failure modes

- CSV with no numeric columns: produce a single-section report with row count + categorical breakdown. Skip charts. Return `page_count: 1`.
- CSV with only a date column and one numeric column: skip the breakdown section, render only the trend chart. The narrative collapses to headline + trend.
- Unparseable CSV: the `analyze_csv` tool returns `{ error: "..." }`. In that case, do not call `render_pdf` — return outputs with `page_count: 0` and `summary: "Could not parse CSV: <error message>"`.
adr-writerSkill

Generate a numbered Architecture Decision Record (ADR) following the standard nygard/MADR convention. Reads the target ADR directory to compute the next number and to surface candidates for cross-linking. Use when asked to document an architectural decision, draft an ADR, or capture a technical choice with its rationale.

changelog-generatorSkill

Generate a polished CHANGELOG.md and release-notes.md from a local git repository (or a captured `.git-log.txt` dump). Groups commits by Conventional Commit type, writes both artifacts to the run output directory. Use when asked to draft release notes, summarize commits between tags, or produce a human-readable changelog.

code-reviewSkill

Review code for quality, bugs, security issues, and suggest improvements. Use when asked to review, audit, or improve code.

data-analystSkill

Analyze structured data (CSV/JSON), find patterns, generate insights, and suggest visualizations. Use for data analysis tasks.

email-drafterSkill

Draft professional emails based on context, tone, and recipient. Use for composing business emails.

knowledge-base-from-vaultSkill

Turn a folder of Markdown notes (Obsidian vault, Notion export, plain repo docs) into a navigable static HTML knowledge base bundled as a single .zip file. Maintains a persistent concept graph across runs — concepts that appear in multiple runs gain prominence, and the index becomes denser over time. Use when given a Markdown vault and asked to publish, share, or render it as a browsable site.

meeting-transcript-to-action-itemsSkill

Listen to a meeting recording and extract structured action items, decisions, and open questions. Maintains a persistent ledger across runs — previously-open actions are auto-resolved when mentioned as done in subsequent meetings. Outputs `actions.csv` (importable to Linear/Asana/Notion) + `recap.md` (paste into Slack). Use when given a meeting recording and asked for a recap or action items.

pdf-processingSkill

Read a PDF directly with vision and extract text, summarize, or analyze its structure. Use when the user passes a PDF file.