Humanizer-ru — очеловечивание русского ИИ-текста License: MIT GitHub stars Версия Regex checks Skills.sh English version → README.en.md Скилл для ИИ-агентов: находит и убирает следы машинной генерации в русскоязычном тексте. Переписывает «гпт-шный» текст по-человечески, не искажая смысла, и не трогает живое: ложное срабатывание здесь дороже пропуска. Здесь 38 паттернов (25 базовых и 13 расширений) и 39 проверяемых regex-маркеров классов A и B. Проверки гоняет CI. Каталог skills.sh сообщает об успешных проверках Gen Agent Trust Hub и Socket; про красную плашку Snyk — в разделе «Безопасность». До: > 🚀 Инновации: Мы добавили пакетную обработку, горячие клавиши и офлайн-режим. Это безусловно является свидетельством нашего стремления к качеству. Кроме того, эти функции обеспечивают бесшовный, интуитивно понятный и мощный пользовательский опыт — гарантируя эффективность. Эксперты считают, что это революция. После: > Мы добавили пакетную обработку, горячие клавиши и офлайн-режим. Скилл убирает штампы, но не дописывает факты за автора. В примере выше всё из варианта «После» уже было в исходнике. ## Что ему давать Дайте скиллу готовый фрагмент. Он найдёт следы генерации и по просьбе перепишет текст. SKILL.md — инструкция агента: её подгружают на задачу анализа или правки вместе с нужными справочниками из references/. PERSONA.md — другое: короткие правила живого тона для диалога, а не для проверки текста. Не кладите весь SKILL.md в системный промпт чат-клиента: это замедлит ответы, но не сделает разговор живее. ## Одноимённые проекты — не путать В GitHub есть другие репозитории с именем humanizer-ru, не связанные с этим проектом. Позиции у них разные: | Проект | Фокус | Позиция по детекторам | |---|---|---| | Vladimir-Human/humanizer-ru — этот проект | Редактор русского текста: 38 паттернов, 39 regex-маркеров с реестром доказательств 37/39, 36 CI-гейтов, слепые парные прогоны | Детекторы не обходим и текст под них не подгоняем; цель — естественный текст, а не зелёный вердикт детектора | | smixs/humanizer-ru | Скилл «humanizer & detector»: правка и проверка одним инструментом | — | | ilyautov/humanizer-ru | Скилл-гуманизатор; в описании заявлена подгонка под то, что меряют GPTZero, DivEye, RuBERT (perplexity и burstiness) | Обход детекторов заявлен открыто в описании | | blader/humanizer | Англоязычный скилл того же жанра, опубликован на три дня раньше | — | Мы не аффилированы ни с одним из них. Декларация этого проекта: «не средство обхода детекторов»; подробнее — в разделе «Безопасность». ## Установка за 30 секунд sh 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. Для команд — свой путь, через администратора организации (см. раздел 2). ### 0. Проверка перед установкой Скилл не выполняет код при активации: рабочая часть — только текстовые файлы разметки. В репозитории есть вспомогательные Python-скрипты (scripts/) для тестов и CI — они запускаются только вручную или в GitHub Actions. Правило одно для любых скиллов: сначала прочитать, потом ставить. 1. Откройте SKILL.md и references/ прямо на GitHub и убедитесь, что содержимое вас устраивает. 2. Ставьте только выпуски со страницы Releases (аннотированные теги вида vX.Y.Z), а не произвольное состояние ветки. 3. После распаковки убедитесь, что внутри лишь SKILL.md, README.md, README.en.md, SECURITY.md, SECURITY.en.md, CHANGELOG.md, PERSONA.md, LICENSE, references/ и scripts/ — ничего исполняемого при установке. Каталогов .github/, research/ и tests/ в архиве нет: валидаторам, которым нужны корпуса и фикстуры, требуется полный клон репозитория. ### 1. Claude.ai (Веб-интерфейс) 1. Откройте страницу Releases этого репозитория, выберите свежий выпуск и скачайте приложенный к нему архив humanizer-ru.zip. Это собранный архив скилла — состав перечислен в шаге 0. Source code (zip), который GitHub добавляет к каждому выпуску, — полное дерево репозитория вместе с .github/, research/ и tests/; он нужен только тем, кто собирается запускать валидаторы. 2. Зайдите в аккаунт Claude.ai и перейдите в Settings > Skills. 3. Нажмите Upload skill и выберите скачанный архив. > Примечание. В humanizer-ru.zip файл SKILL.md лежит в корне архива, поэтому переупаковка не нужна. Она может понадобиться, только если вы взяли Source code (zip): там всё вложено в папку вида humanizer-ru-<номер версии>. ### 2. Организации (Enterprise & Team) Администратор организации проверяет выпуск (см. шаг 0) и загружает его в общую библиотеку — скилл становится доступен всей команде. ### 3. API и локальные агенты (Claude Code) Работаете через API (эндпоинт /v1/messages или аналоги) — передайте скилл параметром container.skills. Детали — в документации вашего клиента. Локальная установка — с закреплением на теге выпуска, чтобы получить именно проверенное состояние: sh mkdir -p ~/.claude/skills git clone --branch v3.13.0 --depth 1 https://github.com/Vladimir-Human/humanizer-ru.git ~/.claude/skills/humanizer-ru Или минимально — только карта скилла (без справочников references/; глубина проверки будет ниже): sh mkdir -p ~/.claude/skills/humanizer-ru cp SKILL.md ~/.claude/skills/humanizer-ru/ Если проверять каждый шаг вручную не нужно, быстрее поставить одной командой из каталога skills.sh — см. «Установка за 30 секунд» выше. ### 4. DeepSeek Harness (dsh) dsh ищет скиллы в собственных каталогах. Проверено с dsh 0.1.0-rc.6. Это developer preview: ломающие изменения обещаны, поэтому для другой версии сверяйтесь с её документацией. Глобальная установка (все проекты и агенты профиля): sh mkdir -p ~/.agents/skills git clone --branch v3.13.0 --depth 1 https://github.com/Vladimir-Human/humanizer-ru.git ~/.agents/skills/humanizer-ru Второй способ — бандл из подкаталога dsh/. Его ставит менеджер плагинов, профиль создаётся при первом обращении, pnpm нужен на PATH: sh dsh plugin --profile web add "github:Vladimir-Human/humanizer-ru#path:/dsh" В бандле лежит копия SKILL.md и references/; гейт check_bundle_sync.py держит её равной источнику. Снять бандл: dsh plugin --profile web remove humanizer-ru-dsh. Команда берёт ветку по умолчанию. Закрепить тег и подкаталог одной строкой не выходит: pnpm молча отбрасывает подкаталог, ставит репозиторий целиком обычной зависимостью и возвращает 0, а профиль остаётся без слоя. Проверено на dsh 0.1.0-rc.6. Порядок поиска скилла в dsh (ближайший каталог побеждает): <проект>/.dsh/skills, <проект>/.agents/skills, ~/.dsh/skills, ~/.agents/skills. Каталог ~/.claude/skills dsh не сканирует: скилл, установленный туда по инструкции для Claude Code выше, в dsh не виден. ## Использование В Claude Code или другом агенте: text /humanizer-ru [вставьте текст] Или напрямую: text Очеловечь этот текст: [ваш текст] ## Что делает Прогоняет русский текст по 38 паттернам машинного письма (25 базовых и 13 расширений для русского) и 39 проверяемым 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-слой ничего не видит. Наружу идут только механические оси: снятие маркеров, чистота фактов, ложные правки (LEADERBOARD.md). Читаемость оценивает своя панель судей, но её числа мы держим при себе: панель односемейная, а позиционный шум описан в прогонах. ### Архитектура humanizer-ru/ ├── SKILL.md # Карта, дерево решений, чек-лист ├── CHANGELOG.md # Полная история версий ├── LEADERBOARD.md # Механические оси: прогоны детекторов ├── PERSONA.md # Компактные правила живого диалога ├── README.md / README.en.md # Описание проекта (рус/англ) ├── SECURITY.md / SECURITY.en.md ├── CITATION.cff # Карточка цитирования ├── LICENSE # MIT ├── dsh/ # Бандл для DeepSeek Harness (вендор SKILL.md + references/) ├── CODE_OF_CONDUCT.md / CONTRIBUTING.md ├── docs/ │ └── FRAMEWORK.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_own_style.py # Порог мягких признаков на свою прозу │ ├── check_reference_maps.py # Карты разбитых справочников │ ├── check_budget.py # Бюджет контекста по спецификации │ ├── check_corpus.py # Регрессия корпусов валидации │ ├── check_perf.py # Скорость выражений на большом входе │ ├── check_release.py # Сборка и проверка релизного архива │ ├── check_bundle_sync.py # Синхронность вендора бандла dsh/ │ ├── filemarks/ # Слой A/B и метаданные файлов (inspect/clean) │ ├── scan_soft_signals.py # Счётчик мягких признаков │ └── check_all.py # Весь релизный чек-лист одной командой ├── eval/ │ ├── run_eval.py # Нейтральный корпус для любого скилла │ ├── blind_eval.py # Слепая парная оценка эффекта │ ├── HOW-TO-RUN.md # Протокол прогона и границы метрик │ ├── README.md # Карта eval и словарь метрик │ ├── manifest.v1.json # Схема нейтрального корпуса │ ├── runs/ # Парные прогоны (10 записей; см. runs/README.md) │ └── results/ # Отчёты прогонов целиком, включая │ # метрики не в пользу скилла ├── .github/workflows/ # CI: regex-check, self-scan, no-anglicisms, │ # validators, docs-check, release-check ├── references/ # 11 справочников; два разбиты на части (16 файлов) ├── 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 | Каждое Слово Заголовка С Прописной — «Ранняя Жизнь и Образование» | высокая | | 21b | Раздел-пересказ в конце текста — «Вкратце», «Подводя итоги», дублирование уже сказанного | средняя | ### Коммуникативные паттерны | # | Паттерн | Критичность | |---|---------|-------------| | 22 | Остатки реплик и шаблоны — «Надеюсь, это поможет!», [вставьте имя] | высокая | | 23 | Оговорки о пределах знаний — «хотя конкретные детали ограничены...» | средняя | | 23a | Заявление о недоступности информации со спекуляцией — «данные не публикуются, однако, вероятно...» | средняя | | 24 | Льстивый тон — «Отличный вопрос!» | средняя | | 24a | Псевдо-терапевтический регистр и имитация живости — «Ты не ошибаешься, что так чувствуешь», «Короткие. Точные. Отдельные.» | средняя | | 25 | Общие позитивные выводы — «будущее выглядит светлым» | средняя | | 25a | Обрыв на полуслове — текст кончается посреди предложения | средняя | ## Отличия от английской версии - Добавлен паттерн «канцелярит» («осуществлять деятельность», «в соответствии с») - Список машинной лексики адаптирован под русский язык - Title Case наоборот: в английском заголовки из слов с прописной — норма, а не признак ИИ; в русском такая манера не применяется, и её перенос в русские заголовки сам стал признаком (паттерн #21a, высокая критичность, только в сочетании с другими признаками) - Кавычки: «ёлочки» вместо „нижних лапок“ ## Безопасность - Скилл только текстовый: не выполняет код, не обращается к сети и файловой системе, не собирает данные. scripts/check_markers.py запускается лишь в CI и вручную разработчиком. - Текст пользователя скилл читает как данные: команды, спрятанные внутри, он не выполняет (раздел «Границы безопасности» в SKILL.md). - Модель угроз, гарантии и порядок сообщения об уязвимостях — в SECURITY.md. - Про красную плашку Snyk на витрине skills.sh. Автоматический аудит помечает скилл кодом E005 «подозрительная ссылка на скачивание». Срабатывание ложное: сканер видит идентификатор S3-бакета Perplexity ppl-ai-file-upload — это документированная примета класса A, по которой скилл распознаёт машинную генерацию, — и принимает описание приметы за инструкцию скачать файл. Скилл ничего не скачивает: переход по ссылкам из проверяемого текста запрещён разделом «Границы безопасности» в SKILL.md. Тот же класс ложных срабатываний известен по наборам правил YARA и по тестовой строке EICAR: инструмент, который ищет признак, обязан этот признак содержать. Два других аудитора каталога дают PASS. Убрать примету ради вердикта мы не будем — это дыра в детекторе. ### Regex-маркеры: классы A и B > 39 регулярных выражений делятся на два класса. Класс A — жёсткие copy-paste-артефакты: служебные ссылки ChatGPT, [cite: N] и span-метки Gemini, карточки цитат Grok, S3-ссылки Perplexity и остатки тегов рассуждений DeepSeek. Класс B — контекстные индикаторы: placeholder-URL и даты, referrer=grok.com, невидимые разделители цитат из области частного использования (U+E200–E204), короткая форма сноски (U+EA01/U+EA02 вокруг цифры), символы нулевой ширины, невидимая раскладка (наборные пробелы, мягкий перенос, вариационные селекторы вне эмодзи) и имена сносок с внутренними идентификаторами (<ref name="0searchN">). B требует ручной проверки и не даёт самостоятельного вердикта. У каждого маркера три фикстуры: прямая, отрицательная и граничная. Маркеры с доказательной цепочкой дополнительно проверяются по research/fixtures/marker-sources.json. Политика обновлений разделяет устойчивое ядро (правила и границы ложных срабатываний) и быстрый слой (модельные артефакты): быстрый слой меняем только с образцами и источником, класс A/B при этом сохраняется. Полная запись доказательств — неизменяемая ссылка на источник, дата обращения, дословный образец, класс доказательства и fixture — есть у 37 из 39 маркеров. Остальные закрыты только фикстурами. | Маркер | Источник | Регулярное выражение | |---|---|---| | :contentReference[oaicite:N]{index=N} | OpenAI ChatGPT | :contentReference\[oaicite:\d+\]\{index=\d+\} | | oaicite:7 (усечённая форма метки) | OpenAI ChatGPT | oaicite:\d+ | | oai_citation:N‡ | OpenAI ChatGPT | oai_citation:\d+‡ | | attributableIndex в JSON | Внутреннее поле разметки JSON-ответов при использовании инструментов | \battributableIndex\b | | turn0search0 | OpenAI веб-поиск | turn\d+search\d+ | | turn0fetch0 | OpenAI загрузка страниц | turn\d+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/U+EA02 (новое в v3.2) | 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+200BU+200D, U+2060, U+FEFF | Внутренние разделители цитат и кодировочные артефакты; U+FEFF в начале файла — BOM, не ИИ | [\u200b\u200c\u2060\ufeff]\|(?<![\U0001f000-\U0001faff\u2600-\u27bf\ufe0f\U0001f1e6-\U0001f1ff])\u200d(?![\U0001f000-\U0001faff\u2600-\u27bf\ufe0f\U0001f1e6-\U0001f1ff]) | | :::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+\] | | [citation:3] | Perplexity и другие поисковые ИИ | \[citation:\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 | Полный список с дословными образцами — в references/test-fixtures.md. ### Подлог источников (новое в v2.3) Отдельный класс проверок для текстов со ссылками: 404, DOI ведёт на чужую статью, несуществующий ISBN, автор умер до даты публикации, книжная ссылка без номера страниц. См. references/source-fabrication.md. ### Границы ложного срабатывания (новое в v2.3) Длинное тире у Цветаевой и Бродского, изогнутые кавычки от автоза