Model or dataset
ItsssssJack/SlopMonster avatar
ItsssssJack/SlopMonster

SlopMonster: a Python linter that scores AI-written copy out of 5 and fails your build

Turn AI-written copy into copy a human would ship. Lint for AI tells, cleanse with a rival model, lint again.

410 stars45 forksPythonMIT

At a glance

What is it?
SlopMonster scores prose for AI tells, rewrites it in three passes, then routes the draft to a rival model family for a cleanse. It is stdlib Python with no dependencies, and the scorer is the build gate.
Who is it for?
Adopt SlopMonster if your repo already ships English prose a reader will judge (a README, a landing page, release notes) and you want a mechanical gate rather than a style debate; the scorer is stdlib Python so there is nothing to install beyond the clone. Skip it if your copy is not English, because the README states the catalogue is English only and non-English text scores 5/5 simply because the scorer cannot read it.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 11 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 18, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What SlopMonster solves, and who it is actually for

The README frames the problem as recognition, not grammar: "AI writing has a smell," and readers who catch it stop trusting the page. SlopMonster turns that judgement into a number. It scores copy out of 5, and below 5 the command exits non-zero, so a build can stop on it. The README calls this a linter and says everyone else can call it a checker that will not let you ship.

The audience is narrow and specific. The README lists landing pages, READMEs, emails and scripts, which is to say anything a person will read and judge. The repository layout backs that up: tools/ holds the scorer, the cleanse shell script and a test file, and .github/workflows/slop.yml is described as a build gate ready to copy into your own repo. If you write prose that ships alongside code, this is aimed at you. If you write prose nobody scores, the exit code has nothing to bite on.

The four-step loop: score, rewrite, cleanse, rescore

The mechanism is a loop with the scorer at both ends. Step one runs tools/deslop.py, which marks the text out of 5 and exits red below 5. Step two is manual: three passes, described as kill the vocabulary, kill the shapes, then put a person back in. Step three runs tools/cleanse.sh, which hands the draft to a different model family. Step four rescores.

The design argument is stated plainly in the README: the scorer gets the first word and the last word, because the scorer is honest and the model is persuasive. That ordering is the whole idea. A model asked to judge its own output will usually say it is fine, so the deterministic checker brackets the generative step rather than sitting inside it.

The cleanse is model-aware. The rule is that the cleanse runs on a different model family than the one that wrote the draft, on the grounds that a model cannot hear its own accent. The README's table maps Claude Code drafts to GPT-5.6 via the codex CLI, Codex or ChatGPT drafts to Claude via claude -p with DESLOP_WRITER=gpt set, and Gemini CLI drafts to whichever rival CLI is installed. With no rival CLI present, cleanse.sh prints the full prompt for you to paste into the other family's chat. It refuses to route a draft back to its own family.

After the cleanse the README insists on re-linting, and gives the reason: a frontier model is good at removing tells and capable of adding new ones while it does.

The five rule groups, and why the vocabulary list is split in two

Five groups each cost a point. Four strip the AI accent; the fifth asks whether the line sells anything.

The vocabulary rule is the one worth reading closely, because it shows the author hit a real false-positive problem. There are two lists. The first is matched by root, so elevate also catches elevates, elevated and elevating. The README explains why that matters: sales pages are written in the third person, so "Acme elevates your workflow" is the commonest form, and exact matching walked straight past it. The second list holds words with an honest everyday meaning too, such as crafted, harness, landscape and journey, and those are matched word for word. So "we craft furniture by hand" stays clean.

The constructions rule catches sentence shapes rather than single words. The README counts 17 shapes, naming "that's where X comes in", "say goodbye to", "whether you're X or Y", stacked hedges such as "could potentially", and questions the writer then answers themselves. Both the short and long forms are checked, "it's" and "it is", on the argument that formal register is not a disguise but the default thing a model writes. The README's own position is that shapes are worth more than words, because a page can pass a vocabulary check and still read like a machine wrote it.

The README's own prose is a demonstration: every specimen sits in code formatting or is struck through, because deslop.py skips code spans and struck-through text when it reads a .md file. That is how the README passes the scorer it documents. It is a clever arrangement, and also the clearest statement of the tool's limits: it reads surface patterns, and it can be satisfied by formatting.

Installing SlopMonster and running a first score

The scorer is stdlib Python, and the README states there are no dependencies. The clone is the install:

bash
 git clone https://github.com/ItsssssJack/SlopMonster && cd SlopMonster

Score a string without creating a file. The README gives this exact invocation and says the expected result is a score of 3/5, with both tells named, and exit code 1:

bash
python3 tools/deslop.py --text "It's not just a tool, it's a game-changing journey."

Point it at real artefacts instead. An HTML file is read as a visitor would see it, and a markdown file has code spans, fenced blocks and struck-through text skipped:

bash
python3 tools/deslop.py index.html
python3 tools/deslop.py README.md

The cleanse step needs one AI CLI, codex or claude, or neither. With neither, it prints the prompt for you to paste elsewhere. The README's example writes the cleansed text to a file and rescores it:

