# Deslop

> Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, passive voice, negative parallelisms, filler phrases, self-referential meta-commentary, and references to context the reader never received.

- Skill: `profsynapse/deslop` (Agent Skill, multi-file: 75 files)
- Install (CLI): `npx skillmds@latest add profsynapse/deslop`
- Raw SKILL.md: https://api.skillmd.com/api/skills/profsynapse/deslop/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: ProfSynapse (https://skillmd.com/u/profsynapse)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/profsynapse/deslop

---


# Deslop: remove AI writing tells

Context: you are a writing editor that identifies and removes signs of
AI-generated text. The pattern catalog comes from Wikipedia's "Signs of AI
writing" page, maintained by WikiProject AI Cleanup. Detail lives in the folders
below and loads only when you take that path.

## Workflow

Follow `protocols/humanize.md` for the full procedure. The spine:

1. **Determine the mode**: pasted text, file, or embedded
   (`references/invocation-modes.md`). Ask before rewriting a file the user may
   have only meant to show you.
2. **Calibrate the voice** (`references/voice.md`). A user-supplied writing
   sample outranks every style rule in this skill, including the dash rule. Decide
   whether personality applies: yes for essays and opinion, no for encyclopedic,
   technical, legal, or reference text.
3. **Run the report. It tells you which patterns fired and loads the guidance
   for exactly those**, so this is the only reading step you need.
   ```
   python3 scripts/check_prose.py <source>
   python3 scripts/check_prose.py <source> --json > audit.json
   ```
   Every pattern comes back PASS, WARN, FAIL, or SKIP, followed by the guard, fix,
   and trap for each one that fired. SKIP means no mechanical signal exists, so
   read the source yourself for patterns 11, 22, 24, 25, 30, and 38 regardless of
   what the report says. Add `--ste` only for technical documentation
   (`references/ste.md`); it overrules part of this rubric and is wrong for prose
   with a voice.
4. **Adjudicate every candidate against `references/false-positives.md` before
   editing.** A candidate is located, not decided. Polish is not AI, an isolated
   tell is not a cluster, and watched phrases inside quotations, titles, or proper
   names are secondhand text. Replace every `FILL_ME` in the label with a verdict
   from `references/audit-rubric.md`. NEVER apply a candidate as an automatic fix.
5. **Show the findings and wait for approval.** Pattern, span, verdict, and a
   one-line reason per row. The user may strike any row, which logs it as `keep`
   with their reason instead of yours. Skip this stop in embedded mode only.
6. **Draft the rewrite.** Preserve every claim in the source; depth may vary,
   information may not be lost.
7. **Audit.** Ask what still reads as AI generated, whether the draft states any
   fact, name, number, date, or citation absent from the source, and whether a
   reader holding only the draft can identify every reference in it. NEVER invent
   a specific to fill a gap a cut created: ask the user, or write the plain
   version without it (`references/no-fabrication.md`).
8. **Finalize.** The rewrite MUST contain no em or en dashes unless step 2
   sanctioned them.
9. **Run the gates before delivering.** A non-zero exit is a stop:
   ```
   python3 scripts/check_output.py <final.md>   # add --allow-dashes per step 2
   python3 scripts/check_audit.py audit.json    # fails while any FILL_ME remains
   ```
10. **Show the measured pass**, then a line per change saying what and why. Skip
    in embedded mode. A positive delta means the rewrite introduced a tell.
    ```
    python3 scripts/compare_prose.py <source> <final.md>
    ```
11. **Deliver per the mode** from step 1, and nothing more than the mode calls for.

## Map

- `references/patterns/` the catalog of numbered tells with before/after
  examples: `content.md` (1-6), `language.md` (7-13), `style.md` (14-19, 26),
  `communication.md` (20-22), `filler.md` (23-25), `rhetoric.md` (27-39).
- `references/false-positives.md` what not to flag, and the signs of human
  writing worth protecting. Read before editing.
- `references/no-fabrication.md` the rule that the rewrite may add no fact the
  source lacks.
- `references/voice.md` calibrating to a writing sample, and when personality
  belongs.
- `references/invocation-modes.md` what to deliver for each way the skill is
  called.
- `references/audit-rubric.md` the verdict rubric and the audit label schema.
- `references/ste.md` the opt-in ASD-STE100 profile: what it checks, which
  patterns it overrules, and why it is off by default.
- `references/prose-metrics.md` what the metrics mean, and why several famous
  ones are deliberately absent. Read before trusting a number.
- `references/maintenance.md` rules for editing this skill, and its provenance.
- `protocols/fixes/NN-*.md` guard, fix, and trap for one pattern each. The report
  loads the ones you need; `scripts/brief.py` fetches them on demand.
- `protocols/humanize.md` the main loop. `protocols/self-refine.md` improving
  this skill after a session.
- `scripts/` CLI checks. Run them, do not reimplement: `check_prose.py` for the
  per-pattern rubric and metrics, `compare_prose.py` for the before and after of
  one editing pass, `check_output.py` for the mechanical gate, `check_ste.py` for
  the opt-in ASD-STE100 profile, `check_audit.py` for label shape, `brief.py` to
  load guidance for given patterns, `catalog.py` to inspect the parsed watch
  lists, `check_skill.py` for this skill's own structure, `package.py` to build
  and verify the `.skill` artifact.

No phrase list lives in code. `check_prose.py` reads the "Words to watch" lines
out of the catalog at runtime, so editing the prose changes detection. What the
scripts locate is never what they decide.

## Refine

At the end of a session that used this skill, run `protocols/self-refine.md` and
record the change in `refinement-log.md`.

## Source and attribution

The pattern catalog is adapted from
[blader/humanizer](https://github.com/blader/humanizer) v2.9.1 (MIT), which in
turn draws on
[Wikipedia: Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing),
maintained by WikiProject AI Cleanup. The pattern text is substantially theirs;
the structure, protocols, and scripts here are not. See `references/maintenance.md`
before publishing this anywhere.

Key insight from Wikipedia: "LLMs use statistical algorithms to guess what should
come next. The result tends toward the most statistically likely result that
applies to the widest variety of cases."

