The half that needs no model
Stet is a plugin for Claude Code, and half of it never needs the model at all. Is this word spelled two ways across your project. Does this figure still match the command that produced it. Was this paper retracted.
Nobody has to read anything to answer those. Twenty-five commands ship as a CLI with no dependencies. They run in your build. A build that fails does not ship.
8 relations across 69 files.
8 consistent, 0 wrong, 0 worth a look
NOT CHECKED 2 relations inside quotation
marks, 1 on a marked line
Every command tells you what it skipped. Say nothing and a person reads it as nothing to do, which is a different thing and not true.
What each one catches
Ten of them are the checks. The other fifteen are what the checks stand on: what
content exists, who owns it, what the style sheet decided, what to set on a file. One of
the fifteen is refresh. It changes a stale figure and leaves every other
word alone.
Every one was run over this repository and tuned until it stopped crying wolf. A check that fires on work you got right is a check you switch off. Then it protects nothing.
stet help <command> prints the full reference for any of them.
| Command | The thing it catches |
|---|---|
| check | Your product name spelled two ways across forty files |
| audit | The sweep, ranked by what it costs you |
| verify | A number you typed by hand where a source was declared |
| sums | Parts that do not make their total, and statistics that disagree with their own p-values |
| cite | A citation to a withdrawn paper, or to a preprint since published |
| standing | A URL that still resolves and no longer says what you cited it for |
| tells | Em dashes, the “not X, it is Y” turn, preambles, summaries of the paragraph above |
| measure | Drift against the figures in your own voice file |
| critique | A scored review where every score is computed, and the four it cannot compute are named |
| doctor | A file you marked as content that no glob actually covers |
Why this is worth a build step
Somebody counted all four of these, and none of them is about your website. They are about journals, because journals are where anyone bothered to count. Your pages rot the same way.
Does any of that reach a pricing page? The link row does. A URL that still returns 200 has not necessarily kept the sentence you cited it for. The page looks fine. Nothing on it says the paragraph you quoted came out two years ago. That is the same failure as a product name spelled two ways across forty files, and the same reason nobody notices.
So standing writes down what a source said the first time you cited it,
and tells you what has changed since.
| Figure | Of what | Source |
|---|---|---|
| 76.35% | References whose content had drifted, 184,065 of 241,091 | Jones and others, PLOS ONE, 2016. 10.1371/journal.pone.0167475 |
| 70%+ | URLs across three Harvard law journals no longer reaching the material, and 50 percent in Supreme Court opinions | Zittrain, Albert and Lessig, Harvard Law Review Forum, 2014. Perma |
| 49.6% | Psychology papers reporting a null-hypothesis test that carry a p-value inconsistent with its own test statistic, 8,273 of 16,695 | Nuijten and others, Behavior Research Methods, 2015. 10.3758/s13428-015-0664-2 |
| 5.4% | Post-retraction citation contexts that acknowledge the retraction, 722 of 13,252 | Hsiao and Schneider, Quantitative Science Studies, 2021. 10.1162/qss_a_00155 |
Running it
What does it cost to set up? One file. stet.config.json says which
files are your words. It can also say where a figure comes from, which is a shell
command.
Stet touches your words and nothing else. No components, no routing, no CSS. Put it on Next, Astro, Hugo or a folder of Markdown and it behaves the same, and the checks that need no network never open one.
# the sweep, ranked by what it costs you stet audit # or pick the ones you care about stet check && stet sums && stet standing # one file, against your own voice stet measure docs/pricing.md
The CLI ships inside the
plugin, and node bin/stet.mjs from a clone works the same.