Wikipedia editors have a problem. People keep dumping LLM output into articles, and it reads badly in a specific, recognizable way. So WikiProject AI Cleanup wrote up a page cataloguing the tells: the inflated importance, the forced triads, the "not just X, it's Y" construction, the paragraph that ends by assuring you the future looks bright.
Siqi Chen looked at that page and had an idea that is obvious in retrospect. If someone has already collated a detailed list of how AI writing gives itself away, you can hand that list to an LLM and tell it not to do any of it. He asked Claude Code to read the article and build a skill from it.
The result is blader/humanizer, now sitting at roughly 40k stars.
It is a Markdown file
This is the part that surprises people. Humanizer is a SKILL.md file. There is no package, no model, no API, no dependency tree. It is instructions.
That sounds like a limitation and is actually the reason it spread. Because it is plain Markdown following the Agent Skills format, it runs on anything that supports skills. And if your tool does not support skills, you can open the file and paste it into a system prompt. Distribution problem solved by not having one.
How it works
Humanizer encodes 35 patterns drawn from Wikipedia's "Signs of AI writing" page. Each one is a named failure mode with a before and after example, which matters more than it sounds: the model is not being told "write naturally," which is useless advice. It is being told "you wrote 'serves as a testament to' and here is the specific replacement."
The run is two passes. It rewrites first, without treating the original paragraph structure as fixed. Then it checks that draft against the 35 patterns and against the original claims, and rewrites whatever is still wrong. When you paste text in, it shows you both stages plus a short critique of what still sounds artificial, which is genuinely useful for learning your own tells.
The patterns fall into five groups:
Content. Inflated importance, name-dropping, vague attribution ("experts believe"), the formulaic "despite challenges, it continues to thrive" arc.
Language and grammar. Overused AI vocabulary (testament, landscape, showcasing, delve-adjacent stuff), avoiding plain "is" and "has" in favor of "serves as" and "boasts," the not-X-but-Y construction, forced groups of three, fake "from X to Y" ranges.
Style. Em dashes, excessive bold, lists where prose would do, title case headings, emojis, curly quotes, hyphen pileups like "cross-functional, data-driven, client-facing," manufactured profundity ("at its core, what matters is"), and fake-candid openings ("Honestly? It depends").
Chatbot residue. "I hope this helps," knowledge-cutoff disclaimers, "Great question!"
Filler. "In order to" instead of "to." Stacked hedges like "could potentially possibly." Endings that gesture vaguely at a bright future.
A quick illustration of the shape of the fix:
Before: The migration serves as a testament to our team's commitment to scalability, reliability, and performance — proving that with the right architecture, the future looks bright.
After: The migration cut p99 latency from 1.2s to 340ms. We still have two services on the old queue.
Same topic. One sentence says nothing and one says something.
Two design decisions deserve credit. First, there is a hard no-fabrication rule, added in v2.9.0. Names, numbers, dates, quotes, and citations have to come from the source or from you. If a detail is missing, it is supposed to ask rather than invent one, which is exactly the failure mode you would expect from a tool whose job is to make text sound more lived-in and specific. Second, if you paste in two or three paragraphs of your own writing as a sample, it follows your rhythm and quirks instead of its default style rules. That is the difference between "sounds human" and "sounds like you."
Pointed at a file, it only touches prose. Code blocks, data, frontmatter, and link targets stay put.
Does it work with Claude?
Yes, three different ways, and the repo has clearly been maintained with Claude in mind.
Claude Code, via the skills CLI:
npx skills add blader/humanizer --global
Drop --global to install into the current project only.
Claude Code as a plugin (2.1.142 or newer):
/plugin marketplace add blader/humanizer
/plugin install humanizer@humanizer
Invoke it with /humanizer:humanizer.
Claude Desktop: download the repo as a ZIP and upload it as a skill. This one was broken for a while. The repo used a symlink for the plugin path, and Claude Desktop could not handle it in the source archive. It was fixed twice, first with a dedicated release asset in v2.11.1, then properly in v2.11.2 by dropping the symlink entirely once Claude Code began loading the root SKILL.md directly. If you tried this months ago and it failed, try again.
Once installed, either invocation style works:
/humanizer
[paste your text here]
Or just ask for it in plain language, including pointing at a path: "Humanize the prose in docs/launch-post.md."
Does it work with other agents?
Also yes, and this is where the "it's just Markdown" decision pays off. The npx skills CLI targets 40-plus agents, and Humanizer is a normal skill package, so it installs to any of them:
npx skills add blader/humanizer --global --agent codex
npx skills add blader/humanizer --global --agent cursor --agent opencode
npx skills add blader/humanizer --global --agent '*'
Common targets and where the files land:
| Agent |
--agent flag |
Global path |
|---|---|---|
| Claude Code | claude-code |
~/.claude/skills/ |
| Codex | codex |
~/.codex/skills/ |
| Cursor | cursor |
~/.cursor/skills/ |
| Gemini CLI | gemini-cli |
~/.gemini/skills/ |
| GitHub Copilot | github-copilot |
~/.copilot/skills/ |
| OpenCode | opencode |
~/.opencode/skills/ |
| Amp | amp |
~/.config/agents/skills/ |
| Cline | cline |
~/.cline/skills/ |
| Windsurf | windsurf |
~/.windsurf/skills/ |
Kiro, Qwen Code, Roo, Trae, Goose, Continue, and others are supported too. Remember to reload skills in the target agent afterward.
For anything not on that list, the manual path always works: copy SKILL.md into the agent's skill folder. And for a plain chat interface with no skill support at all, open SKILL.md, copy the contents, and paste it as your system prompt or as the preamble to your request. You lose the slash command and the file-editing mode. The 35 patterns still apply.
The honest caveat on cross-agent use: the skill is a prompt, so results depend on how well the underlying model follows a long instruction set. A frontier model with good instruction-following will apply all 35 patterns and self-critique properly. A smaller local model may catch the obvious vocabulary swaps and quietly skip the harder judgment calls. Same file, different mileage.
What it does not do
It is not an AI-detector defeat button. People reach for it that way and the framing is wrong in both directions. Detectors are unreliable enough that they flag human writing regularly, so "passing" one proves little. And Humanizer's actual job is removing bad writing habits, not adversarially targeting a classifier. If you are trying to sneak past an academic integrity check, this is the wrong tool and a bad plan. If you are trying to make a launch post not read like a launch post, it is the right tool.
Some patterns are opinions, not rules.
It cannot add substance.
Overcorrection is real.
Worth using?
For a Markdown file with an MIT license, the cost of trying it is close to zero, and it is the rare tool where reading the source teaches you something even if you never install it. The 35 patterns are a decent editing checklist on their own.
The realistic workflow is not "generate with AI, run Humanizer, ship." It is: write the draft, make sure it contains real specifics only you have, then run Humanizer to strip the stylistic residue, then read the output yourself. It is a de-slopping pass, not a ghostwriter.
Top comments (0)