Writing · 2026-09-27
Lint for LLM prose
Thirteen rules, six of them hard fails, that took 87 chapters from 61 failing to zero in a day. This page fails them, on purpose: it has to list the words.
I publish six books about machine learning that were drafted, in large part, by models. Readers could tell. Not from the facts, which were checked, but from the sound: the em-dashes, the "Here's the thing," the paragraph that opens on "Moreover," the sentence that says "not X but Y" for the rhythm, the closing line that's seven words long and means nothing.
Telling a model "write like a person" doesn't fix this, because the model thinks it already does. So I did what you'd do with any other code-quality problem: I wrote a linter, made the worst offences fail the build, and ran it on everything.
The rules
Hard fails, the build stops:
- Em-dash rate above 2.5 per thousand words.
- Any spelled-out decimal ("zero point zero five four"). Nobody writes numbers in words.
- Filler and hedge words above 2 per thousand: "genuinely," "essentially," "vibrant," "seamless," and about fifty more from a list I keep adding to.
- "Here is" or "Here's" more than once in a file.
- "The short answer" more than once.
- Any paragraph that opens on Additionally, Moreover, Furthermore, In conclusion, In summary, or Overall.
Warnings, a human decides:
- Reversal patterns ("not X but Y").
- Runs of two or more sentences under five words.
- Sentences over thirty-five words.
- Lists of three at a rate above 4 per thousand words.
- Aphoristic closers: a paragraph ending under seven words with no digit in it.
- Praise words: elegant, beautiful, remarkable, startling, powerful, striking.
- "We" as narrator.
It doesn't check grammar, spelling, or repetition. Other tools do those. This one checks for the sound.
The scrub
On 2026-09-23, 61 of 87 chapters failed. The training book was nearly clean, because I'd edited it hardest by hand; the diffusion, LLM, and Q&A books were worst. Each failing chapter went back through a model with the rule it broke and the instruction to fix that and nothing else, then through the linter again. By the next day all 87 passed, and the books were redeployed.
The fixes were mostly small. Replace the em-dash with a full stop. Delete the hedge; the sentence is stronger without it. Turn "not a corpus of facts but a language processor" into two sentences that each say something. The prose lost a certain gloss and got easier to read.
What it's for
The linter only catches the tics. What I'm after is prose where every sentence tells the reader something, and a tic usually marks a sentence that doesn't. With the tics gone, those sentences were easy to find and cut, and the books got shorter.
There's a second use. The linter runs on this site, including the case studies (this page is the one exemption, since it quotes the list), and on the persona file for the agent in the corner. If a model drafted it, it gets linted before anyone reads it.
Where the rule list came from
Reading. I collected the sentences that made me wince, sorted them, and counted. The list is opinionated and it's mine; a different writer would ban different words. "Sounds like a model" can be measured, and you can gate a build on it.