← All skills
data2story-pro
52 / 100 · Review before installing
Check before installing. Some of what it can do is expected: a data skill usually connects to databases or online services with your credentials.
By QinghongLin/data2story-skill (GitHub) · data · 161 stars · scanned at commit 63a55c1
Use to turn a dataset into a verifiable multimedia blog (a data story / data-driven article / interactive dashboard from a dataset). Orchestrator for the Data Journalist Agent (Data2Story): a 7-team newsroom (14 agents) running detective → scout → analyst → imagineer → editor → copywriter → designer → interaction → hero → cinematographer → programmer → auditor → critic → inspector in sequence. Trigger when the user hands over a dataset (CSV/JSON/folder/path) and wants a published story, blog po…
Works with any agent that supports SKILL.md skills.
What this skill can do
Downloads and installs other software
The author does not mention this.
Found in 6 places.
Show 3 more
Runs commands on your computer
This is disclosed by the author in the skill's SKILL.md or README.
Found in 18 places.
Show 15 more
- skills/data2story-pro/auditor/SKILL.md, line 26
node "SKILL_DIR/scripts/render_capture.js" "PROJECT_DIR" index.html --probe - skills/data2story-pro/auditor/SKILL.md, line 52
node "SKILL_DIR/scripts/playtest_drive.js" "PROJECT_DIR" index.html - skills/data2story-pro/designer/scripts/openrouter-embeddings/SKILL.md, line 17
export OPENROUTER_API_KEY=sk-or-v1-... - skills/data2story-pro/designer/scripts/openrouter-embeddings/SKILL.md, line 34
python3 TOOL_DIR/scripts/embed.py \ - skills/data2story-pro/designer/scripts/openrouter-image2video/SKILL.md, line 19
export OPENROUTER_API_KEY=sk-or-v1-... - skills/data2story-pro/designer/scripts/openrouter-image2video/scripts/generate_video_from_image.py, line 184
p = subprocess.run(cmd, capture_output=True, text=True) - skills/data2story-pro/designer/scripts/openrouter-text2image/SKILL.md, line 19
export OPENROUTER_API_KEY=sk-or-v1-... - skills/data2story-pro/designer/scripts/openrouter-text2music/SKILL.md, line 19
export OPENROUTER_API_KEY=sk-or-v1-... - skills/data2story-pro/designer/scripts/openrouter-text2video/SKILL.md, line 17
export OPENROUTER_API_KEY=sk-or-v1-... - skills/data2story-pro/designer/scripts/optimize_assets.py, line 103
p = subprocess.run(cmd, capture_output=True, text=True) - skills/data2story-pro/evals/scripts/run_evals.py, line 575
p = subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, - skills/data2story-pro/ideation/SKILL.md, line 97
mkdir -p "OUT_DIR/meta" && # write story_brief.json there (valid JSON matching references/schema.json) - skills/data2story-pro/inspector/SKILL.md, line 23
python3 SKILL_DIR/scripts/verify.py PROJECT_DIR - skills/data2story-pro/inspector/SKILL.md, line 47
python3 SKILL_DIR/scripts/generate_viewer.py PROJECT_DIR - skills/data2story-pro/inspector/SKILL.md, line 90
python3 SKILL_DIR/scripts/verify.py PROJECT_DIR
Connects to the internet
The author does not mention this. Expected for a data skill.
Found in 55 places.
Show 17 more
- skills/data2story-pro/designer/scripts/openrouter-image2video/scripts/generate_video_from_image.py, line 48
import argparse, base64, json, mimetypes, os, shutil, subprocess, sys, time, urllib.request, urllib.error - skills/data2story-pro/designer/scripts/openrouter-image2video/scripts/generate_video_from_image.py, line 68
r = urllib.request.Request(url, data=data, headers=headers, method=method) - skills/data2story-pro/designer/scripts/openrouter-image2video/scripts/generate_video_from_image.py, line 70
with urllib.request.urlopen(r, timeout=timeout) as resp: - skills/data2story-pro/designer/scripts/openrouter-text2image/scripts/generate_image.py, line 22
import argparse, base64, json, os, sys, urllib.request, urllib.error, re - skills/data2story-pro/designer/scripts/openrouter-text2image/scripts/generate_image.py, line 54
req = urllib.request.Request( - skills/data2story-pro/designer/scripts/openrouter-text2image/scripts/generate_image.py, line 60
with urllib.request.urlopen(req, timeout=120) as r: - skills/data2story-pro/designer/scripts/openrouter-text2music/scripts/generate_music.py, line 27
import argparse, base64, json, os, sys, urllib.request, urllib.error, re - skills/data2story-pro/designer/scripts/openrouter-text2music/scripts/generate_music.py, line 59
req = urllib.request.Request( - skills/data2story-pro/designer/scripts/openrouter-text2music/scripts/generate_music.py, line 72
with urllib.request.urlopen(req, timeout=600) as r: - skills/data2story-pro/designer/scripts/openrouter-text2video/scripts/generate_video.py, line 28
import argparse, json, os, sys, time, urllib.request, urllib.error - skills/data2story-pro/designer/scripts/openrouter-text2video/scripts/generate_video.py, line 48
r = urllib.request.Request(url, data=data, headers=headers, method=method) - skills/data2story-pro/designer/scripts/openrouter-text2video/scripts/generate_video.py, line 50
with urllib.request.urlopen(r, timeout=timeout) as resp: - skills/data2story-pro/detective/examples/fetch_hle_images.py, line 20
import argparse, base64, csv, json, os, re, sys, time, urllib.parse, urllib.request, urllib.error - skills/data2story-pro/detective/examples/fetch_hle_images.py, line 47
req = urllib.request.Request(url, headers={"Authorization": f"Bearer {token}"}) - skills/data2story-pro/detective/examples/fetch_hle_images.py, line 50
with urllib.request.urlopen(req, timeout=60) as r: - skills/data2story-pro/detective/examples/fetch_hle_images.py, line 79
req = urllib.request.Request(src, headers={"User-Agent": "Mozilla/5.0"}) - skills/data2story-pro/detective/examples/fetch_hle_images.py, line 82
with urllib.request.urlopen(req, timeout=60) as r:
and 35 more places
Can call paid AI services billed to you
This is disclosed by the author in the skill's SKILL.md or README.
Found in 5 places.
Show 2 more
Reads your saved credentials, such as SSH keys or .env files
The author does not mention this. Expected for a data skill.
Found in 2 places.
Safer alternatives
Low-risk skills in the same category (data) that look related. Check that one does what you need.
Install
Paste this into your terminal. It downloads exactly the version we scanned, not whatever is newest.
if [ -e ~/.agents/skills/'data2story-pro' ] || [ -L ~/.agents/skills/'data2story-pro' ]; then echo 'A skill folder named data2story-pro already exists — not replacing it' >&2; false; else d=$(mktemp -d) && git clone --quiet --filter=blob:none --no-checkout 'https://github.com/QinghongLin/data2story-skill' "$d" && git -C "$d" checkout --quiet '63a55c15f3fac13239263cfa1361fe2ef04d8df1' -- 'skills/data2story-pro' && mkdir -p ~/.agents/skills && cp -R "$d"/'skills/data2story-pro' ~/.agents/skills/'data2story-pro' && rm -rf "$d"; fi
Codex reads ~/.agents/skills directly. For Claude Code, Cursor, Copilot, Gemini CLI, Antigravity or OpenCode, also link it. For Claude Code: ln -s ~/.agents/skills/'data2story-pro' ~/.claude/skills/'data2story-pro' (other agents: ~/.cursor/skills, ~/.copilot/skills, ~/.gemini/skills, ~/.gemini/config/skills, ~/.config/opencode/skills). Or install through the finder skill, which does both.
Badge for your README
The badge for QinghongLin/data2story-skill shows the score of its lowest-scoring skill.

[](https://zalavijaysinh.github.io/skilltrust/repos/QinghongLin/data2story-skill/)
Score history
| Date | Version | Score |
|---|
| 2026-11-07 | 63a55c1 | 57 |