Unslop
Edit text so it does not read as generated. Preserve the meaning. Keep the
intended tone.
Process
- Read the whole thing once for meaning.
- Run
scripts/slop.py <files> for the mechanical tells.
- Scan against the catalogue below for the ones a regex cannot see.
- Rewrite. Do not annotate, do not leave a change log in the text.
- Rerun the script and ask what still marks this as machine-written.
The script finds surface patterns: em dashes, curly quotes, the vocabulary
list, filler, chatbot phrases. It cannot see a vague claim, a passive
construction, or a paragraph that says nothing, which is most of what matters.
Treat a clean run as the start of the read, not the end of it. Hits are places
to look, not verdicts, and it over-flags bold lead-ins that are doing real work.
A document that quotes the patterns on purpose opts out with a
slop-detector: ignore-file comment near the top, or one line at a time with
slop-detector: ignore.
House rules come first
CLAUDE.md governs. These three are the ones that get violated most and they
outrank everything else in the catalogue.
- No em dashes. Not one. Do not substitute an en dash, a double hyphen, a
spaced hyphen, or a parenthesis. Trading an em dash for a parenthesis swaps
one tell for another. End the sentence, or use a comma.
- No mid-sentence commentary. One idea per sentence, then stop. An
appositive or a parenthetical that props up a claim already made is the
single loudest tell in technical writing. If the point needs support, give it
its own sentence.
- Short declarative sentences. Cut hedges, filler, and throat-clearing.
What replaces the slop
Removing patterns is half the job. Sterile, voiceless text is just as obviously
generated as flowery text.
- Have a view. React to the facts instead of listing pros and cons neutrally.
- Be specific. Not "performance improved" but "frame time dropped from 18ms
to 4ms".
- Name the mechanism. Not "the API stays out of your way" but "every call
returns a value; nothing mutates the argument".
Do not reach for the usual advice about varying rhythm or letting some mess in.
The house style is short and declarative, and it does not read as generated when
the sentences carry real content.
Catalogue
Content
- Significance inflation. "pivotal moment", "testament to", "evolving
landscape", "sets the stage for", "deeply rooted". Cut the puffery. State
what happened.
- Superficial -ing tails. "...highlighting the need for", "...ensuring
consistency", "...showcasing the power of". Delete, or replace with the
actual consequence.
- Promotional language. "seamless", "robust", "powerful", "elegant",
"groundbreaking", "blazingly fast". Describe the behaviour or give the number.
- Vague attribution. "Experts believe", "It is widely considered". Name the
source or delete the claim.
- Formulaic tension. "Despite these challenges, X continues to thrive."
Replace with the specific facts.
Vocabulary
- The list. additionally, crucial, delve, leverage, enhance, facilitate,
foster, garner, interplay, intricate, landscape (abstract), pivotal,
showcase, tapestry, testament, underscore, utilize, vibrant, robust, seamless.
Use the plain word.
- Copula avoidance. "serves as", "stands as", "boasts", "features". Say
"is" or "has".
- Negative parallelism. "It's not just X, it's Y." State the point.
- Rule of three. Forcing ideas into groups of three. Use the real number.
- Synonym cycling. The function, the routine, the procedure, the call, all
in one paragraph. Pick one word and repeat it.
- False ranges. "from parsing to rendering" where the two ends are not on
a scale. List the things.
Punctuation and shape
- Colon as connector. Fine before a list or an example. Not as a
mid-sentence hinge. Rewrite so the point stands without it.
- Boldface spray. Do not bold every proper noun, acronym, or term of art.
- Inline-header lists. The tell is a bold label whose colon restates the
line: "Performance: Performance improved". Convert to prose. A bold
lead-in that names a thing and is followed by genuinely new detail is fine.
- Title Case Headings. Sentence case.
- Decorative emoji. Remove.
- Curly quotes and ellipsis characters. Straight quotes, three periods.
Chat artifacts
- Assistant phrases. "I hope this helps", "Let me know if", "Of course",
"Certainly", "Great question", "You're absolutely right". Remove.
- Cutoff disclaimers. "While specific details are limited". Find the
detail or drop the sentence.
- Announcing the finding. "Found it!", "The smoking gun!", "Interesting!".
State what you found.
Filler
- Filler phrases. "in order to" becomes "to". "due to the fact that"
becomes "because". "it is important to note that" gets deleted whole.
- Stacked hedges. "could potentially possibly" becomes "may", or becomes
nothing.
- Generic closers. "The future looks bright." "There is much to consider."
End on the last real sentence.
Jargon
- Abstract metaphor nouns. substrate, wedge, vector, locus, nexus,
primitive (as a noun), surface (as in "API surface"), bedrock, scaffolding
(as metaphor), paradigm, modality. Each has a plainer concrete word.
"Substrate" is "base". "Wedge in" is "add". "Vector" is "way".
- Feeling instead of function. "the database stays close at hand", "types
that follow your schema". These name a sensation. The fix names the
mechanism or a number. "
.to_sql() returns the exact string sent to the
database." "Renaming a column fails the build."
Sentence mechanics
- Dense sentences. If the reader has to back up to parse it, split it.
- Passive voice. Catch "is/are/was/were" plus a past participle and name
the actor. "Queries are validated" becomes "the compiler validates queries".
Passive is fine only when the actor is unknown or genuinely irrelevant.
- Adverbs propping up weak verbs. "runs quickly" becomes "is fast" or the
measured number. "significantly improves" becomes the delta. An adverb
holding up a verb means the verb is wrong.
In code and commits
The same rules apply, plus:
- A comment that restates the next line is slop. Delete it.
- A commit body that narrates the diff is slop. The body carries the why.
- A docstring listing every parameter with its own type restated from the
signature is slop. Say what the function is for.
- Defensive checks added "just in case" are the code form of hedging. See
CLAUDE.md.
Done when
You can read the piece aloud and no sentence makes you wince. Then check the top
three house rules one final time by searching for them literally: em dash, open
parenthesis mid-sentence, and any sentence over about thirty words.
1---2name: unslop3description: Strip AI tells out of prose. A catalogue of the patterns that make writing read as machine-generated, each with its fix. Use before shipping any README, doc, comment, commit body, blog post, or report, and when the user says "unslop this", "this reads like AI", "de-slop", or complains about em dashes, filler, or LLM voice.4---56<!-- slop-detector: ignore-file -->78# Unslop910Edit text so it does not read as generated. Preserve the meaning. Keep the11intended tone.1213## Process14151. Read the whole thing once for meaning.162. Run `scripts/slop.py <files>` for the mechanical tells.173. Scan against the catalogue below for the ones a regex cannot see.184. Rewrite. Do not annotate, do not leave a change log in the text.195. Rerun the script and ask what still marks this as machine-written.2021The script finds surface patterns: em dashes, curly quotes, the vocabulary22list, filler, chatbot phrases. It cannot see a vague claim, a passive23construction, or a paragraph that says nothing, which is most of what matters.24Treat a clean run as the start of the read, not the end of it. Hits are places25to look, not verdicts, and it over-flags bold lead-ins that are doing real work.2627A document that quotes the patterns on purpose opts out with a28`slop-detector: ignore-file` comment near the top, or one line at a time with29`slop-detector: ignore`.3031## House rules come first3233`CLAUDE.md` governs. These three are the ones that get violated most and they34outrank everything else in the catalogue.35361. **No em dashes.** Not one. Do not substitute an en dash, a double hyphen, a37 spaced hyphen, or a parenthesis. Trading an em dash for a parenthesis swaps38 one tell for another. End the sentence, or use a comma.392. **No mid-sentence commentary.** One idea per sentence, then stop. An40 appositive or a parenthetical that props up a claim already made is the41 single loudest tell in technical writing. If the point needs support, give it42 its own sentence.433. **Short declarative sentences.** Cut hedges, filler, and throat-clearing.4445## What replaces the slop4647Removing patterns is half the job. Sterile, voiceless text is just as obviously48generated as flowery text.4950- **Have a view.** React to the facts instead of listing pros and cons neutrally.51- **Be specific.** Not "performance improved" but "frame time dropped from 18ms52 to 4ms".53- **Name the mechanism.** Not "the API stays out of your way" but "every call54 returns a value; nothing mutates the argument".5556Do not reach for the usual advice about varying rhythm or letting some mess in.57The house style is short and declarative, and it does not read as generated when58the sentences carry real content.5960## Catalogue6162### Content63641. **Significance inflation.** "pivotal moment", "testament to", "evolving65 landscape", "sets the stage for", "deeply rooted". Cut the puffery. State66 what happened.672. **Superficial -ing tails.** "...highlighting the need for", "...ensuring68 consistency", "...showcasing the power of". Delete, or replace with the69 actual consequence.703. **Promotional language.** "seamless", "robust", "powerful", "elegant",71 "groundbreaking", "blazingly fast". Describe the behaviour or give the number.724. **Vague attribution.** "Experts believe", "It is widely considered". Name the73 source or delete the claim.745. **Formulaic tension.** "Despite these challenges, X continues to thrive."75 Replace with the specific facts.7677### Vocabulary78796. **The list.** additionally, crucial, delve, leverage, enhance, facilitate,80 foster, garner, interplay, intricate, landscape (abstract), pivotal,81 showcase, tapestry, testament, underscore, utilize, vibrant, robust, seamless.82 Use the plain word.837. **Copula avoidance.** "serves as", "stands as", "boasts", "features". Say84 "is" or "has".858. **Negative parallelism.** "It's not just X, it's Y." State the point.869. **Rule of three.** Forcing ideas into groups of three. Use the real number.8710. **Synonym cycling.** The function, the routine, the procedure, the call, all88 in one paragraph. Pick one word and repeat it.8911. **False ranges.** "from parsing to rendering" where the two ends are not on90 a scale. List the things.9192### Punctuation and shape939412. **Colon as connector.** Fine before a list or an example. Not as a95 mid-sentence hinge. Rewrite so the point stands without it.9613. **Boldface spray.** Do not bold every proper noun, acronym, or term of art.9714. **Inline-header lists.** The tell is a bold label whose colon restates the98 line: "**Performance:** Performance improved". Convert to prose. A bold99 lead-in that names a thing and is followed by genuinely new detail is fine.10015. **Title Case Headings.** Sentence case.10116. **Decorative emoji.** Remove.10217. **Curly quotes and ellipsis characters.** Straight quotes, three periods.103104### Chat artifacts10510618. **Assistant phrases.** "I hope this helps", "Let me know if", "Of course",107 "Certainly", "Great question", "You're absolutely right". Remove.10819. **Cutoff disclaimers.** "While specific details are limited". Find the109 detail or drop the sentence.11020. **Announcing the finding.** "Found it!", "The smoking gun!", "Interesting!".111 State what you found.112113### Filler11411521. **Filler phrases.** "in order to" becomes "to". "due to the fact that"116 becomes "because". "it is important to note that" gets deleted whole.11722. **Stacked hedges.** "could potentially possibly" becomes "may", or becomes118 nothing.11923. **Generic closers.** "The future looks bright." "There is much to consider."120 End on the last real sentence.121122### Jargon12312424. **Abstract metaphor nouns.** substrate, wedge, vector, locus, nexus,125 primitive (as a noun), surface (as in "API surface"), bedrock, scaffolding126 (as metaphor), paradigm, modality. Each has a plainer concrete word.127 "Substrate" is "base". "Wedge in" is "add". "Vector" is "way".12825. **Feeling instead of function.** "the database stays close at hand", "types129 that follow your schema". These name a sensation. The fix names the130 mechanism or a number. "`.to_sql()` returns the exact string sent to the131 database." "Renaming a column fails the build."132133### Sentence mechanics13413526. **Dense sentences.** If the reader has to back up to parse it, split it.13627. **Passive voice.** Catch "is/are/was/were" plus a past participle and name137 the actor. "Queries are validated" becomes "the compiler validates queries".138 Passive is fine only when the actor is unknown or genuinely irrelevant.13928. **Adverbs propping up weak verbs.** "runs quickly" becomes "is fast" or the140 measured number. "significantly improves" becomes the delta. An adverb141 holding up a verb means the verb is wrong.142143## In code and commits144145The same rules apply, plus:146147- A comment that restates the next line is slop. Delete it.148- A commit body that narrates the diff is slop. The body carries the why.149- A docstring listing every parameter with its own type restated from the150 signature is slop. Say what the function is for.151- Defensive checks added "just in case" are the code form of hedging. See152 `CLAUDE.md`.153154## Done when155156You can read the piece aloud and no sentence makes you wince. Then check the top157three house rules one final time by searching for them literally: em dash, open158parenthesis mid-sentence, and any sentence over about thirty words.