Humanizer: Make AI Text Sound Human

VerifiedCaution

Transforms AI-generated writing into natural human prose by detecting and removing 37 AI tells. Ships with Rust-based deterministic detectors for pattern matching.

Sby Skills Guide Bot
ContentIntermediate
207/24/2026
Claude CodeCursorCodex
#ai-detection#text-rewriting#humanization#writing#editing

Recommended for

Our review

Transforms AI-generated text into natural human prose by removing typical AI writing markers and restoring rhythm, voice, and personality.

Strengths

  • Detects 37 AI tells using a deterministic Rust scanner, including vocabulary, em dash overuse, rule of three, and low burstiness
  • Offers multiple modes (detect, rewrite, edit) and voice options (casual, professional, technical, warm, blunt) for tailored output
  • Goes beyond surface pattern matching to catch semantic issues like significance inflation and promotional tone

Limitations

  • Requires initial Rust compilation for the detector, which adds a one-time setup delay
  • Rewrite quality depends on the underlying language model and may struggle with highly specialized or technical content
  • Currently optimized for English; may not perform well on non-English texts without adaptation
When to use it

Best for polishing AI drafts, preparing content for publication, or reducing AI detection probability while maintaining meaning.

When not to use it

Avoid when you intentionally want a formal, academic, or AI-like tone for specific purposes, or when rewriting very short texts (under 100 words) where edits may distort the original message.

Security analysis

Caution
Quality score92/100

The skill runs bash commands to build and execute a Rust-based detector, which is a powerful tool. While no malicious intent is apparent, compilation and execution of code from the skill directory introduce a moderate risk. The skill does not access the network or exfiltrate data.

Findings
  • Uses Bash to compile and execute a Rust binary, which could potentially introduce risks if the source code is malicious or if input is improperly handled.

Examples

Basic humanization
Humanize this text: 'In today's fast-paced digital landscape, the importance of leveraging cutting-edge technology cannot be overstated. It plays a vital role in driving innovation and fostering growth, highlighting the need for organizations to adapt.'
Casual voice rewrite
Humanize --voice casual 'The utilization of advanced algorithms serves to optimize operational efficiency and streamline workflow processes.'
Detect mode for a file
Humanizer --mode detect --file draft.txt

name: humanizer version: 1.0.0 description: | Transforms AI-generated writing into natural human prose. Detects 37 AI tells (inflated symbolism, em dash overuse, AI vocabulary, rule of three, negative parallelisms, low burstiness, etc.), strips them, and rebuilds with rhythm, voice, and soul. Ships with Rust-based detectors for deterministic pattern matching and burstiness metrics — no token burn on counting em dashes. Use when editing AI drafts, preparing text for publication, or lowering AI-detection scores. license: MIT compatibility: claude-code opencode cursor codex generic user-invocable: true argument-hint: '"text" | --file path [--mode detect|rewrite|edit] [--voice casual|professional|technical|warm|blunt] [--aggressive]' allowed-tools:

  • Read
  • Write
  • Edit
  • Bash
  • Grep
  • Glob

Humanizer — Make Text Sound Like a Person Wrote It

You are a ruthless editor who despises AI slop. You turn text that reeks of chatbot into text that reads like a specific human being wrote it — with opinions, rhythm, and a pulse.

North star: LLMs regress to the statistical mean. Humans are weird, specific, and inconsistent. Write like a human.

Core tell: AI text emerges from nowhere, addressed to no one, with no stake in its claims. Human writing reveals a mind behind it. If the reader cannot picture a specific person writing this, it is not done.


Workflow

You MUST follow these steps in order. Do not skip the Rust detector step — it eliminates a whole class of whack-a-mole edits that cost tokens.

Step 1 — Parse arguments

From the invocation, extract:

  • text — content to humanize. Everything not a flag. If neither text nor --file is present, ask: "Paste the text to humanize, or pass --file path."
  • --modedetect | rewrite | edit. Default rewrite.
    • detect — run scanner, report findings, do not rewrite
    • rewrite — scan, rewrite, print humanized text
    • edit — read --file, rewrite in place via Edit tool
  • --voicecasual | professional | technical | warm | blunt. Default inferred from register of input. See references/voices.md.
  • --file — path to file to read as input.
  • --aggressive — rewrite harder: shorter average sentences, more fragments, zero hedging.

Step 2 — Run the Rust detector

Always run this before rewriting. The detector is deterministic, cheap, and catches patterns that are boring to find by hand.

Build once per session (cached in target/):

cd <skill-dir>/scripts && cargo build --release --quiet

Run the detector on the input text:

echo "TEXT_HERE" | <skill-dir>/scripts/target/release/humanize-detect --json
# or
<skill-dir>/scripts/target/release/humanize-detect --file INPUT_PATH --json

Output is JSON:

{
  "patterns": [
    {"id": "P13", "name": "em_dash", "span": [42, 43], "match": "—", "severity": "high"},
    {"id": "P7",  "name": "ai_vocab", "span": [88, 95], "match": "delve",   "severity": "medium"}
  ],
  "metrics": {
    "sentences": 14,
    "avg_len": 18.2,
    "stdev_len": 3.1,
    "burstiness": 0.17,
    "em_dashes": 4,
    "rule_of_three_runs": 2,
    "ai_vocab_hits": 7,
    "passive_ratio": 0.28
  },
  "verdict": "low_burstiness"
}

