ABLATE
Apache-2.0 · No signup · No telemetry

Your CLAUDE.md is
400 lines of superstition.

You added a rule after one bad session in March and never questioned it again. ablate runs your agent 80 times — half with the file, half without — and tells you, with a confidence interval, which lines earned their tokens and which ones you can delete tonight.

$0 · no API key · no network · 3 seconds

Claude CodeCodexCLAUDE.mdAGENTS.mdpytestGitHub Actionsuvgit worktreeClaude CodeCodexCLAUDE.mdAGENTS.mdpytestGitHub Actionsuvgit worktree
Example output · 80 trials · $26.18 · poke around
$ ablate compare CLAUDE.md /dev/null --trials 5
ablate 0.4.1 · claude-code 2.1.220 · claude-sonnet-5 · 8 tasks × 5 trials × 2 arms
A CLAUDE.md 412 lines · 4,180 tokens/turn
B (no config) 0 lines · 0 tokens/turn
████████████████████████████████████████ 80/80 24m 51s $26.18
Pass rateEQUIVALENT
A 0.58 ██████████████████████████████████████
B 0.55 ██████████████████████████████████████
Δ = +2.5pp 95% CI [−4.1, +9.2] paired cluster bootstrap, 10k resamples
No detectable difference. The effect is at most ±5pp in either direction.
Tokens per turnIMPROVEMENT (B)
A 14,220 ████████████████████████████████████
B 10,040 ████████████████████████████████████
Δ = −4,180 (−29.4%) 95% CI [−31.1%, −27.8%]
Turns to completionEQUIVALENT
A 7.4 B 7.9 Δ = +0.5 95% CI [−0.9, +1.8]
Per task(descriptive only — no per-task tests)
taskABΔ
fix-null-deref5/54/5+20pp
add-cli-flag4/54/50
refactor-parser2/53/5−20pp
convention-new-handler5/53/5+40pp
restraint-small-fix3/53/50
add-readme-badge5/55/50⚠ no signal — all pass both arms
migrate-config0/50/50⚠ no signal — none pass either arm
fix-race-condition2/54/5−40pp
2 of 8 tasks contributed no signal. Replacing them would tighten the interval by roughly 15% at the same cost.
Verdict

Your 412-line CLAUDE.md costs 4,180 tokens on every turn and does not measurably change whether tasks pass (±5pp, 95% confidence).

This does NOT mean it has no effect — it means any effect is smaller than this suite can resolve. To detect a 3pp change you would need roughly 10 trials × 40 tasks (800 runs, ~$280).

Next: ablate ablate CLAUDE.md # which sections are carrying the weight?
Run 2026-07-26T14-02-11Z · 80 trials · ablate report --last to re-analyze

Your config looks fine. You cannot see a 3pp effect.

Three 2026 studies measured exactly what this tool measures. Read them together and the conclusion is uncomfortable: the pass-rate effect of config changes is single-digit percentage points, and the best-powered study found nothing at all.

ETH Zürich
arXiv 2602.11988

LLM-generated context files reduced task success by roughly 3% across four coding agents, and raised inference cost by more than 20%. Human-written files gained roughly 4%.

SWE-bench Lite (300 tasks) + a purpose-built 138-repo benchmark
Factorial study
arXiv 2605.10039

No detectable effect on instruction adherence for any config-structure variable, after multiple-testing correction. The best-powered study in the literature found nothing at all.

1,650 Claude Code sessions · 16,050 function-level observations
Field measurement
arXiv 2601.20404

28.6% median runtime reduction and 16.6% output-token reduction from AGENTS.md presence, with comparable task completion. The cost effect shows up at N=124.

10 repos · 124 PRs
−29.4%
tokens/turn

The effect size you can actually afford to measure. Pass rate is not.

±5pp
is the floor

What an 8-task × 5-trial run can resolve. A 3pp regression would be invisible, and the report says so.

800
runs · ~$280

What it would actually cost to see the 3pp effect the literature measures. Most tools never tell you this.

This is the argument for making token cost the primary metric and pass rate the guardrail. Cost is continuous, has 5–10× the effect size, and needs an order of magnitude fewer trials for the same power.

From 400 lines of habit to
the three you should keep.

One markdown file, any agent. No hosted service, no accounts, no telemetry — every trial is stored locally and re-analysable for free.

One clean worktree per trial.

Every trial gets its own git worktree, the config swapped in, and the agent invoked headlessly with --bare — which skips auto-discovery of hooks, plugins, MCP servers and CLAUDE.md. That flag is load-bearing: it is the only way to guarantee the config under test is the only config in play.

