humanizer · git:20260501.d1389ff · 2026-05-01 · sha256 3e22e2b4a754ac23

humanizer git:20260501.d1389ffA

Immutable. This exact content is served forever at /api/v1/blob/3e22e2b4a754ac23.

---
name: humanizer
description: |
  Use when removing AI-generation patterns from text in English or Russian.
  Auto-detects language by Cyrillic ratio and applies the matching ruleset.
  Trigger phrases: "humanize this", "remove AI patterns", "make this sound human",
  "очеловечить текст", "убрать признаки нейросети", "сделай текст живым".
  Honors explicit overrides like "humanize as English" / "обработай как русский".
  For mixed-language text, asks which ruleset to apply.
allowed-tools:
  - Read
  - Write
  - Edit
  - Grep
  - Glob
  - AskUserQuestion
---

# Humanizer (EN + RU auto-routing)

Remove AI-generation patterns from text. This skill bundles two MIT-licensed
upstream rulesets and routes the input to the right one based on language.

This file is a router. The actual humanization rules live in
`references/humanizer-en.md` and `references/humanizer-ru.md` and are
authoritative. Do not paraphrase, summarise, or "improve" them — load and follow.

## Process

### Step 1 — Receive input

Accept the text to humanize as: a pasted block, a file path (use `Read`), or the
current selection. If the input is unclear, ask the user once.

### Step 2 — Honour explicit override

Scan the user's request (case-insensitive) for an explicit language directive:

- **EN override** — the request contains any of: `as english`, `english only`,
  `humanize in english`, `на английском`, `обработай как английский`.
- **RU override** — the request contains any of: `as russian`, `russian only`,
  `humanize in russian`, `на русском`, `обработай как русский`.

If an override is present, skip step 3 and jump to step 4 with the chosen language.

### Step 3 — Detect language

Count letters in the input (ignore digits, punctuation, whitespace):

- `cyr` = number of letters matching `[А-Яа-яЁё]`
- `lat` = number of letters matching `[A-Za-z]`
- `total = cyr + lat`

Decide:

- **`total < 20`** (input too short to classify reliably) → use `AskUserQuestion`
  with options "English", "Russian".
- **`cyr / total >= 0.6`** → Russian.
- **`cyr / total <= 0.1`** → English.
- **Otherwise** (mixed, Cyrillic ratio between 10 % and 60 % exclusive) → use `AskUserQuestion` with options
  "Apply Russian rules", "Apply English rules", "Run both passes (RU then EN)".

### Step 4 — Load the chosen ruleset

- For English: `Read references/humanizer-en.md`
- For Russian: `Read references/humanizer-ru.md`
- For "both passes": load both. Execute RU first, then EN on the RU output.

The loaded file is authoritative. Treat its instructions as if they were yours.

### Step 5 — Execute

Apply the diagnostic, rewrite, and audit process described in the loaded
reference verbatim. Do not skip the audit pass. Do not invent new rules.

If the user provided a writing sample for voice calibration, pass it through to
the chosen ruleset's voice-calibration section as-is, regardless of sample
language.

### Step 6 — Output

Use the output format specified by the loaded reference (typically:
draft → audit → final → list of changes). Do not change the format.

## Rules of the road

- The router never edits the rulesets. Refresh from upstream is a separate
  procedure documented in `../../../README.md`.
- The router never invents new patterns or merges English/Russian rules.
- "Both passes" runs RU first because RU's hard bans include em-dash removal
  (which already covers EN pattern #14) — running EN first would let dashes
  re-enter via RU's rewrites.

## Attribution

This skill bundles MIT-licensed work by
[blader](https://github.com/blader/humanizer) (English ruleset) and
[ilyautov](https://github.com/ilyautov/humanizer-ru) (Russian ruleset).
See `../../../NOTICE` for full attribution and pinned upstream commits.