English version → README.en.md Скилл для ИИ-агентов: находит и убирает следы машинной генерации в русскоязычном тексте. 37 паттернов (25 базовых + 12 расширений), 38 проверяемых regex-маркеров классов A и B, автоматический прогон проверок в CI. Каталог skills.
FAQ
humanizer-ru is a Claude Code plugin with 1 hand-picked skill for content work, indexed on Flowy. Install it with the command on its page. It includes humanizer-ru. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
$ npx -y skills add Vladimir-Human/humanizer-ru --agent claude-code
Repo: Vladimir-Human/humanizer-ru
English version → README.en.md
Скилл для ИИ-агентов: находит и убирает следы машинной генерации в русскоязычном тексте. 37 паттернов (25 базовых + 12 расширений), 38 проверяемых regex-маркеров классов A и B, автоматический прогон проверок в CI. Каталог skills.sh сообщает об успешных проверках Gen Agent Trust Hub и Socket; про красную плашку Snyk — в разделе «Безопасность».
До:
🚀 Инновации: Мы добавили пакетную обработку, горячие клавиши и офлайн-режим. Это безусловно является свидетельством нашего стремления к качеству. Кроме того, эти функции обеспечивают бесшовный, интуитивно понятный и мощный пользовательский опыт — гарантируя эффективность. Эксперты считают, что это революция.
После:
Мы добавили пакетную обработку, горячие клавиши и офлайн-режим.
Скилл убирает штампы, но не дописывает факты за автора. В примере выше всё из варианта «После» уже было в исходнике.
Дайте скиллу готовый фрагмент. Он найдёт следы генерации и по просьбе перепишет текст. Не кладите весь SKILL.md в системный промпт чат-клиента: это замедлит ответы, но не сделает разговор живее. Для диалога возьмите короткие правила из PERSONA.md.
npx skills add https://github.com/vladimir-human/humanizer-ru --skill humanizer-ru
Установщик предложит выбрать агентов: Claude Code, Codex, Cursor, Gemini CLI, OpenCode и другие среды с поддержкой формата Agent Skills. Сам скилл состоит из текстовых инструкций и не исполняет код при работе. Команда npx запускает сторонний Skills CLI; если хотите проверить каждый файл до установки, используйте раздел «Установка вручную».
Скилл humanizer-ru ставится в Claude.ai и в локальный CLI Claude Code. Для команд есть отдельный путь установки на уровне организации.
Скилл не выполняет код при активации: рабочая часть — только текстовые файлы разметки. В репозитории есть вспомогательные Python-скрипты (scripts/) для тестов и CI — они запускаются только вручную или в GitHub Actions. Правило одно для любых скиллов: сначала прочитать, потом ставить.
SKILL.md и references/ прямо на GitHub и убедитесь, что содержимое вас устраивает.vX.Y.Z), а не произвольное состояние ветки.SKILL.md, README.md, README.en.md, SECURITY.md, SECURITY.en.md, CHANGELOG.md, PERSONA.md, LICENSE, references/ и scripts/ — ничего исполняемого при установке. Каталогов .github/, research/ и tests/ в архиве нет: валидаторам, которым нужны корпуса и фикстуры, требуется полный клон репозитория.humanizer-ru.zip. Это собранный архив скилла: его состав описан в шаге 0 и совпадает с ним точно. Source code (zip), который GitHub добавляет к каждому выпуску, — полное дерево репозитория вместе с .github/, research/ и tests/; он нужен только тем, кто собирается запускать валидаторы.Примечание. В
humanizer-ru.zipфайлSKILL.mdлежит в корне архива, поэтому переупаковка не нужна. Она может понадобиться, только если вы взялиSource code (zip): там всё вложено в папку видаhumanizer-ru-<номер версии>.
Администратор организации проверяет выпуск (см. шаг 0) и загружает его в общую библиотеку — скилл становится доступен всей команде.
При использовании API (эндпоинт /v1/messages или аналоги) передайте скилл через параметр container.skills — детали в документации используемого клиента.
Локальная установка — с закреплением на теге выпуска, чтобы получить именно проверенное состояние:
mkdir -p ~/.claude/skills
git clone --branch v3.8.0 --depth 1 https://github.com/Vladimir-Human/humanizer-ru.git ~/.claude/skills/humanizer-ru
Или минимально — только карта скилла (без справочников references/; глубина проверки будет ниже):
mkdir -p ~/.claude/skills/humanizer-ru
cp SKILL.md ~/.claude/skills/humanizer-ru/
Если проверять каждый шаг вручную не нужно, быстрее поставить одной командой из каталога skills.sh — см. «Установка за 30 секунд» выше.
В Claude Code или другом агенте:
/humanizer-ru [вставьте текст]
Или напрямую:
Очеловечь этот текст: [ваш текст]
Выявляет и исправляет 37 паттернов машинного текста на русском языке (25 базовых + 12 расширений для русского) и 38 проверяемых regex-маркеров классов A и B. Опирается на Wikipedia:Signs of AI writing и Википедия:Признаки сгенерированности текста.
С версии 2.3 SKILL.md — это карта с деревом решений. Полное описание паттернов и проверок лежит в подключаемых файлах references/.
С версии 3.8 мягкий слой стал счётным. scripts/scan_soft_signals.py находит кандидатов по четырём категориям признаков, считает каждый паттерн один раз на текст и применяет пороги дерева решений; жанровые исключения берутся из references/false-positives.md. Скрипт печатает цитаты и рекомендацию объёма правки, вердикта об авторстве не даёт — Главное правило остаётся за агентом. На человеческом контрольном корпусе он не находит ни одного признака, на выводах русских моделей находит кандидатов там, где regex-слой молчит.
humanizer-ru/
├── SKILL.md # Карта, дерево решений, чек-лист
├── CHANGELOG.md # Полная история версий
├── PERSONA.md # Компактные правила живого диалога
├── README.md / README.en.md # Описание проекта (рус/англ)
├── SECURITY.md / SECURITY.en.md
├── scripts/
│ ├── check_markers.py # Прогон regex-маркеров, режим --scan
│ ├── check_spec.py # Валидатор спецификации Agent Skills
│ ├── check_fixture_sources.py # Валидатор реестра источников
│ ├── count_style_markers.py # Счётчик стилевых нарушений
│ ├── check_docs.py # Согласованность документации
│ ├── check_examples.py # Гейт честности примеров До/После
│ ├── check_readme_parity.py # Паритет и правдивость витрины RU/EN
│ ├── check_budget.py # Бюджет контекста по спецификации
│ ├── check_corpus.py # Регрессия корпусов валидации
│ ├── check_perf.py # Скорость выражений на большом входе
│ ├── check_release.py # Сборка и проверка релизного архива
│ ├── scan_soft_signals.py # Счётчик мягких признаков
│ └── check_all.py # Весь релизный чек-лист одной командой
├── eval/
│ ├── run_eval.py # Нейтральный корпус для любого скилла
│ ├── blind_eval.py # Слепая парная оценка эффекта
│ ├── HOW-TO-RUN.md # Протокол прогона и границы метрик
│ ├── runs/ # Парные прогоны: 2026-07-26-baseline
│ └── results/ # Отчёты прогонов целиком, включая
│ # метрики не в пользу скилла
├── docs/REVIEW.md # Регламент review: три класса изменений
├── .github/workflows/ # CI: regex-check, self-scan, no-anglicisms,
│ # validators, docs-check, release-check
├── references/ # 11 справочников паттернов и маркеров
├── research/ # Протоколы, реестр, аудит и BACKLOG.md
└── tests/fixtures/ # Проверочные образцы
| # | Паттерн | Критичность |
|---|---|---|
| 1 | Усреднение — конкретика заменяется общими эпитетами «выдающийся», «титан» | высокая |
| 2 | Раздувание значимости — «ключевой момент в истории отрасли» | средняя |
| 3 | Перечисление СМИ — «цитировали NYT, BBC, Forbes» без контекста | средняя |
| 4 | Причастные хвосты — «символизируя... отражая...» | средняя |
| 5 | Рекламный язык — «жемчужина региона», «идеальное место» | средняя |
| 6 | Размытые эксперты — «эксперты считают» без источника | высокая |
| 7 | Вызовы и перспективы — «несмотря на трудности, продолжает процветать» | низкая |
| 8 | Канцелярит — «осуществлять деятельность» | средняя |
| 9 | Текст о тексте — описание статьи вместо предмета | средняя |
| 9a | Академические клише-заполнители — «актуальность темы обусловлена», «целью работы является» | средняя |
| 6a | Именованная псевдоатрибуция эпохи RAG — «критик подчеркнул непреходящее влияние» без опоры на источник | средняя |
| # | Паттерн | Критичность |
|---|---|---|
| 10 | Машинная лексика — «безусловно, синергия, ландшафт, погрузиться» | высокая |
| 11 | Избегание «есть» — «представляет собой» вместо «это» | средняя |
| 12 | «Не только..., но и» — отрицательные параллелизмы | средняя |
| 13 | Правило трёх — принудительные тройки | высокая |
| 14 | Погоня за синонимами — «герой... протагонист... персонаж» | низкая |
| 15 | Ложные диапазоны — «от Большого взрыва до тёмной материи» | средняя |
| 15a | Нелогичные деепричастные обороты — «используя метод, результаты улучшаются» | средняя |
| 15b | Каскад смягчений — «возможно, в некоторых случаях, в зависимости от» | средняя |
| 15c | Связки-переходы и заключительные обороты-затычки — «Однако стоит отметить...», «В заключение хочется отметить...» | средняя |
| 15d | Резкая смена стилистики внутри одного текста | низкая |
| 15e | Семантический сдвиг через английское поле — «основание науки», «адресовать проблему» | средняя |
| 15f | Отсутствие идиоматики — длинный текст без единого живого оборота | низкая |
| # | Паттерн | Критичность |
|---|---|---|
| 16 | Избыток тире и жирного шрифта | высокая |
| 17 | Эмодзи-списки — 🚀 Скорость: ... | высокая |
| 18 | Кавычки — "лапки" вместо «ёлочек» | средняя |
| 19 | Избыточные таблицы — таблица на 2-3 строки вместо текста | высокая |
| 20 | Следы Markdown — **жирный**, #заголовки в обычном тексте | высокая |
| 21 | Нарушение иерархии заголовков — прыжок с H1 на H3 | высокая |
| 21a | Каждое Слово Заголовка С Прописной — «Ранняя Жизнь и Образование» | высокая |
| # | Паттерн | Критичность |
|---|---|---|
| 22 | Остатки реплик и шаблоны — «Надеюсь, это поможет!», [вставьте имя] | высокая |
| 23 | Оговорки о пределах знаний — «хотя конкретные детали ограничены...» | средняя |
| 23a | Заявление о недоступности информации со спекуляцией — «данные не публикуются, однако, вероятно...» | средняя |
| 24 | Льстивый тон — «Отличный вопрос!» | средняя |
| 24a | Псевдо-терапевтический регистр и имитация живости — «Ты не ошибаешься, что так чувствуешь», «Короткие. Точные. Отдельные.» | средняя |
| 25 | Общие позитивные выводы — «будущее выглядит светлым» | средняя |
| 25a | Обрыв на полуслове — текст кончается посреди предложения | средняя |
38 регулярных выражений делятся на два класса. Класс A — жёсткие copy-paste-артефакты: служебные ссылки ChatGPT,
[cite: N]и span-метки Gemini, карточки цитат Grok, S3-ссылки Perplexity и остатки тегов рассуждений DeepSeek. Класс B — контекстные индикаторы: placeholder-URL и даты,referrer=grok.com, невидимые разделители цитат из области частного использования (U+E200–E204), символы нулевой ширины и имена сносок с внутренними идентификаторами. B требует ручной проверки и не даёт самостоятельного вердикта.
Каждый маркер проходит прямой, отрицательный и граничный fixture; маркеры с доказательной цепочкой дополнительно проверяются по research/fixtures/marker-sources.json. Политика обновлений разделяет устойчивое ядро (правила и границы ложных срабатываний) и быстрый слой (модельные артефакты): быстрый слой меняется только с образцами, источником и сохранением класса A/B.
Полная запись доказательств — неизменяемая ссылка на источник, дата обращения, дословный образец, класс доказательства и fixture — есть у 14 из 38 маркеров. Остальные закрыты только фикстурами. Валидатор печатает это число как есть, а не округляет его до удобного.
| Маркер | Источник | Регулярное выражение |
|---|---|---|
:contentReference[oaicite:N]{index=N} | OpenAI ChatGPT | :contentReference\[oaicite:\d+\]\{index=\d+\} |
oai_citation:N‡ | OpenAI ChatGPT | oai_citation:\d+‡ |
turn0search0, turn0fetch0 | OpenAI веб-поиск | turn\d+(search|fetch)\d+ |
<ref name="0search12"> | Контекстный след внутреннего инструмента в имени вики-сноски | <ref\b[^>]*\bname=["']\d+(?:search|fetch|file|image|news|video|ref)\d+["'] |
?utm_source=chatgpt.com | OpenAI ChatGPT | [?&]utm_source=chatgpt\.com |
?utm_source=openai | OpenAI API | [?&]utm_source=openai |
attached_file:// | OpenAI ChatGPT | attached_file:\/\/ |
grok_card:// | xAI Grok | grok_card:\/\/ |
vertexaisearch.cloud.google.com/grounding-api-redirect | Google Gemini | vertexaisearch\.cloud\.google\.com/grounding-api-redirect |
[^N^] | Microsoft Copilot | \[\^\d+\^\] |
【N†source】 | OpenAI Assistants | 【\d+(?::\d+)?†source】 |
citeturn0file0 | OpenAI ChatGPT (поток) | citeturn\d+[a-z]+\d+ |
turn0file2, fileciteturn0file2turn0file6 | OpenAI file_search | turn\d+file\d+ |
\]\(sandbox:/mnt/data/...\) | OpenAI ChatGPT (анализ данных) | \]\(sandbox:/mnt/data/ |
Невидимые символы U+E200–E204 | OpenAI ChatGPT (служебные разделители цитат) | [\ue200-\ue204] |
Короткая форма сноски: цифра в U+EA01/ (новое в v3.2) |
Полный список с эталонными образцами — в references/test-fixtures.md.
Отдельный класс проверок для текстов со ссылками: 404, DOI ведёт на чужую статью, несуществующий ISBN, автор умер до даты публикации, книжная ссылка без номера страниц. См. references/source-fabrication.md.
Длинное тире у Цветаевой и Бродского, изогнутые кавычки от автозамены macOS, правило трёх в риторической прозе, канцелярит в юридическом документе — это не признаки ИИ. Скилл намеренно не исправляет такие случаи. См. references/false-positives.md.
references/llm-fingerprints.md не ведёт каталог актуальных версий моделей. Он описывает уровни доказательств, воспроизводимые артефакты и локальные наблюдения с явными ограничениями атрибуции. Версию или доступность модели нельзя выводить из стилистического признака без первичного датированного источника. Там же собраны ручные мягкие сигналы русских моделей — GigaChat, Алисы и YandexGPT: они помечены как наблюдения без корпусного подтверждения, регулярных выражений для них нет.
Шкала критичности: высокая — мгновенно выдаёт ИИ · средняя — сильный сигнал · низкая — слабый сигнал
scripts/check_markers.py запускается лишь в CI и вручную разработчиком.SKILL.md).ppl-ai-file-upload — это документированная примета класса A, по которой скилл распознаёт машинную генерацию, — и принимает описание приметы за инструкцию скачать файл. Скилл ничего не скачивает: переход по ссылкам из проверяемого текста запрещён разделом «Границы безопасности» в SKILL.md. Тот же класс ложных срабатываний известен по наборам правил YARA и по тестовой строке EICAR: инструмент, который ищет признак, обязан этот признак содержать. Два других аудитора каталога дают PASS. Убрать примету ради вердикта мы не будем — это дыра в детекторе.Актуальная версия — на значке в начале страницы. Полную историю изменений смотрите в CHANGELOG.md и на странице GitHub Releases.
MIT
.editorconfig
.gitattributes
.github/
dependabot.yml
ISSUE_TEMPLATE/
config.yml
missed-marker.yml
pull_request_template.md
workflows/
docs-check.yml
no-anglicisms.yml
regex-check.yml
release-check.yml
self-scan.yml
validators.yml
.gitignore
CHANGELOG.md
CITATION.cff
CODE_OF_CONDUCT.md
CONTRIBUTING.md
docs/
REVIEW.md
eval/
blind_eval.py
HOW-TO-RUN.md
manifest.v1.json
README.md
results/
.gitkeep
2026-07-26-baseline.json
run_eval.py
runs/
2026-07-26-baseline/
2026-07-26-baseline-verdicts.json
manifest.json
source/
ai-alisa-nebo.txt
ai-alisa-pechat.txt
ai-gigachat-grechka.txt
ai-gigachat-podarok.txt
human-it-notation.txt
human-wikipedia.txt
with/
ai-alisa-nebo.txt
ai-alisa-pechat.txt
ai-gigachat-grechka.txt
ai-gigachat-podarok.txt
human-it-notation.txt
human-wikipedia.txt
without/
ai-alisa-nebo.txt
ai-alisa-pechat.txt
ai-gigachat-grechka.txt
ai-gigachat-podarok.txt
human-it-notation.txt
human-wikipedia.txt
README.md
LICENSE
PERSONA.md
README.en.md
README.md
references/
chatbot-artifacts.md
communication-patterns.md
content-patterns.md
false-positives.md
language-patterns.md
llm-fingerprints.md
quantitative-heuristics.md
rewrite-guide.md
source-fabrication.md
structural-style-patterns.md
test-fixtures.md
research/
ab/
A/
q01.txt
q02.txt
q03.txt
q04.txt
q05.txt
B/
q03.txt
C/
q01.txt
q03.txt
persona-pilot-results.md
AUDIT-2026-07-17.md
AUDIT-2026-07-21.md
BACKLOG.md
CONSILIUM-REPORT.md
FINAL-PREMERGE-REPORT.md
fixtures/
marker-sources.json
GAPS.md
protocols/
le-chat-research-protocol.md
le-chat-test-log.md
persona-ab-protocol.md
raw/
alisa/
01-слепая-печать.txt
02-почему-небо-голубое.txt
03-столица-австралии.txt
gigachat/
01-слепая-печать.txt
02-почему-небо-голубое.txt
03-столица-австралии.txt
04-гречка.txt
05-подарок-коллеге.txt
le-chat/
01-fast-канберра.txt
02-think-канберра.txt
03-fast-небо-голубое.txt
04-deep-research-канберра.txt
RELEASE-DRAFT-v3.4.0.md
RELEASE-DRAFT-v3.5.0.md
RELEASE-DRAFT-v3.7.0.md
RELEASE-DRAFT-v3.7.1.md
RELEASE-DRAFT-v3.7.2.md
RELEASE-DRAFT-v3.7.3.md
RELEASE-DRAFT-v3.8.0.md
RESEARCH.md
validation/
boundary/
benign-wiki-ref.txt
emoji-zwj.txt
human/
01-turgenev-mumu.txt
02-gogol-shinel.txt
03-dostoevsky-white-nights.txt
04-tolstoy-anna-karenina.txt
05-pushkin-monument.txt
06-lermontov-hero.txt
07-chekhov-letter.txt
08-constitution.txt
09-wikipedia-modern.txt
10-wikinews.txt
11-it-notation.txt
README.md
scripts/
check_all.py
check_budget.py
check_corpus.py
check_docs.py
check_examples.py
check_fixture_sources.py
check_markers.py
check_perf.py
check_readme_parity.py
check_release.py
check_spec.py
count_style_markers.py
scan_soft_signals.py
SECURITY.en.md
SECURITY.md
SKILL.md
tests/
fixtures/
gemini-span.txt
openai-pua-short.txt
perplexity-s3.txt
ref-name-search.txt© 2026 Flowy · Free and open source
Built for Claude Code · Not affiliated with Anthropic
U+EA02| OpenAI ChatGPT |
[\uea01\uea02] |
<think>…</think> | DeepSeek и другие рассуждающие модели | (?m)^\s*</?think>|</think>\s*$ |
Сцепка ISO+3ISO+3 | OpenAI ChatGPT (ошибка отрисовки сносок) | [A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451)]\+\d+(?=[A-Z\u0410-\u042f\u0401][A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451&.\-]*(?: [A-Z\u0410-\u042f\u0401][A-Za-z\u0410-\u042f\u0430-\u044f\u0401\u0451&.\-]*){0,3}\+\d) |
[cite_start] | Google Gemini (анализ PDF) | \[cite_start\] |
[cite: 8], [Cite: 12], [cite: 19, 20, 21] | Google Gemini (ссылка на фрагменты источника; расширено в v3.2) | \[[Cc]ite:\s?\d+(?:,\s?\d+)*\] |
[span_N] start_span / end_span (новое в v3.5) | Google Gemini (внутренние границы фрагментов) | \[span_\d+\][\[(](?:start_span|end_span)[\])] |
Символы нулевой ширины U+200B–U+200D, U+2060, U+FEFF | Внутренние разделители цитат и кодировочные артефакты; U+FEFF в начале файла - BOM, не ИИ | [\u200b\u200c\u2060\ufeff]|(?<![\u1f000-\u1faff\u2600-\u27bf\ufe0f\u1f1e6-\u1f1ff])\u200d(?![\u1f000-\u1faff\u2600-\u27bf\ufe0f\u1f1e6-\u1f1ff]) |
:::writing{variant="document" id="68427"} | Writing-разметка интерфейса; атрибуция версии не подтверждена evidence registry | :::\w+\{variant |
turn0image0, turn0news0, turn0video0, turn0ref0 | OpenAI ChatGPT (мультимедиа-инструменты) | turn\d+(?:image|news|video|ref)\d+ |
?utm_source=copilot.com | Microsoft Copilot | [?&]utm_source=copilot\.com |
?referrer=grok.com | xAI Grok | [?&]referrer=grok\.com |
<grok-card ... data-type="citation_card"> | xAI Grok (XML-тег карточки) | <grok-card\b[^>]*\bcitation_card\b |
grok_render_citation_card_json={...} | xAI Grok (JSON карточек) | grok_render_citation_card_json |
【85†L261-269】, 【854†L119-L123】 | DeepSeek и производные (ссылки на строки) | 【\d+†L\d+(?:-L?\d+)?】 |
[attached_file:N], [web:N] | Perplexity (скобочная форма ссылок, осень 2025) | \[(?:attached_file|web):\d+\] |
citegenerated-reference-identifier | ChatGPT (сгенерированный идентификатор) | citegenerated-reference-identifier |
INSERT_SOURCE_URL, URL_HERE, PASTE_*_URL_HERE | Placeholder-URL из шаблонных ответов | \b(?:INSERT_SOURCE_URL(?:_\d+)?|URL_HERE|PASTE_\w+_URL_HERE)\b |
2025-XX-XX, 2022-11-XX | Placeholder-даты из шаблонных ответов (чаще всего «дата обращения») | \b(?:19|20)\d{2}-(?:0[1-9]|1[0-2]|[Xx]{2})-[Xx]{2}\b |
ppl-ai-file-upload в URL (новое в v3.5) | Perplexity (ссылки на Amazon S3-bucket) | ppl-ai-file-upload |