Files
dotfiles/agents/.agents/skills/ai-text-lint/SKILL.md
T
Dmitriy DementievandClaude 12a8d419ec refactor(skills): ai-text-lint переписан как оптика из пяти линз
- Зачем:
  - каталог из 29 паттернов писался, когда модели были слабее; сейчас
    потребители скилла — Opus 5 и GPT 5.6 Sol, которые знают эти правила
    по умолчанию, и 578 строк платили контекстом за no-op.
  - каталог закрыт: он стареет вместе со slop'ом и провоцирует checklist
    theater вместо суждения.
- Что:
  - references/patterns.md удалён, 29 ID сведены к пяти линзам:
    Клавиатура, Голос, Решётка, Вода, Ассистент; скилл ужался с 661
    строки до 145.
  - severity 29x3 сжата в профили трёх сред: красные ячейки
    группируются по среде, а не по паттерну, плюс «не X, а Y» везде.
  - основным режимом стала правка, отчёт вынесен во вторую ветку;
    Голос не правится молча и предъявляется первым, потому что требует
    мнения, случая и цифр автора, которых у скилла нет.
  - каталожную проверку заменил гейт человеческого дубля, плотность
    переведена из гейта в интерпретацию вердикта.
- Проверка:
  - слепой прогон новой версии на трёх входах: AI-проза для статьи,
    AI-сообщение в мессенджер, живое человеческое сообщение.
  - на человеческом тексте ноль ложных находок; десять дефектов
    инструкции, найденных прогоном, исправлены до коммита.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 10:55:57 +03:00

18 KiB
Raw Blame History

name, description
name description
ai-text-lint Оптика для вычитки текста на slop — признаки AI-генерации. По умолчанию правит текст, по запросу выдаёт отчёт с находками. Используй, когда пользователь просит: применить скилл и внести правки, вычистить AI-стиль, гуманизировать текст, вернуть авторский голос; проверить или пролинтовать статью, письмо, сообщение или резюме перед публикацией; быстро глянуть короткий текст на явные маркеры.

AI Text Lint

Оптика для вычитки готового текста. Скилл вызывается вручную и намеренно: держать эти линзы в голове во время письма — значит тратить внимание на форму вместо смысла. Сначала текст пишется, потом прогоняется.

Рамка

Один вопрос порождает всё остальное:

Похоже, что этот текст набрал руками вот этот человек вот в эту среду?

Пять линз — пять способов, которыми ответ бывает «нет».

Линзы

Клавиатура — набрал ли это человек руками?

Стоимость набора. Символ, который требует лишнего движения и ничего не даёт взамен, человек не ставит: em dash (Alt+0151), «ё» в дальнем углу, ёлочки, неразрывный пробел, троеточие одним символом, безупречно расставленные запятые в чате. Модель ставит всё это по умолчанию, потому что училась на отредактированных текстах.

Линза генеративна: она порождает не список символов, а вопрос «сколько усилий стоило это набрать». Новый типографский изыск попадёт под неё без обновления скилла.

Среда решает всё. В Telegram и Slack автозамены нет, поэтому em dash там — чужой след. В статье текст прошёл через редактор с автозаменой, поэтому в article клавиатура не находка вообще, кроме случая, когда точно известно, что текст набирался в plain-text.

Голос — этот ли человек говорит?

Есть ли в тексте автор. Признаки отсутствия: предмет описан со стороны, позиция не занята, критика обёрнута в два слоя позитива, плюсы и минусы разложены симметрично и вывода не следует, ссылка на авторитет размыта («эксперты считают»), оценка навешена хвостовым оборотом («...значительно упростив оркестрацию») вместо отдельной мысли, слеш вместо выбора («удалённо/гибрид»). Отдельный случай — безличность там, где уместно «я» или «мы»: «рекомендуется использовать пул соединений» вместо «мы держим пул на 20, больше упирается в базу».

Голос — единственная линза, которая правится добавлением, а не вычитанием. Добавить нужно то, чего у скилла нет: мнение автора, случай из его практики, его цифру, его сломанный прод. Поэтому Голос никогда не чинится молча — см. «Режим правки».

