conorbronsdon/avoid-ai-writing
Skill that audits and rewrites content to remove AI writing patterns. Use it with your favorite agents including Claude Code, OpenClaw, Codex, and Hermes.
About conorbronsdon/avoid-ai-writing
conorbronsdon/avoid-ai-writing is an open-source project on GitHub, mainly written in JavaScript. Skill that audits and rewrites content to remove AI writing patterns. Use it with your favorite agents including Claude Code, OpenClaw, Codex, and Hermes. It currently holds 4,561 stars and 399 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).
Project Overview
Git Homed tracks it on the Today's Trending board.
GitHub Repository Details
README
avoid-ai-writing
Audit & rewrite content to remove AI writing patterns. A practical skill for any AI agent. Supports detect-only and edit-in-place modes, plus voice profiles.
---
A portable writing skill for Claude Code, OpenClaw, Hermes, and any other agentskills.io-compatible agent. Audits and rewrites content to remove AI writing patterns ("AI-isms").
Three modes:
- Rewrite (default) — flags AI patterns, applies up to two editing passes, verifies the result when possible, and returns one final version.
- Detect — flags AI patterns without rewriting. Shows which flags are real problems vs. judgment calls. Useful when patterns might be intentional, when auditing content you don't want altered, or when you just want a quick scan.
- Edit — edits a prose file in place (via the Edit tool) with minimal, targeted changes, preserving passages that are already human. Source code, configuration, and generated data are refused because prose rewrites can corrupt structured content. Returns an edits-made + verification report, not the full file.
--iterate 1|2 to set the editing-pass ceiling. --iterate 1 allows the initial rewrite only. --iterate 2 uses the default maximum of an initial rewrite plus one correction or preservation repair, and stops early when no justified in-scope edit remains. Checks do not consume a pass, but any change they prompt does. The skill reports how many editing passes it used and any intentional, protected, or unresolved finding.
An optional voice profile (casual / professional / technical / warm / blunt) sets how the prose should sound, independent of the audience context profile.
Table of contents
- Quick demo
- Why a skill, not just a prompt
- Installation & Usage
- Install the complete skill directory
- Claude Code
- Claude Cowork — install as a plugin
- OpenClaw
- Cursor
- Hermes
- OpenAI Codex
- Native ChatGPT and Codex plugin package
- Other agents
- Triggering the skill
- Pattern reference
- Content Patterns
- Language Patterns
- Structure Patterns
- Communication Patterns
- Meta Patterns
- Structural Detection (v3.4)
- AI-tool fingerprints & later additions (v3.5–3.8)
- Conversational-register patterns (v3.15)
- Share-post framing (v3.20)
- Narrated candor (v3.21)
- Unnecessary hyphenation (v3.24)
- Full Example
- Run the detector
- Score a file or piped text from the command line
- Gate prose in GitHub Actions or pre-commit
- Use the detector over MCP
- House style is a different job
- More from me
- Credits
- Community / Multilingual
- Disclaimer
- License
Quick demo
Input:
Certainly! Acme Analytics, a vibrant startup nestled in the heart of Boulder's thriving tech ecosystem, has secured $40M in Series B funding — marking a watershed moment for the observability landscape. The platform serves as a unified hub, featuring real-time dashboards, boasting sub-second queries, and presenting a seamless integration layer. Moreover, experts believe Acme is poised to disrupt the market. In conclusion, the future looks bright!
Final rewrite:
Acme Analytics, a Boulder-based startup, raised a $40M Series B. Its observability platform has real-time dashboards, runs queries in under a second, and includes an integration layer.
Verification: One editing pass. Review found no further justified in-scope edit; no deterministic preservation check ran in this prose-only demo.
What it caught: the chatbot opener ("Certainly!"), promotional modifiers, inflated significance, roundabout verbs, vague attribution, and the generic conclusion. The rewrite keeps the funding, location, and three product capabilities. It removes the unsupported market prediction without inventing an investor or an integration mechanism.
Why a skill, not just a prompt
A one-shot "make this sound human" prompt catches the obvious stuff. This skill is different:
- Single final rewrite — completes its audit, correction, and available verification before returning one full version. A short change summary follows when useful; a detailed audit remains available on request without adding a competing draft.
- Two-pass editing — review can catch patterns that survive the first edit, while one shared limit covers both corrective edits and preservation repairs.
- 112-entry word replacement table across 3 tiers + 10 Tier 3 phrases — not vibes-based. Every flagged word has a specific, plainer alternative. "Leverage" → "use." "Commence" → "start." Tier 1 matches flag unless a listed exception applies, Tier 2 words flag when they cluster, Tier 3 words flag only at high density. Tier 1 itself splits into 1A frequency markers (
delve,tapestry) and 1B clarity edits (in order to,utilize) — same fix, but only 1A is evidence about how a passage was produced, and 1B is weighted lower so a wordiness fix cannot push a document toward an AI classification. Tier 3 phrases (multi-word boilerplate like "the integration of," "decentralized compute") flag on per-phrase repetition or when 3+ distinct phrases stack in one piece — the LLM-self-varies-boilerplate shape. - 74 pattern categories — representative examples below, each with before/after. Includes structural detection (hashtag stuffing, bare-NP bullet lists, hedge-stacked predictions), AI-tool fingerprints (placeholders, citation markup, UTM params), rhythm/uniformity checks, conversational-register tells, and writer-side tests. The full catalog lives in
references/patterns.md; this count is enforced against it in CI. - Detect mode — flag patterns without rewriting. See which flags are real problems vs. judgment calls. Useful when patterns might be intentional or you're auditing content you don't want altered.
- Works across platforms — a directory-based skill runs in Claude Code, Cowork (as a plugin), OpenClaw, Cursor (as a ported rule), and other directory-aware agents. See the install paths below.
Installation & Usage
Install the complete skill directory
Use the plugin install below or clone the repository into your agent's skills directory. Keep SKILL.md with references/patterns.md: the entry file loads the catalog before auditing. The bundled scripts/, detector/, and examples/ provide optional mechanical verification.
For a single-file rules field, use dist/avoid-ai-writing.md. It includes every rule and profile, with manual fallbacks for commands unavailable outside the bundle. Do not copy the slim entry file alone. Older installers that fetch only root SKILL.md omit its required reference; use a directory install instead.
Claude Code
Option 1: Clone into skills directory
git clone https://github.com/conorbronsdon/avoid-ai-writing ~/.claude/skills/avoid-ai-writing
Option 2: Copy a self-contained file
Download dist/avoid-ai-writing.md and place it in any directory that Claude Code can read. Reference it in your CLAUDE.md:
- Editing for AI patterns → read path/to/avoid-ai-writing.md
Option 3: Use as a slash command
Create a command file (e.g., ~/.claude/commands/clean-ai-writing.md):
---
description: Audit and rewrite content to remove AI writing patterns
---
$ARGUMENTS
Read and follow the instructions in ~/.claude/skills/avoid-ai-writing/SKILL.md
Then use /clean-ai-writing in Claude Code.
Claude Cowork — install as a plugin
Cowork loads skills only from installed plugins — it doesn't scan ~/.claude/skills/, so a bare clone (the Claude Code steps above) won't be discovered there. This repo doubles as a single-plugin marketplace, so install it as a plugin instead:
/plugin marketplace add conorbronsdon/avoid-ai-writing
/plugin install avoid-ai-writing@conorbronsdon-skills
/reload-plugins # or restart the session, to activate the skill
In the Cowork desktop app, do the same from Customize → Plugins → Add marketplace from GitHub (conorbronsdon/avoid-ai-writing), then install avoid-ai-writing. The skill auto-triggers from phrases like "remove AI-isms." New releases arrive when the plugin's version is bumped — run /plugin marketplace update to pull them.
The same plugin install works in Claude Code if you'd rather have a versioned, updatable plugin than the file clone above.
Prefer not to install a plugin? Copydist/avoid-ai-writing.mdinto a folder connected to your Cowork session and tell the agent to follow./avoid-ai-writing.md— works as a one-off, no auto-trigger.
OpenClaw
Option 1: Install from ClawHub
clawhub install avoid-ai-writing
Option 2: Clone into skills directory
git clone https://github.com/conorbronsdon/avoid-ai-writing ~/.openclaw/skills/avoid-ai-writing
Cursor
Drop the ported rule into your project's .cursor/rules/:
mkdir -p .cursor/rules
curl -o .cursor/rules/avoid-ai-writing.mdc \
https://raw.githubusercontent.com/conorbronsdon/avoid-ai-writing/main/cursor-rules/avoid-ai-writing.mdc
See cursor-rules/README.md for activation globs and trigger phrases. Functionally identical to the Claude Code skill — same tier vocabulary, same context profiles, same modes.
Hermes
Drop the skill into Hermes's skills directory — it then appears automatically as /avoid-ai-writing, no registration needed:
git clone https://github.com/conorbronsdon/avoid-ai-writing ~/.hermes/skills/writing/avoid-ai-writing
OpenAI Codex
Codex reads Agent Skills in the same SKILL.md format. Put it in .agents/skills/ at the repo root, or ~/.agents/skills/ to use it across all your projects:
git clone https://github.com/conorbronsdon/avoid-ai-writing .agents/skills/avoid-ai-writing
Native ChatGPT and Codex plugin package
Published in the OpenAI Plugins Directory; install it there for ChatGPT or Codex.
The plugin package keeps the canonical SKILL.md as its editorial authority and provides seven focused Skills:
avoid-ai-writing— uses the canonical audit and rewrite instructionsavoid-ai-writing-router— routes mixed and multi-stage requestsai-writing-detector— runs the bundled deterministic detectorvoice-preserving-rewriter— rewrites returned text while retaining voicefile-edit-in-place— edits only explicitly named filespreservation-verifier— checks meaning and constraints before and after a rewritefalse-positive-reviewer— reviews detector findings that need context
python3 scripts/package-openai-plugin.py . /tmp/avoid-ai-writing.zip --json
python3 scripts/validate-openai-plugin.py . --json
Other agents
The generated dist/avoid-ai-writing.md (or the Cursor .mdc port) drops into most tools' rules/skills location:
| Tool | Where to put it |
|------|-----------------|
| Windsurf | .windsurf/rules/avoid-ai-writing.md |
| Cline | .clinerules/avoid-ai-writing.md |
| GitHub Copilot (VS Code) | paste into .github/copilot-instructions.md |
| Claude.ai Projects | paste dist/avoid-ai-writing.md into the project's custom instructions |
| ChatGPT Custom GPTs | paste dist/avoid-ai-writing.md into the GPT's Instructions field |
Triggering the skill
Once installed, ask your assistant to clean up AI writing:
- "Remove AI-isms from this post"
- "Audit this draft for AI tells"
- "Make this sound less like AI"
- "Clean up AI writing in this paragraph"
1. Final rewrite — the verified or honestly qualified final version 2. Changes — a short summary when edits were made and the summary is useful 3. Verification — editing passes used, checks that ran, stop reason, and any intentional, protected, source-blocked, or unresolved findings
Ask for a detailed or exhaustive audit to add quoted findings before the final rewrite. The response still contains one full version. Clean input can be returned unchanged with zero editing passes.
In detect mode, the skill returns two sections:
1. Issues found — every AI-ism identified, grouped by severity (P0/P1/P2) 2. Assessment — which flags are clear problems vs. patterns that may be intentional or effective in context
Trigger detect mode with: "detect," "flag only," "audit only," "just flag," "scan," or similar.
Pattern reference
Representative examples from the catalog — not the exhaustive list (that'sreferences/patterns.md). The skill's human-facing prose catalog and the detector engine use different counts on purpose: the engine implements 53typecategories because it splits the vocabulary tiers and adds stylometric/fingerprint signals (punctuation distribution, function-word entropy, bypass-trick detection) that work as math over a document rather than as a rule you'd look up. The two are mapped indetector/CATEGORIES.md; don't "fix" one count to match the other.
Content Patterns
| # | Pattern | Before | After | |---|---------|--------|-------| | 1 | Significance inflation | "marking a pivotal moment in the evolution of..." | State the supported event; do not invent a date or purpose | | 2 | Notability name-dropping | "cited in NYT, BBC, and Wired" | Keep supported citations; remove claims that they prove importance | | 3 | Superficial -ing analyses | "symbolizing... reflecting... showcasing..." | Replace with specific facts or cut | | 4 | Promotional language | "nestled within the breathtaking region" | Keep the supplied location; remove promotional modifiers | | 5 | Vague attributions | "Experts believe it plays a crucial role" | Request the source, or flag the claim for verification | | 6 | Formulaic challenges | "Despite challenges... continues to thrive" | Name the challenge and the response | | 7 | Novelty inflation | "He introduced a term I hadn't heard before" | Keep the personal observation if it matters; do not invent an explanation |
Language Patterns
| # | Pattern | Before | After | |---|---------|--------|-------| | 8 | Word/phrase replacements (3 tiers) | "leverage... robust... seamless... utilize" | "use... reliable... smooth... use" | | 9 | Copula avoidance | "serves as... features... boasts" | "is... has" | | 10 | Synonym cycling | "developers... engineers... practitioners... builders" | "developers" (repeat the clear word) | | 11 | Template phrases | "a [adj] step towards [adj] infrastructure" | Describe the specific outcome | | 12 | Filler phrases | "In order to," "Due to the fact that" | "To," "Because" | | 13 | False ranges | "from the Big Bang to dark matter" | List the actual topics | | 14 | Parenthetical hedging | "tools (like X and Y)" | Name them directly or cut |
Structure Patterns
| # | Pattern | Before | After | |---|---------|--------|-------| | 15 | Formatting | Em dashes (— and --), bold overuse, emoji headers, bullet-heavy | Commas/periods, prose paragraphs | | 16 | Sentence structure | "It's not X, it's Y" + hollow intensifiers + hedging | Direct positive statements | | 17 | Structural issues | Uniform paragraphs, formulaic openings, too-clean grammar | Varied length, lead with the point | | 18 | Transition phrases | "Moreover," "Furthermore," "In today's [X]" | "and," "also," or restructure | | 19 | Inline-header lists | "Speed: Speed improved by..." | Write the point directly | | 20 | Title case headings | "Strategic Negotiations And Partnerships" | "Strategic negotiations and partnerships" | | 21 | Numbered list inflation | "Here are 7 reasons why..." | Cut to the 2-3 that matter | | 22 | False concession | "While X has limitations, it's still remarkable" | State the real tradeoff | | 23 | Rhetorical question openers | "What if there were a better way to...?" | Lead with the claim |
Communication Patterns
| # | Pattern | Before | After | |---|---------|--------|-------| | 24 | Chatbot artifacts | "I hope this helps! Let me know if..." | Remove entirely | | 25 | "Let's" constructions | "Let's explore," "Let's break this down" | Just start with the point | | 26 | Cutoff disclaimers | "While details are limited in available sources..." | Find sources or remove | | 27 | Generic conclusions | "The future looks bright," "Only time will tell" | Specific closing thought or cut | | 28 | Stock reaction framing | "What surprised me most," "I was fascinated to discover" | Keep specific, authentic reactions; cut empty stock framing or make the reaction concrete | | 29 | Reasoning chain artifacts | "Let me think step by step," "Breaking this down" | State conclusion, then evidence | | 30 | Sycophantic tone | "Great question!", "You're absolutely right!" | Remove entirely | | 31 | Acknowledgment loops | "You're asking about," "To answer your question" | Just answer directly | | 32 | Confidence calibration | "It's worth noting," "Interestingly," "Surprisingly" | Let the fact speak for itself |
Meta Patterns
| # | Pattern | Before | After | |---|---------|--------|-------| | 33 | Excessive structure | 5 headers in 200 words, "Overview:", "Key Points:" | Merge sections, use specific headers | | 34 | Rhythm and uniformity | All sentences 15–25 words, all paragraphs same length | Mix short/long, fragments, questions | | 35 | Over-polishing | Every irregularity sanded away, perfectly uniform prose | Keep natural disfluency, varied rhythm | | 36 | Rewrite-vs-patch threshold | 5+ vocabulary flags + 3+ pattern categories + uniform rhythm | Advise full rewrite, not patching |
Structural Detection (v3.4)
Added in v3.4 to catch LLM output that sidesteps the vocabulary tables by substituting synonyms but still leans on structural shapes detectors can identify. Crypto/web3/AI-infra content is where these patterns concentrate most heavily, but the rules generalize to any social-length post.
| # | Pattern | Before | After |
|---|---------|--------|-------|
| 37 | Tier 3 phrases (multi-word boilerplate) | "the integration of," "decentralized compute," "community-driven," "long-term sustainability" stacked across a piece | Replace the repeated phrase with a specific claim, or vary genuinely. Flagged per-phrase at ≥2 hits, or as a cluster when ≥3 distinct phrases appear |
| 38 | Future-narrative closers | "may become one of the most important narratives of the next market cycle" | Pick the falsifiable version. "X may exceed Y by 2027" is a prediction; the template form is not |
| 39 | Hedge-stacked predictions | "could potentially create," "may eventually unlock" | Pick one. Each hedge cancels the next |
| 40 | "Real/actual" adjective inflation | "real on-chain tokenomics," "actual reward sustainability" | Drop the empty intensifier and add the specific claim. Carve-out: "real on-chain settlement, not bridged IOUs" is honest contrastive writing — the AI tell is the unsaid contrast |
| 41 | Hashtag stuffing | 15-tag trailing block: #AI #Crypto #Web3 #Innovation #FutureTech… | 2-3 specific tags max, or none. Empirical threshold: 6+ tags is near-universal in LLM social output, rare in thoughtful human posts |
| 42 | Bullet lists of bare noun phrases | * Stable mining efficiency / Reliable pool connectivity / Optimized RandomX performance / Low failed share rates / Effective hardware utilization / Consistent thermal stability | Convert to prose, or rewrite each item as a full claim with a verb and a number. Carve-out: genuine list content (changelogs, parameter docs, ingredient lists) where bare NPs are correct |
AI-tool fingerprints & later additions (v3.5–3.8)
| # | Pattern | Before | After |
|---|---------|--------|-------|
| 43 | Unfilled placeholders | [Your Name], [INSERT SOURCE], 2025-XX-XX | Fill in with real content or delete — shipped placeholders are a near-definitive tell |
| 44 | Chatbot citation markup | citeturn0search0, oai_citation, contentReference[oaicite:0] | Strip the markup token entirely |
| 45 | AI-tool URL parameters | utm_source=chatgpt.com, utm_source=copilot.com | Strip the tracking parameter; keep the URL if the link matters |
| 46 | Speculative gap-filling | "maintains a low profile," "likely began his career" | Cut the guess, or replace with a sourced fact |
| 47 | Hyphenated modifier stacking | "a high-quality, well-architected, future-proof solution" | Cut to the modifier that matters; the individual hyphens may be correct |
| 48 | Infomercial engagement hooks | "The catch?", "The kicker?", "Here's the thing." | Delete the hook, state the thing |
| 49 | Vocabulary diversity (low TTR) | Narrow, repetitive word range across 200+ words | Broaden the what — name specific things, cite specific cases |
| 50 | Self-labeling significance | "That last move is the contrarian one," "This is the interesting part" | Cut the label; let the explanation carry the weight, or reposition the item so it stands out on its own |
| 51 | List-label periods | `- Intros. Years of conferences and operator net