Works for any text type: blog posts, LinkedIn posts, newsletters, ad copy, pitches, reports, emails, essays, term papers. Tuning is German-first — English and other languages are still picked up by the LLM layer, but with a lower hit rate.
Latest version: anti-ai-writer.zip ↓ — direct download from the most recent GitHub release.
Changelog, older versions and source: github.com/e3xler/anti-ai-writer/releases
Three ways to use the skill. Pick the one that fits your setup.
anti-ki-review.skill. Cowork picks it up and asks whether to install — confirm.If the double-click does nothing: open Cowork → Settings → Skills / Plugins → "Install from file" → pick the .skill file.
Claude Code doesn't have an install command for individual skills — you unzip the .skill file directly into your personal skills directory:
unzip anti-ki-review.skill -d ~/.claude/skills/
The skill is available the next time you start Claude Code (in recent versions even immediately, without a restart).
Background: .skill files are individual skills. If you want to bundle multiple skills, MCPs and commands, the .plugin format is the right one — that goes through plugin marketplaces. For this single skill, unzipping directly is enough.
The two core functions — watermark cleaner and style linter — also run as plain Python scripts. No dependencies, Python 3 is enough.
# Detect and remove hidden Unicode characters
python3 source/scripts/watermark_cleaner.py mytext.md --mode clean_basic --output clean.md
# Scan for stylistic AI patterns
python3 source/scripts/kadenz_linter.py mytext.md
Both return structured JSON.
In Claude, paste the text (or attach it as a file) and use one of the following triggers:
"Does this sound like AI?"
"Review this text for AI patterns."
"Make this more human."
"Strip hidden characters, kill the AI voice."
The skill activates automatically as soon as one of these triggers shows up. Nothing to start manually.
When: You want to know whether a text sounds like AI before changing anything.
Triggers:
What you get: A findings report with a verdict (reads as human / needs work / clearly sounds like AI), a list of every pattern found with quotes and fix suggestions — the original text stays untouched.
When: You want both — to know what's off and see a cleaner version.
Triggers:
What you get: First the report, then a revised version of the text. Spots that can't be fixed without domain knowledge get marked with [?] instead of invented.
When: You already know the text is AI-heavy and just want the clean version.
Triggers:
What you get: The rewritten version directly. If anything is unclear, a short note comes with it.
Until v1.1.0, the skill mostly removed AI patterns. Triplets, filler phrases, puffery. Since v1.1.0 it also adds in what makes human prose feel human — the quirks LLMs systematically skip.
Four techniques work together.
LLM output stays suspiciously even in the 12–20-word corridor. Humans swing hard. The skill drops a three-word sentence next to a 28-word one — not as a scheme, but where the content carries it.
Rule of thumb: in a 100-word paragraph, at least one sentence under 5 words, one over 25. If everything sits in the same 10-word band, it reads AI.
Instead of the most statistically likely verb or noun, a rarer, more precise alternative — when the meaning still fits. The German linter ships with substitution tables; the principle works in any language.
| Expected (DE) | Less expected |
|---|---|
| verbessern | schleifen, schärfen, zuspitzen |
| beeinflussen | verschieben, biegen, kippen |
| reduzieren | abschmelzen, abräumen, eindampfen |
| Problem | Knoten, Bruchstelle, Reibung |
| Veränderung | Ruck, Schwenk, Drift |
Caveat: only swap when the meaning actually fits, or you shift the claim. And register check: „zugespitzt" works in a LinkedIn story; in a financial report it sounds wrong. Density: 2–4 unusual choices per 200 words is enough.
Half-sentences as standalone claims. Self-correction mid-sentence. Parenthetical asides. The occasional conjunction-led opener — the thing your teacher used to ban.
BAD: "The concept doesn't convince because it's too abstract."
FIX: "The concept doesn't convince. Too abstract."
BAD: "The migration was complex and took four weeks."
FIX: "The migration was complex (more complex than the plan
had it) and took four weeks."
One per paragraph, two at the most. Past that, it becomes a new pattern — and patterns are what you wanted out.
Instead of smoothing word by word: swap whole phrase blocks that LLMs lean on. Nominal style → verbal style. Reorder where it helps.
| LLM-typical | Substitute with |
|---|---|
| "in terms of" / "with regard to" | "about", "for", or drop |
| "plays a role in" | make it concrete, or "shapes", "affects" |
| "in addition to this" | "also", "and" |
| "a wide variety of" | name a number, or "many" |
| "essentially" | usually drop |
| "it can be noted that" | drop, say it directly |
BAD: "Against the backdrop of this development, the new platform
plays a central role in the transformation."
FIX: "The new platform carries the rebuild."
This technique shifts the statistical signature of the text more than any other. It's still not a detector bypass — AI detectors work on different signals (perplexity, burstiness, statistical classification), and stylistic smoothing guarantees nothing there.
The skill handles arbitrarily long texts, but for very long documents (over ~5,000 words) it's worth working chapter by chapter. Three reasons:
Step 1 — Prep (once, whole document)
Upload the entire document once as a file and say:
"Only Step 0 please — strip hidden characters from the entire document. No style analysis. Give me the clean version back."
This is deterministic and fast. You get a version without zero-width spaces, BOM, NBSPs etc. before you go into content work. Save this version as your master.
Step 2 — Chapter-wise style work
Open a new chat per chapter. That way the context window per chapter stays maximally available.
In each chapter chat:
[?]."[?] spots, either supply the missing info or rewrite the spot yourself.Step 3 — Final pass (whole document)
Once every chapter is revised, upload the full master once more and say:
"Final check — anywhere chapter borders become visible? Tonal breaks, repeated phrasing, inconsistent technical terms?"
The skill then scans for the transition issues that chapter-wise work can introduce.
| Document length | Approach |
|---|---|
| Under 1,000 words | In one pass |
| 1,000–5,000 words | Optional split, fine in one pass |
| 5,000–20,000 words | Chapter by chapter, one chat per chapter |
| Over 20,000 words | Chapter by chapter, plus regular "/clear" inside chapter chats or close and reopen when full |
[3]) and Markdown headings unchanged."The skill is good for: you wrote your paper yourself, or you developed the argument yourself, and you want to clean up the spots where your language reads too clichéd, too generic, or too "AI-typical" — whether that came from AI help or just from academic writing habits.
The skill is not good for: submitting a fully AI-generated paper as your "own". First, the skill can't hide that — AI detectors lean on perplexity, burstiness and statistical classification, and stylistic smoothing only goes so far. Second, at most universities this is academic misconduct with clear consequences. If that's what you're looking for, this skill is the wrong tool, and the skill itself will say so in the chat.
Practical recommendation: be transparent with your supervisor about how and where you used AI. At many universities today this is explicitly allowed if it's documented.
Does the skill work for English? Limited. The structural patterns (rule of three, negation-affirmation, puffery) are picked up by the LLM layer across languages. The mechanical linter and the vocabulary list are German-tuned, though — so English texts get fewer automatic hits.
The rewrite is too short / too long. What now? Say so in a follow-up: "The rewrite is too short, keep more of the original argument." Or vice versa. The skill follows the original, but if the source contains a lot of phrase-packaging, the rewrite is naturally shorter.
What do the [?] markers in the rewrite mean?
Spots where the skill couldn't decide without your knowledge how to phrase a concrete claim. Example: "plays a decisive role in digitalisation" becomes [? Which role exactly? A number or a concrete effect would help here.]. You fill those spots with real substance — the skill never invents.
How do I know if my text actually sounds "human"? Read-aloud test. Read the rewrite aloud. If you stumble or something sounds "like ad copy", the rewrite wasn't aggressive enough — say so in the follow-up.
What happens to Markdown structures (headings, lists, code)? The skill keeps them by default. If you're unsure, point it out explicitly: "Keep all Markdown structures unchanged, only rewrite the prose."
Can I check multiple texts at once? One text per chat is recommended — otherwise the findings mix. For batch processing many short texts: open a new chat per text.
Latest version, changelog and source: github.com/e3xler/anti-ai-writer
License: MIT.
No spam, unsubscribe at any time
