unslopify
Skill0 starsChanged 3 months agoMITView on GitHub
Remove AI-writing patterns from text. Two modes. Always-on: apply the writing rules to every reply in the conversation. Rewrite: audit a draft with the unslopify CLI, rewrite it against the named findings, check phrasing uniqueness, then verify with a fresh-context judge and loop until the audit passes. Use when the user says unslopify, de-slop, humanize, "make this sound less like AI", or asks for always-on natural writing.
- Installs packages
3 other projects use a version of this.
Adopted by
Most recently taken up by
- abdurshd/skillstheir own version, first seen Oct 13, 2026
- jscraik/Agent-Skillstheir own version, first seen Sep 27, 2026
- shanev/skillstheir own version, first seen Jul 15, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- shanev/skills★ 75same name
- jscraik/Agent-Skills★ 9same name
- abdurshd/skills★ 2same 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.
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. 0 are common, 14 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
14
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
Run unslopify types for the rubric: four categories (formula, substance, wording, structure), each with named types, one-line definitions, …
- Very specific: line 28
When the user asks for unslopify on every reply, follow the writing rules below in everything you produce for the rest of the session: chat …
- Distinctive: line 32
Start where the answer starts.
- Distinctive: line 36
Prefer is, are, and has over ornate stand-in verbs (the serves-as and stands-as family).
- Distinctive: line 38
No manufactured rhythm: no not-just-X-but-Y frames, no slogan fragments, no triads for cadence, no colon-and-semicolon drumbeats, no em …
- Distinctive: line 41
No AI vocabulary when a plain word works.
- Distinctive: line 48
Do not inject personality there.
- Distinctive: line 66
Every gate either passes or sends you back to the rewrite step.
- Very specific: line 69
Preflight: Run unslopify --version. If the command is missing, install it from PyPI, and if you cannot install, STOP and tell the user: …
- Distinctive: line 73
Never substitute your own judgment for the CLI gates and report the pipeline as run.
- Distinctive: line 111
Do not tag types to satisfy a checklist.
- Distinctive: line 125
Uniqueness: Check the draft against the user's phrase bank:
- Distinctive: line 135
Fresh judge: Run the harness-neutral judge script from this skill's directory:
- Distinctive: line 173
Do not delete content to make a finding disappear.
- Distinctive: line 175
Do not swap one stock phrase for another stock phrase.
- Distinctive: line 177
Do not normalize the author's voice away.
- Distinctive: line 180
Do not run the judge in your own context.
“Common” is measured: kept by at least 6 in 10 of the 3 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
unslopify
Text is clean when a careful reader cannot tell a model touched it. That takes two things: removing the named failure patterns, and not replacing them with a new house style. The pipeline below does both.
Run unslopify types for the rubric: four categories (formula, substance,
wording, structure), each with named types, one-line definitions, and
examples. The CLI comes from PyPI (pip install unslopify) or runs from a
checkout as python -m unslopify.cli.
Mode 1: always-on
When the user asks for unslopify on every reply, follow the writing rules below in everything you produce for the rest of the session: chat replies, documents, commit messages, comments.
- Start where the answer starts. No scene-setting, no restating the question, no announcing what you are about to say.
- Concrete subjects and verbs. Name what changed, why, and the evidence. A number, a source, or an observable result beats an adjective.
- Prefer is, are, and has over ornate stand-in verbs (the serves-as and stands-as family).
- No manufactured rhythm: no not-just-X-but-Y frames, no slogan fragments, no triads for cadence, no colon-and-semicolon drumbeats, no em dashes.
- No AI vocabulary when a plain word works. If the word would look odd in a text message to a colleague, pick the plain one.
- Vary sentence length. Uniform sentences read as generated even when every word is clean.
- End on the last real point. No summary paragraph that re-says the piece, no trailing offers.
- Neutral register is correct for code, config, and reference material. Do not inject personality there.
These rules are contextual signals, not banned tokens. One isolated
instance is fine; conspicuous, repeated, or unearned patterns are not.
Em dashes and en dashes are the exception. They always fail. One
instance is enough. A quoted prompt is not a waiver. The CLI treats
dash as a hard mechanic: disable=dash, disable-line, file
skip, --ignore-quotes, and config disable = ["dash"] do not
turn it off.
Mode 2: rewrite a draft
Input: pasted text or a file path. Output: the clean text plus a short log of what changed. Work in a scratch directory; never edit the user's file in place unless asked.
Pipeline
Every gate either passes or sends you back to the rewrite step. Do not skip a gate because the draft "looks clean".
- Preflight. Run
unslopify --version. If the command is missing, install it from PyPI, and if you cannot install, STOP and tell the user: "the unslopify CLI is not available, so the audit and uniqueness gates cannot run; install it with pip install unslopify". Never substitute your own judgment for the CLI gates and report the pipeline as run. Declare the other degraded modes too, rather than hiding them. Step 5 runs the judge as a separate CLI process, so it needs no subagent support; only if no judge CLI exists AND your harness cannot spawn a fresh-context subagent, say so and skip step 5 explicitly. If the environment is ephemeral with no persistent home directory, say the phrase bank has no memory between sessions. Audit. Save the draft as
DRAFT.mdand run:unslopify DRAFT.md --briefThe brief names each finding with its line, span, problem, and direction. Mechanical problems (dashes, curly quotes, long sentences, repeated phrases) are listed with the findings.
Rewrite. Fix every finding by rewriting, not deleting. The rewrite covers everything the original covers: same claims, same qualifications, same paragraph count unless structure itself was the finding. If the user supplied a writing sample, build a voice profile first (
unslopify.voice.profile_from_sample) and aim the rewrite at those numbers.Plain-language rules for the rewrite itself:
- One main point per sentence, with an active subject and verb.
- Standard capitalization and spelling. Never inject informality, slang, or errors to sound human; that is its own tell.
- Quoted material and citations are evidence. Preserve them exactly, except em dashes and en dashes: those characters cannot stay, even inside a quote. Use an ASCII span or a paraphrase.
- Say the direct thing instead of a template. If you notice the same sentence shape appearing across your rewrites, that shape is a house formula and it dies here.
- Name a failure type in your notes only when it clarifies the edit. Do not tag types to satisfy a checklist.
- The rewrite should not be longer than the original. Padding added to satisfy a gate is a new finding, not a fix.
Record every edit you make as a RewriteEvent (line, rule or type id, before, after).
mechanical_rewritealready logs its own events; yours join the same list, so the final report shows exactly what changed and why.- Judgment pass. The CLI cannot see everything. Reread the rewrite for the judgment-only types: meaning loss (a sentence compressed until the point is gone), unexplained jargon the regexes missed, synthetic balance, and uniform sentence rhythm. Fix what you find.
Uniqueness. Check the draft against the user's phrase bank:
unslopify DRAFT.md --bank --id <doc-id>Any 8-word run shared with a previously banked document fails, and so does any 4-word phrase repeated inside this draft. Rephrase the flagged spans in different words, not reshuffled ones.
Fresh judge. Run the harness-neutral judge script from this skill's directory:
python3 <skill-dir>/scripts/fresh_judge.py DRAFT.mdIt launches a separate headless agent-CLI process (first found of
UNSLOPIFY_JUDGE_CMD,claude -p --model claude-opus-5-5,codex exec -m gpt-6.1-sol,cursor-agent -p). The default Claude judge uses Opus 5.5 (claude-opus-5-5), and the Codex fallback uses GPT-6.1 Sol (gpt-6.1-sol). Explicit command overrides take precedence. The judge sees only the rewritten text, never your working notes. It prints a JudgeVerdict JSON (approved, reasons, quoted_spans). Exit 0 is approved. Exit 1 means spans were quoted: go back to step 2 with those quotes as new findings. Exit 2 means no judge CLI exists on this machine; only then fall back to your harness's own fresh-context subagent with the same instruction ("Quote every span that reads as AI-generated, stock, or evasive, and say why. Approve only if nothing needs quoting."), and if the harness cannot spawn one either, declare step 5 skipped. Exit 3 means the judge produced unusable output; rerun it once before falling back. Never judge the text in your own context: a judge that watched you rewrite will approve what you approved.Final gate.
unslopify DRAFT.mdmust print PASS. Then, if the user keeps a phrase bank, commit the finished document so future drafts cannot reuse its phrasing:unslopify commit DRAFT.md --id <doc-id>- Deliver. Return the clean text, then a log: findings fixed by type name, judge verdict, and the final PASS line. Keep the log to a few lines; the text is the deliverable.
What not to do
- Do not delete content to make a finding disappear. A missing claim is a worse failure than a flagged one.
- Do not swap one stock phrase for another stock phrase. The uniqueness gate exists because rewrites drift toward new stamps.
- Do not normalize the author's voice away. Contractions, first person, short fragments, and mild informality are the author's, not yours to remove.
- Do not run the judge in your own context. A judge that watched you rewrite will approve what you approved.
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.

