humanizer-ru
# humanizer-ru
Проверяемая гигиена вставки из чата для русского текста
40 regex-маркеров артефактов вставки из чат-интерфейсов, у 38 из них полная
запись доказательств. Ложных срабатываний класса A на 12314 текстах-неносителях
ноль, класса B — 8, то есть 0.00065 (Wilson 95% CI от 0.0003 до 0.0013; замер
04.09.2026 по замороженной предрегистрации). Каждое число с датой и командой
воспроизведения — в разделе [«Цифры проекта»](#цифры-проекта).
Очистка артефактов вставки и сверка фактов доступны и для английского текста:
добавьте `--language en` к `humanizer-clean`, `humanizer-polish`,
`humanizer-facts` или `humanizer-report` (либо `--language auto`). Это не
включает русские стилевые эвристики и не даёт вердиктов об авторстве; профиль
сохраняет код, URL, Markdown и проверяемые факты. Русский профиль остаётся
значением по умолчанию для совместимости.

[](LICENSE)
[](https://pypi.org/project/humanizer-ru/)
[](https://github.com/Vladimir-Human/humanizer-ru/actions/workflows/regex-check.yml?query=branch%3Amain)
## Кому это нужно
- Редактору и преподавателю: проверить текст перед публикацией: `humanizer-markers --scan файл.md`.
- Разработчику и CI: гейт вставки из чат-интерфейсов: [action и контракт](contract.v1.json).
- Пользователю ИИ-ассистента: та же проверка внутри агентной среды: [MCP одной конфигурацией](#mcp-одной-конфигурацией) или [демо](https://vladimir-human.github.io/humanizer-ru/).
## Попробовать за 30 секунд
- [Демо в браузере](https://vladimir-human.github.io/humanizer-ru/): ничего не устанавливать, текст не покидает браузер.
- Сообщить о проблеме или опыте использования: [issue в репозитории](https://github.com/Vladimir-Human/humanizer-ru/issues/new); пользовательский текст не передаётся автоматически ни демо, ни сборщиком обратной связи.
- Проверка конкретной вставки:
Самый короткий путь «нашёл → убрал → проверил»:
```text
pip install humanizer-ru
humanizer-markers --scan input.txt # найти следы (rc=1 = находка)
humanizer-clean --in-place input.txt # снять поддержанные артефакты
humanizer-markers --scan input.txt # убедиться, что остатка нет (rc=0)
```
Для английского входа добавьте `--language en`; для смешанного — `--language auto`.
Очистка не переписывает стиль и смысл: проверьте результат вручную и используйте
`humanizer-facts diff до.txt после.txt --no-additions` после редакторской правки.
```text
python -c "open('primer.txt','w',encoding='utf-8').write('Согласно отчёту :contentReference[oaicite:3]{index=3}, рост заявок.\n')"
humanizer-markers --scan primer.txt; echo "rc=$?"
primer.txt:1 [contentReference] Согласно отчёту :contentReference[oaicite:3]{index=3}, рост заявок.
Найдено маркеров: 1.
rc=1
```
rc=1 означает «найдены маркеры» — это ожидаемый результат проверки на
образце со следом вставки, а не ошибка; rc=0 — следов нет, rc=2 — вход не
читается (с --json конверт ошибки печатается в stdout).
### Полный сценарий: найти, безопасно очистить, сверить, сообщить
1. **Найти артефакт вставки.** `humanizer-markers --scan файл.md` печатает
находки с координатами и классом: A — жёсткие артефакты копипасты из
чат-интерфейсов, B — контекстные индикаторы вроде невидимых символов и
скрытой раскладки; rc=1 означает находки.
[Демо-страница](https://vladimir-human.github.io/humanizer-ru/) делает то
же в браузере без установки и подсвечивает исходные диапазоны. Мягкие
признаки машинного письма считает `humanizer-scan`: они калибруют объём
правки и не дают вердикта.
2. **Безопасно очистить.** `humanizer-clean --in-place файл.md` одной
командой выполняет проверку до, снятие поддерживаемых артефактов,
проверку после и сверку фактов; оригинал остаётся в копии `.bak`.
Снимаются невидимые метки слоя A и видимые артефакты класса A вне
защищённых областей (код, frontmatter, URL, HTML-атрибуты, ZWJ-кластеры
эмодзи). Стиль и смысл не переписываются; неподдерживаемые находки вроде
класса B, вики-разметки и плейсхолдеров остаются явным остатком с кодом
возврата 1, полная чистота не заявляется. При нарушении инвариантов
защищённых областей результат не записывается. Невидимые символы
снимаются и точечно, по классам риска из поля `invisible_classes` файла
`markers.v1.json`: `humanizer-markers --remove файл.md` убирает safe
автоматически, ambiguous — только с явным флагом `--include-ambiguous`,
dangerous показывает и не снимает. Типографику без правки смысла
нормализует `humanizer-polish`; на разметке используйте режимы
`--preserve-markup` и `--typographic`.
3. **Проверить диф.** `humanizer-clean --diff файл.md` печатает
унифицированный диф до и после без записи; конверт `--json` несёт сверку
фактов и перечень остатка. После ручной правки сверьте факты отдельно:
`humanizer-facts diff до.txt после.txt --no-additions` сравнит числа,
даты, URL, имена, цитаты, отрицания и модальности; поля lost и changed
обязаны быть пустыми, иначе верните факты в текст.
4. **Сообщить результат.** `humanizer-report до.txt после.txt` готовит отчёт
о правке со сверкой фактов. Находку коллеге передаёт
`humanizer-markers --scan --json файл.md`: пересылайте поля file, line,
marker, class и fragment, а не весь документ. Находка класса A
устанавливает факт вставки, а не автора: помечайте источник, на который
указывал артефакт, как «требует проверки». Вердиктов об авторстве нет ни
у инструментов, ни у скилла — это Главное правило SKILL.md.
Сценарий одним блоком:
```text
humanizer-markers --scan вставка.md # 1: найти; rc=1 = находки есть
humanizer-clean --diff вставка.md # 2: показать, что будет снято
humanizer-clean --in-place вставка.md # 2: очистить; оригинал в .bak
humanizer-facts diff вставка.md.bak вставка.md --no-additions # 3: сверить факты
humanizer-report вставка.md.bak вставка.md # 4: отчёт о правке
```
Подробности команд и режимов — в [docs/USAGE.md](docs/USAGE.md#использование).
### MCP одной конфигурацией
```json
{
"mcpServers": {
"humanizer-ru": {
"command": "uvx",
"args": ["--from", "humanizer-ru==3.36.4", "humanizer-mcp"]
}
}
}
```
Форма `uvx` устанавливает закреплённый выпуск PyPI и запускает stdio-сервер.
При локальной установке эквивалентны `pip install humanizer-ru` и запуск
`humanizer-mcp`.
## Матрица проверенных возможностей и границ
Без заявлений о лидерстве: сопоставимого внешнего исследования в нише на
дату записи нет (см. LEADERBOARD.md). Строки — что фактически проверено
гейтами и тестами цикла; границы — что поверхность не делает.
| Поверхность | Проверка известных артефактов | Безопасная очистка | Сверка фактов | Машинный конверт | Граница |
|---|---|---|---|---|---|
| CLI (`humanizer-markers`, `-polish`, `-facts`, `-report`) | да, с координатами и классами A/B | режимы strip / --preserve-markup / --typographic с инвариантами сохранения | humanizer-facts (категории фактов) | --json, коды возврата по контракту | семантику не проверяет; вердиктов об авторстве нет |
| MCP (`humanizer-mcp`, набор инструментов contract.v1.json) | те же команды через stdio | те же режимы через humanizer_polish | humanizer_facts | JSON-RPC конверты, isError по контракту | текст не покидает процесс |
| Демо на Pages | да, подсветка исходных диапазонов в браузере | да, preview + явное Apply + Undo для поддержанных артефактов | нет | копирование отчёта из одного результата | офлайн в браузере, без установки |
| GitHub Action | гейт вставки + автофикс текстового пути (класс A) | action_fix вне fenced/кода | нет | rc гейта | фикс не трогает защищённые области |
| Текстовый скилл (SKILL.md) | процедуры агента по references | стилевая правка только по явной просьбе | нет | нет (проза скилла) | гарантий естественности и сохранности смысла нет |
## Что это НЕ делает
- Переписанный текст: теоретический потолок детекции при парафразе [bib:sadasivan2023]; парафраз обнуляет детекторы [bib:dipper2023].
- Нативно-гладкий машинный текст без артефактов: документная граница там же [bib:sadasivan2023]; популяционная детекция возможна только на больших выборках [bib:chakraborty2023], вердикт по документу не заявляется.
- Короткий текст: сигналов меньше, чем слов, водяной знак и статистика требуют длины [bib:anthropic2026wm], [bib:synthid2024].
- Водяные знаки без ключа: distortion-free знак не виден стороннему наблюдателю по построению [bib:kuditipudi2023]; криптографическая неотличимость без ключа [bib:cgz2023]; детектор SynthID-Text требует ключ разработчика [bib:synthid2024]; Anthropic подтверждает: без ключа знак не проверяется, детектор-API в закрытом preview [bib:anthropic2026wm].
- Ключи [bib:…] раскрыты в [research/BIBLIOGRAPHY.md](research/BIBLIOGRAPHY.md).
- polish не запускать на Markdown и разметке: снимает ##, **, ёлочки, тире; для разметки — режим --preserve-markup.
## Почему можно доверять
- [Методология и бенчмарк: числа с доверительными интервалами](research/F8-UMBRELLA-2026.md).
- [Публичный бенчмарк: таблица с CI, командами воспроизведения и колонкой «где мы хуже»](demo/benchmark/index.html).
- [Модель угроз и границы детектора](docs/THREAT-MODEL.md).
- [Парити-гейт Python и JS правил](.github/workflows/regex-check.yml).
- [Самоаудит: числа, статусы и эррата](eval/facts/self-audit.v1.json).
- Статус последнего успешного прогона и деплоя: [status.json на Pages](https://vladimir-human.github.io/humanizer-ru/status.json) (генерируется деплой-артефактом из точного SHA; обновляется только зелёным прогоном).
## Установка скилла в браузерные клиенты
- Демо работает без установки: https://vladimir-human.github.io/humanizer-ru/ — текст не покидает браузер.
- Claude.ai и Claude Code: добавьте скилл из каталога `dsh/skills/humanizer-ru` по инструкции установки в [docs/USAGE.md](docs/USAGE.md#установка-за-30-секунд).
- Агентные клиенты с поддержкой agentskills.io (opencode, DeepSeek Harness): распакуйте текстовый бандл из архива релиза.
- Браузерное расширение отклонено: новый поверхностный контур (permissions, store review) не окупается; очередь идей — [research/BACKLOG.md](research/BACKLOG.md).
Каталоги: [Glama MCP](https://glama.ai/mcp/servers/Vladimir-Human/humanizer-ru) · [skills.sh](https://www.skills.sh/vladimir-human/humanizer-ru/humanizer-ru).
## Одноимённые проекты
На GitHub есть скиллы с тем же именем и другим содержанием. Снимок 2026-09-11
(проверка: `gh repo view <владелец>/humanizer-ru --json stargazerCount`):
- [ilyautov/humanizer-ru](https://github.com/ilyautov/humanizer-ru) — 333 звезды: позиционирование «убирает признаки нейросети», публичного реестра чисел нет; приглашён к совместному публичному бенчмарку ([issue 220](https://github.com/Vladimir-Human/humanizer-ru/issues/220)).
- [smixs/humanizer-ru](https://github.com/smixs/humanizer-ru) — 154 звезды: детерминированный линтер; единственный тёзка, включённый в [LEADERBOARD.md](LEADERBOARD.md) как кандидат (парный прогон 2026-09-03).
- Этот проект — проверяемая гигиена вставки из чат-интерфейсов: каждое число из детерминированных снимков и [реестра фактов](eval/facts/facts.v1.json), границы — в [THREAT-MODEL](docs/THREAT-MODEL.md), ложные срабатывания — в [бенчмарке](demo/benchmark/index.html).
Пришли по имени — выбирайте по способу проверки, а не по звёздам.
## Цифры проекта
- 58 паттернов машинного письма и 40 regex-маркеров (классы A и B).
- Записи доказательств: 38 из 40 маркеров (реестр research/fixtures/marker-sources.json).
- Гейты: 156 гейтов полного check_all (145 в --quick); фикстуры в tests/fixtures/, документация сверяется check_docs.py, персона описана в PERSONA.md.
Почему так называется: имя унаследовано от первой функции, снимавшей
слой копипасты после чат-бота и возвращавшей тексту человеческий вид.
Вторая функция продукта: диагностика, подсветить машинные следы и
объяснить причину каждого флага, без вердиктов об авторстве. Обе
функции работают офлайн, текст не покидает вашу машину.
Классовая разбивка FP, exploratory, вне предрега F16: класс A: 0 случаев на 12314 текстов-неносителей; класс B: 8 случаев на 12314, то есть 0.00065, Wilson 95% CI от 0.0003 до 0.0013; контрольный набор 40 текстов: флагов 0; тяжёлый домен S4 legal и official, n=381, дефицит объёма зафиксирован в предреге: 18 случаев на 381, то есть 0.0472, Wilson 95% CI от 0.0301 до 0.0734; знаменатели: 12354 полный корпус F16, 12314 validation-страта.
## Подробнее
- [Что ему давать и как переписывать](docs/USAGE.md#что-ему-давать)
- [Установка вручную и использование](docs/USAGE.md#использование)
- [Архитектура и паттерны](docs/USAGE.md#архитектура)
- [Безопасность и отличия версий](docs/USAGE.md#безопасность)
- [Источники](docs/USAGE.md#источники)
## Regex-маркеры: классы A и B
Класс A — жёсткие артефакты копипасты: служебные ссылки и метки цитирования
чат-интерфейсов. Класс B — контекстные индикаторы: невидимые символы,
скрытая раскладка, placeholder-поля; одного совпадения B недостаточно.
Класс маркеров — `copypaste_artifacts`; ретайр маркера возможен только по
провалу на своём классе, статусы и даты — в `markers.v1.json`.
## История изменений
История изменений — в [CHANGELOG.md](CHANGELOG.md) и на [GitHub Releases](https://github.com/Vladimir-Human/humanizer-ru/releases).
## Лицензия
MIT
## Статус проекта
[](https://github.com/Vladimir-Human/humanizer-ru/releases)
[](https://www.skills.sh/vladimir-human/humanizer-ru/humanizer-ru)
[](https://github.com/Vladimir-Human/humanizer-ru/blob/main/eval/facts/self-audit.v1.json)
Догфудинг — проект проверяет собственные тексты собственными правилами: порог маркеров стиля в файлах поставки сверяется гейтом `scripts/check_own_style.py` (текущий максимум выводится в его запуске).
TDQS
Scored across 7 tools
Tools have overlapping purposes: humanizer_clean, humanizer_markers, and humanizer_polish all deal with cleaning/normalizing text artifacts. Descriptions provide clarifications (e.g., clean for full cleanup, markers for detection of copy-paste marks, polish for typographic normalization), but the boundaries between them can still be confusing without careful reading.
All tool names follow a consistent pattern: humanizer_ followed by a singular noun or verb (clean, facts, report, detect, markers, polish, scan). The prefix is uniform, and naming is predictable.
7 tools is well within the typical 3-15 range and appears appropriate for the domain of text humanization/analysis, offering distinct functions like cleaning, fact-checking, reporting, detection, marker handling, polishing, and scanning.
The tool set covers key operations: cleaning, fact verification, reporting, detection, marker handling, typographic polishing, and scanning. However, there is no explicit tool for stylistic rewriting or authorship judgment (though these are intentionally excluded), and some functionality (e.g., marker removal) is only partially accessible via MCP. Minor gaps exist but core needs are met.