The problem
If an AI agent tells you the mean was 47.3, you can't tell from the sentence whether it ran the calculation or guessed. Both read the same.
There's an older problem too. Look for patterns across 20 columns and you've run 190 comparisons. At p < 0.05, about ten of them will come up significant by chance.
What it does
stats-recon is five Python scripts. You can run them on their own or install them as an Agent Skill for Claude Code or any agent that can use a shell.
- recon.py profiles a dataset and lists problems that break analysis without raising an error: duplicate rows, numbers stored as text, -999 used for missing values, ID columns with repeats. A 500,000-row file comes back as about 70 lines.
- relate.py and ledger.py log every comparison that gets run, then apply a Benjamini-Hochberg correction across all of them. In one example, 8 results were significant before correction and 1 after.
- compare.py won't run a t-test or ANOVA on heavily skewed data unless you force it, and it prints the reason.
- verify.py checks a draft against the computed results and lists any number it can't match. It exits with code 1 on a mismatch, so you can use it to block a CI job or an agent's output.
Try it
It depends on numpy, pandas and scipy.
git clone https://github.com/AsaPefferman-UI/stats-recon.git ~/.claude/skills/stats-recon
pip install -r ~/.claude/skills/stats-recon/requirements.txtThe code, its 33 tests and notes on how it was validated are on GitHub.