Прогнать документ через российское облако (YandexGPT, GigaChat) с маскировкой ПД, прайсом с датой сверки и журналом расхода. Брать, когда текст нельзя вывозить из РФ. Гейт ревью - codex-audit, не он.
Installs into .claude/skills of the current project.
Are you the author of Llm Ru?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/dewil-llm-ru)
---
name: llm-ru
description: Прогнать документ через российское облако (YandexGPT, GigaChat) с маскировкой ПД, прайсом с датой сверки и журналом расхода. Брать, когда текст нельзя вывозить из РФ. Гейт ревью - codex-audit, не он.
---
# Российская модель для документа, который нельзя вывозить
Скилл закрывает один сценарий: **персональные данные из материала не могут покидать РФ** (договор с клиентом, политика обработки ПД, требование локализации), а машинный разбор нужен. Тогда в облако - любое, включая российское - материал уходит **только замаскированным** по `pii-mask`, а российский провайдер (YandexGPT, GigaChat) нужен потому, что маска не идеальна: пропуски NER и квазиидентификаторы (`pii-mask`, "Квазиидентификаторы") остаются в тексте, и этот остаток может уходить только в юрисдикцию, где ему разрешено быть. Зарубежным моделям (свой проход агента, гейт `codex-audit`) достается тот же замаскированный текст, и разница между ними и российским провайдером - в том, кому допустим остаток, а не в том, кто видит оригинал. Провайдер здесь заменяет юрисдикцию, а не качество: у него свои границы, и они описаны, а не подразумеваются.
**Чего скилл не покрывает.** Запрет на вывоз **содержания целиком**, а не ПД (гостайна, договорная оговорка "документ не покидает контур заказчика"): маскировка такой запрет не снимает, а собственный проход агента - уже вывоз, потому что модель агента зарубежная. Там три уровня ниже сворачиваются в один российский, агент видит только его ответ, и это отдельное решение dwl в проектном правиле, а не режим этого скилла.
Механика не привязана к предметной области. К проекту привязаны только **пути и параметры**: журнал расхода, файл прайса, бюджет кейса, порядок получения согласия - они задаются проектным правилом, а не этим файлом.
## Когда применять
- документ или переписка с ПД, которые по договору или политике обработки не покидают РФ;
- первый быстрый проход по объемному материалу перед своим разбором (черновик, длинная выгрузка), когда сырой текст вывозить нельзя;
- параллельный замер: тот же замаскированный материал своей моделью и российской, чтобы увидеть, что ловит каждая.
## Когда НЕ применять
- **как гейт ревью.** Гейт - `codex-audit` с другой моделью по независимому критерию. Российская модель в этой роли не замерялась, и поднимать ее до гейта нельзя без замера в роли адвоката (ниже);
- обезличенный или публичный материал, который можно отдать обычной модели: скилл добавляет маскировку, журнал и прайс, и без юрисдикционного требования это лишняя работа;
- документ, который прочитает **человек** и который надо обезличить: это не машинный разбор, и маской он не решается ни здесь, ни в `pii-mask` (его раздел "Чего скилл не делает") - такой документ переписывается вручную.
## Три уровня проверки: кто гейт, а кто замер
1. **Свой проход агента** - основная работа.
2. **codex как гейт** - другая модель, независимый критерий (`codex-audit`).
3. **Российская модель как замер и первый проход** - параллельная оценка, чей результат сравнивают с первыми двумя, и быстрый черновой разбор, за которым идет свой.
"Не гейт" означает одно: **неподтвержденные** находки третьего уровня работу не останавливают и поштучного разбора не требуют. Подтверждение у находок любого уровня общее - независимая верификация по `codex-audit`, "Разбор находок": находка, которую агент подтвердил сам, останавливает выдачу независимо от того, кто ее нашел, а неподтвержденная находка codex привилегии по происхождению не получает.
Третий уровень не поднимается до второго, пока не замерен **в роли адвоката**, то есть проверяющего, который ищет дефект в готовом разборе. Оценка модели как первичного разборщика на роль проверяющего не переносится: разборщик и проверяющий ловят разное, и хороший результат в первой роли ничего не говорит о второй.
**Прецедент, из-за которого это записано** (20.09.2026). На черновике клиента российская модель дала пять находок; две относились не к документу, а к конвейеру: она пожаловалась на мусор извлечения из RTF и на плейсхолдеры маскировки. Проверяющий, который не отличает артефакт предобработки от материала, в роли гейта останавливает работу впустую. Это общий признак замера, а не свойство конкретного провайдера: любой прогон, куда подается извлеченный текст, получает такие находки, и их надо отделять от находок по существу, прежде чем считать.
**Отнести находку к артефакту конвейера можно только предъявив артефакт**: конкретный плейсхолдер или мусорную строку в поданном тексте, на которую модель среагировала. "В документе нет условия X" артефактом не является - это повод проверить покрытие извлечения (сканированная страница в смешанном документе молчит одинаково с пустой, `silent-failure.md`), а не основание выкинуть находку.
## Порядок
1. **Согласие.** Машинный анализ чужого документа требует согласия там, где этого требует процесс проекта (договор, оферта услуги, политика обработки ПД). Где и как оно берется - проектное правило; скилл только не дает пропустить шаг: согласия нет - прогона нет.
2. **Извлечение и его проверка.** Текст из офисного формата или PDF извлекается до маскировки, и покрытие проверяется как в `pii-mask` для PDF: объем и целость текста, страницы без текстового слоя названы. Модель, получившая половину документа, отчитается по половине и не скажет об этом. Извлечение неполное (страницы без слоя, обрыв текста) - разбор идет как **неполный**: пропущенные страницы названы в отчете, и вывод "в документе нет X" по непокрытым страницам не делается, пока их не покрыли OCR или человек.
3. **Маскировка** - `pii-mask`, с его порядком "не читай оригинал": сырой файл прогоняется через CLI не глядя, агент открывает только `*.masked.md`, mapping не открывается и не пересылается. Счетчик остаточных кандидатов ПД по проверке `pii-mask` **равен нулю**, иначе стоп и разбор локально, а не отправка.
4. **Спецкатегории вырезаются из замаскированного текста до отправки провайдеру.** Расовая и национальная принадлежность, политические взгляды, религиозные и философские убеждения, здоровье, интимная жизнь, судимость (перечень спецкатегорий ПД по закону РФ) провайдеру не подаются вовсе - ни в маске, ни без: он хранит и обрабатывает запросы на своих условиях, а маска не идеальна. `pii-mask` их не ловит: это не идентификаторы, а смысл. Вырезает агент, читая `*.masked.md` - оригинал для этого открывать не нужно, - и фрагмент удаляется, а не заменяется меткой. Остаток, который скилл не закрывает: до вырезания эти фрагменты видит модель самого агента, в маске и без mapping, то есть без связи с человеком, - это устройство `pii-mask`, а не решение этого скилла. Отправляется провайдеру **вырезанный файл**, а не тот, из которого вырезали: файл на отправку и файл после вырезания - один и тот же путь. Закон знает исключения из запрета обработки, у провайдеров условия свои; запрет скилла **безусловный** - это решение канона, а не пересказ закона, и снимать его исключением из закона нельзя.
5. **Логирование запросов у провайдера выключено, и это видно в самом запросе.** У YandexGPT это заголовок `x-data-logging-enabled: false` (HTTP или метаданные gRPC; по документации содержимое таких запросов не используется для улучшения сервиса, сверено 22.09.2026); у GigaChat такой механизм на эту дату не подтвержден - провайдер без подтвержденного механизма используется только по явному решению dwl в проектном правиле. Наличие имени параметра в конфиге ничего не отключает: прогон печатает на каждый вызов строку "логирование: выключено (<параметр>)", взятую из **фактически отправленных** заголовков или метаданных, а не из настройки. Параметр не снимается ни ради отладки, ни ради качества ответа. Дата сверки параметра стареет так же, как прайс: старше 60 дней - стоп до повторной сверки с документацией, потому что это самый чувствительный факт скилла, а меняется он молча.
6. **Пре-чек бюджета - по верхней оценке.** Стоимость сверху = (токены входа + предел генерации `max_tokens`) по прайсу; предел генерации задается всегда, иначе верхней оценки нет. Оценка выше остатка бюджета кейса, или цены для модели и режима вызова в прайсе нет, - ненулевой код возврата и прогона нет. "Нет цены - запуск без проверки" не вариант: это та же молча потраченная сумма. Прогоны по кейсу идут последовательно: проектный скрипт держит лок на кейс, а не полагается на то, что агент не запустит два вызова параллельно (`subagents-usage.md` fan-out поощряет).
7. **Запись в журнал - до отправки и после ответа.** До: попытка с верхней оценкой и хешем поданного текста. После: факт - провайдер, модель, режим вызова, токены на вход и выход, стоимость по прайсу или пометка "не пересчитано", причина завершения ответа. Попытка без факта (обрыв соединения, убитый процесс) считается по верхней оценке, а не как несостоявшаяся. Хеш уже есть в журнале кейса - предупреждение "документ уже гонялся", а не молчаливый второй расход. Провал записи **попытки** - отправки нет: вызов без следа в журнале и есть тот расход, которого никто не увидит. Провал записи **факта** - предупреждение, не глушится, и пометка неполноты в журнале кейса (`silent-failure.md`, форма 1).
8. **Пригодность ответа.** Ответ с причиной завершения "лимит генерации", отказ модели или ошибка - не разбор: он попадает в журнал как расход, но в результат не идет, и "находок нет" по нему не пишется.
9. **Разбор находок** - с отделением артефактов конвейера по правилу выше (артефакт предъявлен) и с независимой верификацией по `codex-audit`.
10. **Разворот** результата для клиента - `pii-mask unmask` по его порядку, ответ провайдера включительно: он тоже в метках.
## Цены не живут в коде
Прайс - отдельный файл проекта: цена за тысячу токенов на вход и выход по каждой модели **и режиму вызова** (синхронный и асинхронный у одного провайдера стоят по-разному), тариф аккаунта (по факту или пакет), **дата сверки** и ссылка на страницу провайдера, откуда взято. Правило пересчета жесткое:
- прайс старше 60 дней или модели с режимом в нем нет - печатаются токены и прямым текстом "в рубли не пересчитано". Не оценка по памяти, не соседняя модель, не старая цена. Для пре-чека бюджета это стоп (шаг 6), для отчета постфактум - честная пометка;
- подставленная по памяти цена выглядит точной и живет в отчетах дольше, чем помнится ее происхождение. Отчет клиенту с такой цифрой нечем защитить.
Пример границы - **пакетная тарификация**: аккаунт, оплаченный пакетом токенов (у GigaChat есть и пакеты, и оплата по факту; какой тариф у аккаунта проекта - поле прайса, а не знание агента), в рубли за прогон не переводится, пока цена пакета и его остаток не сверены вручную. В денежном отчете по такому аккаунту стоят токены.
## Расход по кейсу считает только свой журнал
Биллинг провайдера разбивки по кейсам сам не дает: остаток и детализация идут по облачному аккаунту, каталогу или метке. Дефолт поэтому - журнал, который пишет сам прогон; детализация биллинга годится как сверка суммы по всем кейсам. Проект, где на каждого клиента заведен свой каталог или метка, может назначить источником детализацию биллинга - это его правило, и тогда журнал ниже остается для попыток и пригодности ответа. Отсюда:
- журнал пишется на каждый вызов, включая неудачные и оборванные (шаг 7), - иначе счет расходится с биллингом и об этом никто не узнает;
- **ошибка записи в журнал не глушится**: предупреждение в вывод и пометка неполноты в журнале кейса. Журнал с такой пометкой для пре-чека непригоден - остаток по нему завышен, - и следующий прогон по кейсу стоит, пока dwl не сверил остаток с биллингом и не снял пометку. Молча разошедшийся счет хуже отсутствующего - отсутствующий хотя бы честно не отвечает на вопрос.
## Что задает проект
Скилл описывает порядок, исполняют его проектные скрипты. Обязательное, без чего **прогона нет**:
- где берется согласие на машинный анализ (шаг 1);
- путь файла прайса с датой сверки, режимами вызова и тарифом аккаунта (шаг 6);
- бюджет кейса, с которым сравнивает пре-чек (шаг 6);
- путь журнала расхода и его формат: попытка и факт, по строке на каждую (шаг 7);
- лок на кейс, сериализующий пре-чек и вызов (шаг 6);
- для провайдера без подтвержденного отключения логирования - явное решение dwl (шаг 5).
Необязательное, без чего скилл применим с пометкой в отчете: журнал замеров для третьего уровня (без него замер не накапливается, прогон возможен).
Нет обязательного - отчет "прогон не выполнен: не задан X", а не прогон с оговоркой: предупреждение после отправки уже сделанную отправку не отменяет.
## Границы
- Замер качества российской модели против своей и codex не сделан - есть один прецедент, не статистика. Поэтому третий уровень остается замером.
- Скрипты пре-чека, прогона и учета в канон не входят: они завязаны на пути проекта. Здесь только порядок и инварианты, которые эти скрипты обязаны соблюдать.
- Фактические утверждения о провайдерах (заголовок логирования, тарифы) сверены на дату в тексте и устаревают молча; расхождение с документацией провайдера правится здесь, а не обходится в проекте.