Ghostchars в терминале
Тот же движок, что и на этом сайте, в одном пакете npm: инструмент командной строки, проверка для CI и сервер MCP, который может вызывать ваш агент для кода. Нужен Node 22 или новее, и ничто не покидает вашу машину.
- Бесплатно, лицензия MIT
- Без сетевых запросов
- Скилл, сервер MCP, хуки
npx -y ghostchars clean -i notes.mdШага установки нет: npx скачивает версию 1.0.2 и запускает её. Единственное требование: Node 22 или новее, а у пакета нет зависимостей времени выполнения.
Что он делает
Четыре команды, один движок. Переключатели очистки и их написание ровно те же, что на этом сайте и в приложении для Mac, поэтому планка означает одно и то же везде.
clean
Читает stdin или названные вами файлы и пишет очищенный текст в stdout, либо с -i переписывает каждый файл на месте, атомарно. С --check ничего не пишет и завершается с кодом 1, если что-то изменилось бы.
inspect
Перечисляет каждый подозрительный символ с его строкой, столбцом, кодовой позицией, именем Unicode и переключателем, который бы на него подействовал. Ничего не меняет и завершается с кодом 1, когда что-то находит.
report
Измеряет привычки, из-за которых черновик читается как написанный машиной: одинаковая длина предложений, шаблонные связки, слова-маркеры, плотность тире, уклончивость. Это не детектор, и он не выдаёт никакой вероятности.
check
Держит целое дерево файлов на заданной планке и печатает каждый файл, который изменился бы, с точными позициями символов. Это команда для CI и для хука pre-commit.
clean и inspect открывают .docx, .odt и .html наряду с обычным текстом и чистят документ структурно, а не как поток байтов. PDF не поддерживается.
Планка (bar) - это именованный набор переключателей, чтобы человек или агент выбирал одно слово вместо двенадцати флагов: default убирает только невидимое, text вдобавок нормализует пробелы и типографскую пунктуацию, а max включает всё и работает с потерями.
Проверка в CI
Один шаг, никаких action для установки, код выхода 1 при находках. Никогда не передавайте --fix в CI: он делает красную сборку зелёной без того, чтобы кто-то прочитал, что изменилось.
npx -y ghostchars check --bar textС --sarif тот же запуск печатается как журнал SARIF 2.1.0, по одному результату на каждый найденный символ, и сканирование кода GitHub показывает находки прямо в pull request.
- run: npx -y ghostchars check --bar text --sarif > ghostchars.sarif || true
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ghostchars.sarifФайл ghostchars.json в корне дерева задаёт, какие файлы держатся на какой планке, и закрепляет файл, который намеренно меняется ровно на N символов. Закрепление проверяется в обе стороны, так что файл, который кто-то тихо исправил, не проходит, пока его не открепят.
Без путей check находит файлы через git ls-files, поэтому уважает правила игнорирования, которые уже есть в вашем репозитории. Двоичные файлы, файлы больше 2 MiB и файлы не в корректном UTF-8 пропускаются, не проваливая запуск.
Для агентов для кода
В пакете есть файлы, которые нужны агенту, чтобы запускать проверку без напоминаний каждый раз. Берите любой из них или все сразу: они не конфликтуют, и ни один из них не установщик.
Скилл
Один каталог, SKILL.md и два справочных файла, которые читают Claude Code, Codex, Cursor, VS Code с Copilot и Gemini CLI. Он объясняет агенту, когда запускать инструмент и что делать с каждым видом находок. Рядом лежат файлы правил для Cursor, Windsurf и Copilot и блок для вставки в AGENTS.md, CLAUDE.md и GEMINI.md.
Сервер MCP
ghostchars mcp говорит на Model Context Protocol через stdin и stdout и предоставляет четыре инструмента только для чтения: clean_text, inspect_text, style_report и check_paths. Пятый, clean_files, пишет на диск и регистрируется только с --allow-write. Фрагменты конфигурации есть для шести хостов.
Хук для Claude Code
Хук PostToolUse, который проверяет каждый файл, записанный агентом, и возвращает находку как обратную связь, чтобы агент исправил её в том же ходе. Один скрипт и один ключ в настройках.
Хук pre-commit
Блок для вставки в .pre-commit-config.yaml: локальный хук, который проходит по подготовленным к коммиту текстовым файлам, чтобы никто не закоммитил ничего грязного. Как и шаг в CI, он никогда не передаёт --fix.
{
"mcpServers": {
"ghostchars": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ghostchars", "mcp"]
}
}
}Фрагмент для Claude Code. Те же три слова, npx -y ghostchars mcp, и есть вся конфигурация для Codex, Cursor, VS Code, Gemini CLI и Windsurf.
Приватность
Всё работает на вашей машине. В пакете нет сетевого кода: ни телеметрии, ни проверок обновлений, ни проверки лицензии, ни аккаунта. Единственные байты, которые покидают процесс, это те, что он печатает. Ничто из того, что вы чистите, проверяете или анализируете, никуда не уходит.
Тот же движок везде остальном
Приложение для Mac
Очистка по всей системе за одним сочетанием клавиш, в любом приложении, где вы печатаете, и пакетная очистка документов. Сочетание клавиш бесплатно 20 раз в неделю; $24 один раз снимает ограничение.
Расширение для браузера
Бесплатно, без ограничений в окне и контекстном меню, и оно ничего не собирает. Оно работает уже сегодня, в Chrome и браузерах на его основе.
Вопросы, которые действительно задают
Что ему нужно?
Node 22 или новее, и больше ничего. У пакета нет зависимостей времени выполнения, а npx скачивает его при первом запуске, так что глобальная установка не нужна, если вы сами её не хотите.
Он куда-нибудь стучится?
Нет. В пакете вообще нет сетевого кода: ни телеметрии, ни проверки обновлений, ни проверки лицензии. Его можно запустить на машине без подключения, и он ведёт себя точно так же.
Как он связан со скриптом на Python?
Это тот же движок. Переключатели очистки, их написание и значения взяты из эталонного CLI на Python, а золотые фикстуры закрепляют clean и inspect за ним байт в байт. Новое здесь: сокращённая запись планок, вывод в JSON и SARIF, команда check с её конфигурацией и закреплениями, и сервер MCP.
Скажет ли report, написан ли текст ИИ?
Нет. Он измеряет привычки, из-за которых черновик читается как написанный машиной, чтобы вы могли их отредактировать, и не выдаёт ни вероятности, ни оценки, ни вердикта. Он никогда не решает, был ли текст сгенерирован.
Открывает ли check документы?
Нет. check обходит репозиторий и не открывает zip-архивы; .docx, .odt и .html читают команды clean и inspect. Ничто в пакете не читает PDF, изображения или Google Docs.
CLI бесплатный?
Да, и за ним нет платного уровня. Пакет под лицензией MIT, проверка, сервер MCP и интеграции входят в него целиком, а лицензия, которая продаётся на странице цен, относится к приложению для Mac.