skrun-dev/skrun/csv-to-executive-report
Claude Code and agent skill by skrun-dev/skrun
- community
Checking that the SKILL.md file is still in the repository.
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
npx vskill@latest install skrun-dev/skrun/csv-to-executive-reportSKILL.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
- Analyze the CSV — call
analyze_csvwith the user'scsv_path. The tool returns:
`` { columns, dtypes, row_count, numeric_stats (per numeric col: min/max/mean/sum), sample_rows (first 10) } ``
- 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.
- 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.
- 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.
- 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"]] ``
- 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]).
- Return structured output:
report_path: from the tool responsepage_count: from the tool responsesummary: 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_csvtool returns{ error: "..." }. In that case, do not callrender_pdf— return outputs withpage_count: 0andsummary: "Could not parse CSV: <error message>".
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingagents/csv-to-executive-report/SKILL.md
Popularity
- Repository stars
- 199
- Repository forks
- 16
- 7-day trend score
- 26
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 5 Jun 2026, 5 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/skrun-dev/skrun/csv-to-executive-report)