← Claude Code: Agentic Development in the Terminal
03 / 08 · 50 min

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

Чем hook принципиально отличается от правила в CLAUDE.md?

01Чем hook принципиально отличается от правила в CLAUDE.md?

Что произойдёт, если PreToolUse-hook завершится с кодом выхода 2?

02Что произойдёт, если PreToolUse-hook завершится с кодом выхода 2?

Что подставляется в $ARGUMENTS внутри своей slash-команды?

03Что подставляется в $ARGUMENTS внутри своей slash-команды?

Как Claude решает, что пора подключить skill?

04Как Claude решает, что пора подключить skill?

Где живут проектные slash-команды, доступные всей команде?

05Где живут проектные slash-команды, доступные всей команде?

Sources

Slash Commands, Hooks, and Skills · Claude Code: Agentic Development in the Terminal · VORCL