demiurge-pyrrho
v0.1.1
Published
Every AI finds you an insight. PYRRHO tells you which ones the data cannot support.
Maintainers
Readme

PYRRHO
Every AI finds you an insight. PYRRHO tells you which ones the data cannot support.
Suspends judgment where the evidence stops.
Every AI finds you an insight. PYRRHO tells you which ones the data cannot support.
I am Pyrrho of Elis. I taught epoche: suspend judgment where the evidence stops. I am not remembered for what I concluded. That is the point.
Point any model at a spreadsheet and it hands you confident bullet points. It finds a trend in twelve rows. It calls a correlation a cause. I do the other job. I say exactly what the numbers carry, then I name, precisely, everything they do not.
Before and after
Your AI, handed a dashboard:
Conversion is up 25 percent since the redesign. The redesign worked. Roll it out everywhere.
PYRRHO, handed the same numbers:
$ pyrrho claim "The redesign caused conversion to rise" --n 12 --self-selected \
--p1 0.04 --n1 200 --p2 0.05 --n2 200
verdict: SUSPEND (the data does not carry this claim)
claim: "The redesign caused conversion to rise"
DO NOT CONCLUDE:
[blocking] The claim asserts cause, but the data is observational. Correlation is not causation.
rule it out: Run a controlled experiment, or name and measure the confounder.
[blocking] n = 12. Below roughly 30 observations the estimate is dominated by noise.
rule it out: Collect more observations, or report the confidence interval.
[blocking] The sample selected itself, so it does not represent the population you want to speak about.
rule it out: Sample at random from the target population, or restate the claim as being about volunteers.
[blocking] The observed difference of 1.00 percentage points sits inside the noise band of
plus or minus 3.86 points. It is not distinguishable from chance.
rule it out: Collect enough observations to shrink the interval, or report no difference.That "25 percent" was one point of movement inside a four point noise band, on twelve self-selected users, described with a verb that claims causation. Four independent reasons the claim is worthless. Nobody else was going to tell you.
The five laws
- Suspend where the evidence stops. The default verdict is SUSPEND. A claim earns SUPPORTED; it is never assumed.
- Every refusal is arithmetic or a named bias. No vibes. "That difference sits inside a plus or minus 2.8 point band" beats "I'm not sure about that."
- Name what would rule it out. Every refusal carries the specific test that would settle it. Refusing without a path forward is sulking.
- Data is observational until proven otherwise. You did not run an experiment unless you say you did.
- Report the counts when the rate is theatre. Fewer than five in either cell, and a percentage is a lie with a decimal point.
And the oldest smell in the trade: a result that comes back too clean is itself a finding. A perfect trend, an all-green benchmark, a distribution with no outliers: each is suspect until you can explain why it is real. Clean earns scrutiny before it earns belief.
The EPOCHE engine
Three deterministic checks, composed:
- The sentence. Causal language on observational data. Absolute language (always, never, proves). Extrapolation with no stated model.
- The context. A ten entry bias catalog that screens what you described: small sample, rate not estimable, correlation as causation, confounding, survivorship, selection, multiple comparisons, outlier as signal, data quality, window shorter than the cycle. Each entry detects itself and knows what would rule it out.
- The arithmetic. Confidence intervals, whether a claimed difference is distinguishable from noise, and how many observations you would actually need.
Any blocking finding, and the verdict is SUSPEND. That is a return value, not a suggestion.
It also writes SQL
PYRRHO writes production SQL, states its ASSUMPTIONS first (NULLs, duplicates, ties, empty groups, time zones, and the grain of one output row, which is where most silently wrong queries go wrong), then walks you through it. The linter then catches: UPDATE or DELETE with no WHERE, implicit cross joins, the NOT IN null trap, fan-out double counting from an aggregate over a one-to-many join, unbounded windows with no PARTITION BY, non-sargable predicates, leading wildcards, unbounded reads. A blocking finding means the query does not ship.
Install for your agent
From npm:
npm install -g demiurge-pyrrho, thenpyrrho setupOr without installing:npx demiurge-pyrrho claim "<claim>". (Skill copy uses the source clone below.)
PowerShell:
git clone https://github.com/eragonlonelyboy-lab/pyrrho; cd pyrrho; node bin/pyrrho.js setupbash:
git clone https://github.com/eragonlonelyboy-lab/pyrrho && cd pyrrho && node bin/pyrrho.js setupCopy the folder into ~/.claude/skills/pyrrho/ and invoke with /pyrrho. Zero config. The CLI is the deterministic half:
pyrrho claim "<claim>" [--n N] [--self-selected] [--experiment]
pyrrho screen | pyrrho ci --p 0.04 --n 200 | pyrrho diff --p1 .04 --n1 200 --p2 .05 --n2 200
pyrrho n-for --moe 0.01 | pyrrho sql <file> | pyrrho catalog | pyrrho setupNot for you if
- You want a data scientist. PYRRHO does no modelling, no feature engineering, no pipelines. That space is commoditised and crowded. Its only product is refusal.
- You want an insight machine. There are hundreds. This is the thing that stands behind them and says no.
- You want to be told your number is good.
FAQ
"Isn't this just a statistics library?" A statistics library computes what you ask. I refuse what you were about to say. The arithmetic is the smaller half.
"Ten biases is not all the biases." It is not. It is ten that detect themselves from a context you can actually describe. See HONEST-NUMBERS, where I say exactly what I cannot see.
"What if I really did run an experiment?"
Then pass --experiment and I will stop calling your causal claim an overreach. I default to observational because you did not run one.
"Will it just refuse everything?"
4% vs 8% on n=5000 returns SUPPORTED, blocking count zero. The bar is arithmetic, not mood.
The family
PYRRHO produces the analysis. ZOILUS reviews it as an artifact. ATHENA decides what to do about it. I only report what the numbers do and do not say.
HORKOS proves you ran it. MONETA budgets it. CHIRON turns a refusal you keep hitting into a permanent rule.
The working standard the whole house runs on is public too: ARETE, five discipline gates any model can run. PYRRHO is its treat-good-news-as-suspect rule, with arithmetic behind it.
Verify me
node benchmarks/run.js # 34/34The tests prove the arithmetic and the linters. They cannot prove that any given reading of data is wise. I say so in HONEST-NUMBERS.
If PYRRHO stops you from shipping one wrong number, star it. If it does not, do not.
MIT. Copyright (c) 2026 Lee Jun Ying. Built by Eragon Lee.
Named for Pyrrho of Elis, who suspended judgment where the evidence stopped.
