Навыки против других механизмов Claude Code
Когда вы хотите, чтобы Claude Code «всегда делал вот так», у вас есть несколько путей, и выбор между ними — не вопрос вкуса. Правило в CLAUDE.md стоит токенов в каждой сессии. Навык ничего не стоит, пока не сработал, но может не сработать. Хук сработает всегда, но не умеет думать. В этом уроке — сравнение механизмов по существу и правила выбора.
Пять механизмов в одной таблице
CLAUDE.md и .claude/rules/ |
Навык (Skill) | Субагент | Хук (Hook) | MCP-сервер | |
|---|---|---|---|---|---|
| Что это | Инструкции в контексте | Инструкции по требованию | Отдельный экземпляр Claude | Команда или проверка на событии | Внешние инструменты и данные |
| Когда загружается | В начале каждой сессии (правила с paths — при работе с подходящими файлами) |
Описание — всегда; тело — когда сработал | При делегировании | Выполняется при событии | Список инструментов — при старте |
| Кто запускает | Никто, всегда есть | Claude по описанию или вы через / |
Claude по описанию или вы через @ |
Claude Code при событии, без участия модели | Claude вызывает инструмент |
| Гарантия | Нет: Claude «старается следовать» | Нет | Нет | Да: срабатывает независимо от модели | Да для вызова, нет для решения вызвать |
| Стоимость контекста | Постоянная, каждую сессию | Почти нулевая до вызова | Отдельный контекст, основной не тратится | Нулевая для модели | Описания инструментов при старте |
| Подходит для | Факты о проекте, соглашения, команды сборки | Многошаговые процедуры, шаблоны, чек-листы | Объёмные и изолированные задачи | Обязательные действия: линтер, запрет команд | Доступ к трекеру, базе, внешним API |
Дальше — по парам, потому что путают именно пары.
Навык или CLAUDE.md
Оба — текст с инструкциями, оба пишет человек. Разница в том, когда текст попадает в контекст.
CLAUDE.md загружается в каждой сессии целиком. Это правильно для того, что нужно всегда: как собирать проект, где лежат обработчики API, какой стиль отступов, что никогда не делать. Документация советует держать файл в пределах двухсот строк — дальше падает и внимание модели, и ваш бюджет контекста.
Навык загружается, когда нужен. Если инструкция — многошаговая процедура или применяется только к одному типу задач, ей место в навыке. Простая проверка: если абзац из CLAUDE.md начинается словами «когда делаешь X» — это навык. «Тесты запускаются командой npm test» — это CLAUDE.md. «Когда пишешь релиз-ноты, возьми коммиты с прошлого тега, сгруппируй…» — навык.
Между ними есть промежуточный вариант — правила в .claude/rules/ с полем paths: они загружаются, только когда Claude работает с файлами по шаблону. Это для «правил стиля для файлов API», которые не многошаговая процедура, но и не нужны в каждой сессии.
Навык или субагент
Навык — это что делать. Субагент — кто делает. Навык выполняется в текущем разговоре, с полной историей: Claude помнит, что вы обсуждали, и применяет инструкцию к этому. Субагент стартует с чистым контекстом и возвращает отчёт.
Выбирайте субагента, когда задача порождает много вывода, требует ограничений на инструменты или должна делаться «независимым» экземпляром — например, ревью. Выбирайте навык, когда нужна процедура, встроенная в текущую работу: оформить релиз-ноты, проверить компонент, который вы только что написали.
Они хорошо сочетаются. Навык с context: fork выполняется в субагенте — это навык, которому выдали изоляцию. А субагент с полем skills получает тело навыков в свой контекст при старте — это субагент, которому выдали инструкции. Ревьюер mr-reviewer из курса о субагентах может предзагружать навык api-conventions, чтобы проверять по стандартам команды.
Навык или хук
Это самое важное различие. Навык, как и CLAUDE.md, — это контекст: Claude читает инструкцию и следует ей настолько, насколько модель вообще следует инструкциям. Обычно хорошо, но без гарантии.
Хук — это код, который выполняет Claude Code, а не модель. Он срабатывает на событии: перед вызовом инструмента, после редактирования файла, при завершении ответа, при запуске субагента. Хук может заблокировать действие, запустить линтер, добавить в контекст сообщение. Модель не решает, запускать его или нет.
Правило: если что-то должно случиться при каждом коммите или редактировании — хук. «Перед коммитом запускать тесты» в CLAUDE.md — пожелание. Хук на PreToolUse для git commit — гарантия. Если что-то нужно уметь делать правильно — навык. Хук не напишет релиз-ноты, он не думает.
И они тоже сочетаются: в шапке навыка есть поле hooks. Навык деплоя может регистрировать хук, который проверяет каждую Bash-команду до конца сессии. Хуки, объявленные в навыке, действуют с момента его вызова.
Навык или слэш-команда
Здесь сравнивать уже нечего: custom commands из .claude/commands/ объединены с навыками. Файл .claude/commands/deploy.md и папка .claude/skills/deploy/SKILL.md создают одну и ту же команду /deploy и поддерживают одну шапку. Разница в том, что папка навыка позволяет держать вспомогательные файлы, а поля name и paths в файле команды игнорируются. Новые вещи делайте навыками; старые команды можно не трогать, пока не понадобится что-то из нового.
Навык или MCP
MCP даёт Claude инструменты: прочитать задачу из трекера, выполнить запрос к базе, отправить сообщение. Навык даёт инструкции, как этими инструментами пользоваться в вашей команде. «Получить задачу по ключу» — инструмент MCP-сервера. «Когда воспроизводишь баг, сначала прочитай задачу, потом найди упомянутые в ней файлы, потом напиши падающий тест» — навык. Один без другого работает хуже: инструменты без инструкций используются как попало, инструкции без инструментов упираются в «я не вижу трекер». Подробнее об MCP — в курсе «Что такое MCP и зачем он нужен».
Как выбирать
Задайте себе три вопроса по порядку.
- Это должно случиться гарантированно? Да — хук. Нет — дальше.
- Это нужно в каждой сессии? Да — CLAUDE.md (кратко). Нет — дальше.
- Это процедура или доступ к данным? Процедура — навык. Доступ — MCP. Процедура с большим объёмом вывода — навык с
context: forkили субагент.
Пример из агентства. Команда хочет, чтобы Claude Code перед каждым merge request проверял вёрстку на доступность. Гарантированно? Скорее «настойчиво», без блокировки. В каждой сессии? Нет, только когда есть изменения в компонентах. Процедура? Да, с чек-листом. Значит — навык a11y-check, а если объём проверки большой — с context: fork. Если через месяц выяснится, что Claude иногда забывает, — добавить хук на Stop, который напоминает о проверке, или на PreToolUse для git push, который блокирует пуш без отчёта.
Попробуйте сами
10–15 мин на рабочем месте- Откройте CLAUDE.md своего проекта. Для каждого абзаца ответьте: нужен ли он в каждой сессии? Абзацы с «нет» пометьте как кандидатов в навыки или правила с
paths. - Найдите в CLAUDE.md или в голове правило вида «всегда делай X перед Y». Опишите, каким хуком его можно гарантировать (событие, условие, действие). Хук можно не писать — важно увидеть, что это уже не задача для текста.
- Возьмите один навык и одного субагента из предыдущих уроков и подумайте, что даст их сочетание: навык с
context: forkили субагент с полемskills. Какой вариант проще поддерживать?
Коротко
- CLAUDE.md — всегда в контексте, для фактов и соглашений; навык — по требованию, для процедур.
- Навык — «что делать» в текущем разговоре; субагент — «кто делает» в отдельном контексте.
- Хук — код, а не текст: гарантирует действие на событии, но не думает.
- MCP даёт инструменты, навык — инструкции, как их применять.
- Слэш-команды объединены с навыками; при совпадении имён побеждает навык.
- Механизмы сочетаются: навык с
context: fork, субагент сskills, хуки в шапке навыка.
Видеоверсия
Сценарий озвучки · 506 слов, ≈ 4 мин
Когда вы хотите, чтобы Claude Code всегда делал что-то определённым образом, у вас есть несколько путей. И выбор между ними — не вопрос вкуса. Правило в клод-эм-дэ стоит токенов в каждой сессии. Навык ничего не стоит, пока не сработал, но может и не сработать. Хук сработает всегда, но не умеет думать. Разберём механизмы попарно.
Первая пара — навык и клод-эм-дэ. Оба — текст с инструкциями. Разница в том, когда текст попадает в контекст. Клод-эм-дэ загружается в каждой сессии целиком. Это правильно для того, что нужно всегда: как собирать проект, где лежат обработчики, какой стиль. Документация советует держать файл в пределах двухсот строк. Навык загружается, когда нужен. Простая проверка: если абзац начинается словами «когда делаешь то-то» — это навык. «Тесты запускаются такой-то командой» — это клод-эм-дэ. «Когда пишешь релиз-ноты, возьми коммиты с прошлого тега» — навык.
Вторая пара — навык и субагент. Навык — это «что делать». Субагент — «кто делает». Навык выполняется в текущем разговоре, с полной историей: Claude помнит, что вы обсуждали, и применяет инструкцию к этому. Субагент стартует с чистым контекстом и возвращает отчёт. Выбирайте субагента, когда задача порождает много вывода или её должен делать независимый экземпляр — например, ревью. Выбирайте навык, когда нужна процедура, встроенная в текущую работу. И они сочетаются: навык можно запустить в субагенте полем «контекст: форк», а субагенту можно предзагрузить навыки полем «скиллс».
Третья пара — самая важная. Навык и хук. Навык, как и клод-эм-дэ, — это контекст. Claude читает инструкцию и следует ей настолько, насколько модель вообще следует инструкциям. Обычно хорошо, но без гарантии. Хук — это код, который выполняет сам Claude Code, а не модель. Он срабатывает на событии: перед вызовом инструмента, после редактирования файла, при завершении ответа. Хук может заблокировать действие, запустить линтер, добавить сообщение в контекст. Модель не решает, запускать его или нет.
Правило: если что-то должно случиться при каждом коммите — хук. «Перед коммитом запускать тесты» в клод-эм-дэ — это пожелание. Хук на событие перед вызовом инструмента — гарантия. А если что-то нужно уметь делать правильно — навык. Хук не напишет релиз-ноты, он не думает.
Четвёртая пара — навык и слэш-команда. Тут сравнивать нечего: пользовательские команды объединили с навыками. Файл в папке коммандс и папка навыка создают одну и ту же команду. Навык просто умеет больше: вспомогательные файлы, управление вызовом, автоматическое срабатывание. Новое делайте навыками, старое можно не трогать.
И пятая — навык и MCP. MCP даёт Claude инструменты: прочитать задачу из трекера, выполнить запрос к базе. Навык даёт инструкции, как этими инструментами пользоваться в вашей команде. «Получить задачу по ключу» — инструмент. «Когда воспроизводишь баг, сначала прочитай задачу, потом найди файлы, потом напиши падающий тест» — навык. Одно без другого работает хуже.
Как выбирать? Три вопроса по порядку. Первый: это должно случиться гарантированно? Да — хук. Второй: это нужно в каждой сессии? Да — клод-эм-дэ, кратко. Третий: это процедура или доступ к данным? Процедура — навык, доступ — MCP, процедура с большим объёмом вывода — навык в субагенте.
Пример. Команда хочет, чтобы перед каждым merge request проверялась доступность вёрстки. Гарантированно? Скорее настойчиво, без блокировки. В каждой сессии? Нет, только при изменениях в компонентах. Процедура? Да, с чек-листом. Значит — навык. А если через месяц выяснится, что Claude иногда забывает, — добавить хук, который блокирует пуш без отчёта. Так механизмы дополняют друг друга.