bash
 tools/cleanse.sh draft.md > cleansed.md
 python3 tools/deslop.py --text "$(cat cleansed.md)"

If your numbers are real and you can evidence them, the README offers --allow-proof to stop the fifth rule blocking the build. And after any regex change, the test file is what catches a half-blind catalogue:

bash
 python3 tools/deslop.py index.html --allow-proof
 python3 tools/test_deslop.py

There is also an agent-skill route. For Claude Code, copy the folder to ~/.claude/skills/slopmonster/ and invoke /slopmonster. For Codex and other agents, point the agent at SKILL.md, which the README describes as plain-markdown instructions with nothing Claude-specific in them. The folder layout matches: SKILL.md, prompts/ and references/ sit at the top level.

English only, and the non-English 5/5 is not a pass

The sharpest limitation is stated in the README without hedging: the catalogue is English only, and copy in another language scores 5/5 because the scorer cannot read it, not because it is clean. That is a silent failure mode. A green score on a French landing page means nothing, and a CI gate wired to the exit code will wave it through.

The second limitation is structural rather than linguistic. The scorer matches patterns, so anything that breaks the pattern escapes. The README's own README is the proof: it passes because its specimens are inside code formatting or struck through, which the markdown reader skips by design. A writer who formats a bad sentence as code has defeated the check. That is not a bug in the implementation; it is the boundary of a pattern matcher, and it is worth knowing before you treat 5/5 as a statement about quality.

The third is the cleanse itself. It depends on a rival CLI being installed, and the README gives no fallback beyond printing the prompt for manual pasting. That makes the middle of the loop manual on a machine with only one model family available, which is exactly the machine most likely to need the step.

How SlopMonster differs from Vale and write-good

Vale is the obvious comparison and the difference is the target. Vale is a configurable prose linter built on style rules you write or import, organised around house style: terminology, capitalisation, passive voice, reading level. It has no opinion about whether a sentence was written by a model, and no step that rewrites anything. You bring the rules.

SlopMonster ships the rules and they are specific to AI tells: a root-matched vocabulary list, a word-for-word list for words with honest everyday meanings, and 17 sentence shapes. It also closes the loop that Vale leaves open. Vale tells you a line is wrong; SlopMonster tells you, then hands the draft to a different model family to fix, then tells you again. The scorer is the same program at both ends.

write-good sits closer to Vale than to SlopMonster: a set of heuristics for wordiness and weak phrasing, no model in the pipeline, no build gate built around a 5-point score. None of these tools is strictly better. If your problem is house style across a documentation set, Vale's configurability is the thing you want and SlopMonster's fixed catalogue will fight you. If your problem is that drafts keep arriving with the same accent, the fixed catalogue plus the rival-model cleanse is the part the others do not have.

Maintenance, licence and what a regex change costs

The last push to the default branch was on 2026-09-07, and the repository is not archived. There are no recent releases retrieved, so the working assumption is that you track main rather than a tagged version. That matters for upgrade cost: the catalogue is the product, and the catalogue is regexes. A clone pinned to a commit is stable; a clone that pulls is not, because a new shape or a new root match can turn a passing page red without any change on your side.

The test file is the mitigation the repository offers. The README describes tools/test_deslop.py as what catches a silently half-blind catalogue after a regex change, which is a reasonable framing: the risk is not that the linter is wrong but that it stops matching and nobody notices. Run it before you pull.

The licence is MIT, and the README is explicit about the boundary it draws. The MIT licence covers the repository's own code and prose. The Jasper.ai homepage sentences quoted in the examples are quoted for criticism and remain Jasper.ai's. If you copy examples/ into your own docs, that distinction is the one to check, and it is a question for your own counsel rather than something this article can settle.

Editorial conclusion

Adopt SlopMonster if your repo already ships English prose a reader will judge (a README, a landing page, release notes) and you want a mechanical gate rather than a style debate; the scorer is stdlib Python so there is nothing to install beyond the clone. Skip it if your copy is not English, because the README states the catalogue is English only and non-English text scores 5/5 simply because the scorer cannot read it. Before trusting it, run python3 tools/test_deslop.py after any regex change, read examples/ridgeline-roofing.md to see how the fifth rule behaves on a claim, and decide whether your build should use --allow-proof or keep the proof rule blocking.

Frequently asked questions

What does "slop" mean in slang?

The README does not define the slang term. It uses "slop" as shorthand for AI-written copy that carries recognisable tells, and the tool it ships is a scorer for those tells.

What does "slopification" mean?

The README does not use the word and gives no definition. The closest thing in the repository is the framing that AI writing has a smell and that readers who catch it stop trusting the page.

What does the acronym "slop" mean?

The README does not present "slop" as an acronym or expand it into one. It is used as a plain word for AI-sounding copy, and the project name SlopMonster follows from that.

What is slop shop?

The repository says nothing about slop shops, and no such feature, command or directory appears in the README or the top-level layout. The project is a scorer and a cleanse script for prose, not a storefront.

Official sources

  1. Issues
  2. ItsssssJack/SlopMonster on GitHub
  3. License: MIT
  4. README
Community notes

Community notes