Скилл Text Cleaner
Текст, прошедший через переводчик, редактор с визуальной вёрсткой или чужую CMS, почти всегда тащит за собой невидимые символы. Их не видно ни в браузере, ни в админке — но они сидят внутри слов и ломают ровно то, ради чего страница написана.
Установка одной командой. Нужен Claude Code; git и аккаунт GitHub не требуются:
claude plugin marketplace add https://1888.center/marketplace.json
claude plugin install clean-user-facing-text@1888-centerПосле установки перезапустите Claude Code и вызывайте скилл командой /clean-user-facing-text. Claude подхватит его и сам, когда задача подойдёт под описание.
Версия 1.0.1 · 17 КБ · требуется Claude Code 2.1.224 или новее (обновиться: claude update).
Другие способы установки
Через GitHub — если версия Claude Code старше 2.1.224 или удобнее ставить из репозитория. Нужен установленный git:
claude plugin marketplace add https://github.com/avtozaper/skills.git
claude plugin install clean-user-facing-text@1888-centerАдрес указывайте полностью, с https:// и .git: короткая форма avtozaper/skills клонируется по SSH и упадёт, если у вас не настроены ключи.
Cursor, Codex, Copilot, Windsurf, Gemini, Cline — через CLI открытой экосистемы скиллов: он сам разложит файлы по папкам тех агентов, которые найдёт на машине. Флаг -g ставит скилл глобально, без него — только в текущий проект:
npx skills add avtozaper/skills --skill clean-user-facing-text -gManus — вкладка Skills в левой панели, кнопка + Add. Либо «Upload a skill» с архивом скилла, либо импорт из GitHub по ссылке на репозиторий. Вызов в чате — /clean-user-facing-text.
Вручную, без плагин-системы — скачать архив и распаковать в личную папку скиллов. Подойдёт и для других агентов, которые читают SKILL.md:
mkdir -p ~/.claude/skills && cd ~/.claude/skills \
&& curl -fsSLO https://1888.center/skills/clean-user-facing-text.zip \
&& unzip -o clean-user-facing-text.zip && rm clean-user-facing-text.zipОбновление и удаление:
claude plugin update clean-user-facing-text
claude plugin uninstall clean-user-facing-textЗачем это нужно
Живой пример с этого сайта. В посте про позиции в ChatGPT в первом же абзаце между словами «такую» и «репутацию» стояли два U+200B — след копипаста из Google Translate. Последствия:
| Что ломается | Как это выглядит |
|---|---|
| Поиск по странице | Ctrl+F по «такую репутацию» не находит ничего — ни у читателя, ни у парсера |
| Токенизация у LLM | Словосочетание разрывается на уровне токенов, и фрагмент хуже цитируется |
| Слаги и заголовки | Символ уезжает в URL или title, где потом всплывает как %E2%80%8B |
| Диффы и импорты | Строки, визуально одинаковые, не совпадают побайтово |
Отдельная ирония в том, что страдают в первую очередь страницы, открытые для ИИ-краулеров: вы зовёте GPTBot и ClaudeBot, а отдаёте им текст с разорванными словами.
Что делает скилл
| Слой | Что происходит | Проверяемость |
|---|---|---|
| Аудит | inspect_text.py показывает каждый подозрительный символ: код, название, класс, точную позицию в файле | детерминированно |
| Чистка | clean_text.py удаляет невидимые символы и нормализует пробелы-двойники, отдаёт JSON со статистикой | детерминированно |
| Проза | агент переписывает текст, сохраняя все факты, цифры, имена и цитаты | best-effort |
Ловит: U+200B (zero width space), U+200D (zero width joiner), U+2060 (word joiner), U+FEFF, bidi-управляющие, tag-символы, неразрывные и экзотические пробелы, символы из приватных диапазонов.
Не ломает то, что должно остаться: склейку эмодзи, соединители в арабском и других сложных письменностях, орфографические Cf-метки. По умолчанию не трогает и неразрывные пробелы — в вёрстке они несут смысл. Агрессивная нормализация есть, но только по прямой просьбе.
Когда срабатывает
Агент подтягивает скилл сам, когда вы просите вычистить, отполировать или подготовить к публикации статью, пост, документацию, письмо, описание услуги или UI-текст. Явный вызов — /clean-user-facing-text.
Полезнее всего — прогонять контент перед заливкой, особенно переводной и собранный из разных источников. Проверить разом весь каталог статей:
find content -name '*.md' -exec python3 ~/.claude/skills/clean-user-facing-text/scripts/inspect_text.py {} \;Что внутри
SKILL.md плюс четыре Python-скрипта на одной стандартной библиотеке — ни зависимостей, ни установки пакетов, ни обращений в сеть. Нужен Python 3.10 или новее; на macOS и большинстве Linux он уже стоит.
Скрипты — не обёртка над моделью, а обычный разбор кодовых точек, поэтому результат воспроизводим и не зависит от того, какой агент их запускает.
Происхождение
Скилл — облегчённая текстовая версия проекта watermarks-remover (MIT, автор Guillaume Meyer и контрибьюторы). Оттуда взяты слой работы с Unicode и его скрипты.
В оригинале объём заметно больше: работа с изображениями, C2PA и метаданными файлов (PNG, JPEG, PDF, DOCX и другие), HTTP-сервис с Docker-образами, внешние бэкенды для пиксельных водяных знаков. Если нужно это — берите оригинал, он под той же лицензией.
Наша версия оставляет только текст, переведена на русский и лежит открыто: github.com/avtozaper/skills. Лицензия и копирайт оригинала сохранены в архиве скилла — файлы LICENSE и NOTICE.md.
Чего скилл не делает
Он не снимает статистические водяные знаки, зашитые в выбор слов, и не даёт «текст, не определяемый детекторами» — такого не обещает и оригинал. Переписывание прозы может ослабить подобные сигналы, но проверить это без ключей вендора невозможно, поэтому в отчёте эта часть всегда помечается как best-effort.
Использовать его, чтобы выдать текст за написанный человеком там, где раскрытие ИИ обязательно, — не стоит: это запрещено и условиями оригинального проекта.