What it does
stop-slop is a Claude Code skill that removes AI writing tells from prose: the throat-clearing openers, the "not X, it's Y" contrasts, the em dashes, the adverbs that pad every sentence without adding anything.
Why I starred it
I read a lot of AI-drafted text at Klixpert, and it all converges on the same tics. "Here's the thing." "It's not just X, it's Y." A three-item list closing every paragraph. Nobody wrote a spec for this style, but every model produces it, which means it's learnable and, more usefully, un-learnable. Hardik Pandya turned that observation into a skill instead of a blog post, which is the more interesting move.
How it works
The whole thing is four markdown files. SKILL.md is 68 lines and holds eight core rules plus a "Quick Checks" list you run before delivering any text. The three reference files it links to, phrases.md, structures.md, and examples.md, total about 320 more lines and 12KB combined.
That split matters more than it looks. Claude Code skills load SKILL.md into context by default and only pull in linked reference files when the model decides it needs them (progressive disclosure, in the framework's own terms). So a session doing a quick pass on a paragraph never has to load the full 65-entry phrase table in references/phrases.md:1. A session doing a structural rewrite pulls in references/structures.md, which is nearly twice the size, only when it's relevant. The skill is designed for the model's context budget, not just for human readability.
The rules themselves are worth reading as a taxonomy of how LLMs write, not just a banned-words list. references/structures.md:3 catalogs binary contrasts as a table: pattern, then problem. "Not because X. Because Y." is filed as a "telegraphed reversal." "It feels like X. It's actually Y." is a "setup/reveal cliche." Naming the rhetorical move, not just the phrase, is what makes the list generalize instead of becoming a whack-a-mole blocklist.
The section I keep coming back to is "False Agency" at references/structures.md:66. It's not a phrase filter, it's a grammar rule: inanimate things don't get human verbs. "A complaint becomes a fix" is flagged because complaints don't do anything, someone fixes them. "The decision emerges" is flagged for the same reason: decisions don't emerge, someone decides. The fix column names the actor: "The team fixed it that week." This is the rule that would take a human editor the longest to articulate, and it's the one doing the most work, because passive, agentless phrasing is the single most reliable AI tell there is.
SKILL.md:48 closes with a scoring rubric: rate the draft 1-10 on directness, rhythm, trust, authenticity, and density, and revise anything under 35/50. It's a crude number, but it gives the model a stop condition. Without it, "remove AI patterns" is an open-ended instruction a model can nod along to and only half-apply. A numeric floor forces an actual second pass.
Using it
Installing it in Claude Code is copying the folder in as a skill:
git clone https://github.com/hardikpandya/stop-slop.git
cp -r stop-slop ~/.claude/skills/stop-slop
The frontmatter in SKILL.md:1-7 is what Claude Code reads to decide when to trigger it:
---
name: stop-slop
description: Remove AI writing patterns from prose. Use when drafting, editing, or reviewing text to eliminate predictable AI tells.
metadata:
trigger: Writing prose, editing drafts, reviewing content for AI patterns
author: Hardik Pandya (https://hvpandya.com)
---
The before/after pairs in references/examples.md are the fastest way to see the rules apply at once. Example 3 collapses a full paragraph of business jargon into six words:
Before: "In today's fast-paced landscape, we need to lean into
discomfort and navigate uncertainty with clarity. This matters
because your competition isn't waiting."
After: "Move faster. Your competition is."
That's four rules firing on one paragraph: cut the "in today's X" opener, drop "lean into" and "navigate," kill the "this matters because" emphasis crutch, and compress the closing sentence.
Rough edges
There's no code here, no test suite, nothing to run except pointing Claude at markdown. That's fine for what it is, but it also means there's no way to verify the rules actually improve output beyond reading the five examples and trusting they generalize. The repo has three commits total, the last one from March 18, over two months before I starred it, adding the false-agency rule. It's a young, small project (389 lines across all files) that's been static since. Worth knowing before you treat it as actively maintained.
The rules are also opinionated to the point of rigidity in a few places: "no em dashes at all" and "kill all adverbs" are blunt instruments that will occasionally cut something that was fine. The skill doesn't have an escape hatch for cases where an adverb is load-bearing. You're trusting the model to apply judgment on top of a ruleset that's explicitly written to leave no judgment calls.
Bottom line
If you're using Claude Code to draft anything that ships to readers, and you're tired of editing out the same five sentence patterns every time, this is worth dropping into your skills folder. It won't fix bad arguments, but it's a solid pass at catching the prose that reads AI-written even when the content is fine.
