humanizer
A Rust-backed AI skill that strips AI-generated patterns from writing and rebuilds it with rhythm and voice.
Ships as a folder containing SKILL.md plus a zero-dependency Rust Cargo project for deterministic pattern detection. Works with Claude Code, OpenCode, Cursor, Codex, or any agent harness that can shell out.
Why Rust
Counting em dashes and measuring sentence-length variance are cheap compute but expensive tokens. The Rust scanner runs in milliseconds and emits exact offsets, so the LLM only spends tokens on the part only it can do: rebuilding voice.
Zero external crates. Stdlib only. Compiles on any Rust ≥ 1.70.
Install
Claude Code / OpenCode
# clone or copy the skill folder into your skills directory
cp -r humanizer ~/.claude/skills/
# one-time build
cd ~/.claude/skills/humanizer/scripts && cargo build --release
Any other agent
Drop the humanizer/ folder anywhere on disk. Point your agent at humanizer/SKILL.md. Build the binaries once:
cd humanizer/scripts && cargo build --release
This produces:
humanizer/scripts/target/release/humanize-detecthumanizer/scripts/target/release/humanize-metrics
Usage
Inside an agent
/humanizer "your AI-sounding paragraph here"
/humanizer --file draft.md --voice blunt
/humanizer --file draft.md --mode detect
/humanizer --file draft.md --mode edit --aggressive
Standalone CLI (no LLM)
echo "Let us delve into the intricate tapestry of modern web development." \
| ./scripts/target/release/humanize-detect --pretty
Output:
# AI Pattern Report
Found 4 flagged spans. Verdict: em_dashes_present
## P7 — ai_vocab (3 hits)
[7..12] "delve"
[24..33] "intricate"
[34..41] "tapestry"
## Metrics
words: 12
sentences: 1
avg sentence len: 12.0 words
stdev: 0.0
burstiness: 0.000 (target >= 0.35)
em dashes: 0 (target 0)
ai_vocab_hits: 3 (target 0)
passive ratio: 0.0% (target < 25%)
rule-of-three runs: 0
JSON for pipelines
./scripts/target/release/humanize-detect --file draft.md --json
Returns a machine-readable report you can feed back into an agent or CI.
What the scanner catches
Surface patterns (deterministic):
- P7 — 80+ AI vocabulary words (delve, foster, leverage, realm, etc.)
- P13 — any em dash (U+2014)
- P1 — significance-inflation phrases (stands as a testament, etc.)
- P3 — superficial -ing analyses (highlighting the importance of…)
- P4 — promotional adjectives (renowned, cutting-edge, world-class)
- P5 — vague attribution (many experts believe, studies have shown)
- P22 — negative-parallelism constructions (not just X, but Y)
- Metrics: burstiness, passive-voice ratio, rule-of-three runs, sentence-length distribution
What the LLM handles (semantic — see references/patterns.md):
- notability name-dropping, hollow callbacks, balanced conclusions, hallucinated citations, perfect symmetry, grandiose scope claims, and 30+ more.
Project layout
humanizer/
├── SKILL.md # entry point for agents
├── README.md # this file
├── LICENSE
├── package.sh # build .skill archive
├── scripts/
│ ├── Cargo.toml
│ └── src/bin/
│ ├── detect.rs # pattern scanner + metrics
│ └── metrics.rs # sentence-length histograms
├── references/
│ ├── patterns.md # all 37 patterns
│ ├── voices.md # five voice profiles
│ └── vocabulary.md # blacklist + replacements
└── assets/
└── examples.md # before/after rewrites
Packaging as .skill
./package.sh
# → humanizer-1.0.0.skill
A .skill file is a plain tarball of the folder. Extract anywhere.
Credit
Patterns catalog draws on:
- Wikipedia's Signs of AI writing (via blader/humanizer)
- Burstiness / perplexity rewrite framework (via Aboudjem/humanizer-skill)
This skill packages those concepts behind a Rust-based scanner for speed and determinism.
License
MIT. See LICENSE.