Решётка — рука так ровно не кладёт

Неестественно ровная сетка на любом уровне: предложения внутри абзаца, абзацы, пункты списка, разделы. Живой текст рваный: где-то проваливается в детали, где-то проскакивает тему одной строкой.

Одна цифра, чтобы линза не была вкусовщиной: считать длину однородных единиц в словах, брать размах (максимум минус минимум) и делить на среднее. Меньше 20% — решётка. Пять пунктов по 12, 11, 13, 12, 11 слов дают размах 17% — ровно подозрительно. Абсолютная длина роли не играет, важен разброс.

Второй слой — синтаксическая решётка: подряд идущие предложения по одной схеме, одинаковые зачины, буллеты «жирный заголовок — расшифровка» без единого исключения, форсированные триады («быстро, надёжно, удобно») там, где естественная группа — две вещи или четыре.

Вода — прибавилось ли информации?

Тест: убрать фразу и посмотреть, изменилось ли что-нибудь. Не изменилось — вода. Ловит канцелярит («является», «данный», «в рамках», «осуществлять»), раздувание важности, impact-фразы без цифр, стопки баззвордов, связки-пустышки («кроме того», «вместе с тем», «стоит отметить»), ложные диапазоны («от стартапов до корпораций»), хеджирование в три слоя.

Одна конструкция заслуживает имени, потому что срабатывает почти безошибочно и в любой среде: «не X, а Y», «не просто X, но и Y». Обещает контраст, доставляет пустоту.

Ассистент — не чат-бот ли это отвечает?

Артефакты интерфейса помощника, протёкшие в авторский текст: церемония на входе («В современном мире...», «Давайте разберёмся»), церемония на выходе («Надеюсь, это поможет», «Буду рад помочь»), подведение итогов там, где никто не просил, декоративные эмодзи в заголовках и буллетах, вступительное двоеточие перед каждым списком.

Самая механическая из пяти, ловится почти поиском по подстроке.

Калибровка по средам

Severity — свойство среды, а не находки. Одна и та же клавиатура: в статье не считается, в чате красный флаг.

article (статья, блог-пост, README) — вес на Голосе и Воде. 🔴 нет позиции автора · размытая ссылка на авторитет · раздувание важности · «В современном мире» · эмодзи в заголовках · буллеты «жирный заголовок + расшифровка»

message (Slack, Telegram, email коллеге) — вес на Клавиатуре и Ассистенте. Голос почти не считается: в чате нужна краткость, а не позиция. 🔴 em dash · сплошная «ё» · плотный канцелярит · «давайте разберёмся» · «буду рад помочь» · итоги в конце сообщения · связки «кроме того / вместе с тем» · безличное «рекомендуется»

resume (резюме, сопроводительное) — вес на Воде и Решётке. 🔴 impact-фраза без цифр · стопка баззвордов · однородные буллеты в опыте · причастные хвосты («...значительно упростив») · хеджирование · em dash · «ё»

Везде 🔴: «не X, а Y» / «не просто X, но и Y».

Красные списки — это калибровка, которую из общих соображений не вывести. Остальное взвешивать самому: насколько уверенное срабатывание и насколько мешает в этой среде. Механического правила понижения нет — уверенная находка по неглавной линзе спокойно бывает важнее вялой по главной.

Находка часто попадает сразу в две линзы («данный подход имеет как преимущества, так и ограничения» — это и Голос, и Вода). Назвать обе, вес ставить по той, что сильнее в этой среде.

Гейт: человеческий дубль

Линзы открыты, поэтому находку легко выдумать. Гейт один и он обязателен:

Находка засчитывается, только если получается написать правдоподобный человеческий вариант этого фрагмента, заметно отличающийся от исходного.

Не получается — находки нет, есть вкусовщина. Гейт бесплатный: дубль сразу становится правкой или рекомендацией.

Плотность — не гейт, а интерпретация. Одиночное срабатывание в живом тексте нормально, человек тоже так пишет. Кластер (три и больше маркера в абзаце, или одна линза ровным слоем по всему тексту) означает, что текст генерился, а не писался. Плотность влияет на вердикт и на то, насколько настойчиво предлагать правки, но не отменяет отдельную находку: одинокое «не просто X, а Y» остаётся красным.

