Remove AI-sounding patterns from content.
Detect and remove AI-generated writing patterns through targeted, minimal edits. This skill scans for cliches, passive voice, structural monotony, and meta-commentary, then proposes specific replacements -- always targeted, minimal edits. Human imperfections (run-ons, fragments, loose punctuation) are features, not bugs; preserve them.
| Signal | Load These Files | Why |
|---|---|---|
| AI Cliches | cliche-replacements.md | "delve", "leverage", "utilize", "robust" |
| News AI Tells | detection-patterns.md | "worth sitting with", "consequences extend beyond", "that's the kind of", dramatic rhythm |
| Copula Avoidance | detection-patterns.md | "serves as a", "boasts a", "features a" |
| Passive Voice | detection-patterns.md | "was done by", "has been", "will be" |
| Structural | detection-rules.md | Monotonous sentence lengths, excessive lists, boldface overuse, dramatic AI rhythm |
| Meta-commentary | cliche-replacements.md | "In this article", "Let me explain", "As we've discussed" |
| Dangling -ing | detection-patterns.md | "highlighting its importance", "underscoring the significance" |
| Puffery/Legacy | detection-patterns.md | "testament to", "indelible mark", "enduring legacy" |
| Generic Closers | detection-patterns.md | "future looks bright", "continues to evolve" |
| Curly Quotes | detection-patterns.md | \u201C \u201D \u2018 \u2019 (ChatGPT-specific) |
| Dash-as-Separator | detection-patterns.md | -- sentence joiner, — em-dash in prose (not CLI flags) |
| Novelty Inflation | detection-patterns.md | "nobody's naming", "what nobody tells you", engagement bait |
| Synonym Cycling | detection-patterns.md | 3+ synonyms for same concept in one paragraph |
| False Concession | detection-patterns.md | "While X is impressive, Y remains" (both vague) |
| Emotional Flatline | detection-patterns.md | "What surprised me most", "I was fascinated" |
Goal: Read file, identify skip zones, scan for AI patterns.
Step 1: Read and classify the file
Read the target file. Identify file type (blog post, docs, README). Skip frontmatter (YAML between --- markers), code blocks, inline code, and blockquotes -- edits to these zones corrupt structure and would corrupt structure.
Auto-detect the content profile (linkedin, blog, technical-blog, investor-email, docs, casual) per references/context-profiles.md. Apply profile-specific tolerance rules throughout the scan.
If a voice profile is specified, also check voice-specific anti-patterns alongside the standard categories.
Step 2: Scan for issues by category
| Category | What to Find | Reference |
|---|---|---|
| AI Cliches | "delve", "leverage", "utilize", "robust" | references/cliche-replacements.md |
| News AI Tells | "worth sitting with", "consequences extend beyond", "that's the kind of", dramatic rhythm | references/detection-patterns.md |
| Copula Avoidance | "serves as a", "boasts a", "features a" | references/detection-patterns.md |
| Passive Voice | "was done by", "has been", "will be" | references/detection-patterns.md |
| Structural | Monotonous sentence lengths, excessive lists, boldface overuse, dramatic AI rhythm | references/detection-rules.md |
| Meta-commentary | "In this article", "Let me explain", "As we've discussed" | references/cliche-replacements.md |
| Dangling -ing | "highlighting its importance", "underscoring the significance" | references/detection-patterns.md |
| Puffery/Legacy | "testament to", "indelible mark", "enduring legacy" | references/detection-patterns.md |
| Generic Closers | "future looks bright", "continues to evolve" | references/detection-patterns.md |
| Curly Quotes | \u201C \u201D \u2018 \u2019 (ChatGPT-specific) | references/detection-patterns.md |
| Dash-as-Separator | -- sentence joiner, — em-dash in prose (not CLI flags) | references/detection-patterns.md |
| Novelty Inflation | "nobody's naming", "what nobody tells you", engagement bait | references/detection-patterns.md |
| Synonym Cycling | 3+ synonyms for same concept in one paragraph | references/detection-patterns.md |
| False Concession | "While X is impressive, Y remains" (both vague) | references/detection-patterns.md |
| Emotional Flatline | "What surprised me most", "I was fascinated" | references/detection-patterns.md |
Some flagged words are appropriate in technical contexts. "Leverage" in "Use a lever to leverage mechanical advantage" is correct -- only flag words when used as corporate-speak, not in their literal or technical sense.
Step 3: Count and classify issues
Record each issue with line number, category, and severity weight:
Gate: Issues documented with line numbers and categories. Total severity score calculated. Proceed only when gate passes.
Goal: Determine editing approach based on severity.
Step 1: Choose approach by issue count
| Severity Score | Approach |
|---|---|
| 0-5 | Report "Content appears natural". Stop. |
| 6-15 | Apply targeted fixes |
| 16-30 | Group by paragraph, fix systematically |
| 30+ | Paragraph-by-paragraph review |
Step 1b: Rewrite-vs-patch threshold -- If severity score exceeds 30 AND 3+ distinct pattern categories are flagged AND structural rhythm is uniform, advise the user to consider a full rewrite rather than patching individual issues. Patching high-density AI text often introduces new patterns while fixing old ones.
Step 2: Prioritize fixes
Every fix must be the minimum change needed. Multiple small edits beat one big rewrite because rewrites lose author voice and may introduce new AI patterns. Every detected issue must include a specific replacement -- reporting "Contains AI-sounding language" without a concrete fix is useless.
Step 3: Wabi-sabi check
Before proposing any fix, ask: "Would removing this imperfection make it sound MORE robotic?" If yes, preserve it. Preserve:
Natural informal language like "So basically" in a casual blog post is spoken rhythm, not an AI pattern. Only remove patterns that are AI-generated, not patterns that are merely informal.
Gate: Approach selected. Fixes prioritized. Wabi-sabi exceptions noted. Proceed only when gate passes.
Goal: Generate edit report, get confirmation, apply changes.
Step 1: Generate the edit report
Show before/after for every modification with the reason -- always show before/after for every modification with the reason.
=================================================================
ANTI-AI EDIT: [filename]
=================================================================
ISSUES FOUND: [total]
AI Cliches: [count]
Passive Voice: [count]
Structural: [count]
Meta-commentary: [count]
CHANGES:
Line [N]:
- "[original text]"
+ "[replacement text]"
Reason: [specific explanation]
[Continue for all changes]
=================================================================
PREVIEW
=================================================================
[Show complete edited content]
=================================================================
Apply changes? [Waiting for confirmation]
=================================================================
Style edits must preserve what the content says. When fixing "This solution robustly handles edge cases", write "This solution handles edge cases reliably" -- fix the style word, keep the technical meaning intact. If removing a flagged word would lose meaningful information, rephrase rather than delete.
Step 2: Apply changes after confirmation
Use the Edit tool for each change. Verify each edit applied correctly.
Gate: All changes applied. File re-read to confirm no corruption. Proceed only when gate passes.
Goal: Confirm edits preserved meaning and improved naturalness.
Step 1: Re-read edited file completely
Step 2: Verify no meaning was lost or changed
Step 3: Verify no new AI patterns were introduced by edits
Step 4: Confirm frontmatter and code blocks are untouched
Step 5: Report final summary
## Edit Summary
File: [path]
Issues Found: [count]
Issues Fixed: [count]
Issues Skipped: [count with reasons]
Meaning Preserved: Yes/No
Gate: All verification steps pass. Edit is complete.
User says: "De-AI this blog post" Actions:
User says: "Check this for AI patterns" Actions:
Cause: Path incorrect or file does not exist Solution:
ls -la [path]Glob **/*.mdCause: Content is already natural, or scanner missed patterns Solution:
Cause: Edit tool matched content inside YAML frontmatter Solution:
git checkout -- [file]${CLAUDE_SKILL_DIR}/references/cliche-replacements.md: Complete list of 80+ AI phrases with replacements${CLAUDE_SKILL_DIR}/references/detection-patterns.md: Regex patterns for automated detection${CLAUDE_SKILL_DIR}/references/detection-rules.md: Inline detection rules and structural checks${CLAUDE_SKILL_DIR}/references/context-profiles.md: Content type profiles and tolerance matrix${CLAUDE_SKILL_DIR}/references/examples.md: Before/after examples from real edits