Скилл 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 -g

Manus — вкладка 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.

Использовать его, чтобы выдать текст за написанный человеком там, где раскрытие ИИ обязательно, — не стоит: это запрещено и условиями оригинального проекта.

Последнее обновление