agentleFS
milad-ahmdmilad-ahmd/agent-skills/skills/ai-slop-detector/SKILL.md

ai-slop-detector

Skill5 starsChanged 18 days agoMITView on GitHub

Finds "AI slop" writing patterns, such as cliché phrases ("delve", "in today's fast-paced world"), "not just X, it's Y" frames, sycophancy, emoji bullets, em-dash overload, uniform sentence rhythm and empty conclusions, using a scoring script with a 120-pattern catalog, then rewrites the text to sound specific and human while keeping the author's meaning and voice. Use when the user asks to humanize text, remove AI-sounding phrasing, de-slop a draft, check whether writing sounds robotic, or flag AI-sounding prose in docs or pull requests in CI.

8 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. 0 are common, 4 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 6 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    The hits are the evidence; the score is a summary: Start with the heaviest hits, not the number.

    line 39
  2. Distinctive:

    Keep the meaning, the facts and the author's voice.

    line 54
  3. Very specific:

    Prefer annotate-only. If you set fail-above, use it as a nudge on docs, never as a gate on people.

    line 75
  4. Distinctive:

    Don't strip technical terms that are correct in context ("robust" in statistics, "leverage" in finance).

    line 90
  5. Distinctive:

    Never fabricate specifics during a rewrite.

    line 91

“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

AI Slop Detector

Make writing sound like a specific human wrote it, not an average of the internet.

1. Scan

python3 scripts/slop_scan.py draft.md                       # one file
python3 scripts/slop_scan.py 'docs/**/*.md' --exclude 'docs/archive/**'
pbpaste | python3 scripts/slop_scan.py -                    # stdin
python3 scripts/slop_scan.py --json draft.md                # machine-readable
python3 scripts/slop_scan.py --format github --fail-above 50 '**/*.md'   # CI annotations + exit code

Stdlib only, Python 3.10+. Texts under 50 words are skipped (--min-words). Code blocks, inline code, URLs and front matter are ignored.

For each text the script prints a slop-signal score from 0 to 100 (low < 20, moderate 20-29, high >= 30), six component signals, and every pattern hit with its line number, id and a plainer alternative. The score is a weighted sum:

signalweightwhat it measures
patterns0.70weighted hits per 1,000 words from the catalog, patterns.json in scripts/
lists0.10share of lines that are bullets or headings
paragraphs0.06same-length paragraphs (low length variation)
triads0.06"X, Y, and Z" lists per 1,000 words
rhythm0.04same-length sentences (low length variation)
em-dashes0.04em-dashes per 1,000 words

The exact formula is in the script's docstring. The 120 patterns, with why each reads as AI and what to write instead, are in references/patterns.md. Single words weigh 0.3-1.5; templates such as "It's not about X. It's about Y." weigh 3.

Benchmark: on a small held-out set (15 LLM-written vs 15 pre-2022 human passages) it scored ROC-AUC 0.98 and precision/recall 0.93 at 30, but one model wrote both the LLM samples and the patterns, so expect less on real text (bench/README.md).

2. Read the result

  • The hits are the evidence; the score is a summary. Start with the heaviest hits, not the number.
  • A high score means "reads like default assistant prose". A low score does not mean a human wrote it: casual or edited LLM text often scores low.
  • Formal or corporate human writing (mission statements, press releases) can score moderate. Lists and checklists raise the score even when they are the right format.
  • Short texts are noisy: one heavy hit in 150 words can push a score past 30.

3. Diagnose what the script can't catch

  • Generic claims with no specifics (no names, numbers, examples).
  • Reflexive "X, Y, and Z" triads that pad rather than list.
  • Hedging stacks ("may potentially help to") and bullet lists where prose would read better.
  • The same paragraph shape repeated over and over: claim, explanation, "This means...".
  • Praise words standing in for evidence ("powerful", "robust", "seamless").

4. Rewrite

  • Keep the meaning, the facts and the author's voice. Ask for a sample of their own writing if you can.
  • Replace abstractions with concrete details the author supplies. Never invent anecdotes or data. Mark the gaps as [add a real example].
  • Vary sentence length, use plain verbs, and cut filler, sign-offs and most em-dashes.
  • Show the top 5 changes as before -> after, then the full rewrite.
  • Re-run the scanner and report both scores. Don't chase zero: a rewrite that reads well at 15 beats a contorted one at 0.

See examples/ for three before -> after pairs (LinkedIn post, README intro, cover letter) with real scanner output.

5. Use it in CI

The standalone mirror milad-ahmd/ai-slop-detector is a GitHub Action that annotates pull requests:

- uses: actions/checkout@v4
- uses: milad-ahmd/ai-slop-detector@main
  with:
    files: "docs/**/*.md README.md"
    pr-body: true        # also scan the PR description
    fail-above: ""       # empty = annotate only; e.g. 50 to fail the job

Prefer annotate-only. If you set fail-above, use it as a nudge on docs, never as a gate on people.

6. Change the catalog

Edit patterns.json in scripts/ (each pattern needs id, category, weight, regex, why, instead and a matching example), then:

python3 scripts/gen_patterns_md.py                     # regenerate references/patterns.md
python3 -m unittest discover -s scripts                # every example must match; false-positive guards must not
python3 scripts/bench.py --split dev                   # tune on dev; quote test numbers only

Rules

  • This measures style signals, not authorship. Never claim it proves text was written by AI, and don't use it to accuse students, employees or writers.
  • Don't strip technical terms that are correct in context ("robust" in statistics, "leverage" in finance). The catalog already skips the common ones.
  • Never fabricate specifics during a rewrite; leave a visible placeholder instead.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.