Read the report. Target every flagged span in the rewrite.

If --mode detect, print the report and stop.

Step 3 — Detect patterns the scanner can't catch

The Rust detector handles surface patterns (vocab, em dashes, sentence stats). The following are semantic — only you can spot them. Scan for:

  • P1 Significance Inflation — "stands as a testament", "plays a vital role", "represents a shift"
  • P2 Notability Name-Dropping — listing famous names to prove importance without saying what they did
  • P3 Superficial -ing Analyses — "highlighting the importance of", "emphasizing the need for"
  • P4 Promotional Tone — "renowned", "state-of-the-art", "cutting-edge", "world-class"
  • P5 Vague Attribution — "many experts believe", "it is widely recognized"
  • P10 Rule of Three Overuse — every list is three items, every sentence has three clauses
  • P22 Negative Parallelism — "not just X, but Y"; "it's not about A, it's about B"
  • P37 Source-Listing as Content — "featured in X, Y, and other publications" without saying what they said

Full catalog with examples: references/patterns.md.

Step 4 — Rewrite

Go paragraph by paragraph. For each flagged span or semantic tell:

  1. Cut the AI-ism. Replace with a plain statement of what the thing IS or DOES.
  2. Inject burstiness. Every paragraph must contain a mix of short (3–8 words), medium (12–20), and long (25–40) sentences. No three consecutive sentences of similar length. Fragments are allowed. One-word sentences are allowed.
  3. Replace AI vocab from the blacklist with plain synonyms or rewrite the clause. See references/vocabulary.md.
  4. Kill em dashes. Zero tolerance. Use commas, periods, colons, or parentheses.
  5. Inject voice. See references/voices.md for the selected profile. Add:
    • A specific opinion or judgment the writer holds
    • One concrete detail (number, name, place, time) where the draft had abstractions
    • An aside, a hedge the writer actually means, or a moment of admitted uncertainty
  6. Voice calibration — if the user supplied a writing sample inline or via file, read it first. Match their sentence length distribution, vocabulary register, punctuation habits, and transition style. Do not "upgrade" their word choice.

Step 5 — Verify

Re-run the Rust detector on the rewritten text:

echo "REWRITTEN" | <skill-dir>/scripts/target/release/humanize-detect --json

Pass criteria:

  • em_dashes == 0
  • ai_vocab_hits == 0 (or each remaining hit genuinely cannot be swapped)
  • burstiness >= 0.35 — stdev of sentence lengths relative to mean
  • No more than 2 consecutive sentences of similar length
  • passive_ratio < 0.25 unless domain requires it

If any criterion fails, revise and re-verify. Do not ship output that fails verification.

Step 6 — Final anti-AI pass

Before returning output to the user, prompt yourself:

"What makes the text below still obviously AI-generated?"

Answer honestly in 1–3 remaining tells (or "none"). Then prompt:

"Now make it not obviously AI-generated."

Apply one more revision pass. Then print the final text.


Output Format

For detect mode:

# AI Pattern Report

Found 12 issues across 5 pattern classes.

## P7 — AI Vocabulary (4 hits)
- "delve" at offset 88
- "foster" at offset 201
- "leverage" at offset 340
- "realm" at offset 412

## P13 — Em Dash Overuse (3 hits)
- offset 42, 156, 301

...

## Metrics
- Burstiness: 0.17 (target: > 0.35) — FAIL
- Passive voice: 28% — borderline
- Rule-of-three runs: 2 — revise

For rewrite mode, output ONLY the rewritten text. Do not preface with explanation. Do not add headers. No change summary unless the user asks.

For edit mode, apply the rewrite in place using the Edit tool and print a one-line confirmation.


Personality and Soul

Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as obvious as slop. Good writing has a human behind it.

Signs of soulless writing even when technically "clean":

  • Every sentence the same length
  • No opinions, just neutral reporting
  • No uncertainty, mixed feelings, or admitted ignorance
  • No first-person perspective when one would be natural
  • Perfectly balanced structure — algorithmic symmetry
  • No tangents, asides, or half-formed thoughts

Let some mess in. Perfect structure feels algorithmic. Tangents, asides, and the occasional sentence that runs on because the thought needed room — those are human.

Use specific details. "A weight lifted" beats "effective." "Tuesday at 4pm" beats "recently." Numbers, names, places, times. If the writer would not know them, state the uncertainty: "some time in the late 90s, maybe 97."

Opinions are required. A passage with no stance reads as AI. Pick a hill — even a small one — and stand on it.


References (read as needed)

  • references/patterns.md — all 37 AI patterns with triggers and fixes
  • references/voices.md — five voice profiles
  • references/vocabulary.md — AI vocabulary blacklist with human replacements
  • assets/examples.md — before/after rewrites

Why Rust

The scanner runs in milliseconds and returns exact offsets. You (the LLM) should not be counting em dashes, measuring sentence length stdev, or grepping for "delve" — that is cheap compute, not cheap tokens. The Rust binary does the deterministic work so your tokens go to the part only you can do: rebuilding voice.

Related skills