granka
Проверка русского текста на норму государственного языка прямо из терминала. Бесплатно, без регистрации, без зависимостей.
Вы пишете текст с локальным агентом, говорите ему «проверь норму» — он зовёт
granka и читает разбор. Или запускаете сами, руками.
pipx install granka
granka norm article.md
Без установки вообще: uvx granka norm article.md.
Годится и pip install granka, если вы работаете внутри окружения. На маке с
Homebrew команды pip может не быть, а установка в системный Python — закрыта;
там берите pipx или uvx, они для того и сделаны.
Гранка · норма государственного языка
Текст: article.md · 328 знаков · тип: публичная потребительская информация
Найдено: 1
Кешбэк — есть русский аналог · 4 раза
заменить на: возврат части суммы
Слово зафиксировано в словаре, но есть общеупотребительный русский аналог —
по ч.6 ст.1 ФЗ-53 это спорная зона, проверьте уместность.
строки: 1, 3, 7
Латиница: 2 вхождения (CRM, AI-ассистент) — показать: --latin
Проверено по 10 словарям из 11 в официальном перечне (183 387 ключей).
Латиница свёрнута в счётчик: 2. Это помощник, а не юридическое заключение:
покрытие словарей частичное, часть заимствований проверка не видит.
Пустой результат означает «мы не нашли», а не «нарушений нет».
Осталось сегодня: 29 344 знака (обновится 27.08 в 00:00 UTC).
Что именно проверяется
С 1 марта 2026 года действует статья 10.1 закона о защите прав потребителей: информация для потребителя должна быть на русском языке. Иностранное слово допустимо, если у него нет общеупотребительного русского аналога и оно зафиксировано в нормативных словарях (ч. 6 ст. 1 ФЗ-53). Условия действуют вместе, и второе — вопрос факта, а не вкуса.
Инструмент отвечает именно на вопрос факта:
- заимствование без словарной фиксации — слова нет в нормативной базе;
- слово с русским аналогом — в словаре есть, но аналог существует;
- латиница — допустима только как товарный знак или фирменное наименование.
Ни грамматики, ни орфографии, ни стиля здесь нет.
Тип текста решает строгость
Статья 10.1 применима к потребительской информации, а не ко всякому тексту. Поэтому у проверки есть режимы:
granka norm offer.md # public — потребительская информация (по умолчанию)
granka norm banner.md --type ad # реклама
granka norm memo.md --type internal # внутренний документ
granka norm notes.md --type other # прочий текст
На внутреннем документе и технической заметке проверка мягче: то же слово даёт наблюдение, а не юридическую формулировку.
Ключи
| Ключ | Что делает |
|---|---|
--type |
тип текста: public, ad, internal, other |
--latin |
показать латиницу находками, а не счётчиком |
--json |
отдать ответ сервиса целиком |
--fail-on-findings |
вернуть код 5, если что-то найдено |
--url |
другой адрес сервиса (или переменная GRANKA_URL) |
Текст можно передать потоком: cat article.md | granka norm.
Коды возврата
| Код | Что означает |
|---|---|
| 0 | проверка выполнена и получена целиком |
| 1 | ошибка вызова: нет текста, файл не прочитан, испорченный ответ |
| 2 | исчерпан дневной лимит |
| 3 | сервис недоступен, не отвечает или выключен |
| 4 | текст больше, чем принимается за один раз |
| 5 | найдены замечания, и запрошен --fail-on-findings |
Ноль не означает «текст соответствует закону». Он означает, что проверка доведена до конца. Отказ никогда не притворяется чистым результатом: если сервис не ответил, вы увидите код 3 и строку «Проверка НЕ выполнена», а не пустой отчёт.
Для агентов
В пакете лежит навык для Claude Code — skills/granka-norm. Поставить вместе с
плагином:
/plugin marketplace add slvfmts/granka-cli
/plugin install granka
После этого «проверь норму в этом файле» работает без дополнительных объяснений.
Агенту удобнее --json: там те же находки в машинном виде, со смещениями,
основанием по каждому слову и остатком дневного лимита.
Границы
Покрытие словарей частичное: 10 словарей из 11 в официальном перечне, 183 387 ключей. Часть заимствований проверка не видит — пустой отчёт означает «мы не нашли», а не «нарушений нет». Инструмент не заменяет юриста и не выдаёт заключений.
Лимиты и приватность
Бесплатно и без регистрации: 30 000 знаков в сутки на адрес, до 20 000 знаков за один раз. Остаток и время сброса приходят в каждом ответе.
Текст нигде не сохраняется: проверка идёт локальной функцией на сервере, в базу уходит только счётчик знаков. Подробно — PRIVACY.md.
Лицензия
MIT. Клиент открыт; сервис проверки — https://granka.editors.one.
Metadata
Release files for granka 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| granka-0.1.0.tar.gz | 17.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| granka-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.8 kB
Release files / granka-0.1.0.tar.gz
| Download URL | granka-0.1.0.tar.gz |
|---|---|
| Size | 17.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c15e39d9fc43d60b064ec29e81720cc6b511910c7a7c945e9d35267abf5c1dc3
|
|
BLAKE2b-256 checksum How to use checksums |
158b3dc722bd2b4dc4b23c2d12389532be55d7c51593953782bf714005decd75
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency logRelease files / granka-0.1.0-py3-none-any.whl
| Download URL | granka-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cda31ce1df96e16310e85725a7825cc1ffaec2ca283ef325c16fc61787091ef1
|
|
BLAKE2b-256 checksum How to use checksums |
df7d8cd1bda3dd5ae51716a5cf8d7f5ea4029e06c794d873a1489264f79792d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency log