Slash Commands, Hooks, and Skills
Extending Claude Code: custom slash commands in .claude/commands, deterministic hooks in settings.json, and reusable skills.
Lesson content is currently available in Russian.
What you will learn
- →Упаковывать повторяющиеся промпты в slash-команды с параметрами.
- →Строить детерминированные гарантии через hooks: автоформат, запреты, уведомления.
- →Выбирать между командой, hook и skill под конкретное правило проекта.
Карта встроенных команд
Slash-команды управляют самой сессией, а не кодом. Минимальный набор, который стоит знать наизусть: /help — список всего доступного в текущей конфигурации; /model — переключение модели под задачу: быстрая и дешёвая для рутины, мощная для архитектурных решений; /clear и /compact — гигиена контекста из прошлого урока; /init — черновик CLAUDE.md; /memory — правка файлов памяти; /permissions — действующие правила доступа; /agents — управление субагентами; /mcp — статус подключённых MCP-серверов; /review — ревью изменений текущей ветки.
Два наблюдения из практики. Первое: новички неделями пишут длинные промпты для того, что делается одной командой, — заведите привычку перед сложной просьбой проверять /help. Второе: /model — это управление бюджетом. Осмысленный паттерн — вести исследование и план на мощной модели, а механическую часть (переименования, шаблонный код, правки по готовому списку) выполнять на быстрой. Разница в стоимости — кратная, разница в качестве на простых задачах — незаметная.
Встроенные команды — только половина системы. Вторая половина — ваши собственные: любой повторяющийся сценарий проекта можно оформить как команду, и дальше он вызывается одной строкой у всех членов команды. Об этом следующий раздел.
Свои команды в .claude/commands
Повторяющийся промпт — кандидат в команду. Файл .claude/commands/pre-pr.md создаёт команду /pre-pr:
---
description: Проверка изменений перед pull request
allowed-tools: Bash(npm run lint), Bash(npm run test:*), Read
---
Прогони линт и тесты. Составь сводку изменений относительно main:
какие файлы, что меняют, есть ли риски.
Обрати особое внимание на: $ARGUMENTS
Плейсхолдер $ARGUMENTS подставляет текст, введённый после команды: «/pre-pr обработка ошибок» — и агент сфокусирует проверку на ней. Frontmatter ограничивает инструменты: команда проверки не должна уметь править файлы — это защита от сюрпризов. Команды в .claude/commands/ — проектные, коммитятся и доступны всей команде; в ~/.claude/commands/ — личные, работают в любом репозитории.
Внутри команды можно ссылаться на файлы через @путь и вставлять вывод shell-команд — он попадёт в промпт до запуска модели, так команда получает свежий контекст (текущий diff, статус ветки) без ручного копирования.
Хорошая команда — упакованный процесс: один раз продумали последовательность проверок, дальше вся команда вызывает её одной строкой. Типовой стартовый набор проекта: /pre-pr, /fix-issue с номером задачи, /release-notes по диффу тега. Если вы третий раз пишете один и тот же промпт — остановитесь и сделайте из него команду.
Hooks: гарантии вместо просьб
Правило в CLAUDE.md — просьба: модель обычно следует ей, но может забыть. Hook — гарантия: shell-команда, которую Claude Code выполняет сам на событии жизненного цикла, детерминированно и всегда. События: PreToolUse — перед вызовом инструмента, может заблокировать его; PostToolUse — после; Stop — агент закончил отвечать; SessionStart — начало сессии; Notification — агенту нужно внимание пользователя.
Конфигурация в settings.json. Классика — автоформатирование после каждой правки:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "npx prettier --write $CLAUDE_FILE_PATHS" }
]
}
]
}
}
Теперь каждый изменённый файл форматируется физически всегда — агенту не нужно об этом помнить, а вам — напоминать. Второй ключевой механизм: PreToolUse-hook, завершившийся с кодом выхода 2, блокирует действие, а его stderr возвращается агенту как объяснение. Так строятся жёсткие запреты: скрипт, отклоняющий команды с git push --force или правки в каталоге миграций, надёжнее любого промпта.
Правило выбора простое: всё, что должно происходить в ста процентах случаев — форматирование, запреты, уведомление об окончании длинной задачи, — выносите в hooks. Промпты и память — для того, что требует суждения.
Skills: упакованная экспертиза
Skill — каталог с файлом SKILL.md: инструкции и вспомогательные материалы, которые Claude подключает сам, когда описание совпадает с текущей задачей. Личные skills живут в ~/.claude/skills/, проектные — в .claude/skills/:
---
name: db-migrations
description: Правила создания и проверки миграций БД в этом проекте.
Использовать при любых изменениях схемы данных.
---
1. Миграции создавать только через npm run db:migration:new.
2. Каждая миграция обязана иметь работающий down-скрипт.
3. Перед коммитом прогнать npm run db:migrate:test на чистой базе.
Детали крайних случаев — в reference.md рядом с этим файлом.
Ключевое отличие от команды: команду вызываете вы, skill модель подключает сама, распознав подходящую задачу по полю description. Поэтому description — самая важная строка: пишите в нём не «что это», а «когда использовать». Второй принцип — прогрессивное раскрытие: SKILL.md держите коротким, объёмные справочники кладите в соседние файлы каталога — агент дочитает их только при необходимости, не тратя контекст впустую.
Итоговая рамка выбора механизма. Команда — явный сценарий, запускаемый человеком: проверка перед PR, разбор issue. Hook — стопроцентная гарантия без участия модели: формат, запреты. Skill — предметная экспертиза, которую агент должен применять сам в нужный момент: регламент миграций, гайд дизайн-системы, правила релиза. Эти три механизма не конкурируют, а складываются в конфигурацию проекта, которая делает каждую следующую сессию дешевле и предсказуемее.
Practice
Тулбокс проекта
Соберите для своего репозитория минимальный тулбокс: команду /pre-pr с проверками, PostToolUse-hook на автоформатирование и один skill с реальными правилами вашей предметной области. Продемонстрируйте срабатывание каждого.
Deliverable
Файлы в .claude/ (commands, skills), settings.json с hook и транскрипты трёх срабатываний.
Checkpoint
Для трёх своих правил объясните выбор механизма: почему это команда, hook или skill, а не другой вариант?
- ✓ Гарантируемые запреты и автоматика вынесены в hooks, а не в промпты.
- ✓ Явно запускаемые сценарии оформлены командами, параметры переданы через $ARGUMENTS.
- ✓ Предметная экспертиза упакована в skill с точным description для автоподключения.
Check yourself
Sources