Impeccable
Русское руководство по дизайн-скиллу impeccable для Claude Code и других агентных сред: как устроен конвейер, в каком порядке идут шаги, что делает каждая из команд, что ставят хуки и на чём скилл спотыкается.
Что это и зачем
impeccable — это скилл (набор инструкций плюс вспомогательные node-скрипты), который подключается к агентной среде и меняет то, как агент делает фронтенд-дизайн. Это не библиотека компонентов, не генератор макетов и не плагин к Figma. Внутри нет ни одного пикселя готового дизайна.
Он решает одну конкретную проблему: модель по умолчанию делает «безопасный» дизайн — усреднённый, узнаваемо-нейросетевой, без точки зрения. Скилл добавляет три вещи, которых у модели нет самой по себе:
- Процедуру. Сначала фиксируется правда о продукте (
PRODUCT.md), потом выбирается визуальный мир, и только потом пишется код. Пропустить шаг механически нельзя — см. Порядок работы. - Детерминированный детектор. 59 правил, которые ловят типовую машинную халтуру (градиентный текст, свечение вместо тени, «кикер над заголовком», низкий контраст, дрейф дизайн-системы) — это не мнение модели, а сканер по файлам.
- 23 именованные команды с разными сценариями: от аудита до «сделай смелее».
Чем он не является
- Не для бэкенда и не для не-UI задач. Это прямо записано в описании скилла.
- Не автопилот. На
/impeccableбез аргумента скилл обязан показать меню и не запускать команду сам. - Не замена вкусу. Чистый прогон детектора в самом скилле описан как «не финиш»: «A clean detector pass is not finished».
- Live-режим и детектор — только веб. Для
ios/androidесть отдельные справочники, но браузерный оверлей и HTML-движок правил там не работают.
Как он попадает в работу
Три канала внутри агента, все три реальны:
- По имени команды:
/impeccable audit src/app. - По смыслу запроса: описание скилла в
SKILL.mdперечисляет десятки триггеров («сделай смелее», «поправь типографику», «проверь доступность»), и среда подхватывает скилл автоматически. - Через хук: после каждой правки UI-файла запускается детектор и подкидывает агенту находки — даже если про скилл никто не вспоминал.
Плюс два канала вне чата, где работает тот же детектор:
- Командная строка / CI:
npx impeccable detect src/— детерминированные правила, JSON и код возврата, которым можно валить сборку. - Расширение для Chrome: те же проверки как оверлей на любой живой странице — стейджинг, сайт конкурента, страница, которую вы никогда не откроете в редакторе.
Где работает
Поддерживаемые среды (по сайту, 14.08.2026): Claude Code, Codex CLI, GitHub Copilot, Cursor, Gemini CLI, Grok Build, Antigravity, OpenCode, Pi. CLI принимает имена провайдеров claude, codex, copilot, cursor, gemini, agents, antigravity, grok, hermes, kiro, opencode, pi, qoder, rovo-dev, trae, trae-cn, vibe и их алиасы.
Тонкости, о которых стоит знать заранее: Cursor требует канал Nightly и включённые Agent Skills в Settings → Rules. Gemini CLI — @google/gemini-cli@preview и скиллы, включённые через /settings. Codex не показывает скиллы в обычном /-пикере: нужен /skills или $, плюс отдельное одобрение хука через /hooks. GitHub Copilot подхватывает .github/hooks/impeccable.json только после коммита в дефолтную ветку.
Не запускайте impeccable вместе с anthropic-скиллом frontend-design. Формулировка авторов: два скилла с разными дизайн-словарями сталкиваются и взаимно гасятся. Выберите один.
Источник: .claude/skills/impeccable/SKILL.md (frontmatter description, разделы Core principles, Commands, Routing), reference/routing.md; impeccable.style/designing, /faq. Снято 14.08.2026.
Установка
npm-пакет impeccable — это только CLI. Сами скиллы он не содержит: при установке он скачивает бандл с impeccable.style, собранный под вашу конкретную среду и модель, и раскладывает по папкам провайдеров.
Правильный вызов
# в папке рабочего проекта
npx impeccable@latest install --providers=claude --project -y
⚠️ Не запускайте инсталлер голым. Команда npx impeccable@latest install без флагов интерактивна. В неинтерактивной сессии (агент, stdin=/dev/null, CI) промпт читает пустую строку и молча принимает дефолт. А дефолт может оказаться глобальным.
Поймано живьём на проекте Kupol 14 августа 2026: скилл уехал в ~/.claude, следы в ~/.agents/skills и ~/.cursor/agents пришлось убирать руками.
Ещё: install --help пакетом не поддерживается — функция установки вообще не проверяет этот флаг, он молча игнорируется и запускается настоящая установка. Не пробуйте «посмотреть справку» этим способом. Справка есть только у корневого impeccable --help и у detect --help.
Точный механизм: когда дефолт становится глобальным
Функция выбора scope в CLI (defaultInstallScope) работает так:
- Если среди выбранных провайдеров есть папка харнесса в самом проекте →
project. - Иначе если есть глобальная папка харнесса, в которой уже лежат реальные скиллы →
user, то есть глобально. - Иначе →
project.
То есть ловушка срабатывает в конкретной конфигурации: в проекте ещё нет .claude/, а в ~/.claude/skills/ уже лежат ваши скиллы. Это ровно ситуация на машине, где глобально живут consilium, generate, skill-scout. Отсюда и вердикт: без флагов не запускать никогда, потому что заранее вы этого не проверите.
Флаг -y жёстко форсит project — это, помимо --providers, вторая страховка в рекомендованной строке.
Побочный эффект глобальной установки: хук всё равно пишется в проект. В CLI корень для хука всегда равен корню проекта. То есть можно получить скилл в ~/.claude/skills/ и одновременно <проект>/.claude/settings.local.json с хуком — состояние, из которого неочевидно, что установка вообще ушла глобально.
И ещё: в неинтерактивной сессии хук ставится по умолчанию, без вопроса. Отключается только флагом --no-hooks.
Баг, на который можно наступить. Если харнессов не найдено вообще — ни в проекте, ни в домашней папке — и сессия неинтерактивная без -y и без --providers, CLI уходит в бесконечный цикл, повторяя «Select harnesses… / Choose at least one provider.». Воспроизведено 14.08.2026. Лечится теми же явными флагами.
Проверка после установки
# в проекте должен появиться скилл
ls .claude/skills/impeccable/
# глобально ничего лишнего появиться не должно
ls ~/.claude/skills
Все команды CLI
Список снят из кода пакета impeccable@3.6.0, не из README. Других подкоманд нет.
| Команда | Флаги и назначение |
|---|---|
install | --providers=<список> · --scope=project|global (алиас --install-scope) · --project/--local · --global/--user/--home · -y/--yes · --force · --no-hooks |
update | Те же scope-флаги, -y, --force, --no-hooks. Скачивает свежие скиллы и убирает устаревшие файлы. PRODUCT.md и DESIGN.md никогда не перезаписываются |
check | Без флагов. Сравнивает установленное с последним релизом — «отстал я или нет» |
detect [файл/папка/URL…] | Детектор, см. отдельный раздел. Флаги --fast, --gpt, --gemini устарели и игнорируются |
ignores (алиас ignore) | CRUD по игнорам детектора: list/status/ls, add-rule (--all-values), add-file, add-value, remove-rule, remove-file, remove-value, clear. Scope: --shared (по умолчанию), --local, --all. Дополнительно --file <glob>, --reason <текст> |
link | --source=<path> (по умолчанию .impeccable), --providers=, -y, --force |
help | Тянет список команд с impeccable.style/api/commands — требует сети |
skills <cmd> | Легаси-неймспейс, всё ещё поддерживается |
--help/-h, --version/-v | Глобальные |
pin, hooks, doctor, uninstall — это НЕ команды CLI. Их в пакете нет вовсе. Это команды внутри агента: /impeccable pin <cmd>, /impeccable hooks <action>, /impeccable doctor.
init в CLI намеренно заблокирован с внятной ошибкой: «init» is not a CLI command. Type /impeccable init in your AI coding agent's chat.
Альтернативные способы установки
- Плагин Claude Code:
/plugin marketplace add pbakaus/impeccable, потом/plugin. - Универсальный инсталлер:
npx skills add pbakaus/impeccable— ставит один общий билд для всех сред вместо скомпилированного под вашу. - ZIP с сайта: распаковать в корень проекта; создаёт
.cursor/,.claude/,.gemini/,.codex/,.agents/,.github/.
Проектная установка имеет приоритет над глобальной и позволяет держать скиллы под контролем версий.
Что инсталлер кладёт в проект
| Путь | Что это |
|---|---|
.claude/skills/impeccable/SKILL.md | Главный файл скилла: принципы, таблица команд, маршрутизация |
.claude/skills/impeccable/reference/*.md | 39 справочников — по одному на команду плюс общие (new-work, craft-floor, routing, hooks, doctor, ios, android) |
.claude/skills/impeccable/scripts/*.mjs | Исполняемая часть: загрузчик контекста, детектор, хуки, live-режим, генерация картинок, страница выбора концепции |
.claude/settings.local.json | Хуки Claude Code (см. Хуки). Файл в .gitignore — остаётся локальным |
Артефакты, которые появятся потом — уже в ходе работы
| Путь | Кто пишет | Что внутри |
|---|---|---|
PRODUCT.md | init | Правда о продукте: пользователи, задача, позиционирование, ограничения, платформа, стек |
DESIGN.md | document или финиш новой работы | Визуальная система: токены во frontmatter + проза. Формат совместим с Google Stitch |
.impeccable/config.json | hooks, init | Общий конфиг: настройки хука, игноры детектора, buildPath |
.impeccable/config.local.json | инсталлер, разработчик | Персональные переопределения, включая согласие на хук. В .gitignore |
.impeccable/design.json | document | Машинный «сайдкар» к DESIGN.md — его читает детектор дизайн-системы. Руками не править, обновлять через document |
.impeccable/surfaces/*.md | сама работа | Бриф поверхности: режим, задача, последовательность доказательств, выбранное направление для одной страницы |
.impeccable/critique/ | critique | Снимки критики: отчёт + метаданные оценок, чтобы polish взял их как бэклог |
.impeccable/review/ | финиш новой работы | Скриншоты для ревьюера: desktop.png, mobile.png |
.impeccable/mocks/decision/ | раунд направлений | Комп-картинки карточек концепций |
.impeccable/live/ | live | Конфиг live-режима, журнал сессий, манифест корней |
Клиентский репозиторий? Добавьте .claude/ в .gitignore проекта — иначе мегабайты скиллов уедут клиенту. А вот PRODUCT.md, DESIGN.md и .impeccable/config.json имеет смысл коммитить: это знание о проекте, а не инструмент. .impeccable/config.local.json impeccable сам держит вне git.
Обновление
npx impeccable check # отстал ли я от последнего релиза
npx impeccable update # обновить скиллы, убрать устаревшие файлы
npx impeccable install --force # переустановить начисто
При обновлении PRODUCT.md и DESIGN.md не трогаются. Если установленная версия старше опубликованной, загрузчик контекста сам скажет об этом директивой UPDATE_AVAILABLE при старте сессии (запрос к impeccable.style троттлится раз в сутки, повторное уведомление о той же версии — не чаще раза в неделю).
Источник: живая установка в проекте Kupol (14.08.2026), код CLI impeccable@3.6.0 (cli/bin/cli.js, cli/bin/commands/skills.mjs) с эмпирическими прогонами в изолированных окружениях, impeccable.style/faq, reference/hooks.md, reference/init.md, reference/document.md, scripts/context.mjs.
Порядок работы
Это самая важная часть и главный источник непонимания. Общее правило: сначала бриф, потом концепция, потом код, потом ревью, потом документация системы. Порядок не декоративный — он зашит в скрипты, и часть шагов физически отказывается работать, пока предыдущие не выполнены.
Шаг 0: загрузка контекста (каждая сессия)
Первое, что скилл делает один раз за сессию — запускает загрузчик контекста:
node .claude/skills/impeccable/scripts/context.mjs
# при работе по конкретному файлу или маршруту:
node .claude/skills/impeccable/scripts/context.mjs --target src/routes/pricing.astro
Скрипт находит PRODUCT.md, DESIGN.md, бриф поверхности и — на нативных платформах — платформенный справочник, а потом печатает набор директив заглавными буквами. Агент обязан им следовать и повторно скрипт не запускать.
Вот реальный вывод на проекте без PRODUCT.md, но с готовым интерфейсом (снято 14.08.2026):
NO_PRODUCT_MD: This project has no PRODUCT.md yet, but it does have an
incumbent visual implementation...
BUILD_INIT_REQUIRED: Before shape or any new-surface/redesign flow, init must
capture PRODUCT.md with the human...
SCOPED_EXISTING_ALLOWED: Narrow refinement commands may use the incumbent
implementation as authority without blocking on context setup...
EXISTING_VISUAL_SYSTEM: For refinement or extension, code and assets are
incumbent design authority...
RESOLVED_CONTEXT: { "projectRoot": "...", "productPath": null, ... }
AUTONOMY_DIRECTIVE_CHECK / SUBAGENT_AUTHORIZATION / IMAGE_TOOLS: ...
Что означают ключевые директивы:
| Директива | Смысл |
|---|---|
NO_PRODUCT_MD | Брифа нет. Новая поверхность или редизайн — только через init. Узкие доработки могут идти без него |
BUILD_INIT_REQUIRED | Прямой запрет: до shape и любой новой работы init обязан записать PRODUCT.md |
SCOPED_EXISTING_ALLOWED | Разрешение: точечные команды доработки не блокируются отсутствием контекста |
EXISTING_VISUAL_SYSTEM | Код и ассеты — действующая дизайн-власть. Отсутствие DESIGN.md — это пробел в документации, а не «чистый лист» |
RESOLVED_CONTEXT | JSON: какие пути реально разрешились (корень проекта, пути к файлам, платформа) |
CONTEXT_STALE | Дешёвая версия отчёта doctor: артефакты разошлись со схемой. Только сообщается, чинится только по просьбе |
UPDATE_AVAILABLE | Установлена версия старше опубликованной; лечится npx impeccable update |
MANUAL_DETECTOR_REQUIRED | Автоматического хука в сессии нет — прогнать детектор вручную один раз в конце |
IMAGE_GEN_AVAILABLE / IMAGE_TOOLS | Доступна генерация картинок и какие конвертеры есть на машине |
BUILD_PATH_DEFAULT | Записанный режим сборки: comp (сначала картинка-эталон) или code (сразу в код) |
Источник: scripts/context.mjs + живой запуск в проекте Kupol. Снято 14.08.2026.
Файлы контекста: что где лежит и кто главнее
| Файл | На какой вопрос отвечает | Когда обновлять |
|---|---|---|
PRODUCT.mdстратегия | Какая платформа? Для кого? Что продукт делает и какое утверждение сосед не может честно скопировать? Какие реальные доказательства и обязательства бренда существуют? | Меняются платформа, аудитория, позиционирование, назначение, ограничения, доказательства или обязательства бренда → /impeccable init |
DESIGN.mdвизуальная система | Какие цвета, шрифтовые стеки, трактовки компонентов, радиусы, высоты и визуальные правила допустимы? | Меняются палитра, типографика, компоненты, токены, шкалы отступов и радиусов → /impeccable document |
.impeccable/surfaces/*.mdодна поверхность | Какой режим у этой страницы, какую работу она делает, какие доказательства показывает, какое направление выбрано? | Пишется самой работой. Править, когда меняется стратегия страницы |
.impeccable/design.jsonгенерируется | Структурированные данные для автоматики: детектор, хуки, live-режим | Руками не править. Обновляется прогоном document |
Кто побеждает в конфликте:
PRODUCT.md— в долговременных продуктовых решениях и голосе: платформа, аудитория, позиционирование, ограничения, доказательства, обязательства бренда.DESIGN.md— в визуальных: цвет, типографика, радиус, высота, поведение компонентов, правила «делай / не делай».- Бриф поверхности — в стратегии конкретной страницы: её режим, её работа, последовательность доказательств, выбранное направление.
- Существующий код всё равно важен. Команды читают файлы проекта перед правкой и сохраняют реальные конвенции, если те сильнее или свежее документов. Устаревший
DESIGN.md— сигнал обновить документ, а не разрешение игнорировать реализацию.
Где скилл ищет файлы: сначала корень проекта, затем .agents/context/, затем docs/. В монорепо каждый воркспейс сначала разрешает свои PRODUCT.md и DESIGN.md, потом пофайлово падает на корень репозитория. Границы проектов берутся из деклараций пакетного менеджера (workspaces в package.json, pnpm-workspace.yaml, lerna.json) либо из глобов projectRoots в .impeccable/config.json:
{ "projectRoots": ["docs/design/skins/*"] }
Платформа
PRODUCT.md несёт строку ## Platform. Отсутствие поля означает web.
| Значение | Что означает |
|---|---|
web | Сайт или веб-приложение, включая адаптивный мобильный веб. Значение по умолчанию |
ios | Нативное iOS/iPadOS-приложение. Подгружает руководство по Apple HIG |
android | Нативное Android-приложение. Подгружает Material Design 3 |
adaptive | Одна кодовая база (Flutter, React Native, KMP), которая действительно адаптирует язык дизайна под ОС. Подгружает оба |
Нативная поддержка в статусе alpha. Live-режим, детектор и хук читают браузер или парсят HTML — на нативном проекте они не работают. Мобильный веб остаётся web, а нативная обёртка вокруг сайта не делает его язык дизайна нативным.
Правила детектора, которые включаются только при наличии DESIGN.md: design-system-font (шрифты, не объявленные в типографике), design-system-color (литеральные цвета вне задокументированной палитры), design-system-radius (радиусы вне шкалы), design-system-font-size (размеры вне рампы). Без DESIGN.md, при designSystem.enabled: false или с флагом --no-design-system они молчат. Это, пожалуй, лучший практический аргумент за то, чтобы довести document до конца.
Источник: impeccable.style/docs/context, /docs/config; подтверждено кодом scripts/context.mjs (константа FALLBACK_DIRS = ['.agents/context', 'docs'], разрешение монорепо). Снято 14.08.2026.
Маршрут A: новая поверхность или редизайн
Именно здесь работает правило «сначала PRODUCT.md». Пять шагов, каждый со своим артефактом.
init — собрать PRODUCT.md
Скилл сначала сам изучает репозиторий (доки, копирайт, конфиги, маршруты, роли, логотипы, юридические ассеты), чтобы не заставлять вас пересказывать то, что уже есть в коде. Потом задаёт вопросы — не больше трёх за раунд, максимум три раунда — и только про существенные пробелы.
Вопросы строго про продукт: кто пользователь и в какой ситуации; что продукт делает и чем механически отличается; какие факты, ассеты и ограничения нельзя нарушить. На пустом проекте отдельно спрашивается стек (чистый HTML/CSS, конкретный фреймворк или «на ваше усмотрение») — это решение пользователя, не агента.
Про эстетику на этом шаге не спрашивают вообще. Ни цветов, ни шрифтов, ни настроения, ни референсов. Если вы сами назвали жёсткое визуальное ограничение — его запишут как есть, без расширения. Это ответ на главный вопрос «почему сначала бриф»: init собирает правду, а не вкус.
Результат: PRODUCT.md в корне проекта с секциями Platform, Stack, Users, Product Purpose, Positioning, Operating Context, Capabilities and Constraints, Brand Commitments, Evidence on Hand, Product Principles, Accessibility & Inclusion. Пустые секции опускаются, а не заполняются водой.
Гейт: перед переходом дальше скилл обязан проверить, что файл реально существует по разрешённому пути. Заметки интервью или «планировочный пакет» вместо файла не считаются.
Один раунд из двух-трёх связанных вопросов, уже про поверхность: кто должен действовать и во что поверить (Persuade), какая задача и состояния (Operate), какой вопрос у читателя (Read), что ведёт и как разворачивается исследование (Experience).
Это ключевой и самый неочевидный механизм. Скилл выводит семь визуальных систем из культурного мира аудитории, а потом запускает:
node .claude/skills/impeccable/scripts/concept-seed.mjs --scope direction --mode <mode>
Скрипт сам назначает, какое направление собирать, и раздаёт «челленджеров» из своего каталога. Смысл — сломать колею: без броска каждый прогон сходится к категорийному дефолту.
Проверено на живом запуске: без PRODUCT.md скрипт отказывается работать и печатает: «the dice stay in the cup until product truth exists» — «кубики остаются в стакане, пока не появится правда о продукте». То есть порядок «бриф → концепция» не рекомендация, а механическая блокировка.
Челленджеры раздаются из отрецензированного человеком каталога 188 одобренных «визуальных миров» (демо на главной сайта сдаёт из 177 самых высокорейтинговых). Это не шаблоны: мир соревнуется с направлениями, выведенными моделью из вашего продукта, и берёт сборку только если побеждает по двум осям — узнаваемость для аудитории и ясность продукта.
Дальше пользователю показывают страницу решения в браузере (её поднимает serve-question.mjs): карточки направлений одинакового размера, у каждой тезис, палитра, материалы, первый экран, честный риск. Плюс всегда есть «тихая дверь» — standing exit, категорийный стандарт, сыгранный честно, и кнопка перебросить (re-roll) с регистрами safer / bolder.
Кто и на каких основаниях может перебрасывать. Вы — свободно и по любой причине, включая вкус; после двух перебросов подряд скилл спросит, какого качества не хватает, вместо того чтобы гадать на третьем. Агент — только по названным фактическим основаниям (назначенное направление не может нести правду продукта или задачу); его собственный вкус основанием не считается, в этом весь смысл броска извне его ранжирования. Направление, закреплённое пользователем или брифом, всегда бьёт бросок.
Seed key из вывода скрипта стоит сохранить: он воспроизводит весь бросок, включая все раунды перебросов.
Важно про слова «смелее» и «тише». Пока открыт раунд направлений, «bolder» и «quieter» — это регистры переброса, а не команды bolder/quieter. Команды применяются к уже выпущенной поверхности.
Перед кодом выбранное направление записывается контрактом в комментарий в начале артефакта — пять коротких блоков, не длиннее 150 слов: THESIS, OWN-WORLD, STORY, FIRST VIEWPORT, FORM, плюс строка FINISH. Комментарий должен пережить продакшн-сборку (HTML-комментарий в разметке, не frontmatter).
Дальше — режим сборки, он записан в .impeccable/config.json как buildPath:
comp(comp-led) — сначала генерируется картинка-эталон, потом код воспроизводит её почти попиксельно, и только после этого добавляются анимация, интерактив и адаптив.code(code-led) — сразу в код; амбиция живёт в блокеFIRST VIEWPORTконтракта, ревьюер проверяет её по поведению.
Если генерации картинок нет вовсе, выбора нет: только code-led.
Откуда берутся картинки. Скилл зовёт тот инструмент, который даёт ваша среда, а не конкретную модель. Если встроенного инструмента генерации нет — можно задать OPENAI_API_KEY, и рендер пойдёт через gpt-image-2. Скилл обязан предупредить об этом до первой картинки, потому что тратит ваши деньги: примерно 5–25 центов за изображение.
Жёсткое правило скилла — проверять пакетами, а не циклом: собрать целиком, снять один batch скриншотов (десктоп + мобильный вместе), починить всё найденное одной пачкой, подтвердить максимум ещё одним раундом и остановиться. Потолок — два раунда.
Потом запускаются два поставляемых субагента:
impeccable-finish-reviewer— свежий контекст, без истории сборки (чтобы не унаследовать оптимизм автора). Получает исходный запрос, путь к артефакту, скриншоты, контракт направления, находки хука.impeccable-documenter— пишетDESIGN.mdи сайдкар по факту собранного мира, а не по намерению.
Финиш определён так: «контракт соблюдён, комп выдержан, ревью закрыто, система записана». Чистый прогон детектора — не финиш.
Маршрут B: доработка существующего
Здесь PRODUCT.md не обязателен — и это специально.
- Загрузка контекста печатает
SCOPED_EXISTING_ALLOWED: узкие команды доработки идут без блокировки. - Действующая визуальная власть — это код. Токены, тема, CSS, компоненты и ассеты. Отсутствие
DESIGN.mdсамо по себе не делает проект «чистым листом». - Скилл читает цель и хотя бы один репрезентативный источник визуальной правды, прежде чем править.
- Дальше — нужная команда:
polish,typeset,layout,adapt,hardenи т. д. - После работы предлагается
init— не как условие, а как следующий шаг.
Граница между доработкой и редизайном. Скилл формулирует так: «Refinement preserves; redesign replaces». Доработка сохраняет идентичность, поведение, копирайт и всё вне области задачи. Редизайн сохраняет правду о продукте, содержание и функции, но со старым внешним видом обращается как с уликой и антиреференсом — и обязан пройти маршрут A с заменой DESIGN.md. Промежуточного варианта «полирнём то, что и так решили выбросить» — нет.
Без аргумента
Команда /impeccable без аргумента не запускает ничего. Скилл собирает сигналы контекста:
node .claude/skills/impeccable/scripts/context-signals.mjs
и выдаёт 2–3 обоснованные рекомендации плюс полное меню. Логика рекомендаций: есть код без DESIGN.md → document; критики ещё не было → critique; в последней критике низкий счёт или есть P0/P1 → polish; правки сосредоточены в одном месте → audit/polish с точным скоупом; запущен dev-сервер → доступен live.
Источник: SKILL.md (Setup, How to design, Routing), reference/init.md, reference/new-work.md, reference/routing.md, живые запуски context.mjs и concept-seed.mjs. Снято 14.08.2026.
Все команды
23 команды, сгруппированные по категориям. Список сверен с реально установленным скиллом: pin.mjs без аргументов печатает точно этот перечень.
Сайт считает «23» иначе. В документации на impeccable.style тоже 23 команды, но набор другой: там есть сам impeccable (вызов без аргумента — меню и свободная дизайн-работа) и нет устаревшего craft. И группы другие: CREATE · EVALUATE · REFINE · SIMPLIFY · HARDEN · SYSTEM вместо Build · Evaluate · Refine · Enhance · Fix · Iterate из SKILL.md. Ниже — группировка по коду, потому что это то, что реально исполняется.
| Команда | Категория | Что делает |
|---|---|---|
shape [feature] | Build | Спланировать UX/UI до кода |
init | Build | Записать PRODUCT.md |
document | Build | Сгенерировать DESIGN.md из существующего кода |
extract [target] | Build | Вынести токены и компоненты в дизайн-систему |
craft [feature] | Build | Устаревший алиас обычного запроса на новую работу |
critique [target] | Evaluate | UX-ревью с эвристиками Нильсена и оценкой |
audit [target] | Evaluate | Технические проверки: a11y, перф, тема, адаптив |
polish [target] | Refine | Финальный проход качества перед выкаткой |
bolder [target] | Refine | Усилить безопасный или пресный дизайн |
quieter [target] | Refine | Приглушить агрессивный или перегруженный |
distill [target] | Refine | Снять до сути, убрать сложность |
harden [target] | Refine | Продакшн-готовность: ошибки, i18n, крайние случаи |
onboard [target] | Refine | Первый запуск, пустые состояния, активация |
animate [target] | Enhance | Осмысленная анимация и движение |
colorize [target] | Enhance | Стратегический цвет в монохромный UI |
typeset [target] | Enhance | Типографика: иерархия и шрифты |
layout [target] | Enhance | Отступы, ритм, визуальная иерархия |
delight [target] | Enhance | Характер и запоминающиеся детали |
overdrive [target] | Enhance | За пределы обычных ограничений |
clarify [target] | Fix | UX-копирайт, подписи, сообщения об ошибках |
adapt [target] | Fix | Адаптация под устройства и размеры экрана |
optimize [target] | Fix | Диагностика и починка производительности UI |
live | Iterate | Визуальные варианты прямо в браузере |
Плюс три служебных подкоманды, которых нет в этой таблице: hooks, doctor и pin/unpin.
Build — создание
init Build
- Что делает
- Настраивает проект под impeccable: изучает репозиторий, проводит интервью (когда контекста не хватает) и пишет
PRODUCT.md— стратегический документ: пользователи, бренд, принципы. ПредлагаетDESIGN.md, когда код уже есть. Преднастраивает live-режим. В конце рекомендует следующие команды. - Когда звать
- Один раз на проект. Перед любой новой поверхностью или редизайном — обязателен.
- Вход
- Аргументов нет. Репозиторий + ответы человека.
- Выход
PRODUCT.mdв корне проекта; при необходимости.impeccable/config.jsonсbuildPathи.impeccable/live/config.json.- Пример
/impeccable init- Ошибки
- Файл не создан, а интервью прошло — это незавершённый
init, гейт должен отловить. Про эстетику здесь не спрашивают: если агент спросил про цвета и шрифты — он вышел за рамки шага.teach— алиасinit. - ⚠ Расхождение
- Сайт и метаданные команд, поставляемые с самим скиллом, утверждают, что
initпредлагаетDESIGN.md, когда в проекте есть код (сайт прямо советует «согласиться, когда предложит запуститьdocument»). Действующий справочникreference/init.mdэто запрещает: «Never … offer DESIGN.md during init» и «Do not offer DESIGN.md merely because it is missing». Ориентируйтесь на справочник, аdocumentзовите отдельным шагом. Подробнее — в разделе расхождений.
shape [feature] Build
- Что делает
- Планирует UX и UI до кода. Обязательное многораундовое интервью, визуальные пробы где доступны, на выходе — подтверждённый пользователем бриф.
- Когда звать
- Когда нужен согласованный бриф без реализации; когда задача крупная и лучше договориться на берегу.
- Вход
- Описание фичи или поверхности.
- Выход
- Бриф в чате. Кода не пишет. В
new-workзаходит только за решениями про визуальный мир и концепцию поверхности и там останавливается. - Пример
/impeccable shape экран настроек уведомлений- Ошибки
- Требует
PRODUCT.md— директиваBUILD_INIT_REQUIREDблокирует. Разреженный запрос требует минимум одного раунда ответов: «просто сделай» здесь не сработает.
document Build
- Что делает
- Генерирует
DESIGN.md, фиксирующий текущую визуальную систему. Автоматически вытаскивает цвета, типографику, отступы, радиусы и паттерны компонентов из кода, потом спрашивает пользователя про описательный язык — атмосферу и характер цвета. - Когда звать
- Есть связный интерфейс, но нет спецификации, по которой агент сможет держаться бренда.
- Вход
- Аргументов нет. Читает код проекта.
- Выход
DESIGN.mdв корне: YAML-frontmatter с машинными токенами + до восьми markdown-секций в фиксированном порядке. Формат — официальная спека DESIGN.md (Google Stitch), так что файл переносим между инструментами. Плюс сайдкар.impeccable/design.json, который читает детектор дизайн-системы.- Пример
/impeccable document- Ошибки
- Токены нормативны, проза — контекст. Не пытайтесь заменить токены описаниями. На новом мире
DESIGN.mdпишется на финише, а не до сборки — иначе получается свод правил, который потом защищают от реальности.
extract [target] Build
- Что делает
- Находит повторяющиеся паттерны, компоненты и значения, выносит их в дизайн-систему и мигрирует существующие места использования на общие версии.
- Когда звать
- По коду разъехались вариации одного и того же, хочется вернуть к системе.
- Вход
- Область: папка, фича, страница.
- Выход
- Новые компоненты и токены, переписанные места использования, удалённый мёртвый код, обновлённая документация системы.
- Пример
/impeccable extract src/features/billing- Ошибки
- Порог — три и более использования с одинаковым намерением. Преждевременная абстракция хуже дублирования. Если дизайн-системы нет вообще — команда обязана остановиться и спросить, где её заводить, а не создавать самовольно.
craft [feature] Build
- Статус
- Устаревший алиас. Ничего не добавляет.
- Что делает
- То же, что обычный запрос «сделай лендинг» / «построй эту фичу» / «переделай экран»: маршрут через
init(если нетPRODUCT.md) и дальшеnew-work. - Ошибки
- Не говорите пользователям, что им «нужно вызвать craft». Естественная формулировка работает так же.
Evaluate — оценка
critique [target] Evaluate
- Что делает
- UX-ревью с количественной оценкой. Формально: одна цель, две независимые оценки, синтез, снимок в архив, вопросы пользователю.
- Как устроено
- Assessment A — дизайн-ревью глазами арт-директора: специфичность дизайна, иерархия, ИА, когнитивная нагрузка, эмоциональный путь, 10 эвристик Нильсена по шкале 0–4. Assessment B — детерминированные улики: прогон детектора плюс браузерный оверлей. Оба обязаны идти изолированными субагентами, чтобы B не «заякорил» суждение A.
- Вход
- Конкретный файл, компонент или URL. Путь предпочтительнее URL дев-сервера: порты плывут, пути нет.
- Выход
- Полный отчёт в чате (это и есть результат) + снимок в
.impeccable/critique/. В отчёте: таблица эвристик с итогом вида28/40, вердикт специфичности, что работает, 3–5 приоритетных проблем с тегами P0–P3 и предложенной командой, «красные флаги» по 2–3 персонам, линия тренда по прошлым прогонам. - Пример
/impeccable critique src/pages/pricing.astro- Ошибки
- Три типовых провала, все описаны в самом справочнике: (1) прогнали в одном контексте без субагентов и не поставили баннер
⚠️ DEGRADED: single-context; (2) отчёт написали только в файл, а в чат не выдали — «если отчёт существует только в.impeccable/critique/, прогон не дал ничего»; (3) закончили отчётом и не задали финальные вопросы. Пропущенный детектор — тоже провал прогона, кроме случая, когдаdetect.mjsотсутствует или падает после реальной попытки.
audit [target] Evaluate
- Что делает
- Систематические технические проверки. Ничего не чинит — документирует, чтобы чинили другие команды.
- Пять измерений
- Accessibility · Performance · Theming · Responsive Design · Implementation Integrity. Каждое 0–4, итог из 20.
- Вход
- Область: фича, страница, компонент.
- Выход
- Таблица оценок с итогом
??/20и полосой рейтинга, вердикт целостности реализации, executive summary, находки по severity P0–P3 с локацией и стандартом (WCAG), системные паттерны, что сделано хорошо, план команд в порядке приоритета. - Пример
/impeccable audit src/app/dashboard- Ошибки
- Только веб. На
ios/android/adaptiveмаршрут уходит вaudit.native.md. Гора P3-находок создаёт шум — фокус на том, что реально важно. Находки без объяснения влияния на пользователя не считаются.
Refine — доводка
polish [target] Refine
- Что делает
- Финальный проход качества: выравнивание, отступы, консистентность, микродетали, состояния. Проходит весь путь, а не один экран.
- Когда звать
- Перед выкаткой; после
critique/auditкак исполнитель их бэклога. - Вход
- Цель + планка качества и ограничения по срокам. Автоматически подтягивает прошлую критику:
critique-storage.mjs latest "<target>". - Выход
- Правки в коде. Порядок починки жёсткий: сломанные задачи и потеря данных → отсутствующие состояния (loading, empty, error, success, disabled, permission) → поток, иерархия, адаптив, дрейф системы → визуальные и моушн-несоответствия → чистка кода.
- Пример
/impeccable polish поток оформления заказа- Ошибки
- Polish — не замаскированный редизайн. Если сама концепция неверна, команда обязана сказать это вслух и порекомендовать редизайн или
bolder, а не протаскивать замену. И: чистый прогон детектора — не доказательство качества, нужно смотреть на отрендеренный результат.
bolder [target] Refine
- Что делает
- Поднимает одну часть поверхности до убедительности, которую остальная страница уже подразумевает. Работает в существующем словаре системы.
- Вход
- Какой участок целевой и что трогать нельзя.
- Ошибки
- Скоуп суверенен: «всё остальное остаётся» — это буквальная инструкция. Нельзя перекрашивать соседей, добавлять цвета, шрифты, радиусы, тени или примитивы, которых у поверхности нет. Если система не может выразить направление — остановиться и спросить, назвав конкретное добавление и его работу. Рефлекс «добавить больше эффектов» — противоположность смелости и отвергается первым. Плюс важное: слово «bolder», сказанное при открытом раунде направлений, означает регистр переброса, а не эту команду.
quieter [target] Refine
- Что делает
- Снижает визуальную интенсивность без потери личности и без скатывания в дженерик. «Тихий дизайн сложнее смелого: сдержанность требует точности».
- Как зависит от режима
- Persuade/Experience: сдержаннее палитра, больше воздуха, драма уменьшается, но точка зрения остаётся. Operate/Read: меньше фоновых акцентов, площе карточки, меньше цвета и движения — инструмент должен полнее исчезать в задаче.
distill [target] Refine
- Что делает
- Снимает всё, что не заслуживает места: дублирующие элементы, повторённую информацию, декоративный шум, косметическую сложность.
- Когда звать
- «Упростить», «разгрузить», «убрать лишнее», «сделать чище и сфокусированнее».
harden [target] Refine
- Что делает
- Готовит интерфейс к реальным данным: обработка ошибок, i18n, переполнение текста, крайние случаи, устойчивость к сети.
- Что проверяет
- Очень длинный и очень короткий текст, спецсимволы, эмодзи, RTL, большие числа, 1000+ элементов в списке, пустые состояния.
- Пример
/impeccable harden форма профиля
onboard [target] Refine
- Что делает
- Проектирует первый запуск, пустые состояния и активацию: приветственные экраны, настройку аккаунта, прогрессивное раскрытие, контекстные подсказки, «момент ага».
- Что нужно на вход
- Какой «момент ага» вы хотите и каков уровень опытности пользователей.
- Принцип
- «Задача онбординга — не научить продукту, а как можно быстрее довести до момента, доказывающего, что продукт стоит времени».
Enhance — усиление
animate [target] Enhance
- Что делает
- Движение объясняет состояние, связь и иерархию — либо создаёт один поставленный момент, который поверхность заслужила. «Декорация без цели — это анимационный долг».
- По режимам
- Persuade/Experience: одна отрепетированная фокусная последовательность лучше повторяющихся ревилов секций. Operate/Read: движение служит обратной связи и непрерывности, рутинные переходы быстрые, пользователя не заставляют ждать хореографию загрузки.
- Ошибки
- На нативных платформах веб-инструментарий не применяется — идти в секцию Motion соответствующего платформенного справочника, включая поведение Reduce Motion.
colorize [target] Enhance
- Что делает
- Вводит цвет как иерархию, смысл и атмосферу. Сохраняет подтверждённые бренд-цвета и семантические конвенции.
- Ошибки
- Нельзя под видом «добавим цвета» подменять визуальный мир. Для Operate/Read цвет прежде всего кодирует действие, выбор, статус и навигацию — редкость даёт акценту силу.
typeset [target] Enhance
- Что делает
- Чинит шрифты, иерархию, размеры, насыщенность и читаемость, чтобы текст выглядел намеренно. Работает внутри установленного визуального мира.
- Ошибки
- Если замена типографики создаёт новую идентичность — это маршрут
new-workс обновлениемDESIGN.md, а неtypeset.
layout [target] Enhance
- Что делает
- Превращает приоритет продукта в порядок чтения, группировку, ритм и полезное пространство. Сначала диагностирует структурную проблему, потом двигает блоки.
- Ошибки
- Меняет структуру внутри существующего мира. Замена идентичности — снова
new-work.
delight [target] Enhance
- Что делает
- Добавляет характер в моменты, которые этого заслуживают. «Восторг — это не слой универсальной игривости, а характер продукта, проявленный через полезное взаимодействие, человечный ответ или неожиданно продуманную деталь».
- Что нужно на вход
- Эмоциональный диапазон бренда.
- По режимам
- Operate/Read: концентрировать восторг в осмысленных моментах — первое использование, завершение, восстановление, мастерство. Всё остальное держит надёжность.
overdrive [target] Enhance
- Что делает
- Толкает интерфейс за пределы обычного, используя полную мощь браузера: таблица на миллион строк, диалог, вырастающий из своего триггера, форма с потоковой валидацией, кинематографичный переход страниц.
- Ошибки
- Самая рискованная команда. Справочник помечен «EXTRA IMPORTANT»: контекст определяет, что значит «экстраординарно». Система частиц на креативном портфолио — впечатляет; она же на странице настроек — позор. Команда обязана сначала предложить, а не сразу реализовывать. Ответ начинается с баннера
⚡ OVERDRIVE.
Fix — починка
clarify [target] Fix
- Что делает
- Переписывает непонятный текст интерфейса: подписи, ошибки, микрокопию, инструкции. Сохраняет фактический смысл, терминологию продукта и голос бренда.
- Как работает
- Читает весь путь взаимодействия, а не отдельные строки: неоднозначные существительные и глаголы, внутренний жаргон, размытые подписи, отсутствующие последствия и способы восстановления, несогласованную терминологию, лишние заголовки и подтверждения.
- Что нужно на вход
- Что аудитория знает и в каком эмоциональном состоянии находится.
adapt [target] Fix
- Что делает
- Адаптирует существующий дизайн к другому контексту: размер экрана, устройство, платформа, сценарий использования. Брейкпоинты, текучие раскладки, размеры зон касания.
- Вход
- Целевые платформы/устройства и контексты использования:
/impeccable adapt таблица заказов mobile. - Ошибки
- Главная ловушка — считать адаптацию масштабированием. Задача — переосмыслить опыт под новый контекст. Только веб (включая мобильный веб); нативные платформы уходят в
adapt.native.md.
optimize [target] Fix
- Что делает
- Диагностирует и чинит производительность UI: скорость загрузки, рендеринг, анимации, картинки, размер бандла.
- Как
- Сначала измерить (Core Web Vitals: LCP, INP, CLS; время до интерактивности; размеры бандла; частота кадров; сетевой водопад), потом найти узкое место, потом чинить, потом измерить снова.
- Принцип
- «Производительность — это фича. Не оптимизируйте то, что не тормозит».
Iterate — итерации
live Iterate
- Что делает
- Интерактивный режим вариантов. Вы выбираете элемент прямо в браузере, выбираете дизайн-действие — и получаете сгенерированные варианты HTML+CSS, подменяемые на лету через HMR.
- Требования
- Запущенный dev-сервер с HMR (Vite, Next.js, Bun и т. д.) или статический HTML-файл, открытый в браузере.
- Как запускается
node .claude/skills/impeccable/scripts/live.mjs(или с--target <path>в монорепо). Скрипт поднимает вспомогательный HTTP-сервер (по умолчанию порт8400) и внедряет пикер в страницу. Дальше агент крутит цикл опросаlive-poll.mjsи реагирует на события:generate,steer,accept,discard,manual_edit_apply,exit.- Первичная настройка
- Разовая:
.impeccable/live/config.jsonс полямиfiles(какие HTML реально грузит браузер),insertBefore,commentSyntax. Для Next.js, Nuxt, SvelteKit, TanStack, Astro в справочнике есть готовая таблица значений. - Приоритет источников
- При генерации:
DESIGN.mdпобеждает в визуальных решениях,PRODUCT.md— в продуктовых и в голосе, бриф поверхности — в стратегии этой поверхности. - Ошибки
- CSP. Если в проекте есть Content Security Policy, она заблокирует
http://localhost:8400, и пикер не загрузится. Скилл детектит это черезdetect-csp.mjsи обязан спросить согласия перед патчем конфига (патч завёрнут вNODE_ENV === "development"). Отказались — live не заработает, пока не добавите разрешение вручную. Только веб. Ещё: если дефолтный порт dev-сервера занят — приложение почти наверняка уже запущено, надо пробить URL, а не поднимать второй сервер.
Служебные подкоманды
/impeccable hooks <on|off|status|ignore-rule|ignore-file|ignore-value|reset>
- Что делает
- Управляет хуком детектора для текущего проекта. Подробности — в разделе Хуки.
- Как исполняется
- Через админ-скрипт, вывод отдаётся пользователю дословно:
node .claude/skills/impeccable/scripts/hook-admin.mjs <action> [args...] - Ошибки
- Править
.impeccable/config.jsonруками из этого потока нельзя — только черезhook-admin.mjs, чтобы записи оставались валидированными. Единственное исключение — полеdetector.extensions, у которого нет админ-действия.
/impeccable doctor
- Что делает
- Находит и чинит расхождения между артефактами проекта (
PRODUCT.md,DESIGN.md+ сайдкар,.impeccable/config.json, брифы поверхностей, хук) и тем, что читает установленная версия. - Вызов
node .claude/skills/impeccable/scripts/doctor.mjs --json·--fixприменяет только механические миграции ·--target <path>выбирает воркспейс в монорепо.- Три вида «устарело»
- Версия инструмента — лечится
npx impeccable update, это не задача doctor. Дрейф схемы — артефакт написан старой версией; это doctor чинит. Дрейф правды — код ушёл вперёд, документ больше не описывает его; тут doctor только называет конкретный пробел и передаёт егоdocumentилиinit. - Severity
auto— применить--fixбез спроса.mention— сообщить, решение не требуется.route— назвать команду; запускать только если пользователь попросил в этом же ходе.- Ошибки
- Никогда не чинить дрейф как побочный эффект дизайн-задачи. Находка
design-md-driftсчитает коммиты в визуальные директории с момента последней правкиDESIGN.md— это счётчик, а не доказательство противоречия; утверждать «DESIGN.md устарел» только на основании большого числа нельзя.
pin / unpin
- Что делает
- Создаёт или убирает отдельный ярлык
/<command>, чтобы звать команду напрямую, без префикса. - Вызов
- В чате:
/impeccable pin critique·/impeccable unpin critique.
Под капотом:node .claude/skills/impeccable/scripts/pin.mjs <pin|unpin> <command> - Как устроено
- Записывает лёгкий скилл-редирект, который делегирует в
/impeccable <command>— поэтому обновления родительского скилла подхватываются автоматически. Проверить текущие пины: посмотреть в папке скиллов среды (.claude/skills/,.cursor/skills/…) папки с именами команд, например.claude/skills/critique/. - Пример
/impeccable pin audit→ дальше работает/audit- Ошибки
- Скрипт без аргументов печатает список доступных команд — это самый быстрый способ проверить, что реально установлено. Не закрепляйте всё подряд: авторы прямо предупреждают, что пин всех команд заново взрывает
/-меню, которое консолидация версии 3.0 как раз и вычистила. Закрепите две-три, которыми пользуетесь ежедневно.
Источник: SKILL.md (таблица Commands), scripts/command-metadata.json, reference/*.md по каждой команде, живой вывод pin.mjs. Снято 14.08.2026.
Хуки
Хуки — автоматический прогон детектора без участия человека. Именно они делают скилл страховочной сеткой, а не инструментом, который надо вспомнить и позвать.
Что реально ставится в проект
Инсталлер пишет в .claude/settings.local.json (файл в .gitignore, поэтому хук остаётся машинно-локальным):
{
"description": "Impeccable design detector: immediate-tier checks after
Edit/Write/MultiEdit on UI files, full-rule deep pass on Stop.",
"hooks": {
"PostToolUse": [
{ "matcher": "Edit|Write|MultiEdit",
"hooks": [{ "type": "command",
"command": "[ ! -f \"${CLAUDE_PROJECT_DIR}/.claude/skills/impeccable/scripts/hook.mjs\" ] || node \"${CLAUDE_PROJECT_DIR}/.claude/skills/impeccable/scripts/hook.mjs\"",
"timeout": 5,
"statusMessage": "Checking UI changes" }] }
],
"Stop": [
{ "hooks": [{ "type": "command",
"command": "... hook.mjs",
"timeout": 30,
"statusMessage": "Design deep pass" }] }
]
}
}
Обратите внимание на конструкцию [ ! -f ... ] || node ...: если скилл удалить, хук молча ничего не делает и не ломает сессию.
Два уровня проверок
| PostToolUse (после каждой правки) | Stop (в конце хода) | |
|---|---|---|
| Когда | После Edit/Write/MultiEdit по дизайн-релевантному файлу | Один раз, когда агент останавливается |
| Какие правила | Immediate-уровень: 14 правил | Полный набор по всем файлам, тронутым за сессию |
| Таймаут | 5 секунд | 30 секунд |
| Поведение | Находки → корректирующая подсказка; уже известные → напоминание; чистый UI-файл → короткое «ок» (если не включён quiet) | Оставшиеся находки один раз, с дедупликацией против того, что уже сказал per-edit проход. Нечего сказать — молчит |
Immediate-уровень — это то, ради чего стоит прерывать правку: механическое, однозначное и дешёвое в починке на месте.
| Группа | Правила |
|---|---|
| Сломанный вывод | broken-image, text-overflow, clipped-overflow-container, body-text-viewport-edge |
| Объективная нечитаемость | low-contrast, gray-on-color, tiny-text |
| Механическая халтура в одно свойство | gradient-text, dark-glow |
| Дрейф дизайн-системы | design-system-font, design-system-color, design-system-radius, design-system-font-size |
Почему так разделили. В комментарии кода прямо написано измеренное обоснование: поток per-edit срабатывал в основном на правилах уровня копирайта, и этот постоянный назойливый фон делал модель консервативнее, тогда как один полный проход в конце чинит контраст, отступы и свечения не хуже. Вернуть старое поведение можно так: .impeccable/config.json → { "hook": { "perEditRules": "all" } }.
Какие файлы попадают под хук
.tsx, .jsx, .html, .vue, .svelte, .astro, .css, .scss, .sass, .less, .ts, .js. Обычные .ts и .js сканируются, но молчат, если детектор ничего не нашёл.
Серверные шаблоны (Blade, Twig, ERB, Handlebars) в базовый список не входят — их надо объявить руками:
// .impeccable/config.json
{ "detector": { "extensions": [ { "ext": ".blade.php", "engine": "html" } ] } }
Как управлять
| Действие | Что делает |
|---|---|
status | Текущее состояние, пути конфигов, игноры, env-переопределения (значение по умолчанию, если аргумент не дан) |
on | enabled: true, записать локальное согласие, установить/починить манифесты хуков провайдеров |
off | enabled: false в .impeccable/config.json |
ignore-value <id> <value> | Точечное подавление правила для конкретного значения. Самый узкий вариант |
ignore-value <id> "*" --file <glob> | Выключить одно правило только в указанных файлах |
ignore-file <glob> | Выключить все правила для файлов. Молчит и про правила, которые ещё не написаны |
ignore-rule <id> | Выключить правило по всему проекту |
reset | Удалить конфиг проекта, кэш дедупликации и очередь Cursor |
# самый узкий игнор — конкретное значение, с причиной
node .claude/skills/impeccable/scripts/hook-admin.mjs \
ignore-value overused-font Inter --shared \
--reason "User confirmed Inter is intentional"
# одно правило в одном файле
node .claude/skills/impeccable/scripts/hook-admin.mjs \
ignore-value design-system-font-size "*" --file "src/overlay/widget.js" \
--reason "Виджет строит свою шкалу; рампа DESIGN.md описывает сайт"
Правило триажа из справочника: реальная проблема — чинить, никогда не глушить игнором. Уверенное ложное срабатывание или санкционированное исключение — поставить самый узкий игнор и раскрыть это в ответе, с доказательством в --reason. Не уверены — оставить находку и спросить одной строкой. Самообслуживание агента заканчивается на ignore-value: ignore-file и ignore-rule глушат слишком много, их только с разрешения человека.
Есть и встроенные комментарии-игноры
<!-- impeccable-disable overused-font -- exported brand doc -->
.brand { font-family: Inter } /* impeccable-disable-line overused-font */
// impeccable-disable-next-line bounce-easing: intentional bounce
Но справочник советует по умолчанию использовать конфиг-игноры: они держат все подавления в одном просматриваемом месте. Инлайн — только когда исключение должно уехать вместе с файлом (экспортированный standalone-документ, HTML для рассылки).
Когда оставлять, когда убирать
| Ситуация | Решение |
|---|---|
| Дизайн-проект, вы им реально пользуетесь | Оставить. Ради этого всё и ставится |
| Скилл поставили в не-дизайн-проект (бэкенд, скрипты, аналитика) | Убрать .claude/settings.local.json — фон без пользы |
| Мешают короткие «ок» на чистых файлах | Не выключать хук, а поставить hook.quiet: true |
| Постоянно ловит одно ложное срабатывание | ignore-value с причиной, а не выключение хука |
| Нужно разово отключить в текущей оболочке | IMPECCABLE_HOOK_DISABLED=1 — legacy-переменная, но работает и переопределяет конфиг |
| Хочется постоянно, но выключить в проекте | /impeccable hooks off → hook.enabled: false |
Разница между хуком и ручным прогоном. hook.enabled управляет только автоматическим запуском. Ручные сканы npx impeccable detect продолжают работать и используют тот же конфиг фильтров. Для «сырого» прогона мимо конфига и контекста: npx impeccable detect --no-config ....
Другие среды
| Среда | Файл манифеста | Механика |
|---|---|---|
| Claude Code | .claude/settings.local.json | PostToolUse (не блокирует) + Stop deep pass |
| Codex | .codex/hooks.json | То же; хук нужно один раз одобрить через /hooks |
| Cursor | .cursor/hooks.json | preToolUse: блокирует плохую правку до записи. Deep pass нет — полный набор правил на каждой правке |
| GitHub Copilot | .github/hooks/impeccable.json | Командный коммитируемый файл; CLI подхватывает после коммита в дефолтную ветку. Полный набор на каждой правке |
Источник: reference/hooks.md, scripts/hook.mjs, scripts/hook-lib.mjs (константа IMMEDIATE_TIER_RULES и комментарии к ней), реальный .claude/settings.local.json проекта Kupol. Снято 14.08.2026.
Детектор
Детерминированный сканер по файлам и URL. Это самая «твёрдая» часть скилла: не мнение модели, а правила.
# локально установленной копией
node .claude/skills/impeccable/scripts/detect.mjs --json src/
# или через npm-пакет
npx impeccable detect src/
npx impeccable detect index.html
npx impeccable detect https://example.com
| Флаг | Что делает |
|---|---|
--json | Вывод в JSON |
--quiet | В текстовом режиме — только итоговый счёт находок |
--scope <name> | Только правила указанного домена: type, layout. Через запятую |
--viewport <WxH> | Вьюпорт для сканов URL, по умолчанию 1280x800. Мобильный проход: --viewport 390x844 |
--no-config | Не применять конфиг проекта, игноры, инлайн-комментарии и DESIGN.md |
--no-inline-ignores | Игнорировать внутрифайловые комментарии-игноры |
--no-design-system | Не грузить DESIGN.md / .impeccable/design.json |
--no-advisory | Полностью скрыть «совещательные» находки (например, злоупотребление тире) |
Коды возврата: 0 — находок нет · 2 — находки есть · 1 — команда упала. Это делает использование в CI прямолинейным: валить job на двойке, дальше решать, чинить или добавить узкий игнор.
Три режима работы
- HTML-файлы — статический анализ HTML/CSS, включая подключённые локальные стили. Полноценный: понимает CSS-переменные, селекторы и вычисленный контраст.
- Файлы фреймворков (CSS, JSX, TSX, Vue, Svelte, Astro, CSS-модули) — проверки по исходному тексту, сопоставление по регулярным выражениям.
- URL — полный рендер в браузере (Puppeteer), определяется автоматически по
http(s)://иfile://. - stdin — если передать текст в пайп без цели, сканируется он:
cat component.css | npx impeccable detect.
Управление игнорами из CLI
Тот же конфиг, что читает хук, — им можно управлять и без агента:
npx impeccable ignores list
npx impeccable ignores add-value overused-font Inter --reason "Brand font"
npx impeccable ignores add-value design-system-color "#ff00aa" --reason "Campaign accent"
npx impeccable ignores add-file "src/legacy/**"
npx impeccable ignores add-rule side-tab
npx impeccable ignores remove-value design-system-color "#ff00aa"
npx impeccable ignores add-file "src/private-experiment/**" --local
Правило приоритета: предпочитайте игнор по значению. Шрифты, цвета, радиусы и параметры движения обычно надо подавлять поточечно, а не правилом целиком — так правило остаётся полезным во всех остальных местах. Игнор по значению с "*" разрешён только в связке с --file, иначе один намеренно экспериментальный файл научит весь проект, что любой недокументированный цвет допустим.
Конфиг ломается тихо. Опечатка в ключе просто никогда не читается; идентификатор правила, которого больше нет, ничего не подавляет; глоб projectRoots, не совпавший ни с одной папкой, оставляет корень репозитория подменять то приложение, которое вы имели в виду. Все три случая ловит /impeccable doctor.
59 правил
Полный список идентификаторов на 14.08.2026 (пригодится, чтобы точечно ставить игноры):
ai-color-palette · all-caps-body · aphoristic-cadence · blinking-cursor · body-text-viewport-edge · border-accent-on-rounded · bounce-easing · broken-image · clipped-overflow-container · codex-grid-background · content-hidden-at-rest · cramped-padding · cream-palette · dark-glow · design-system-color · design-system-font · design-system-font-size · design-system-radius · edge-flush-cards · em-dash-overuse · extreme-negative-tracking · first-viewport-column-overflow · flat-type-hierarchy · gpt-thin-border-wide-shadow · gradient-text · gray-on-color · heading-rhythm · hero-eyebrow-chip · icon-tile-stack · image-hover-transform · italic-serif-display · justified-text · kicker-above-heading · layout-transition · line-length · low-contrast · marketing-buzzword · marquee · monotonous-spacing · nested-cards · numbered-section-labels · oversized-h1 · overused-font · pulsing-dot · radial-halo · radial-spotlight-glow · repeated-container-text · repeating-stripes-gradient · script-error · shape-assembled-illustration · side-tab · skipped-heading · text-occlusion · theater-slop-phrase · tight-leading · tiny-text · undersized-ui-text · wide-tracking
Названия говорят сами за себя: cream-palette и ai-color-palette ловят фирменные нейросетевые палитры, gpt-thin-border-wide-shadow и codex-grid-background — узнаваемые машинные приёмы, kicker-above-heading — «надзаголовок», который в скилле помечен как безусловный бан.
⚠️ Детектор может отработать неполно, и на счёт нельзя опираться как на полную картину.
Статический HTML-анализ грузит четыре внешних модуля: htmlparser2, css-select, css-tree, domutils. Если их в окружении нет (обычная ситуация, когда скилл лежит в проекте отдельно, без своих node_modules), детектор не падает, а тихо откатывается на регулярные выражения и печатает в stderr:
impeccable detect: DEGRADED - HTML parser modules unavailable
(htmlparser2, css-select, css-tree, domutils).
Falling back to regex matching. Custom properties, selector matching and
computed contrast are NOT evaluated; findings are an undercount, not a
clean bill of health.
В деградированном режиме не проверяются: CSS-переменные, сопоставление селекторов и вычисленный контраст. То есть ровно те проверки, ради которых чаще всего запускают. Счёт занижен — «ноль находок» здесь не означает «чисто».
Воспроизведено живьём в проекте Kupol 14.08.2026: сообщение выводится в stderr, поэтому легко потерять в логах, а код возврата остаётся штатным. Если детектор важен — прогоняйте через npx impeccable detect (пакет тянет свои зависимости) или ставьте эти четыре модуля в проект, и всегда проверяйте, нет ли строки DEGRADED в stderr.
Advisory-правила
Часть правил «совещательные»: детектируются и показываются отдельной секцией, но никогда не считаются провалом и не меняют код возврата, чтобы не блокировать автоматику. Хук по умолчанию пропускает их полностью — модель не должна получать нагоняй за вкусовое решение, которое человек мог принять сознательно. Вернуть: .impeccable/config.json → { "detector": { "advisoryRules": "include" } }. На 14.08.2026 в advisory один пункт: em-dash-overuse.
Источник: node detect.mjs --help, scripts/detector/registry/antipatterns.mjs, scripts/detector/engines/static-html/detect-html.mjs, scripts/hook-lib.mjs, живой прогон в проекте Kupol; impeccable.style/docs/detector, /docs/config. Снято 14.08.2026.
Практические сценарии
Сценарий 1. Аудит чужого интерфейса
Задача: пришёл клиентский сайт или чужой репозиторий, надо быстро понять, насколько там плохо, и получить список работ.
- Ничего не инициализируем.
PRODUCT.mdдля оценки не нужен: директиваSCOPED_EXISTING_ALLOWEDразрешает узкие команды без него. - Механика:
/impeccable audit <путь или область>— пять измерений, итог из 20, находки P0–P3 с локациями и стандартами WCAG. Ничего не чинит. - Дизайн:
/impeccable critique <путь>— эвристики Нильсена, специфичность дизайна, когнитивная нагрузка, персоны. Отчёт сохранится в.impeccable/critique/. - Проверьте, что критика прошла честно: в шапке отчёта должно быть
Method: dual-agent. Если стоит⚠️ DEGRADED: single-context— обе оценки крутились в одном контексте и B «заякорила» A. - Живой сайт вместо кода:
npx impeccable detect https://example.comи второй проход мобильным вьюпортом:--viewport 390x844. - На выходе обе команды дают план: список команд в порядке приоритета, заканчивающийся
polish.
Сценарий 2. Сделать концепцию с нуля
Задача: новый лендинг или новый продукт, дизайна ещё нет.
/impeccable init— интервью иPRODUCT.md. Приготовьтесь отвечать про пользователя, механизм продукта и что нельзя нарушать. Про цвета не спросят — это нормально.- Опционально
/impeccable shape <поверхность>, если нужен согласованный бриф до кода. - Дальше — обычный запрос: «сделай главную страницу». Скилл сам зайдёт в
new-work: выведет семь визуальных систем из мира аудитории, бросит кубикconcept-seed.mjs, раздаст челленджеров. - Откроется страница выбора в браузере. Ваша работа — выбрать карточку. Есть «тихая дверь» (категорийный стандарт, честно сыгранный) и переброс с регистрами safer/bolder. Пользователь может перебрасывать свободно; агент — только по названной фактической причине, вкус причиной не считается.
- Сборка. При
buildPath: compсначала генерируется картинка-эталон, потом код воспроизводит её почти попиксельно; допускаются ровно три послабления — шрифты (ближайшее доступное начертание), иконки и настоящие дефекты самой картинки (например, опечатки). - Финиш. Один батч скриншотов (десктоп + мобильный), одна пачка правок, максимум ещё один раунд. Потом
impeccable-finish-reviewerиimpeccable-documenter, который запишетDESIGN.mdпо факту собранного.
Полезно знать заранее: если PRODUCT.md нет, concept-seed.mjs просто откажется бросать кубик. Это не баг — это тот самый порядок «сначала бриф».
Сценарий 3. Довести существующий экран
Задача: экран собран, работает, но выглядит недоделанным.
- Если есть свежая критика —
polishсам подтянет её как бэклог:critique-storage.mjs latest "<target>". Если нет, начните с/impeccable critique <экран>, чтобы у доводки был список. /impeccable polish <экран>. Команда попросит два уточнения: планка качества и ограничения по срокам.- Порядок починки задан и его стоит знать, чтобы не удивляться: сначала сломанные задачи и потеря данных, потом отсутствующие состояния (loading, empty, error, success, disabled, permission), потом поток/иерархия/адаптив/дрейф системы, потом визуал и моушн, потом чистка кода.
- Если проблема узкая — берите точечную команду вместо
polish:typeset(типографика),layout(структура и ритм),colorize(цвет),clarify(текст),adapt(мобильный),harden(реальные данные и i18n). - Проверка на подмену: если
polishначал предлагать «а давайте вообще переделаем» — он обязан сказать это прямо и порекомендовать редизайн, а не протаскивать замену под видом доводки. Это в справочнике зафиксировано.
Сценарий 4. Сделать смелее / тише
Задача: секция выглядит пресно, либо наоборот — кричит.
- Сначала проверьте, где вы находитесь. Если прямо сейчас открыт раунд выбора направления, слова «смелее»/«тише» означают регистр переброса, а не команду. Если поверхность уже выпущена — это команда.
/impeccable bolder <секция>или/impeccable quieter <секция>.- Назовите скоуп буквально. «Только героический блок, остальное не трогать» — это исполняемая инструкция, а не пожелание.
- Чего ожидать от
bolder: не новых эффектов, а подтягивания секции до выразительности, которую соседние блоки уже используют — в словаре существующей системы. Если системе реально не хватает средств, команда обязана остановиться и спросить, назвав конкретное добавление. - Чего ожидать от
quieter: для Persuade/Experience — сдержаннее палитра, больше воздуха, драма уменьшается, но точка зрения остаётся. Для Operate/Read — меньше фоновых акцентов, площе карточки, меньше цвета и движения. - Если хочется «вау» — это не
bolder, аoverdrive. Но помните: overdrive обязан сначала предложить, а не сразу делать.
Сценарий 5. Итерации прямо в браузере
Задача: хочется покрутить варианты одного блока вживую, а не описывать словами.
- Поднимите dev-сервер проекта. Если дефолтный порт занят — приложение, скорее всего, уже запущено; пробейте URL, а не поднимайте второй сервер.
/impeccable live. Первый раз пройдёт разовая настройка:.impeccable/live/config.jsonи проверка CSP.- Если в проекте есть CSP — скилл покажет точный диф и спросит разрешение пропатчить конфиг (патч под
NODE_ENV === "development"). Откажетесь — пикер не загрузится, пока не добавитеhttp://localhost:8400вscript-srcиconnect-srcвручную. - В браузере выберите элемент, выберите действие, нажмите Go. Можно рисовать аннотации поверх элемента — тогда агент получит скриншот с ними.
- Варианты подменяются через HMR. Принимаете один — он записывается в настоящий исходник.
- Прервалось? Не гадайте:
live-status.mjsиlive-resume.mjs. Журнал в.impeccable/live/sessions/— канонический, он переигрывает неподтверждённую работу после перезапуска.
Источник: сведение reference/audit.md, critique.md, polish.md, bolder.md, quieter.md, new-work.md, live.md, live-setup.md. Снято 14.08.2026.
Ограничения и грабли
Что скилл не умеет
- Не про бэкенд и не про не-UI задачи. Записано в описании явно.
- Live-режим и детектор — только веб. На
ios/android/adaptiveбраузерный оверлей и HTML-движок правил не применимы; для нативных платформ у ревьюера единственным «фильтром халтуры» остаётся его собственная проверка, и в пакет ему прямо пишут, что детектор не запускался. auditиadapt— только веб, с отдельными нативными маршрутами.- Не рисует в Figma и не читает макеты. Работает с кодом и браузером.
- Ревьюер не имеет браузера. Скриншоты, которые ему не передали, — это проверки, которые он не сможет провести.
Где деградирует
1. Детектор без HTML-парсеров
Главная и самая тихая проблема — подробно разобрана в разделе Детектор. Коротко: без htmlparser2, css-select, css-tree, domutils сканер молча падает на регулярки, не проверяет CSS-переменные, селекторы и вычисленный контраст, и занижает счёт. Сообщение уходит в stderr. На такой результат нельзя опираться как на полную картину.
2. Критика без субагентов
Если в среде нет инструмента субагентов, обе оценки идут в одном контексте, и детерминированные находки «якорят» дизайнерское суждение. Формально это допустимо, но отчёт обязан начинаться с баннера ⚠️ DEGRADED: single-context (<причина>). Молчаливо деградировавшая критика в справочнике названа проваленной критикой.
3. Финишное ревью без субагентов
Финиш-ревьюер должен запускаться с чистым контекстом. Ревьюер, унаследовавший переписку сборки, наследует и её рамку, и её оптимизм. Подмена на внутрипоточный проход допустима только когда субагентов нет вообще, и она должна быть раскрыта одной строкой.
Проверьте у себя: в проекте Kupol после установки --providers=claude --project папки .claude/agents/ не появилось — то есть поставляемые субагенты impeccable-finish-reviewer и impeccable-documenter в проект не установились. Справочники на них рассчитывают. Если у вас так же, финиш пойдёт по деградированному маршруту (reference/degraded/finish-reviewer.md, degraded/documenter.md) — рабочему, но более слабому. Стоит проверить ls .claude/agents/ перед тем, как рассчитывать на полноценный финиш.
4. Страница выбора направления в песочнице
serve-question.mjs поднимает локальный HTTP-сервер. Среда с песочницей шелла не сможет забиндить порт, и первая попытка сгорит впустую. Скилл советует запускать страницу через наименее ограниченный доступный путь. Если страница закрылась без ответа (exit 4), решение один раз переспрашивается структурированным вопросом; нет ответа и там — работа идёт с назначенным направлением, а сделанные допущения проговариваются.
5. Дрейф артефактов
Файлы, написанные старой версией скилла, могут содержать поля, которые уже никто не читает, или не иметь полей, которые теперь ожидаются. Диагностика — /impeccable doctor. Проверка при загрузке дешёвая и троттлится раз в неделю на проект; отключается через "stalenessCheck": false в .impeccable/config.json или IMPECCABLE_NO_STALENESS_CHECK=1.
Организационные грабли
| Грабля | Как не наступить |
|---|---|
| Голая установка уходит глобально | Всегда --providers=claude --project -y. Поймано 14.08.2026 |
install --help выполняет установку | Не пытаться так смотреть справку |
Инсталлер оставляет мусор в .agents/ и .codex/ | Снести, если провайдеры не нужны |
.claude/ уезжает клиенту | В клиентском репозитории — в .gitignore |
| Скилл зовётся сам, когда не звали | Описание скилла триггерится на десятки формулировок про дизайн. Если это мешает — держите скилл только в дизайн-проектах |
| Отчёт критики оказался только в файле | Требуйте полный отчёт в чате; это прямое требование справочника |
| Бесконечная самопроверка жжёт бюджет | Потолок — два раунда скриншотов. «Open-ended self-QA burns the user's money» |
| Дрейф чинится сам собой посреди дизайн-задачи | Запрещено: CONTEXT_STALE сообщается, но не чинится без просьбы (кроме находок auto) |
| «Bolder» понято как команда во время выбора направления | Уточняйте контекст: открыт раунд направлений или нет |
Четыре ошибки применения — от самих авторов
На сайте есть раздел «чего избегать», и он честный:
- Запускать impeccable вместе со скиллом
frontend-designот Anthropic. Причина не в том, что второй реже обновляется. Два скилла с разными дизайн-словарями сталкиваются и взаимно гасятся. Выбрать один. - Закреплять все команды. Пин возвращает
/audit,/polish,/critiqueкак ярлыки. Закрепите всё — и заново взорвёте/-меню, которое консолидация версии 3.0 вычистила. Две-три ежедневные — норма. - Пропускать
init. Команды работают и безPRODUCT.md/DESIGN.md, но сваливаются к дженерик-SaaS-паттернам. Формулировка авторов: если impeccable даёт общие советы, дизайн-контекст обычно отсутствует, слишком расплывчат или устарел. - Относиться к нему как к линтеру. Это не валидатор, а мнящий партнёр. Возражайте с аргументом — он пойдёт навстречу. Игнорируйте мнение без аргумента — результат станет хуже, а не лучше.
Философские ограничения, о которых стоит знать
Скилл довольно жёстко предписывает вкус, и это иногда конфликтует с брифом. Правило разрешения конфликта: бриф побеждает. Закреплённые эстетики, эпохи, материалы, шрифты и палитры соблюдаются, даже если противоречат предупреждению о «затасканном паттерне». Перенаправление внятного брифа в сторону собственного вкуса модели названо провалом.
При этом список «дефолтов, которые означают, что вы перестали искать» существует и включает популярные шрифты (Fraunces, Playfair Display, Cormorant, Space Grotesk, IBM Plex, Inter-as-display, DM Sans, Outfit, Plus Jakarta Sans и другие). Назвать один из них можно, но нужна причина, которую не удовлетворит никакой другой шрифт — и «книжному сайту нужна антиква» такой причиной не считается.
Источник: SKILL.md, reference/critique.md, new-work.md, doctor.md, audit.md, adapt.md, scripts/detector/engines/static-html/detect-html.mjs, проверка структуры проекта Kupol. Снято 14.08.2026.
Словарь терминов
- skill
- Скилл — папка с
SKILL.mdи вспомогательными файлами, которую агентная среда подгружает по имени или по смыслу запроса. - PRODUCT.md
- Правда о продукте: пользователи, задача, позиционирование, ограничения, платформа. Пишется командой
init. Не содержит визуальных решений. - DESIGN.md
- Визуальная система: токены во frontmatter плюс проза. Пишется
documentили на финише новой работы. Формат совместим с Google Stitch. - surface
- Поверхность — конкретный экран, маршрут или артефакт. Стратегия, относящаяся только к одной поверхности, живёт в «брифе поверхности», а не в общих файлах.
- surface brief
- Бриф поверхности — маленький файл со стратегией одного маршрута: скоуп, режим посетителя, аудитория, задача, доказательства, выбранное направление, нерешённые вопросы.
- mode
- Режим посетителя. Что означает успех на этой поверхности. Четыре: Persuade, Operate, Read, Experience. Выбирается по поверхности, а не по продукту: лендинг инструмента — всё равно Persuade, документация модного дома — всё равно Read.
- Persuade
- Посетитель решает и действует, дизайн — это и есть продукт. Лендинги, маркетинг, прайсинг.
- Operate
- Посетитель выполняет задачу. Приложения, дашборды, редакторы, админки, настройки. Сканируемость и привычные аффордансы важнее самовыражения.
- Read
- Посетитель что-то понимает. Документация, статьи, гайды, чейнджлоги.
- Experience
- Посетитель внутри самой работы. Портфолио, галереи, витрины. Интерфейс отступает.
- new-work
- Справочник и процедура создания новой поверхности или замены визуального мира. Ключевой файл всего конвейера.
- craft floor
- «Пол ремесла» — минимальная планка качества: контраст, глубина, отступы, типографика, движение, состояния, оформление браузерных поверхностей (выделение текста, каретка, скроллбары, фокусные кольца). Грузится непосредственно перед правкой UI.
- refinement / redesign
- Доводка сохраняет идентичность; редизайн заменяет её. Промежуточного «полирнём то, что решили выбросить» не существует.
- incumbent
- Действующий, унаследованный. «Incumbent visual system» — визуальная система, которая уже живёт в коде и является дизайн-властью.
- direction round
- Раунд направлений — момент выбора концепции. Показывается страница с карточками; пользователь фиксирует одну.
- the roll
- «Бросок» —
concept-seed.mjsслучайно назначает, какое направление собирать. Механизм против схождения всех прогонов к категорийному дефолту. - world / deck
- «Мир» — полная графическая система со своими законами, отрецензированная человеком. «Колода» — каталог таких миров, на 14.08.2026 одобрено 188.
- challenger
- Челленджер — мир из колоды, который соревнуется с назначенным направлением. Вердикты: wins (побеждает по обеим осям и забирает сборку), competitive (держит одну ось, остаётся полноценной альтернативой), declined (проигрывает обе, но его дисциплина всё равно донорски поднимает назначенное направление).
- seed key
- Ключ броска. Печатается скриптом и записывается в контракт направления; воспроизводит весь бросок, включая все раунды перебросов.
- standing exit
- «Тихая дверь» — постоянно доступная альтернатива: категорийный стандарт, сыгранный честно, без иронии. Дверь пользователя, не агента; рекомендовать её нельзя.
- re-roll
- Переброс. Регистры: plain (свежая раздача), safer (привычный регистр), bolder (только чужие формы, с полной отдачей).
- comp
- Комп — сгенерированная картинка-эталон первого экрана. При
buildPath: compкод обязан воспроизвести её почти попиксельно. - comp-led / code-led
- Режим сборки: от картинки-эталона или сразу в код. Записывается как
buildPathв.impeccable/config.json. - direction contract
- Контракт направления — комментарий в начале артефакта из блоков THESIS, OWN-WORLD, STORY, FIRST VIEWPORT, FORM, FINISH. Должен пережить продакшн-сборку.
- finish review
- Финишное ревью субагентом
impeccable-finish-reviewerсо свежим контекстом. - detector
- Детектор — детерминированный сканер на 59 правил.
- anti-pattern
- Антипаттерн — то, что ловит детектор.
- immediate tier
- Немедленный уровень — 14 правил, ради которых стоит прерывать правку. Остальное откладывается на глубокий проход.
- deep pass
- Глубокий проход — полный набор правил по всем тронутым за сессию файлам, один раз на событии
Stop. - advisory
- Совещательное правило: показывается отдельно, никогда не считается провалом, не меняет код возврата.
- slop
- Халтура, машинный шлак. В скилле — узнаваемые признаки, что интерфейс не собран, а «сложен из кусков».
- drift
- Дрейф. Дизайн-системный: код разошёлся с токенами. Схемы: артефакт написан старой версией. Правды: документ больше не описывает код.
- P0–P3
- Severity: P0 блокирует задачу — чинить немедленно; P1 серьёзно мешает — до релиза; P2 раздражает, но обходится; P3 полировка. Подсказка: «обратился бы пользователь в поддержку?» Да — минимум P1.
- heuristics
- 10 эвристик юзабилити Нильсена, каждая 0–4. Честная оценка: большинство реальных интерфейсов набирают 20–32 из 40.
- harness
- Среда исполнения агента: Claude Code, Codex, Cursor, GitHub Copilot. Поведение хуков и субагентов зависит от неё.
- hook
- Хук — команда, которую среда запускает на событии (после правки файла, при остановке).
- degraded
- Деградированный режим: часть механизма недоступна, работа продолжается ослабленной. Должно быть объявлено, а не замолчано.
- live mode
- Live-режим — выбор элементов в браузере и генерация вариантов с горячей подменой.
- pin
- Закрепление — создание ярлыка
/<command>, чтобы звать команду без префикса.
Источники и расхождения
Что использовалось
| Источник | Роль | Снято |
|---|---|---|
Локально установленный скилл .claude/skills/impeccable/, версия 4.1.0 | Источник правды о поведении. Прочитаны SKILL.md, все 39 справочников, ключевые скрипты; выполнены живые запуски context.mjs, detect.mjs, pin.mjs, hook-admin.mjs, doctor.mjs, concept-seed.mjs | 14.08.2026 |
| impeccable.style | Официальный сайт: 58 страниц (главная, /designing, /docs и 23 страницы команд, 6 страниц концепций, 3 туториала, /slop, /detector, /research, /changelog, /faq). Он же точка обновления — context.mjs опрашивает его для UPDATE_AVAILABLE | 14.08.2026 |
| github.com/pbakaus/impeccable | README (446 строк), docs/DEVELOP.md, docs/HARNESSES.md, docs/STYLE.md, NOTICE.md, LICENSE. Лицензия Apache 2.0 подтверждена и в package.json, и полным текстом | 14.08.2026 |
npm-пакет impeccable@3.6.0 | Разобран код CLI: роутер команд, разрешение провайдеров и scope, установка хуков. Пакет содержит только CLI (30 файлов), скиллы качаются с сайта | 14.08.2026 |
Где сайт разошёлся с кодом
Во всех случаях в руководстве описано поведение кода — сайт может отставать от релизов.
| Что | Сайт | Код / пакет | Чему верить |
|---|---|---|---|
init и DESIGN.md |
«В конце согласитесь, когда impeccable предложит запустить /impeccable document». То же в command-metadata.json, который едет вместе со скиллом: init «offers DESIGN.md when code exists» |
reference/init.md запрещает дважды: «Never silently overwrite an existing file or offer DESIGN.md during init» и «Do not offer DESIGN.md merely because it is missing» |
Справочнику. Это операционная инструкция, метаданные — витрина. Зовите document отдельным шагом |
| Состав 23 команд | Включает impeccable (вызов без аргумента), не включает craft. Группы CREATE · EVALUATE · REFINE · SIMPLIFY · HARDEN · SYSTEM |
SKILL.md и pin.mjs: включают craft (помечен deprecated), не включают impeccable. Группы Build · Evaluate · Refine · Enhance · Fix · Iterate |
Коду. Обе версии дают 23, но исполняется то, что в SKILL.md |
| Версия Node | 22.12+ |
package.json: engines.node >= 22.18.0 |
Пакету. Ставьте от 22.18 |
| Размер колоды миров | «188 одобренных миров» в /docs/new-work и changelog · «177 самых высокорейтинговых» на главной |
— | Оба верны: 188 одобрено всего, демо на главной сдаёт из 177 лучших |
| Коды возврата детектора | 0 / 2 / 1 (ошибка) |
detect --help упоминает только 0 и 2 |
Сайту. Полнее |
| Номер версии | «v4.1.0, 14 августа 2026 (CURRENT)» | Скилл 4.1.0, CLI 3.6.0, расширение 1.3.2 — три независимые линии |
Разделять. «Версия impeccable» без уточнения — это почти всегда версия скилла |
| Установка | «npx impeccable install … спрашивает, ставить в проект или глобально» |
В неинтерактивной сессии не спрашивает, а молча берёт вычисленный дефолт, который может быть глобальным | Коду. См. Установку |
install --help |
Не описан | Флаг не проверяется вовсе — запускается настоящая установка | Коду. Проверено эмпирически |
Что проверено живьём
- Вывод
context.mjsна проекте безPRODUCT.md— директивы приведены дословно. - Отказ
concept-seed.mjsбезPRODUCT.md: «the dice stay in the cup until product truth exists». - Сообщение
DEGRADEDпри отсутствии HTML-парсеров. - Список 23 команд из
pin.mjs— совпал с таблицей вSKILL.md. - Список 59 правил детектора из реестра антипаттернов — совпал с числом «59 deterministic rules» на сайте.
- Содержимое
.claude/settings.local.json, поставленного инсталлером. - Следы глобальной установки в
~/.agents/skillsи~/.cursor/agentsс меткой времени голого прогона инсталлера. - Логика
defaultInstallScopeв коде CLI плюс прогоны установки в изолированныхHOMEи рабочих папках. - Отсутствие
.claude/agents/после проектной установки — поставляемые субагенты в проект не попали.
Чего достать не удалось
CHANGELOG.mdиCONTRIBUTING.mdв репозитории отсутствуют — это подтверждённое отсутствие, а не «не нашлось». Роль CONTRIBUTING выполняетdocs/DEVELOP.md; чейнджлог живёт только на сайте, страницей/changelog.- Тела release notes с GitHub не выгружались — только имена тегов.
- Интерактивные демо на главной сайта (раздача миров через roll API, переключатель вариантов) сняты в состоянии первой отрисовки; варианты, подгружаемые по клику, в текст не попали. Переводимого текста там практически нет.
sitemap.xmlсайта неполон (35 URL из 58 найденных);llms-full.txtиsitemap-index.xmlне существуют — отдают catch-all вместо файла.