AC claude-code-hooks
Как писать, тестировать, регистрировать и отлаживать хуки Claude Code — PreToolUse / PostToolUse / SessionStart / Stop Bash, которые обеспечивают соблюдение правила, которое модель в противном случае обошла бы сама. Используйте всякий раз, когда пользователь хочет создать хук, заблокировать/перехватить вызов инструмента, превратить многократно нарушаемое правило в жесткий контроль, добавить защитный механизм, отладить хук, который срабатывает неправильно или "отравляет сеанс", зарегистрировать хук в разных профилях или упоминает хуки / PreToolUse / Stop hook / 拦截 / 守卫 / 钩子 / 拦下. Включает в себя труднодостижимые подводные камни: UserPromptSubmit видит только ввод пользователя, никогда текст самого Claude — правило о собственном выводе Claude должно быть в Stop; сопоставление на уровне токенов (никогда не разделение awk); тестирование bash -n + реального JSON от начала до конца ПЕРЕД регистрацией (поврежденный хук PreToolUse отравляет каждый вызов Bash); SSOT + символическая ссылка, чтобы переустановка ~/.claude не могла его потерять; сходимость нескольких профилей; и механизмы выпуска с подтверждением человеком. Используйте это даже для "прекрати делать X" — долговечное прекращение — это хук, а не напоминание.
машинный переводПоказать оригиналСкрыть оригинал«How to write, test, register, and debug Claude Code hooks — PreToolUse…»
How to write, test, register, and debug Claude Code hooks — PreToolUse / PostToolUse / SessionStart / Stop Bash guards that enforce a rule the model would otherwise talk itself past. Use whenever the user wants to create a hook, block/intercept a tool call, turn a repeatedly-violated rule into a hard gate, add a guard rail, debug a hook that misfires or "poisons the session", register a hook across profiles, or mentions hooks / PreToolUse / Stop hook / 拦截 / 守卫 / 钩子 / 拦下. Bakes in the hard-won pitfalls: UserPromptSubmit only ever sees user input, never Claude's own text — a rule about Claude's own output belongs on Stop instead; token-level shlex matching (never awk splitting); bash -n + real-JSON end-to-end testing BEFORE registering (a corrupted PreToolUse hook poisons every Bash call); SSOT + symlink so a ~/.claude reinstall can't lose it; multi-profile convergence; and human-confirmation release gates. Reach for this even for "make it stop doing X" — a durable stop is a hook, not a reminder.
Как писать, тестировать, регистрировать и отлаживать хуки Claude Code — PreToolUse / PostToolUse / SessionStart / Stop Bash, которые обеспечивают соблюдение…
Как процесс C 59/100 · Есть пробелы — слабые места: результат и критерий готовности, входы и предусловия, стоимость исполнения
Как улучшить
- Тело SKILL.md длиннее 5 000 токенов: вынесите справочные детали в references/ и подключайте по необходимости.
- Свои кейсы (evals/evals.json, 4–6 реальных запросов с ожидаемыми ответами): тогда полная проверка прогонит именно их, а не черновик от модели.
- spec.yaml с триггерными фразами и утверждениями — контракт поведения для CI; `skilltest init` создаст шаблон.
Находки guard · 0
✓ Критических и высоких находок нет
Просканировано файлов: 5. Улики замаскированы. Пометки в серых чипах объясняют, почему серьёзность понижена.
По спецификации Agent Skills
- предупреждение
body-longтело SKILL.md ≈ 21791 токенов (рекомендуется < 5000); вынесите детали в references/
Процессный рейтинг: все десять параметров 59/100
- 0Результат и критерий готовности. Не сказано, что считать результатом
- 0Входы и предусловия. Не сказано, что нужно иметь на входе
- 10Стоимость исполнения. Тело инструкции 21791 токенов: вытесняет саму задачу из окна
- 60Инструменты и файлы. Используются инструменты (bash, web, git, python), но во frontmatter они не объявлены
- 70Когда включается. Сказано, когда применять, но не сказано, когда не стоит
- 100Шаги. Шагов: 59
- 100Ошибки и развилки. Развилок: 3, есть раздел про ошибки
- 100Согласованность. Имя и обязательные поля на месте
- 100Повторный запуск. Изменяющие операции проверяют текущее состояние
- 100Отчётность по ходу. Скилл сообщает о ходе работы
- medium Правила безопасности и запреты внутри скилла: их место в системном промпте, здесь они не защищают
- low Ответ описан самодельной разметкой (16 тегов): типизированный вызов надёжнее
Всё перечисленное измерено по тексту скилла, а не оценено моделью: цифры проверяемы. Вес параметра тем больше, чем чаще из-за него процесс встаёт.
Сигналы качества
- +4Описание не говорит, когда скилл НЕ применять (ложные срабатывания)
- +3Длина description 1009: рекомендуется 120–800 символов
- +3Формат ответа не описан: модель каждый раз решает сама
- +1Лицензия не указана
- +2Инструкции на одном языке
- +5В description 2 примера фраз-триггеров в кавычках
- +4Структура: 18 заголовков
- +3Пошаговые инструкции: 59 пунктов
- +4Есть примеры (11 блоков кода)
- +4Справочные файлы упоминаются в инструкциях (2 из 2)
- +3Все 2 скриптов описаны в инструкциях
База качества 70; замечания lint вычитаются, сигналы прибавляют до 100. Итог: 83.