Built with Claude · Life Sciences

Break your own analysis before Reviewer 2 does.

Point a general-purpose AI at your single-cell analysis and it cries wolf on 74% of clean results. Redline re-runs the load-bearing statistics on your own data and cries wolf on none of them, then marks the real false discoveries on the figures you already made.

Live demo. It runs on a locked fixture with zero API keys. Skip to the workbench →

scanpyPyDESeq2MCPClaudeNext.js
Check 01 · PseudoreplicationFinding
α = .05−log₁₀ pFOXP3IL2RA
5 genes read significant 1 survives the honest re-test

Claim, struck through: IL2RA knockdown significantly increased FOXP3 expression (p < 0.001, n = 51,842).

Corrected: IL2RA knockdown did not significantly change FOXP3 expression at the donor level (Welch’s t, p = 0.21, n = 4 donors).

False positives on clean controls
0%Redline
74%single AI pass
Redline's lab-critter mascot, Reviewer 2 in a lab coat holding a red penYour Reviewer 2, on the bench.
QC is solved and commoditized. A generic reviewer reads a finished paper. Redline works one level in from both, on your own data and your own code, on the statistical reasoning, before any of it is published.
What it catches

Eight ways an analysis fools its own author.

Four founding pillars and four rigor checks, every one on the same module interface. Each finding names the failure mode, cites the method paper that fixes it, and shows the corrected result beside the claim.

Founding pillars
Pillar 01

Pseudoreplication

Cells from one donor are not independent samples. Testing 40,000 cells as 40,000 observations when they came from four donors inflates the p-value massively.

Aggregate to one profile per replicate and re-test with pseudobulk. PyDESeq2, Squair 2021.
Pillar 02

Double dipping

Clusters defined on the data and then tested for their own marker genes on that same data manufacture false positives. It is the default in standard pipelines.

Split the counts by Poisson thinning, define on one half, test on the other. ClusterDE named as the stronger method.
Pillar 03

Clustering fragility

The biological story often rides on an arbitrary clustering resolution the scientist never justified. Move the knob and the cell state can vanish.

Sweep the resolution, measure agreement with the adjusted Rand index, track whether a named cluster survives.
Pillar 04

Confounding

The comparison of interest can be inseparable from a technical variable, for instance when treated and control samples ran on different days.

Build the design matrix, check for collinearity, re-fit with the technical variable included to see if the effect survives.
Rigor checks
Check 05

Multiple testing

Calling genes significant on raw p-values across thousands of tests inflates false discoveries.

Benjamini-Hochberg control at the chosen q. Reports how many raw hits survive.
Check 06

Unmodeled covariate

A batch or covariate that is separable from the effect but omitted from the model can carry a spurious result.

Re-fit with the covariate term added and show the claimed statistic beside the corrected one.
Check 07

Resolution choice

A cluster count chosen without a stability criterion is a story built on a default nobody justified.

Sweep the resolution and score each setting by silhouette or the adjusted Rand index.
Check 08

Test assumptions

A test whose assumptions the data violate reports a number that does not mean what it claims.

Re-run with the assumption-appropriate test and show the corrected p beside the claimed one.
Measured, not asserted

Zero false positives, where a general-purpose AI hits 74%.

0%Redline false-positive rate on clean controls
74%false-positive rate, one general-purpose AI call
On a 46-case benchmark of planted statistical errors and clean controls, both Redline and a single Claude call catch essentially all of the planted errors, so detection is near-definitional. The load-bearing result is the false-positive gap. Redline flags nothing clean. The general-purpose call flags 74%. See services/rigor/bench.
The rules it never breaks

Correct, and show your work

Everything Redline asserts is shown, reproducible, and cited. The corrected code is downloadable and runs, and the preview is its output.

No fabricated fixes

When a design is unsalvageable, Redline says so plainly and shows no corrected result anywhere. The contract refuses to carry a fix that cannot exist.

Never cry wolf

A clean analysis is a real answer. A passed check renders as Verified in green, stated with the same confidence Redline gives a flag.

How it works

One engine, every surface.

A foundation step resolves the design, an agent proposes the claims, and the registered checks run on the roles you confirmed. A ComputeTarget seam decides where the statistics actually run, behind one return contract, so the interface never changes.

Step 00

Foundation

Redline reads your obs columns and proposes the design: which is the biological replicate, which is the comparison, which are technical nuisances. Nothing runs until you confirm it.

Step 01

Claims

An agent inspects your stored results and proposes each auditable claim, already routed to the checks that can test it. You confirm, edit, or remove the list.

Step 02

Checks

Each confirmed claim runs its checks. Every finding is numbers, a named failure mode, a citation, and a conclusion rewritten in defensible language.

Step 03

Report and bundle

A plain-English report with a citation behind every call, plus a downloadable bundle of runnable Python that reproduces the honest re-analysis.

fixtureLocked deterministic demo, always available.
localSpawn the Python engine locally on real data.
cloudrunDispatch a GCP Cloud Run job for heavy work.
endpointA runner you control, your cluster or cloud.
What it exposes

The same rigor, on four surfaces.

Everything is open and configurable through env vars, with no hidden paths. The core drops into a browser, an agent, Claude Science, or a downloadable script that runs on your laptop.

Next.js · Vercel

Web workbench

A plots-first workbench that renders your figures and marks each finding on them. One panel per check, every knob exposed, the corrected result shown beside the claim.

Model Context Protocol

MCP server

Every check is an independent MCP tool behind one return contract. The same rigor drops into any agent or your own pipeline without touching the driver.

services/rigor
Claude Science

Claude Skill

The same engine packaged as a Claude Skill, so it loads natively into Claude Science and runs on a scientist’s own data the day the hackathon ends.

services/skill
Downloadable

Correction bundle

For every flagged check you download runnable Python that reproduces the honest re-analysis: a README, a consolidated notebook, one script per finding. What you saw is the output of that code.

One shape underneath. @redline/contracts holds the Zod shapes every surface speaks. The fixture, the Python engine, the reasoning layer, and the UI all agree on one contract, so a finding means the same thing everywhere it lands.
Reference
dataset

Built against a real one.

Redline is dataset-agnostic, but it is validated against the Marson and Pritchard genome-scale CD4+ T-cell Perturb-seq data, Gladstone’s flagship single-cell resource, with raw counts so the re-runs are real.

One hard rule. The authors did their analysis rigorously, and there is no error in their published work to catch. Redline audits a naive foil instead, the standard cluster-then-annotate-then-DE workflow a less-experienced scientist would run on the same data. Pointed at a clean analysis, Redline reports clean.

Run it on your own h5ad

Break it before Reviewer 2 does.

Drop in the data you analyzed and the analysis you ran. The demo runs on a locked fixture with zero cloud credentials, then point it at the Python engine to run the real statistics on your own data.