LLMs write code that accretes — duplicated blocks, dead files, stale docs, structural sprawl. CodeEraser measures it, judges it, and gates it with a score that is only allowed to get better.
GitHub Releases — Windows · Linux · macOS, GUI + CLI + judgment core, SHA256-pinnedcargo install codeeraser/plugin marketplace add skymanbp/CodeEraser$ ce check --roast check score 950/1000 | axes 0:35 1:0 2:119 3:0 4:0 5:0 6:200 | 51 candidates ratchet: 0 added, 0 removed, 0 over, 19 tolerance drawn -> pass note: 102 blocks collapsed into existing members, 57 intra-file pairs off the sim table roast: suspiciously clean. who did you pay?
Real output — CodeEraser judging its own repository. The ratchet only shrinks: every violation is banked in a baseline, and new entropy fails the gate.
ce join prints.ce check . --fail-under 950 # ratchet + floor; exit 1 turns the pipeline redce precommit # staged net LOC + touched duplicatesce mcp # every report family as a read-only tool for any agentThe gate. One 0–1000 score over seven axes, a shrink-only ratchet against the banked baseline, and a hard floor for CI.
T1/T2 clone detection via winnowing fingerprints, with a clone-block budget your repo can only ratchet down.
T3 near-clones judged by tree edit distance in the Haskell core — renamed and reshaped copies included.
Liveness verdicts on a cached reference graph: no kept in-edge, no entry flag — dead, and the gate says so.
Duplicated prose across docs and comments, judged by exact Jaccard over live segments.
Tree-scale entropy: layout divergence, doc staleness, redundancy axes over the whole repository.
Size, complexity and readability per file and function — the classic metrics, core-graded.
Your score across mainline history — cached per commit, rebuildable, honest about direction.
As a Claude Code plugin: duplicate writes intercepted at the moment of writing, audits at stop, health at session start.
41 ms771 ms687 ms0.00 per 500 edits 17/17 scoped (100%) Every number is produced by replay (cli/tests/bench.rs) from one source, contracts/bench/bench.json — never hand-filled.
Complete evaluation dashboard →
Open the component-level stack and its enforcement map →
All nine release binaries — three platforms × ce / ce-core, plus the three
GUI installers since v0.7.3 — are pinned by SHA256 in plugin/bin/manifest.env;
the tag phase verifies every pin, waits for a green CI on the tagged commit, and refuses
an unexpected asset before anything publishes. SHA256SUMS covers the set for
offline checking. Code signing is deliberately out of scope — the hash chain is the permanent
anchor. Measurement lives in Rust, judgment in Haskell, and this repository gates itself
with its own tool on every commit.