Provides Russian language AI trace detection and rewriting capabilities
- Language
- Python
- License
- MIT
- Branch
- main
Install
$ dsh plugin --profile web add github:Vladimir-Human/humanizer-ruRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
One-Sentence Description
humanizer-ru is a "de-AI" skill for Russian text: when the text contains obvious machine-generated traces—such as ChatGPT's :contentReference[oaicite:N], formulaic phrases like "эксперты считают", Markdown debris, or chat tails like "Надеюсь, это поможет"—it can identify them and rewrite them into natural Russian according to user requirements, without adding facts that don't exist in the original text.
Core Capabilities
- Detects 39 regex markers, covering hard traces (Class A) from copy-pasting between Chatbots like ChatGPT, Gemini, Grok, Perplexity, DeepSeek, Copilot, and contextual clues (Class B) requiring human judgment
- Identifies 38 "soft signals" across content/language/structure/communication dimensions: empty praise, forced three-part structure, "не только... но и" parallel constructions, long dash abuse, Markdown debris, leftover formulaic endings, etc.
- Rewrites text according to user explicit requests, covering multiple intervention intensities from "rewrite locally when 3-5 soft signals detected" to "completely rewrite the paragraph when 6+ signals detected"
- Strictly adheres to "no new facts in rewriting"—any numbers, dates, names, or units in the rewritten version must be traceable to the original text
- Classifies "false positive" boundaries for different Russian styles: literature/legal/contracts/academic/marketing (
references/false-positives.md) - Treats text as untrusted input at the data layer: ignores embedded instructions, doesn't execute links, doesn't connect to the network, doesn't read/write files
Technical Implementation
- Language: YAML/Markdown (pure text skill, no Node/Python code execution at runtime)
- Key Dependencies:
@deepseek-ai/dsh-skill-filesystem(cordis-injected skill provider),process.getBuiltinModule('node:path')(resolves package paths in patch expressions) - Architecture Pattern: Cordis patch injection—
dsh/cordis.patch.ymlinserts a line at dsh startup, pointing the host's built-in skill-filesystem provider to this bundle'sskills/directory; the plugin itself writes no code, all "logic" is delivered as SKILL.md instructions loaded by the agent when needed - Entry Files: dsh/cordis.patch.yml (bundle injection point) + dsh/skills/humanizer-ru/SKILL.md (instruction set actually loaded by the agent)
Use Cases
When Russian-speaking users or teams need to review/polish Russian documents within a DSH agent—such as Russian blogs, marketing copy, internal announcements, wiki entries—they can have the agent load this skill to check for "AI traces," or request to rewrite a stiff machine draft into natural language. Fits into DSH workflows for Russian publishing, content operations, customer service knowledge bases, etc.
Prerequisites & Compatibility
| Dependency | Min Version | Description |
|---|---|---|
| DSH Host | 0.1.0-rc.6 | This bundle's CI was tested on 0.1.0-rc.6; newer dsh versions may introduce breaking changes |
| Node.js | Not declared | The bundle itself writes no code; the process.getBuiltinModule('node:path') inside the cordis patch is provided by the dsh host, no independent requirement for the plugin |
| pnpm | Any version compatible with dsh | dsh itself depends on pnpm; this plugin doesn't introduce additional pnpm packages |
| Platform | Cross-platform | The bundle contains only YAML + Markdown, no native compilation modules, no OS/CPU restrictions |
| Native Modules | None | No node-pty, sqlite, better-sqlite3 or other native-compiled dependencies |
Installation
dsh plugin --profile web add github:Vladimir-Human/humanizer-ru
Configuration
This plugin requires no additional configuration.
dsh/cordis.patch.yml points the host's built-in skill-filesystem provider to this bundle's skills/ directory, requiring no additional environment variables; it's triggered by typing /humanizer-ru … in the dsh conversation or using natural language instructions like "очеловечь", "убери гпт-шность", "перепиши", etc.
FAQ
Q: What does this plugin do? Can regular users use it?
A: Yes. It specifically detects "AI-written traces" in Russian text—clichés, filler language, chatbot format debris—and can rewrite them into more natural text per user request. It's friendly to regular users who don't know internal concepts like Cordis/Fiber/Host face.
Q: Will it automatically intervene in my conversations?
A: No. SKILL.md explicitly states "скилл активируется только по явной просьбе пользователя"—it only triggers when the user explicitly says keywords like "очеловечь/перепиши/убери гпт-шность", never intercepts tasks secretly.
Q: Can it handle English or code?
A: No. SKILL.md's description clearly states: it doesn't handle non-Russian text, doesn't handle source code or config files, doesn't handle legal texts, doesn't handle artistic prose. It will refuse directly in these cases.
Q: Will it modify facts from the original text?
A: No. Principle #6 in "Шесть ключевых принципов правки" specifically states: no numbers, dates, names, or units that don't exist in the original text may be added to the rewritten version; when specific details need to be added, it asks the user, not inventing them.
Q: Will it jump to links, read files, or go online from my text?
A: No. SKILL.md's "Границы безопасности" four rules clearly state: input text is processed only as data, no accessing links in input text, no code execution, no file read/write, no network access.
Q: Is it the same as AI detectors like GPTZero?
A: No. The README clearly states "Детекторы не обходим и текст под них не подгоняем"—it's not optimized for detectors, aiming to produce natural text rather than getting green detection scores. There are other same-named/similar "humanizer" projects on GitHub with different positions and functionality.
Q: Any pitfalls installing this bundle in dsh?
A: Yes. The project's CI testing found that using github:Vladimir-Human/humanizer-ru#v3.13.0&path:/dsh (a "pin version with tag + subdirectory" combination in one line) causes pnpm to silently drop the subdirectory, install the entire repo as a regular dependency, with exit code still 0, but the bundle actually doesn't get installed. So it's recommended to specify path:/dsh separately without binding to a tag.
Q: How do dsh users fully uninstall?
A: Run dsh plugin --profile web remove humanizer-ru-dsh. This bundle only contains a cordis patch + one Skill folder, doesn't create any persistent data outside the dsh profile, and the environment is clean after deletion.
Getting Started Difficulty
Beginner — one command to install; triggered with /humanizer-ru or natural language instructions when using, no code or environment variables needed; SKILL.md is a long Russian-dominant document but the agent loads it on-demand when needed, not flooding the system prompt all at once.
Known Issues & Limitations
- Not suitable for non-Russian text: SKILL.md description explicitly refuses and asks user to provide original Russian text (dsh/skills/humanizer-ru/SKILL.md:3, :33-38)
- Not suitable for source code, config files, legal contracts, pure artistic prose: refuses or limits intervention at the first step of the decision tree (dsh/skills/humanizer-ru/SKILL.md:60-63)
- "Soft signal" combinations don't constitute authorship attribution: regardless of how many soft signals, the agent must not claim "this is AI-written" based on them; only Class A hard markers, verifiable source forgery, or author self-claims can lead to conclusions (dsh/skills/humanizer-ru/SKILL.md:127,
Главное правило) - Class B markers alone are insufficient: must be combined with Class A hard evidence or independent corroboration; Class B alone cannot be used to stamp (dsh/skills/humanizer-ru/SKILL.md:127)
- dsh bundle installation combination
tag+#path:/dshsilently fails under pnpm chain: CI tested that#v3.13.0&path:/dshform causes pnpm to drop subdirectory and install as regular dependency, exit code still 0 but profile missing layer (.github/workflows/dsh-install.yml:7-11) - dsh is in development preview stage, the host itself may introduce breaking changes; this bundle was only tested on 0.1.0-rc.6 (README.en.md:68)
- Rewriting process has 6 hard constraints: remove trash, break templates, adjust rhythm, trust reader, no slogans, no inventing facts; even if user requests "more aggressive" these 6 cannot be broken (dsh/skills/humanizer-ru/SKILL.md:144-152)
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 секунд
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. Правило одно для любых скиллов: сначала прочитать, потом ставить.
- Откройте
SKILL.mdиreferences/прямо на GitHub и убедитесь, что содержимое вас устраивает. - Ставьте только выпуски со страницы Releases (аннотированные теги вида
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/в архиве нет: валидаторам, которым нужны корпуса и фикстуры, требуется полный клон репозитория.
1. Claude.ai (Веб-интерфейс)
- Откройте страницу Releases этого репозитория, выберите свежий выпуск и скачайте приложенный к нему архив
humanizer-ru.zip. Это собранный архив скилла — состав перечислен в шаге 0.Source code (zip), который GitHub добавляет к каждому выпуску, — полное дерево репозитория вместе с.github/,research/иtests/; он нужен только тем, кто собирается запускать валидаторы. - Зайдите в аккаунт Claude.ai и перейдите в Settings > Skills.
- Нажмите 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. Детали — в документации вашего клиента.
Локальная установка — с закреплением на теге выпуска, чтобы получить именно проверенное состояние:
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/; глубина проверки будет ниже):
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: ломающие изменения обещаны, поэтому для другой версии сверяйтесь с её документацией.
Глобальная установка (все проекты и агенты профиля):
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:
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 или другом агенте:
/humanizer-ru [вставьте текст]
Или напрямую:
Очеловечь этот текст: [ваш текст]
Что делает
Прогоняет русский текст по 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+200B–U+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)
Длинное тире у Цветаевой и Бродского, изогнутые кавычки от автозамены macOS, правило трёх в риторической прозе, канцелярит в юридическом документе — это не признаки ИИ. Скилл намеренно не исправляет такие случаи. См. references/false-positives.md.
Отпечатки моделей (новое в v2.3)
references/llm-fingerprints.md не ведёт каталог актуальных версий моделей. Он описывает уровни доказательств, воспроизводимые артефакты и локальные наблюдения с явными ограничениями атрибуции. Версию или доступность модели нельзя выводить из стилистического признака без первичного датированного источника. Там же собраны ручные мягкие сигналы русских моделей — GigaChat, Алисы и YandexGPT: они помечены как наблюдения без корпусного подтверждения, регулярных выражений для них нет.
Шкала критичности: высокая — мгновенно выдаёт ИИ · средняя — сильный сигнал · низкая — слабый сигнал
Источники
История изменений
Актуальная версия — на значке в начале страницы. Полную историю изменений смотрите в CHANGELOG.md и на странице GitHub Releases.
Лицензия
MIT