QinghongLin
data2story-skill
Pythonโœจ New

Data Journalist Agent: Transforming Data into Verifiable Multimodal Story

Last updated Jul 6, 2026
142
Stars
19
Forks
1
Issues
+4
Stars/day
Attention Score
82
Language breakdown
Python 72.8%
JavaScript 13.4%
HTML 12.9%
Jupyter Notebook 0.9%
โ–ธ Files click to expand
README

Data2Story

A data-journalist agent skill that turns any dataset into a verifiable, evidence-grounded multimodal story โ€” a self-contained HTML article where every sentence traces back to the data or source that justifies it.

Website arXiv License: MIT

What it does

https://github.com/user-attachments/assets/7a2e2b65-3289-431d-b06a-230252df8774

  • Dataset โ†’ finished article. Point it at a CSV, a folder of data, or a paper, and a fixed pipeline of seven roles produces a publishable HTML story end to end.
  • Evidence-grounded. Every sentence and visual links back to its source. The pipeline emits a viewer.html inspector where you can click any claim to see the data, code, or citation behind it.
  • Multimodal by default. Charts, images, video, audio, maps, and interactive elements โ€” chosen from the data's actual properties, not a fixed checklist. Media generation routes through OpenRouter.
  • Verifiable. Each run writes to its own versioned project folder and snapshots the exact skill versions used, so every result can be traced and re-checked.
  • Progressive disclosure. Each role's SKILL.md holds only its instructions; bulky reference material (output schemas, field rules, lookup tables) lives in that role's references/ folder as JSON and is loaded only when needed.
Two versions. The repository ships two peer skills under skills/ โ€” the richer, current build is data2story-pro; the paper's reproducible version is data2story.
>
| Skill | Invoke | What it is |
|---|---|---|
| data2story-pro | /data2story-pro | Improved version of data2story. See skills/data2story-pro/README.md. |
| data2story | /data2story | The paper's canonical 7-role pipeline. |

Updates

Installation & usage

Data2Story is an agent skill. The orchestrator lives in skills/data2story/SKILL.md โ€” it works first-class with Claude Code, and equally with Codex, Cursor, Gemini CLI, and other agents.

  • Set your API key. Media generation routes through OpenRouter by default:
export OPENROUTERAPIKEY=sk-or-...
  • Run the skill on a dataset:
- Claude Code โ€” make the skill available (place skills/data2story/ under ~/.claude/skills/, or run from inside this repo), then:
/data2story data/pickacard

- Codex / other agents โ€” open the repo and ask the agent to follow the orchestrator:

Read skills/data2story/SKILL.md and run the Data2Story pipeline on data/pickacard
  • Open the output: index.html (the finished article) and viewer.html (the evidence inspector).

Project structure

data2story-skill/
โ”œโ”€โ”€ skills/
โ”‚   โ”œโ”€โ”€ data2story/           the paper's canonical 7-role pipeline    ยท  /data2story
โ”‚   โ”œโ”€โ”€ data2story-pro/       the extended 14-agent build              ยท  /data2story-pro
โ”‚   โ”‚                         โ”” self-contained: its own README, package.json, example data/
โ”‚   โ”œโ”€โ”€ frontend-design/      visual design system used by data2story
โ”‚   โ”œโ”€โ”€ frontend-design-pro/  extended design system used by data2story-pro
โ”‚   โ”œโ”€โ”€ dataviz-craft/        chart-craft recipes               ยท  data2story-pro helper
โ”‚   โ”œโ”€โ”€ find-data/            dataset discovery & validation    ยท  data2story-pro helper
โ”‚   โ””โ”€โ”€ sparring-partner/     idea-to-topic ideation            ยท  data2story-pro helper
โ”œโ”€โ”€ .claude-plugin/           marketplace.json  ยท  installs either skill
โ””โ”€โ”€ assets/                   shared images

Inside each orchestrator, a role is a SKILL.md + a references/ folder (JSON schemas & lookup tables) + any scripts/ it runs โ€” e.g. designer/scripts/ (OpenRouter media tools), inspector/scripts/ (the verify.py / generate_viewer.py verifier), detective/scripts/ (media fetch helpers).

The virtual newsroom

Think of it as a small newsroom in a box. Each role reads what the previous one produced, then adds its own artifact โ€” a fixed pipeline that runs once, end to end.

| # | Role | What it does | Produces | |---|------|--------------|----------| | 1 | Detective | Researches external context โ€” domain background, history, why the data matters | detective.json | | 2 | Analyst | Exhaustively profiles the data โ€” distributions, correlations, trends, anomalies | analyst.json, code/*.py | | 3 | Editor | Decides the narrative โ€” what the article argues and which findings matter | editor.md, editor.json | | 4 | Designer | Chooses how to show each point โ€” charts, images, video, audio, interactives | designer.json, assets/ | | 5 | Programmer | Builds the final HTML, tagging every element with its source IDs | index.html | | 6 | Auditor | Fixes layout issues โ€” overlap, spacing, alignment โ€” without changing content | index.html (fixed), auditor.json | | 7 | Inspector | Verifies every sentence traces to its evidence; builds an interactive viewer | inspector.json, viewer.html |

flowchart TB
    DATA[(dataset)]

subgraph plan [Plan and design] direction LR DET[Detective] -->|detective.json| ANA[Analyst] ANA -->|analyst.json + code| EDT[Editor] EDT -->|editor.md + editor.json| DES[Designer] end

subgraph build [Build and verify] direction LR PRG[Programmer] -->|index.html| AUD[Auditor] AUD -->|index.html| INS[Inspector] end

DATA --> DET DES -->|designer.json + assets| PRG INS -->|inspector.json + viewer.html| OUT([article + evidence viewer])

License

Released under the MIT License.

Acknowledgement

If you use Data2Story in your research, please kindly cite:

@article{data2story,
  title   = {Data Journalist Agent: Transforming Data into Verifiable Multimodal Stories},
  author  = {Lin, Kevin Qinghong and EI, Batu and Shi, Yuhong and Lu, Pan and Torr, Philip and Zou, James},
  journal = {arXiv preprint arXiv:2606.11176},
  year    = {2026}
}
๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท QinghongLin/data2story-skill ยท Updated daily from GitHub