with one click
humanize
// Remove AI writing patterns — detect and rewrite AI-generated text into natural, human-sounding prose. English + Korean pattern detection. Based on Wikipedia's "Signs of AI writing" guide and Korean AI-slop conventions.
// Remove AI writing patterns — detect and rewrite AI-generated text into natural, human-sounding prose. English + Korean pattern detection. Based on Wikipedia's "Signs of AI writing" guide and Korean AI-slop conventions.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | humanize |
| description | Remove AI writing patterns — detect and rewrite AI-generated text into natural, human-sounding prose. English + Korean pattern detection. Based on Wikipedia's "Signs of AI writing" guide and Korean AI-slop conventions. |
| model | sonnet |
| allowed-tools | ["Read","Write","Edit","Grep","Glob","AskUserQuestion"] |
Removing AI patterns is only half the job. Sterile, voiceless writing reads as obviously AI-edited too. Good writing has a human behind it — opinions, rhythm variation, acknowledged uncertainty, specific feelings. Inject voice, do not just sand down patterns.
Credit: English pattern set adapted from blader/humanizer (MIT) — itself based on Wikipedia's WikiProject AI Cleanup. Korean pattern set is original to x-mesh.
<Use_When>
<Do_Not_Use_When>
Read mode from .xm/config.json (mode field). Default: developer.
| Mode | Output style |
|---|---|
developer | Direct, technical. Show pattern numbers and rule names. |
normal | Plain language. Avoid jargon like "copula avoidance" — say "uses fancy verbs instead of is". |
For Korean output, replace English rule names with Korean equivalents listed in references/patterns-ko.md.
Parse the first word of $ARGUMENTS:
| First word | Action |
|---|---|
audit | Detect-only mode — list findings with pattern numbers + severity, NO rewrite |
rewrite (default) | Detect + rewrite + final anti-AI audit pass |
light | Minimal edit — remove obvious AI tells while preserving most wording |
strong | Heavier edit — rebuild sentence flow while preserving every factual claim |
voice <file> | Voice calibration — use <file> as style sample, then process the rest |
--lang en / --lang ko | Force language (auto-detected otherwise) |
If $ARGUMENTS is empty, ask the user to paste text or specify a file.
Accept any of these input shapes:
| Input | Handling |
|---|---|
| Inline prose | Humanize the prose directly. |
| File path | Read the file, humanize its prose, and return the result. Do not edit the file unless the user explicitly asks. |
voice <file> <text or file> | Read the voice sample first, then process the target text. |
| Mixed instructions + prose | Treat quoted blocks, fenced blocks, or obvious paragraphs as the target. Treat the rest as instructions. |
If a file contains code plus prose, only humanize prose comments/docs that the user asked to change. Never rewrite code identifiers, commands, JSON keys, API names, paths, flags, citations, version numbers, or quoted user-facing strings unless the user explicitly includes them in scope.
When the target text is too short to infer register, preserve the user's phrasing and make a light edit. Do not invent a stronger personality just to satisfy the skill.
Default intensity is medium: remove AI patterns and improve flow without changing the writer's apparent intent.
| Intensity | Use for | Rule |
|---|---|---|
light | Emails, PR descriptions, sensitive copy, short snippets | Keep sentence order unless a pattern is severe. |
medium | Default rewrite | Change sentence order when it improves rhythm or removes obvious AI structure. |
strong | Blog posts, marketing drafts, essays with heavy AI tone | Rebuild paragraphs, but keep a fact inventory so no claim disappears. |
If the user asks for "AI 티만 빼줘", use light. If they ask for "완전히 자연스럽게 다시 써줘", use strong.
If Step 2 detection returns either signal, start with light instead of the user-specified intensity and tell the user in one line that you downshifted. These two patterns alone tend to inflate change rate past the hard stop because their fixes collapse multiple sentences:
When both fire together, start light even if the user asked for medium or strong. Output once, then let the user opt in to a stronger pass.
Naturalness without preserved meaning is just a different lie. Set hard ceilings on edit volume and require justification when crossed.
Measure character-level change rate as edit_distance(original, rewrite) / len(original). Approximate via diff coverage when exact computation is impractical — count substituted/inserted/deleted character spans.
| Rate | Action | Rationale |
|---|---|---|
| < 30% | Proceed | Normal humanize range. Pattern removal + flow polish stays here. |
| 30–50% | Warn and re-verify | Likely scope creep. Re-read the fact inventory before output. Confirm every claim is intact. |
| > 50% | Hard stop — do not output. Diagnose. | Over-rewrite. Either you over-edited a near-natural input, or the user wanted full rewriting (different skill). |
When change rate exceeds 50%:
light intensity, or tell the user the input may not need humanization.For short inputs, single-token swaps inflate percentages. Use absolute thresholds instead:
| Input length | Warn at | Hard stop at |
|---|---|---|
| < 200 chars | 5 token-level changes | 10 token-level changes |
| 200–500 chars | 25% | 45% |
| 500+ chars | 30% | 50% |
Counts: word substitutions, insertions, deletions; sentence reordering; removed connectives (그리고, 한편, em-dashes the AI added); register shifts.
Does NOT count: whitespace/line-break normalization; markdown structural fixes (heading levels, list bullets) when the user asked for prose only; removing pure chatbot residue (sycophantic openers, trailing "Let me know if…" disclaimers).
Follow these steps in order. Do not skip Step 5.
Auto-detect text language by character distribution. Hangul ratio ≥ 30% → Korean. Otherwise English. Mixed text → process per-paragraph.
references/patterns-en.mdreferences/patterns-ko.mdreferences/voice-calibration.mdScan the input against the loaded pattern catalog. For each match, record:
Then infer the genre from the first 200 chars (column / report / blog / formal / marketing / README — see references/genre-rules.md) and apply the per-genre allowance matrix to drop or downgrade findings the genre actually permits. Mark dropped findings as dropped (genre: <name>) in the audit output rather than removing them silently — the user should be able to trace why a pattern was not fixed. Voice sample overrides genre rules; genre rules override the catalog default.
Also make a quick fact inventory before rewriting:
The rewrite must preserve this inventory. If a claim is unclear, keep it vague rather than making it more specific.
In audit mode, stop here and output the findings table. In rewrite mode, continue.
Replace AI-isms with natural alternatives. Constraints:
Avoiding AI patterns alone produces "clean but soulless" output. Add:
Skip this pass for strict technical reference output if the user requested neutral tone. For docs, READMEs, changelogs, release notes, legal/policy text, and incident writeups, "voice" usually means clearer human prose, not personal opinions.
For Korean prose, the voice pass usually means:
~다 or ~습니다.Internally ask: "What still makes this obviously AI-generated?" List remaining tells in 1-2 lines, then revise once more to remove them. This catches lingering AI-isms in the first draft.
Common tells caught at this stage: leftover em-dashes, residual rule-of-three lists, sycophantic openers like "Great question!", trailing chatbot disclaimers ("Let me know if…").
Also compare against the fact inventory from Step 2. If the rewrite dropped a fact, restore it. If it added a fact, remove it.
Then measure the change rate against the source per ## Change Rate Guardrails. If above the warn threshold, re-verify fact inventory once more. If above the hard-stop threshold, do not output — restart with lower intensity or tell the user.
| Mode | Output |
|---|---|
audit | Findings table only — pattern #, severity, span, suggested fix direction |
rewrite | Rewritten text + (developer mode only) collapsible findings summary at bottom |
voice | Rewritten text in user's voice + 2-line note explaining what voice features were matched |
For Korean output, follow the user's existing register (반말/존댓말). Default to existing register; if mixed, keep the dominant register.
Do not include an apology, preamble, or meta-commentary before the rewritten text. The command output should be usable as copy-paste text.
When the user provides a writing sample (inline text or file path):
Full guide: references/voice-calibration.md.
Skipping any of these excuses is a sign you are partially applying the skill. Re-read the rebuttal and continue.
| Excuse | Rebuttal |
|---|---|
| "The text is short, so I can skip Step 5 (final audit pass)." | Short text gets called out fastest for AI tells. Final pass is not optional. |
| "Em-dashes are stylistic, the user might like them." | Default to commas/periods. Em-dashes survive only in dialogue, parenthetical asides, or when the user explicitly demonstrates them in their voice sample. |
| "Removing 'pivotal' loses meaning." | If pivotal is technically accurate (chess, politics), keep it. If it is generic intensifier, remove. Read the literal sentence — does the word claim something specific? |
| "The user pasted AI text, so any rewrite is better than original." | Wrong. A bad humanize that drops facts or fabricates citations is worse than the original AI text. Preserve meaning first. |
| "Korean has no AI patterns." | Korean AI text has its own conventions: 과도한 ~적/~성, "한편/결국/요컨대" 남용, 모든 문장 같은 길이, "~라 할 수 있다" 결말. See references/patterns-ko.md. |
| "Voice calibration is for paid features." | Voice calibration is a 30-second analysis that drastically improves output. If a sample exists, use it. |
| "I should add my own opinions even without the user's voice." | No. Inject voice patterns consistent with the source genre. A README does not need first-person reflection. A blog post might. |
| "The findings table is overhead." | In developer mode, the table teaches the user what was wrong. Skipping it loses the learning value. |
| "Change rate is just a heuristic — my rewrite reads better." | If you crossed 50%, you stopped humanizing and started rewriting. The skill is humanize, not rewrite. Stop and tell the user. |
| "It's a short paragraph so the threshold doesn't apply." | Short inputs use absolute count thresholds (5 / 10 token-level changes). The rule still applies — see length-aware adjustment. |
| "Genre rules just hide AI tells — strip everything." | Genre rules drop patterns the genre legitimately uses (e.g., 격식체 in 공적 문서). Stripping them produces a tonally wrong output the user will reject. Apply the matrix. |
Stop and re-read the source if you notice:
light or tell the user the source may already be natural.Before returning output, internally confirm:
## Humanized
<rewritten text>
---
<details>
<summary>Findings (N patterns)</summary>
| # | Pattern | Severity | Span |
|---|---------|----------|------|
| EN-7 | AI vocabulary | High | "underscores its enduring legacy" |
| EN-14 | Em-dash overuse | Med | "—not by the people—" |
**Final pass tells removed:** sycophantic opener, trailing "Let me know if…"
</details>
## 다듬은 글
<rewritten text>
---
**무엇을 바꿨나요**
- "~라는 점에서 의의가 있다" → 구체적인 내용으로 풀어 씀
- 모든 문장 길이를 비슷하게 만든 부분을 짧고 긴 문장 섞음
- "한편" 남용 → 다른 연결어로 교체
references/patterns-en.md — English patterns with before/after examples (Wikipedia source + x-mesh additions)references/patterns-ko.md — Korean AI-slop pattern catalog (KO-1 ~ KO-40)references/genre-rules.md — Per-genre allowance matrix (column/report/blog/formal/marketing/README) and threshold adjustmentsreferences/voice-calibration.md — How to analyze a writing sample and match it