Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Detects AI-generated writing patterns in prose. Use when reviewing docs for slop, vague language, or identity leaks before publishing.
.claude/skills/athola-slop-detector/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 647% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 291% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 303% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 213% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 355% | 0% |
Slop is a density problem, not a word problem.
A single "delve" is fine. Five "delves" near a "tapestry" and an "embark" is generated text. This skill scores density per 100 words, marker clustering, and whether the overall register fits the document type. It does not ban words. It flags concentrations.
scribe:doc-generator)scribe:voice-review)Identify target files and classify them as technical docs, narrative prose, or code comments. Classification feeds context-aware scoring: tier-1 markers in marketing copy score lower than the same markers in API reference.
--lang parameter (en, de, fr, es)data/languages/{lang}.yamlmodules/language-handling.md for cultural calibration and concrete pattern setsConvert British spellings to American by default, in any scanned document, unless the document opts out via .slop-config.yaml (spelling: british) or a per-word allowlist. This is a consistency pass, separate from slop scoring. Use the tested scribe.spelling functions (find_british_spellings, to_american); both preserve case and skip code, inline code, and URLs.
Load: @modules/spelling-normalization.md
Load: @modules/vocabulary-patterns.md
Markers fall into three confidence tiers. Tier 1 words ("delve", "multifaceted", "leverage") appear far more often in AI text than human text. Tier 2 covers context-dependent transitions ("moreover", "subsequently"). Tier 3 covers vapid phrases ("In today's fast-paced world", "cannot be overstated").
| Word | Context | Human Alternative | |------|---------|-------------------| | delve | "delve into" | explore, examine, look at | | tapestry | "rich tapestry" | mix, combination, variety | | realm | "in the realm of" | in, within, regarding | | embark | "embark on a journey" | start, begin | | beacon | "a beacon of" | example, model | | spearheaded | formal attribution | led, started | | multifaceted | describing complexity | complex, varied | | comprehensive | describing scope | thorough, complete | | pivotal | importance marker | key, important | | nuanced | sophistication signal | subtle, detailed | | meticulous/meticulously | care marker | careful, detailed | | intricate | complexity marker | detailed, complex | | showcasing | display verb | showing, displaying | | leveraging | business jargon | using | | streamline | optimization verb | simplify, improve |
Common but context-dependent:
| Category | Words | |----------|-------| | Transition overuse | moreover, furthermore, indeed, notably, subsequently | | Intensity clustering | significantly, substantially, fundamentally, profoundly | | Hedging stacks | potentially, typically, often, might, perhaps | | Action inflation | revolutionize, transform, unlock, unleash, elevate | | Empty emphasis | crucial, vital, essential, paramount |
| Phrase | Score | Issue | |--------|-------|-------| | "In today's fast-paced world" | 4 | Vapid opener | | "It's worth noting that" | 3 | Filler | | "At its core" | 2 | Positional crutch | | "Cannot be overstated" | 3 | Empty emphasis | | "A testament to" | 3 | Attribution cliche | | "Navigate the complexities" | 4 | Business speak | | "Unlock the potential" | 4 | Marketing speak | | "Treasure trove of" | 3 | Overused metaphor | | "Game changer" | 3 | Buzzword | | "Look no further" | 4 | Sales pitch | | "Nestled in the heart of" | 4 | Travel writing cliche | | "Embark on a journey" | 4 | Melodrama | | "Ever-evolving landscape" | 4 | Tech cliche | | "Hustle and bustle" | 3 | Filler |
Load: @modules/structural-patterns.md
The single most-cited 2026 AI tell across Wikipedia, the Field Guide, and the Algorithmic Bridge. Detection runs in two modes:
Audit mode (forensic, applied to unknown prose):
Prevention mode (applied to docs the agent just generated):
(definitions), or periods (separate thoughts). See modules/structural-patterns.md § Em Dash Analysis for the full replacement table.
bash# Count em dashes in file grep -o '—' file.md | wc -l
AI loves groups of three with alliteration:
Pattern: adjective, adjective, and adjective with similar sounds.
Count bullet points vs paragraph sentences:
Measure standard deviation of sentence lengths:
AI produces "blocky" text with uniform paragraph lengths. Check whether paragraphs cluster around the same word count.
Load: @modules/identity-and-voice-leaks.md
Some patterns are not slop: they are direct evidence that AI generated text leaked into a published artifact. A single match in this class fails review independently of any other score.
Scan for:
"as of my training cutoff", "I cannot provide") — severity: critical, no exceptions.
"Great question!", "Sure!") outside transcript blocks.
will cover...", "Let's dive into...", "By the end of this guide...").
without its challenges").
it: both contrastive negation ("not just X, but Y", "It's not X, it's Y", and the trailing "It's X, not Y" / "Y, not X") and affirmative antithesis ("Less X, more Y", "Where others X, we Y"). Avoid in all but the most necessary cases; keep only when the contrast carries information that survives removal. The trailing copula form ("It's a tool, not a toy") is the easiest to miss because the opener reads as a plain definition.
See the module for the full pattern catalogue and false- positive guidance.
Especially relevant for conversational or instructional content (complements Class 2 of the identity-and-voice-leaks module):
| Phrase | Issue | |--------|-------| | "I'd be happy to" | Servile opener | | "Great question!" | Empty validation | | "Absolutely!" | Over-agreement | | "That's a wonderful point" | Flattery | | "I'm glad you asked" | Filler | | "You're absolutely right" | Sycophancy |
These phrases add no information and signal generated content.
The 2026 cross-source consensus (Wikipedia Signs of AI writing, Algorithmic Bridge 10 Signs, Ignorance.ai Field Guide, Stop-Slop Claude skill, George Kao, ContentBeta, OliviaCal) identifies a handful of shapes that dominate post-GPT-5 / post-Claude-4.5 prose. Each is detailed in @modules/vocabulary-patterns.md (lexical form) and @modules/structural-patterns.md (structural form).
| Pattern | Form | Why it matters | |---------|------|----------------| | Em-dash overuse | — used as rhetorical pause | Most-cited single tell of 2026 | | Plus-sign for "and" | "hooks and skills" in prose | Strong: humans have "and" | | Spatial copula | "lives in", "sits at", "stands as", "boasts" | Inanimate subject with animate verb | | Negative parallelism (contrastive negation) | "Not X but Y", "No X. No Y. Just Z.", "No X, no Y, no Z", "It's not X, it's Y", "It's X, not Y", "Y, not X" | Rhetorical scaffold with no argument | | Contrastive parallelism (affirmative antithesis) | "Less X, more Y", "Where others X, we Y", "Humans propose; machines dispose" | Manufactured punch; same scaffold without the "not" | | Throat-clearing openers | "Here's the thing,", "Look,", "Let that sink in." | Discourse markers signaling nothing | | Three-fragment burst | "Focused. Aligned. Measurable." | Rhythm without information | | Significance cluster | "stands as a testament to", "marks a turning point" | Asserts importance without showing it | | Smart quotes in technical prose | "text" / "text" instead of "text" | Word-processor paste signature | | Semicolon splice | "The system is fast; it scales" | Prose semicolon joining two independent clauses. Rephrase into two sentences unless absolutely necessary | | Loop/cascade vocab | "unpack", "surface" (verb), "a quiet shift" | 2026 systems-theory affectation | | Performative honesty | "to be honest", "Honestly,", "An Honest Review" | Manufactured authenticity | | Sophistication marker | "survey the prior art", "state of the art", "body of work" | Rigor signaling in non-academic prose | | Participial tail | ", highlighting", ", underscoring", ", paving the way for" | Fake-analysis tack-on | | Emphasis crutch | "Full stop.", "Make no mistake", "Read that again." | Manufactured-importance terminator |
Prevention rule: when the slop-detector runs on docs the agent itself just generated (auto-invoked by /doc-generate, /doc-polish, /update-readme, /update-docs, etc.), every match in this table is a hard failure. Fix before write. See modules/remediation-strategies.md § Tier 5 / 2026 for the substitution tables.
slop_score = (tier1_count * 3 + tier2_count * 2 + phrase_count * avg_phrase_score) / word_count * 100| Score | Rating | Action | |-------|--------|--------| | 0-1.0 | Clean | No action needed | | 1.0-2.5 | Light | Spot remediation | | 2.5-5.0 | Moderate | Section rewrite recommended | | 5.0+ | Heavy | Full document review |
Load: @modules/document-economy.md
Sentence cleanliness is necessary, not sufficient. A document can score 0 on slop density and still waste reader time by being too long, lacking a thesis, or repeating everything except the one message that matters.
Score the document on three checks (0-2 each):
bound, or repeat the thesis?
ambient repetition is cut (good)?
Combine sentence-level slop score with document-economy score. Both must pass. See modules/document-economy.md for the full rubric, the reader-time budget table, and a worked example.
Load: @modules/hallucination-detection.md and @modules/stub-and-deferral.md.
Hallucination is not slop: it is wrongness with confident phrasing. Always P0.
Scan for:
identifier, function name, or file path in prose must exist in the codebase.
install / cargo install / npm install must resolve on the relevant registry (slopsquatting defense).
be read by the code.
link or deletion.
"placeholder", "dummy"): each one is deferred work.
todo!(), unimplemented!(),NotImplementedError): defects in any path reachable from a public API.
See modules for detection commands and severity matrix.
Load: @modules/evidence-backed-claims.md
Every quality claim must point to evidence in the same repository. No evidence, delete the claim.
For each claim of "production-ready", "fast", "memory- safe", "scalable", etc., verify the corresponding evidence (CI workflow, benchmark directory, audit markers, etc.) actually exists. The module contains the full claim → required-evidence table and language- specific detection commands.
This step is highest-leverage for crate/library/project READMEs, where feature-list buzzword soup is the most common AI-generated failure mode.
Load: @modules/anti-goals.md
Aggressive de-slopping has its own failure modes.
Before applying any fix surfaced by the prior steps, verify it does not violate the anti-goals:
// SAFETY:,// INVARIANT:, etc.) on unsafe, locked, or contract-bearing code.
explicit major-version-bump decision.
errors.
name even if it is short.
historical changelog entries.
confidence: low findings —surface them for human decision.
When in doubt: leave the match flagged, do not delete.
For systematic project-wide cleanup, run the multi-pass workflow in order. See @modules/cleanup-workflow.md for the full ten-pass methodology and the rationale for the ordering. Summary:
| Pass | Focus | |---|---| | 0 | Pre-slop sweep: secrets, agent configs | | 1 | Surface lint floor (formatter and linter) | | 2 | Hallucination & stubs (modules: hallucination, stub-and-deferral) | | 3 | Identity & voice leaks | | 4 | Comment slop (translation, marketing, banner, deferral) | | 5 | Prose slop (vocabulary, structural, document-economy, and evidence-backed-claims) | | 6 | Code idiom (delegate to language-specific plugins) | | 7 | Architecture (judgment-heavy; see anti-goals) | | 8 | Tests (tautology, mocks, snapshots) | | 9 | README & public docs | | 10 | Establish guardrails (CI, lints, constitution) |
Cardinal rules: one pass per commit; deletion beats rewriting; do not silently apply low-confidence fixes; stop when a pass finds nothing.
Load: @modules/empirical-baseline.md for the 2025-Q1 2026 research baseline that justifies the severity weighting. Headline numbers:
logic/correctness issues, 2.74x more XSS, ~8x more excessive I/O than human-only PRs (CodeRabbit, Dec 2025).
("code smell"), not correctness (Sonar, Q4 2025).
Calibrate the audit accordingly.
When a finding's severity is challenged in review, cite from this module rather than asserting from authority.
For per-finding output that reviewers can accept or reject independently, use the canonical structured format defined in @modules/structured-finding-output.md. Each finding carries file, line, category, severity, confidence, evidence, rationale, fix, and (for high-confidence) diff. Auto-apply policy is set by confidence; never auto-apply confidence: low.
Summary report format (human-readable):
markdown## Slop Detection Report: [filename] **Overall Score**: X.X / 10 (Rating) **Word Count**: N words **Markers Found**: N total ### CRITICAL (P0, must resolve before merge) - Line 8: "As a large language model". IDENTITY LEAK - Line 47: References `Client.connect_with_timeout(...)` — HALLUCINATION (method does not exist; closest match is `Client.connect`) - Line 102: "production-ready" claim with no CI workflow . UNVERIFIED CLAIM ### High-Confidence Markers (vocabulary) - Line 23: "delve into" -> consider: "explore" - Line 45: "rich tapestry" -> consider: "variety" ### Structural Issues - Em dash density: 8/1000 words (HIGH) - Bullet ratio: 72% (ELEVATED) - Sentence length SD: 3.2 words (LOW VARIANCE) ### Phrase Patterns - Line 12: "In today's fast-paced world" (vapid opener) - Line 89: "cannot be overstated" (empty emphasis) - Line 134: "Let's dive into" (self-narration of structure) ### Tier 5 / 2026 Patterns - Line 19: "The skill lives in `plugins/scribe/`" → "is in" (spatial copula, inanimate subject) - Line 27: "hooks + skills" → "hooks and skills" (plus-sign conjunction in prose) - Line 34: "It's not a tool, it's a transformation" → rewrite positively (negative parallelism / contrastive negation) - Line 38: "Less config, more code" → state plainly (contrastive parallelism; keep only if load-bearing) - Line 56: "Here's the thing," → delete (throat-clearing opener) - Line 78: "Focused. Aligned. Measurable." → "Focused, aligned, and measurable." (three-fragment burst) - Line 91: 3 smart quotes outside code blocks (Word-processor paste signature) ### Stub & Deferral - Line 56: bare `// TODO: handle expired tokens` (no tracked issue link) - Line 71: "for now, we recommend" (deferral language) ### Document Economy Score: X / 6 - Thesis-first: 1/2 (thesis present but buried in para 3) - Sentence weight: 1/2 (~65% of sentences earn weight) - Repetition: 2/2 (thesis echoed; ambient repetition cut) ### Recommendations 1. **CRITICAL**: delete line 8 identity leak before merge 2. **CRITICAL**: replace `Client.connect_with_timeout` with `Client.connect(opts)` and update example 3. **CRITICAL**: either add CI + version >= 1.0 to back "production-ready", or delete the claim 4. Replace [specific word] with [alternative] 5. Convert bullet list at line 34-56 to prose 6. Hoist the thesis (line 47) into the lead paragraph 7. Link bare TODOs to tracked issues or delete code path ### Confidence-low findings (require human decision) - Line 89: bullet count of 8 may be appropriate for this enumeration; do not auto-flatten - Line 156: `Manager` suffix may be domain-meaningful; verify before renaming
Per anti-goals.md: surface confidence: low findings in a separate section. Do not silently apply them.
modules/fiction-patterns.md for narrative-specific slop markersmodules/remediation-strategies.md for fix recommendationsAfter detection, invoke Skill(scribe:doc-generator) with the --remediate flag to apply fixes, or manually edit using the report as a guide.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 10,895 | 6,494 | -40% | 1 | 1 | 0% | 1,776 | 5,462 | +208% | 0 | 0 | — |
case-02 | fail→fail | 6,278 | 26,884 | +328% | 1 | 1 | 0% | 944 | 9,892 | +948% | 0 | 0 | — |
case-03 | fail→fail | 21,119 | 4,455 | -79% | 1 | 1 | 0% | 3,468 | 5,389 | +55% | 0 | 0 | — |
case-04 | fail→pass | 5,960 | 13,561 | +128% | 1 | 1 | 0% | 996 | 7,436 | +647% | 0 | 0 | — |
case-05 | fail→fail | 3,398 | 5,475 | +61% | 1 | 1 | 0% | 303 | 6,027 | +1889% | 0 | 0 | — |
case-06 | fail→fail | 3,284 | 7,645 | +133% | 1 | 1 | 0% | 490 | 6,380 | +1202% | 0 | 0 | — |
case-07 | pass→pass | 10,723 | 5,793 | -46% | 1 | 1 | 0% | 1,716 | 6,213 | +262% | 0 | 0 | — |
case-08 | pass→pass | 5,208 | 3,454 | -34% | 1 | 1 | 0% | 429 | 5,655 | +1218% | 0 | 0 | — |
case-09 | fail→pass | 9,412 | 2,643 | -72% | 1 | 1 | 0% | 1,440 | 5,635 | +291% | 0 | 0 | — |
case-10 | pass→pass | 6,212 | 3,461 | -44% | 1 | 1 | 0% | 897 | 5,687 | +534% | 0 | 0 | — |
case-11 | fail→pass | 9,316 | 3,642 | -61% | 1 | 1 | 0% | 1,433 | 5,776 | +303% | 0 | 0 | — |
case-12 | fail→pass | 13,067 | 6,729 | -49% | 1 | 1 | 0% | 1,989 | 6,235 | +213% | 0 | 0 | — |
case-13 | pass→pass | 14,209 | 4,432 | -69% | 1 | 1 | 0% | 2,333 | 5,832 | +150% | 0 | 0 | — |
case-14 | fail→pass | 7,955 | 3,746 | -53% | 1 | 1 | 0% | 1,291 | 5,871 | +355% | 0 | 0 | — |
case-15 | fail→pass | 13,611 | 4,110 | -70% | 1 | 1 | 0% | 2,624 | 6,099 | +132% | 0 | 0 | — |
case-16 | fail→pass | 12,550 | 2,169 | -83% | 1 | 1 | 0% | 1,876 | 5,527 | +195% | 0 | 0 | — |
case-17 | fail→pass | 13,119 | 3,050 | -77% | 1 | 1 | 0% | 1,929 | 5,647 | +193% | 0 | 0 | — |
case-18 | pass→pass | 9,214 | 4,140 | -55% | 1 | 1 | 0% | 1,415 | 5,817 | +311% | 0 | 0 | — |
case-19 | fail→pass | 13,151 | 8,236 | -37% | 1 | 1 | 0% | 2,148 | 6,355 | +196% | 0 | 0 | — |
case-20 | pass→pass | 9,065 | 3,153 | -65% | 1 | 1 | 0% | 1,273 | 5,583 | +339% | 0 | 0 | — |
case-21 | fail→pass | 6,549 | 3,560 | -46% | 1 | 1 | 0% | 901 | 5,775 | +541% | 0 | 0 | — |
case-22 | fail→pass | 12,490 | 5,846 | -53% | 1 | 1 | 0% | 1,765 | 6,109 | +246% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.