Claude Code: работа с coding-агентом5. Как направлять агента
Что такое skill: указатель в упаковке
Засчитывается, когда отвечены все вопросы квиза
Зачем это нужно
Документ с указателем (см. 5.2) работает, но живёт внутри одного репозитория. Чтобы та же процедура появилась в соседнем проекте или у коллеги, файл и строку-указатель придётся переносить руками, и каждая копия начнёт жить своей жизнью.
Skill решает именно это. Это тот же документ с указателем, только упакованный в стандартную папку, которую можно передать, положить в другой проект или раздать команде.
Как это устроено
Папка и SKILL.md
Skill — папка с обязательным файлом SKILL.md. Файл состоит из YAML frontmatter между маркерами --- и Markdown-тела с инструкциями:
---
name: database-migrations
description: Database schema changes - generate the migration, update the seed, reseed. Use when editing the schema or adding or altering a table column.
---
# Database migrations
1. Edit `app/db/schema.ts`.
2. Run `npm run db:generate`.
3. Update `scripts/seed.ts` to match the new shape.
4. Run `npm run db:seed`, then `npm run typecheck`.
Формат — открытый стандарт Agent Skills (agentskills.io). Claude Code следует ему и добавляет свои поля. Skill, который обходится полями стандарта, работает и в других агентах, которые его поддерживают.
Progressive disclosure: что и когда загружается
Стандарт описывает три стадии:
- Discovery. При старте агент загружает только
nameиdescriptionкаждого skill — ровно столько, чтобы понять, когда он может пригодиться. - Activation. Когда задача совпадает с описанием, агент читает в контекст весь
SKILL.md. - Execution. Агент выполняет инструкции и при необходимости открывает файлы из папки skill.
Значит, description — это и есть context pointer skill-а: он лежит в контексте всегда, а тело — нет. В Claude Code текст description вместе с полем when_to_use обрезается в списке skills до 1536 символов, поэтому главный сценарий использования ставят первым.
Вспомогательные файлы
В папке skill могут лежать и другие файлы: справочник, примеры, скрипты. SKILL.md ссылается на них с условием, когда их открывать, и агент читает их, только если нужно. Это тот же приём на уровень ниже: документация Claude Code советует держать SKILL.md короче 500 строк и выносить подробности в отдельные файлы.
Кто вызывает skill
По умолчанию skill может вызвать и агент, и вы, набрав /name. Поведение меняется одним полем frontmatter:
| Frontmatter | Вы вызываете | Агент вызывает | Описание в контексте |
|---|---|---|---|
| (по умолчанию) | Да | Да | Всегда |
disable-model-invocation: true |
Да | Нет | Нет |
Это компромисс двух нагрузок. Skill, который вызывает агент, стоит одну строку описания в каждом запросе, зато агент найдёт его сам. Skill с disable-model-invocation: true не стоит контекста вообще, но помнить о нём и вызывать его вовремя придётся вам. Документация советует второй вариант для действий с побочными эффектами вроде /deploy: вы не хотите, чтобы агент решил выкатить код, потому что он «выглядит готовым».
Практика
Наберите в Claude Code /skills. Команда показывает доступные skills с описаниями. Нажмите t, чтобы отсортировать список по числу токенов: так видно, сколько контекста занимает каждый skill. Найдите skill, который вы ни разу не вызывали, и решите, нужен ли агенту его description в каждом запросе.
Подводные камни
- Сломанный frontmatter. Если YAML не разбирается, skill всё равно загружается, но без полей:
/nameработает, а агент не может сопоставить задачу сdescription. Запустите Claude Code с--debug, чтобы увидеть ошибку разбора. - Слишком много skills. Список описаний занимает около 1% контекстного окна. Когда skills не помещаются, Claude Code выбрасывает описания тех, что вызываются реже всего, и агент перестаёт их находить.
Вывод: skill — это указатель в упаковке; в контексте всегда лежит только его описание, поэтому описание — главное, что нужно написать хорошо.
Проверь себя
Что из skill-а, который агент может вызвать сам, лежит в контексте на протяжении всей сессии, даже если skill ни разу не вызывался?
name
и
description
SKILL.md
без вспомогательных файлов
SKILL.md
попадает в контекст при activation, когда задача совпала с описанием, а вспомогательные файлы — ещё позже, если
SKILL.md
к ним отправит. Папка собрана вместе ради переносимости, а не ради загрузки в контекст.
У вас есть skill, который выкатывает сборку на staging. Вы не хотите, чтобы агент запустил его сам, когда решит, что код готов. Что сделать с frontmatter?
description
, чтобы агенту нечего было сравнивать
disable-model-invocation: true
и вызывать его как
/name
disable-model-invocation: true
убирает описание из контекста, и вызвать skill можете только вы. Без
description
Claude Code возьмёт первую непустую строку тела, так что агент по-прежнему сможет его найти.
SKILL.md разросся: длинный раздел о редких деталях нужен в одном случае из десяти. Что сделать с этим разделом?
SKILL.md
: папка всё равно передаётся целиком
SKILL.md
с условием
SKILL.md
грузится при каждом вызове, включая девять случаев, где он не нужен. Отдельный skill добавит ещё одно описание в каждый запрос. Файл в папке со ссылкой из
SKILL.md
ничего не стоит, пока агент по ней не пойдёт.
Агент не вызывает ваш skill, хотя задача ему подходит, а /name работает. Что проверить первым?
description
слова, которыми вы описываете задачу
SKILL.md
500 строк
/name
продолжает работать. Если оно есть, но в нём нет ваших формулировок, агент не видит совпадения. Длина тела на выбор не влияет: тело читается уже после решения.
Источники
- Anthropic, Extend Claude with skills
- Anthropic, Commands
- Agent Skills, What are Agent Skills?
- По мотивам AI Coding Crash Course, AI Hero
Текст подготовлен с помощью LLM и может содержать неточности.