Этот skill разработан в рамках проекта VibeCoding1C для подписчиков Telegram-канала It Does Matter.
Редактор русского текста после нейросети. Убирает канцелярит, пустые зачины и выводы, рекламную накачку и обёртки чат-бота — чтобы текст было легко читать. Факты, термины и позицию автора не трогает. За обходом ИИ-детекторов не гонится: мерило — читатель, а не GPTZero.
По умолчанию говорит на разговорном ИТ-языке и знает терминологию 1С: «проведение документа» и «регламентное задание» канцеляритом не считает. Калиброван на живых статьях с Хабра: вводные, усилители, ирония и «не только… но и» — голос автора, а не дефект.
Две части:
- Линтер
humanizer_ru— Python, без зависимостей. Находит дефекты, считает ритм, выдаёт оценку 0–100. Годится как гейт в CI. - Скилл
skills/humanizer-ru/— инструкция для LLM-агента (Claude Code, Codex, Cursor, любой чат), который правит по находкам и каталогу паттернов.
Правилами текст не переписать — это делает модель. Линтер подсвечивает и проверяет результат.
Отправьте агенту одну фразу:
Установи skill по ссылке https://github.com/comol/Humanizer_RU глобально для себя и проверь, что
humanizer-ruдоступен.
Агент установит стандартный Agent Skill одной командой:
npx skills add comol/Humanizer_RU --skill humanizer-ru --global --yesКоманда работает через открытый Skills CLI: он сам определяет поддерживаемые агенты и размещает skill в их каталогах. Для установки только в текущий проект уберите --global. Python-пакет ставить не обязательно: сам редактор работает по SKILL.md; линтер запускается агентом отдельно, когда доступны Python 3.10+ и uv.
# из корня репозитория, установка не обязательна
python -m humanizer_ru lint статья.md
python -m humanizer_ru lint статья.md --genre article --json
python -m humanizer_ru brief статья.md --output prompt.md # промпт для любой LLM
python -m humanizer_ru brief статья.md --genre article --voice skills\humanizer-ru\knowledge\voice-author.md
python -m humanizer_ru selftest
python tests\run_tests.pyЕсли на проверку отдаёте ответ агента целиком (текст, ---, «что изменено»), добавьте --first-block: линтер возьмёт только чистовик до разделителя, иначе он найдёт цитаты «до» в резюме.
Или поставить:
pip install -e . # появится команда humanizer-ru
pip install -e .[morph] # + pymorphy3: цепочки родительных, сущ./глаг.Пример вывода:
ОЦЕНКА: 30/100 → переписать (≥85 чисто · 60–84 точечная правка · <60 переписать)
-40 пустышки и штампы: 12 (9.4/100 слов)
-19 канцелярит и сигналы: 5 (3.9/100 слов)
-11 ровный ритм (CV=0.246)
ПУСТЫШКИ И ШТАМПЫ — убирать (12):
стр. 1 [intro-empty] «В современном мире» автоматизация тестирования игра…
→ Начать с факта, действия или проблемы читателя.
Живой текст с тире, списками и терминами получает 85–100: 16 статей с Хабра в --genre article дают 78–100 без единой ошибки (корпус в tests/fixtures/human/habr/). Если живой текст получает меньше 70 — это баг линтера, заводите кейс в tests/fixtures/evals.json. На фрагментах короче ~50 слов оценка скачет (плотность считается на 100 слов) — смотрите на находки, а не на число.
Жанр решает: фрагмент ТЗ из корпуса в --genre spec получает 100, в auto — 79. Канцелярит в ТЗ — язык жанра, а не дефект.
| Команда | Что делает |
|---|---|
lint ФАЙЛ [--genre Ж] [--json] [--fail-below N] |
находки по уровням, метрики, оценка; код возврата 1 при ошибках или оценке ниже N |
analyze ФАЙЛ [--mode careful|deep] |
то же в JSON плюс редакторский чек-лист |
brief ФАЙЛ [--voice голос.md] [--output prompt.md] |
инструкция + находки + текст одним промптом для LLM; --voice добавляет паспорт голоса автора |
selftest |
60 встроенных проверок правил |
genres |
жанры и что каждый снимает |
Вместо файла — - для stdin.
humanizer-ru lint инструкция.md --genre doc # повтор «нажмите», списки — норма
humanizer-ru lint тз.md --genre spec # канцелярит и пассив — язык жанра
humanizer-ru lint пост.txt --genre post # эмодзи и жаргон — формат площадки
Жанры: auto, doc, article, post, letter, spec, legal, academic, fiction.
- error — артефакты копипаста из чат-бота (
turn0search3,utm_source=chatgpt.com), «Конечно! Вот текст», «Надеюсь, это поможет», заглушки[укажите сумму], обрыв на предлоге или запятой. Гейт не пройден. - high — «в современном мире» в начале фразы, «важно отметить», «играет ключевую роль», «подводя итог», «эксперты считают», «не просто X, а Y». Убирать.
- low — «осуществлять», «данный запрос», «представляет собой», пассив «нами было реализовано», рекламные оценки, кальки, ровный ритм, стены текста;
-weak-коды по контексту: «давайте посмотрим» (announce-weak), «нужно понимать, что» (transition-weak). Смотреть кластерами. - note — усилители, заполнители «по сути» (
filler), много жирного, повтор глагола, много тире, нет точки в конце (unfinished). На усмотрение автора — у живого текста это чаще голос.
��его линтер не делает намеренно: не запрещает тире, вопросы, двоеточия, списки, «не только… но и», «в данном случае», формальный регистр, вводные и усилители автора. Это не дефекты читаемости.
Линтер прогнали по 16 статьям владельца с Хабра (2022–2026, 20 тысяч слов). До калибровки живые статьи получали 34–94 и три ложных «обрыва»; после — 78–100 без ошибок. Что изменилось:
- Голос ≠ дефект. «По сути», «собственно», «в любом случае» —
fillerуровня note; «не только… но и» не помечается; «в данном случае», «на данный момент» исключены изbureau-word; «из уникального» — не реклама; «прекрасная мысль попробовать» — не похвала чат-бота; «в современном мире» внутри фразы — не зачин. - Контекст решает. «Давайте посмотрим» →
announce-weak, «нужно понимать, что» →transition-weak(low, а не high); «Итак, приступим» и «В итоге,» больше не «пустой вывод». - Разметка Хабра. Строки-ярлыки «Задача 2:», «Kiro» не считаются парцелляцией; реплики «— …» — цитата; экспорт без пустых строк между абзацами не склеивается в стену; многоточие перед строчной — пауза, не точка.
- Стена текста по жанру: 120 слов в
auto/doc, 200 вarticle, 220 вacademic. - Обрыв честнее.
truncated(error) — только если фраза кончается предлогом, союзом, запятой или тире; просто нет точки —unfinished(note); подпись со ссылкой на канал — не обрыв. - Оценка по плотности. Штраф за пустышки и канцелярит считается в основном на 100 слов, а не по числу находок — лонгрид больше не проигрывает заметке.
- Повтор глагола без pymorphy3 узнаёт глагол строже: «интервал», «правило», «деятельность» больше не «глаголы».
- Паспорт голоса владельца —
skills/humanizer-ru/knowledge/voice-author.md;brief --voiceвставляет его в промпт. Словарь терминов пополнен лексикой разработки с ИИ (MCP, SDD, harness, семантический поиск, «сети», «курсор»). - Корпус: +16 живых статей, +15 кейсов, selftest 40 → 60.
Папка skills/humanizer-ru/ соответствует открытому формату Agent Skills. Через Skills CLI один и тот же пакет устанавливается в Claude Code, Codex, Cursor, Gemini CLI и другие поддерживаемые агенты. Команда из раздела установки сама находит доступные агенты; для конкретного добавьте, например, --agent codex.
После установки достаточно попросить: «очеловечь», «сделай читаемым», «убери канцелярит» или «проверь на слоп». Skill пройдёт по каталогу паттернов и вернёт текст + «что изменено» + «на решение автора» + «нужны данные». Если доступны Python и uv, агент дополнительно запустит линтер прямо из GitHub.
Файлы скилла:
SKILL.md— процесс: жанр → аудит → правка по находкам → проверка; три принципа и факт-замок.references/patterns.md— 42 паттерна с примерами из ИТ/1С.references/false-positives.md— что не дефект.references/voice.md— паспорт голоса «разговорный ИТ» и как снять голос с образцов автора.references/terms-it-1c.md— термины, которые не канцелярит; с 0.3.0 — и лексика разработки с ИИ.knowledge/corrections.md— ваши правила поверх дефолтов.knowledge/voice-author.md— паспорт голоса владельца, снятый с его статей: ритм, структура статьи, лексика, что править, что не трогать. Образец, как такой паспорт выглядит для любого другого автора.
Нет агента — humanizer-ru brief файл.txt даст промпт для любого чата с моделью.
- Объективное правим — вкусовое предлагаем.
- Голос автора неприкосновенен: стерилизация хуже канцелярита.
- Минимальная достаточная правка: чистый абзац не трогаем.
- Факт-замок: ни одного числа, имени или названия, которых не было в исходнике. Нет данных —
[нужны данные]. - Лучше пропустить дефект, чем испортить живую фразу. Ложное срабатывание — баг.
Подробнее — docs/methodology.md.
humanizer_ru/ линтер: rules.py (правила), terms.py (словарь ИТ/1С), metrics.py, linter.py, cli.py, brief.py
skills/humanizer-ru/ скилл для LLM-агентов
tests/ run_tests.py (без зависимостей), test_core.py (pytest), fixtures/ (evals.json, корпус human/, human/habr/ и ai/)
docs/methodology.md зачем так
THIRD_PARTY_NOTICES.md что взято из smixs, Vladimir-Human, ilyautov, chukovsky (все MIT)
Проект собран поверх открытых наработок: smixs/humanizer-ru, Vladimir-Human/humanizer-ru, ilyautov/humanizer-ru, beaverbeard/chukovsky — все MIT, см. THIRD_PARTY_NOTICES.md. Книги: Ильяхов и Сарычева «Пиши, сокращай», Чуковский «Живой как жизнь», Галь «Слово живое и мёртвое».
Лицензия — MIT.