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
- HyperVon/agent-guidance-kittheir own version, first seen Nov 1, 2026
- FeedHive/ai-slop-detectortheir own version, first seen Oct 13, 2026
- opencue/cuecardstheir own version, first seen Aug 17, 2026
- kjooncho/ux-motion-skillstheir own version, first seen Jul 28, 2026
- MahmoudHalat/slop-coptheir own version, first seen Jul 14, 2026
- aragaobruno/toolbelttheir own version, first seen Jun 23, 2026
Other versions8 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 8
- FeedHive/ai-slop-detector★ 45same name
- jshearin01/agent-skills★ 16same name
- opencue/cuecards★ 6same name
- MahmoudHalat/slop-cop★ 5same name
- Lucasli6833/slop-cop★ 4same name
- aragaobruno/toolbelt★ 2same name
- HyperVon/agent-guidance-kit★ 1same name
- kjooncho/ux-motion-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository56 other files it gives its agents.
- docs/llms.txtllms.txt
- a11y-fixerSkill
- ad-copy-generatorSkill
- agent-guardrailsSkill
- agent-memory-keeperSkill
- api-to-sdkSkill
- app-store-optimizerSkill
- architecture-doctorSkill
- brand-voice-guideSkill
- bug-detectiveSkill
- changelog-from-gitSkill
- codebase-explainerSkill
- codebase-time-machineSkill
- commit-craftSkill
- competitor-spySkill
- content-repurposerSkill
- cost-cutterSkill
- demo-recorderSkill
- dependency-doctorSkill
- dockerize-anythingSkill
- durable-agent-workflowsSkill
- e2e-flow-testerSkill
- email-campaign-writerSkill
- env-secrets-guardSkill
- gh-actions-auditorSkill
- hook-generatorSkill
- incident-commanderSkill
- influencer-outreachSkill
- instagram-growth-managerSkill
- landing-page-roasterSkill
- launch-post-writerSkill
- meeting-notes-to-ticketsSkill
- merge-conflict-resolverSkill
- migration-wizardSkill
- plan-grillerSkill
- prompt-injection-scannerSkill
- pr-reviewer-proSkill
- readme-glow-upSkill
- roast-my-githubSkill
- screenshot-to-componentSkill
- seo-blog-writerSkill
- skill-creator-proSkill
- skill-finderSkill
- skills-doctorSkill
- social-analytics-reporterSkill
- social-media-calendarSkill
- social-media-managerSkill
- sql-optimizerSkill
- startup-idea-validatorSkill
- tdd-loopSkill
- terse-modeSkill
- test-gap-hunterSkill
- tiktok-viral-creatorSkill
- ui-tasteSkill
- youtube-script-writerSkill
- youtube-seo-optimizerSkill
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
- Distinctive: line 39
The hits are the evidence; the score is a summary: Start with the heaviest hits, not the number.
- Distinctive: line 54
Keep the meaning, the facts and the author's voice.
- Very specific: line 75
Prefer annotate-only. If you set fail-above, use it as a nudge on docs, never as a gate on people.
- Distinctive: line 90
Don't strip technical terms that are correct in context ("robust" in statistics, "leverage" in finance).
- Distinctive: line 91
Never fabricate specifics during a rewrite.
“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.
Files
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 codeStdlib 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:
| signal | weight | what it measures |
| patterns | 0.70 | weighted hits per 1,000 words from the catalog, patterns.json in scripts/ |
| lists | 0.10 | share of lines that are bullets or headings |
| paragraphs | 0.06 | same-length paragraphs (low length variation) |
| triads | 0.06 | "X, Y, and Z" lists per 1,000 words |
| rhythm | 0.04 | same-length sentences (low length variation) |
| em-dashes | 0.04 | em-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 jobPrefer 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 onlyRules
- 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.
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
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.