ADR-0002 · git worktree per trial, not containers
Isolate — step 1 of 3
$ ablate compare CLAUDE.md /dev/null --trials 5

  worktree  .ablate/wt/a-01  ← CLAUDE.md
  worktree  .ablate/wt/b-01  ← (no config)
  worktree  .ablate/wt/a-02  ← CLAUDE.md
  …  80 trials at --concurrency 4
Section attribution

Not “is A better than B”.
“Which of these 400 lines can I delete.”

ablate parses the file into sections, screens them with a randomized subset design on the cheap model, then confirms the survivors in a paired, pre-specified run on the real one.

CLAUDE.md — 412 lines, 11 sections, 4,180 tokens per turnCONFIRMED (240 runs, sonnet-5, N=5, paired, pre-specified)
SectionTokensΔ pass rateΔ tokens/turnVerdictAction
s11 Historical decisions log1,204−1pp [−7, +6]−1,204 (−29%)EQUIVALENTCUT
s06 "IMPORTANT" reminders377+2pp [−5, +9]−377 (−9%)EQUIVALENTCUT
s07 Error handling patterns311−13pp [−21, −5]−311 (−7%)REGRESSIONKEEP

The KEEP row is the important one. A tool that always says “delete it” is a random number generator with good UX; this one can say no, and does.

Honest by construction

Most of the time it will tell you
your change did nothing.

That is the feature, not the bug. Four verdicts, four colours — and EQUIVALENT is deliberately not grey, because “the effect is small” is a finding, not an absence.

Equivalent

The interval is tight and sits inside the margin.

A finding, not an absence — which is why it is deliberately not grey. This is the verdict that licenses you to delete.

Improvement

The interval excludes zero in the good direction.

The arm you are testing is measurably better on this metric, at this sample size, on this suite.

Regression

The interval excludes zero in the bad direction.

Something in the config is load-bearing. In CI this is what fails the PR.

Inconclusive

The interval is wider than the margin.

Underpowered. Distinct from EQUIVALENT, and never reported as if it were. The output tells you the price of a sharper answer.

What it cannot tell you.

Measured pass-rate effects of config changes in the literature are 3–4pp. Detecting that needs ~2,000+ agent runs — a four-figure bill for a single comparison. Token cost effects are 16–28%, and are comfortably detectable at 200 runs. That asymmetry is the entire argument for making cost the primary metric.

TasksTrialsAgent runsMDE pass rateMDE tokens
834837pp
858032pp~16%
20520020pp~10%
201040014pp~7%
401080010pp
100102,0006.4pp

Minimum detectable effect at 80% power, α = 0.05

What it costs

Start at zero.
Spend when the output earns it.

There is no subscription — ablate is a local CLI billing your own API key. The first thing anyone runs costs nothing, so the decision to spend is made after you have seen what the output looks like.

Demo
$0.00· 3 s
  • Replays a bundled recorded run
  • No API key, no network
  • Full report and ablation table
  • Against a real OSS repo

Best for deciding whether to trust the output before you spend anything.

Smoke test
$2· max · ~6 min
  • 3 tasks × 3 trials × 2 arms
  • 18 runs on Haiku 4.5
  • Real agent, real repo
  • Labelled SMOKE TEST — not a measurement

The verdict will read INCONCLUSIVE, and the report explains why rather than quietly producing a number you might believe.

Compare
~$28· ~25 min
  • 8 tasks × 5 trials × 2 arms
  • 80 runs on Sonnet 5
  • Resolves token cost, not pass rate
  • Estimate shown before you confirm

Best for the question “is this file doing anything at all”. $8 with --cheap.

Ablate
~$90· ~2 hr
  • Screening pass on Haiku 4.5
  • Confirmatory pass on Sonnet 5
  • Per-section keep/cut with token cost
  • Hard spend ceiling, always

Best for the question you actually have: which of these 400 lines can I delete.

This spends real money against your own API key. ablate prints the estimate, the run count and the ETA before the confirm prompt — never after — and a hard --max-spend ceiling is honoured even with --yes.

Frequently asked

FAQ

Because it probably did nothing measurable, and most tools in this category will not tell you that. Measured pass-rate effects of config changes are 3–4 percentage points; an 8-task × 5-trial run can only resolve about 32pp. ablate reports the interval instead of a point estimate, so you can see the difference between “no effect” and “no power”. The honest version of this tool spends most of its output saying this. That is the feature, not the bug.

$0 · no API key · no network · 3 seconds