Slop lint
Scores copy 0-100 for clusters of AI-writing tells with a deterministic script - genre-aware soft thresholds, span-anchored findings, CI gating via exit codes. Use when the user asks to scan, score, lint, check, or gate text for AI slop or AI-sounding patterns. Detect-only - not for rewriting text, verifying an edit, authorship accusations, or code linting.From its SKILL.md
npx -y skills add Paldom/noslop --skill slop-lintAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.8 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
slop-lint
Purpose
Deterministically measure how much a piece of prose relies on AI-writing tells — negative parallelism, significance inflation, uniform rhythm, formatting reflexes, era-tagged vocabulary, leaked chatbot artifacts — and report span-anchored findings plus a 0-100 cluster score. The script is pure Python stdlib: no network, no LLM, same input → same output. It fixes the observed failure of prompt-only "humanizer" packs: judgments by feel, no numbers, no CI gate, and single-tell overreactions (an em dash is not a verdict).
When to use
- "score / scan / lint / check this text for AI tells or slop"
- "how AI-sounding is this?" — anything wanting a number or a report
- Gating docs or marketing copy in CI before publishing
- Producing the findings a rewrite pass will edit against
When NOT to use
- Rewriting or de-slopping text → use
deslop(it runs this lint first). - Checking whether an edit changed facts/quotes/meaning → use
deslop-verify. - Judging whether a specific person or student used AI — this is a style lint, never an authorship detector; refuse accusation framings.
- Linting code, grammar, or spelling.
Workflow
-
Pick the genre profile:
general(default),academic,technical(docs/READMEs), orcasual. When unsure, say which you chose and why. -
Run the script (span-anchored findings + score):
python3 "${CLAUDE_SKILL_DIR}/scripts/slop_lint.py" FILE... --genre technical python3 "${CLAUDE_SKILL_DIR}/scripts/slop_lint.py" --json < draft.md # machine-readable -
Report to the user: the score and band, which families are active, and the top flagged lines (the report includes line numbers). Always state that the score reflects a cluster of co-occurring tells — never conclude anything from one family, and never frame results as proof of AI authorship.
-
If
confidenceislow(under 150 words / 8 sentences), say the text is too short for a reliable score and report values without a verdict. -
For CI gating, use the exit-code contract:
python3 "${CLAUDE_SKILL_DIR}/scripts/slop_lint.py" docs/*.md --genre technical --fail-above slop-clusterExit 0 = pass, 1 = usage/input error, 2 = a confidently-scored file reached the
--fail-aboveband. Recommend starting with--fail-above heavy-slop(warn-first rollout) before tightening toslop-cluster. -
Sanity check after any script edit:
--self-testmust print all PASS.
Output spec
A report per file: score (0-100), band (clean / mild / slop-cluster /
heavy-slop), confidence, active_families, and per-family value, band,
and hits with line numbers. JSON mode emits the same as schema: 1 JSON.
Bands: <25 clean, 25-49 mild, 50-74 slop-cluster, 75+ heavy-slop. A single
active family caps the score at 24; two cap it at 49 — except leaked chatbot
artifacts (oaicite, "As an AI", utm_source=chatgpt...), which force ≥50
because their false-positive rate is near zero.
Gotchas
- Em dashes are weak evidence. Human baseline is ~3.23/1k words with a huge range, and current models are vendor-suppressed below it. The dash family carries minimal weight; never present dash counts as a conclusion.
- Hedging is only scored when stacked ("may potentially"). Academic prose is legitimately hedge-dense; flagging raw hedges punishes real scholars.
- Fairness: the underlying signals overlap legitimate ESL, formal, and neurodivergent writing styles. The cluster gate and genre profiles exist to protect those writers — do not bypass them, and never report a score as evidence about the writer.
- Thresholds decay. Lexical tells die when vendors patch them (delve is
gone; em dashes are fading). Thresholds and the era lexicon are dated
engineering priors — see
references/thresholds.mdfor the 6-12 month recalibration protocol before trusting them long-term. - Code blocks are stripped before scoring; a file that is mostly code will come back low-confidence. Score the prose, not the repo.
- The heuristics are tuned for English prose (ASCII word tokenization); scores on other languages or heavily accented text are unreliable — say so rather than reporting them as fact.
Pointers
scripts/slop_lint.py— the scorer (--help,--self-test).references/thresholds.md— evidence per family, threshold provenance, era-lexicon sourcing, fairness rationale, recalibration protocol.
What ships with it: 3 files
34.0 KB alongside SKILL.md, 1 of them executable
evals/
- evals.json3.9 KB
references/
- thresholds.md7.5 KB
scripts/
- slop_lint.pyruns22.7 KB