Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when starting empirical analysis, creating a data pipeline, generating results, or when data or model specifications change. Enforces end-to-end reproducibility — every number in the paper must be regenerable from raw data by a script with a fixed seed. Replaces TDD for the research domain.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 229% | 0% |
This skill is the research-domain analogue of test-driven development. The core philosophy is the same as TDD: evidence before claims, automated verification, invalidation on input change. No result is valid until the pipeline runs end-to-end without error. No number enters the paper until a script regenerates it from raw data. This is the single most important discipline in the superpapers plugin, and every analysis skill defers to it.
The canonical project layout is:
project-root/
├── data/
│ ├── raw/ # raw downloads, never manually edited
│ ├── processed/ # cleaned data, output of scripts
│ └── manifest.md # documents every dataset (source, URL, date, variables)
├── code/
│ ├── 01_collect.R # or .py — fetches raw data
│ ├── 02_clean.R # raw → processed
│ ├── 03_analyze.R # processed → results
│ └── 04_figures.R # processed → figures
├── output/
│ ├── tables/ # .tex files generated by scripts
│ ├── figures/ # .pdf vector files generated by scripts
│ └── logs/ # execution logs with timestamp + seed
├── paper/
│ ├── paper.tex # main document
│ ├── references.bib # bibliography
│ └── sections/ # split sections if needed
└── CLAUDE.superpapers.md # project settingsOn first invocation in a project, propose this structure to the user. The user can accept, adapt, or refuse. If the user refuses or has a different layout, the skill still works but flags deviations when encountered so they are not silent.
data/raw, code/, and output/ do not exist, propose scaffolding. Wait for user confirmation before creating any directories or files at the project root.data/manifest.md. Required fields per dataset: name, source (URL or API endpoint), description, collection date, variables used, frequency, period covered, license or usage notes. See the Manifest Format section below.\input{output/tables/...}; figures enter via \includegraphics{output/figures/...}.CLAUDE.superpapers.md — read from the current working directory, or walk up parent directories until found — unless the script explicitly overrides it and explains why. If the file is absent, ask the user for a project-level default on first need.run_all.sh (or Makefile) that executes scripts in the correct order. Verify exit code 0 and that every expected output file exists and is non-empty.output/logs/YYYY-MM-DD_HH-MM-SS.log with: timestamp, seed, relevant package versions, total runtime, input file hashes, exit status. See the Execution Log Format section below.data/raw or any script in code/ changes, all downstream outputs are stale. Re-run the full pipeline. Do not trust cached tables or figures after an input change.Each dataset entry in data/manifest.md follows this format:
markdown## unemployment_br - **Source:** IBGE — PNADC Trimestral - **URL:** https://sidra.ibge.gov.br/tabela/4099 - **Collected:** 2026-03-15 - **Variables:** unemployment_rate, quarter, state - **Frequency:** Quarterly - **Period:** 2012Q1 – 2025Q4 - **Collected by:** code/01_collect.R - **License:** IBGE open data
The manifest is the single source of truth for what data is in the project. If a dataset exists in data/raw/ but not in the manifest, fix the manifest before proceeding.
Each end-to-end run appends a log entry with one field per line:
timestamp: 2026-04-10T14:23:45-03:00
seed: 20260410
R version: 4.4.1
renv lockfile hash: abc123...
inputs:
data/raw/pnadc.csv: sha256:def456...
scripts:
code/01_collect.R: OK (4.2s)
code/02_clean.R: OK (12.8s)
code/03_analyze.R: OK (45.1s)
outputs:
output/tables/tab_descriptives.tex: created
output/tables/tab_main.tex: created
output/figures/fig_trend.pdf: created
exit: 0
total runtime: 62.1sThe log is append-only. Keep every log entry — they are the audit trail for every published result.
set.seed(Sys.time()), random.seed(None), or no seed at alloutput/ files that are not produced by the current pipelinedata/raw/ contains only downloaded files, never hand-editeddata/manifest.md documents every dataset in data/raw/ and data/processed/.tex table and .pdf figure in output/ has a script in code/ that generates itrun_all.sh or Makefile) exists and runs end-to-end with exit code 0output/logs/ for the latest runpaper.tex — all results pulled via \input{}output/ that the current pipeline does not produceOther measured skills in the registry, with their headline benchmark lift.