Как применять

Шаг 1. Определить среду — article / message / resume. Если не ясно из разговора, спросить: от среды зависит вся калибровка.

Шаг 2. Пройти пятью линзами. Готово, когда приложены все пять. Каждое срабатывание провести через гейт до того, как оно куда-то попадёт.

Шаг 3. Дальше — по тому, что просили.

Режим правки (по умолчанию)

«Примени скилл», «вычисти», «поправь» — значит внести правки, а не отчитаться.

Четыре линзы правятся молча: Клавиатура, Решётка, Вода, Ассистент. Все четыре вычитают — убрать символ, разорвать ровность, выкинуть пустое. Ошибиться тут дёшево, и правка обратима.

Голос не правится молча никогда. Починить его — значит дописать мнение, случай или цифру, которых у скилла нет. Выдуманный инцидент в чужом тексте хуже любого slop'а.

Отдать результат строго в этом порядке:

  1. Голос — первым и всегда явно, даже когда находок нет. Нет находок — одна строка «Голос: чисто». Есть — предъявить вопросом, по одному на находку: «второй абзац ничей: что ты про это на самом деле думаешь?», «тут просится цифра — какая была?».
  2. Поправленный текст.
  3. Что изменено — компактным списком по линзам, без цитат: «Клавиатура: 6 em dash → дефис, убрана „ё“. Вода: выкинуто „является ключевым фактором“, „кроме того“ ×2».

Порядок именно такой, потому что Голос — единственное, что требует действия от автора, а остальное уже сделано. В конце вывода, под простынёй правок, он теряется, и самая ценная линза пропадает молча.

Правка не закончена, пока про Голос не сказано что-то одно: вопросы или «чисто». Пропуск этой строки читается как «проверено, всё хорошо», хотя означает «забыли».

Границы правки: меняется форма, не смысл. Термины, числа, факты, ссылки — неприкосновенны. Авторские особенности (короткие рубленые фразы, мат, необычная пунктуация как приём) — это голос, а не slop, их не выравнивать.

Режим отчёта (когда просят диагностику)

«Проверь», «что тут не так», «прогони и покажи находки» — значит не трогать текст.

## Результаты проверки

**Среда:** [article / message / resume]
**Вердикт:** [одно предложение: сколько находок, какая линза доминирует, кластер или разрозненно]

1. 🔴 **Голос** — [в чём проблема, полстроки]
   > [цитата, проблемный фрагмент **жирным**]
   Человек бы написал: [дубль]

2. 🟡 **Вода / Решётка** — ...

Порядок: по убыванию severity, внутри — по порядку в тексте. 🟢 включать, если их немного; при десятке мелочей свернуть в одну строку «плюс по мелочи: ...».

Находок нет — сказать это и перечислить, что проверялось: на чистом тексте автору важно видеть, что линзы приложены, а не что скилл поленился.

Quick scan

Только по явной просьбе («глянь быстро», «на бегу»). Короткий текст сам по себе в этот режим не отправляет.

Линзы Клавиатура и Ассистент, только 🔴, списком без объяснений. На коротком сообщении они дают почти все находки и стоят один проход глазами.

Голос сюда не входит. Если быстрый скан просят на статье — сказать одной строкой, что Голос не смотрелся: в article это главная линза, и молчаливый пропуск создаёт ложное ощущение чистоты.

Важно

  • Это не AI-детектор. Скилл не определяет, писал ли текст AI. Он находит стилистику, которая ассоциируется с генерацией. Живой человек пишет так же — особенно аккуратный человек после редактора.
  • Русский приоритетнее. Линзы настроены на русский. В смешанной технической прозе английские маркеры («delve», «leverage», «testament to») ловятся теми же линзами, отдельного списка не нужно.
  • Содержание не трогать. Форма, не фактическая корректность.
  • Последнее слово за автором. Не согласен с находкой — объяснить, почему она отмечена, и принять решение автора.