Скиллы в Claude Code: из чего состоят и как работают

Последнее время про скиллы говорят все. Ютуб завален туториалами: как сделать скилл, как скачать скилл, «10 скиллов, которые приносят мне три миллиона в минуту». Нельзяграм страшно открывать.

И почти везде скилл подают как волшебство: подключил — и агент пишет код без ошибок, воду превращает в вино. А вот как эта штука устроена внутри — почему-то никто не объясняет. Хотя именно от этого зависит, будет твой скилл работать или молча отвалится.

Эта статья — про механику. Разберём, из чего скилл состоит, где живёт, как попадает в контекст модели и почему иногда не срабатывает.

И сразу главная мысль, к которой всё сведётся: никакого волшебства в скиллах нет. Скилл — это способ эффективно распоряжаться контекстом модели. Не «супер-промпт», не «магия», а инструмент управления вниманием нейронки. Держите это в голове по ходу всего текста — так все детали складываются в одну картину.

Делать скиллы руками, кстати, необязательно: есть

skill-creator

от Anthropic и

writing-skills

от Superpowers — навыки, которые пишут другие навыки. Но чтобы проверить, что они там наделали, и починить, когда не работает, всё равно надо понимать, как оно устроено. Ради этого и статья.

Скилл против промпта

Начнём с вопроса, который возникает первым: чем скилл отличается от обычного промпта.

Аналогия. Если модель — это мозг агента, RAG и memory bank — долгосрочная память, контекст — краткосрочная, а MCP — руки-базуки (в смысле, и руки, и инструменты сразу), то скилл — это средне-специальное образование агента. Диплом ПТУ. Твой Клод не просто прочитал в интернете инструкцию, как пользоваться сварочным аппаратом, — он его купил, отучился на сварщика и ждёт заказы.

Применений — сколько угодно: писать код и деплоить сайты, превратить агента в маркетолога, копирайтера или аналитика, заставить готовить документы и обрабатывать лидов. Способ сделать из универсального агента узкого профи.

И тут легко заметить: это же промпт. Задаёшь роль, даёшь чёткие инструкции и примеры — получаешь то же самое.

Отчасти так и есть. Но с важной оговоркой, которую хорошо показывает один эксперимент.

Эксперимент Vercel: почему скилл не всегда лучше промпта

Vercel — те самые, кто сделал Next.js, самый модный способ собирать сайты. Они сравнили два подхода к тому, как скормить агенту документацию по Next.js: специальный скилл с этой документацией и обычный файл

AGENTS.md

— то есть промпт, который агент гарантированно читает в начале сессии, и он всегда у него перед глазами.

Результаты по прохождению их тестов:

  • Ничего (голая модель) — 53%
  • Скилл с документацией — 53%
  • Скилл + прямое указание «обязательно используй» — 79%
  • Промпт AGENTS.md с коротким индексом документации — 100%

Скилл сам по себе не дал ничего — те же 53%, что и без него. Причина: в 56% случаев агент просто не догадался его открыть. А

AGENTS.md

открывать не надо — он всегда в контексте, проигнорировать нельзя.

Вывод из этого не «промпты лучше скиллов». Вывод точнее: скилл силён не содержанием, а тем, вызовется он или нет. Можно написать гениальную инструкцию, но если агент до неё не дошёл — толку ноль. Дальше половина статьи будет про то, как повысить шанс вызова.

Команды — предки скиллов

Проблему «где хранить промпты и как их не копипастить руками» Claude Code решил ещё до скиллов — через команды. Жмёшь косую черту, выбираешь из списка готовых действий. Под капотом никакой магии: команда — это просто заранее написанный промпт, который подставляется в диалог.

Скиллы выросли отсюда напрямую. Сегодня в Claude Code команды и скиллы фактически слились в одну сущность. Команды ещё можно создавать, но нужды в этом почти нет. Полезная деталь на будущее: если команда и скилл называются одинаково, приоритет у скилла.

CLAUDE.md — тоже промпт

Причём самый важный.

CLAUDE.md

(у остальных инструментов —

AGENTS.md

, разница только в названии) попадает в контекст в момент запуска агента и висит там всю сессию. Именно с ним, а не с чем-то экзотическим, конкурирует скилл.

Документация даёт простое правило, когда что использовать:

Выноси инструкцию в скилл, когда секция

CLAUDE.md

выросла из «факта» в «процедуру».

Пара строк про стиль кода — пусть живут в

CLAUDE.md

. Многошаговый процесс, длинный чек-лист, сложная последовательность — в отдельный скилл. Смысл ровно в управлении контекстом:

CLAUDE.md

занимает место всегда, а скилл подгружается только когда реально нужен.

CLAUDE.md

держим компактным, тяжёлое прячем в скиллы и достаём по требованию.

Вот тут и проступает стержень. Скилл выигрывает у промпта не «мощностью инструкции». Он выигрывает тем, что не засоряет контекст, пока не понадобится. А не отупевшая от переполненной памяти нейронка работает заметно лучше. Это и есть весь секрет — не магия, а гигиена контекста.

Экономия контекста: CLAUDE.md и каталог скиллов загружены всегда, тело SKILL.md и его файлы подгружаются по требованию
Экономия контекста: CLAUDE.md и каталог скиллов загружены всегда, тело SKILL.md и его файлы подгружаются по требованию

Какими бывают скиллы

С точки зрения назначения Anthropic делит скиллы на три типа:

  • Справочные (Reference) — дополнительные знания: стандарты кодирования, брендбуки, API-документация.
  • Процедурные / техники (Technique / Task) — пошаговые инструкции: деплой, коммит, ревью.
  • Оркестраторы (Orchestrators) — сложные навыки, где главный агент дробит большую задачу на части и раздаёт их субагентам.

И отдельная категория поверх этой — мета-скиллы, то есть скиллы для работы с другими скиллами. Из тех, что не страшно рекомендовать:

  • skill-creator — делает новые навыки.
  • writing-skills от Superpowers — альтернатива ему.
  • run-skill-generator — встроен в Claude Code. Разбирается, как запускается проект: читает README, package.json, Makefile, пытается запустить, ведёт журнал ошибок и в конце собирает скилл /run-project. Удобно и для своего проекта, и когда скачал что-то с GitHub и не хочешь разбираться руками.

Есть и другие мета-скиллы — для поиска навыков по маркетплейсам, автогенерации целых наборов под проект. Но что из этого стоит качать — тема отдельная, и о безопасности скачанных скиллов поговорим ниже, она того заслуживает.

Анатомия: скилл — это просто папка

Технически скилл — это папка на диске. Внутри обязателен один файл,

SKILL.md

(именно так, капсом), — инструкция для агента. Опционально рядом лежат ещё три папки:

references

(документация),

scripts

(исполняемые скрипты) и

assets

(шаблоны). Без них скилл работать будет; без

SKILL.md

— нет.

Сама папка скилла лежит внутри папки

skills

, а та — внутри папки

.claude

.

Папка

.claude

появляется в домашней директории сразу после установки Claude Code, даже если ты его ни разу не запускал. Точка в начале имени означает «скрытая»: через Finder или Проводник её не видно. Чтобы заглянуть — либо терминал, либо редактор кода (IDE). Самый распространённый бесплатный вариант — VS Code.

Дерево папки скилла: обязательный SKILL.md и опциональные папки references, scripts, assets
Дерево папки скилла: обязательный SKILL.md и опциональные папки references, scripts, assets

Где живёт скилл: четыре уровня

От того, где лежит папка

.claude

, зависит область действия скилла и его приоритет при совпадении имён. Уровней четыре.

Enterprise. Для компаний. Такие скиллы спускают сверху администраторы, и у них наивысший приоритет для всех сотрудников. Физически они не в

.claude

, а подгружаются через корпоративный аккаунт в облаке Anthropic. Смысл — держать всех на утверждённых процессах: чтобы не тащили скиллы откуда попало и не занесли заразу. Можно, например, вовсе запретить выполнение команд в терминале из скиллов или принудительно включать и выключать конкретные навыки.

Personal. Скиллы в

.claude

домашней директории. Личные, доступны в любом проекте на этой машине. Если ты не в корпорации — у них высший приоритет. Приоритет важен при коллизии имён: есть персональный

/deploy

и проектный

/deploy

— Клод возьмёт персональный.

Персональные скиллы Claude Code видит в реальном времени: правишь тело или файлы скилла прямо во время сессии — изменения применяются сразу, перезапуск не нужен. Исключение — если во время сессии создать новую папку с новым скиллом: вот тут сессию придётся перезапустить.

Project. Скиллы конкретного проекта. Самый низкий приоритет: видны только внутри проекта и любую коллизию с персональными или Enterprise проигрывают. Их смысл — общий доступ команды, поэтому обычно их коммитят в Git вместе с кодом.

Важная тонкость: проектные скиллы загружаются не только из текущей папки, но и из всех родительских — вплоть до корня Git-репозитория. Запустил Клода в подпапке — он сначала посмотрит скиллы рядом с собой, потом поднимется уровнем выше, потом ещё, до самого корня. На практике: у всего сайта есть общий набор скиллов (правила кода, деплой), а у отдельного сложного компонента — скажем, биллинга — свой. Запускаешь Клода внутри биллинга — он видит и локальные скиллы биллинга, и общие скиллы всего проекта.

Plugin. Особняком. Плагинные скиллы в игры с коллизиями имён не играют, потому что вызываются с префиксом:

/имя-плагина:имя-скилла

— например,

/superpowers:test-driven-development

. Лежат они тоже в

.claude

, но обособленно — внутри директорий своих плагинов, а те — внутри своих маркетплейсов. Путь к официальному скиллу Anthropic

pdf

выглядит так:

.claude/plugins/marketplaces/anthropic-agent-skills/skills/pdf

Уровни у самих плагинов почти те же — Enterprise, Personal, Project, — но, в отличие от скиллов, плагин ещё прописывается в конфиге проекта. Конфигов два:

.claude/settings.json

(общий, его коммитят в Git) и

.claude/settings.local.json

(личный, коммитить не принято).

Четыре уровня скиллов: Enterprise, Personal, Project по приоритету и Plugin особняком
Четыре уровня скиллов: Enterprise, Personal, Project по приоритету и Plugin особняком

SKILL.md: шапка (frontmatter)

Файл

SKILL.md

состоит из двух частей: шапки (frontmatter) в формате YAML и тела — самой инструкции.

YAML — это способ записать настройки в виде «ключ: значение», удобный и человеку, и программе. Frontmatter — блок метаданных в начале файла: он говорит агенту, какие скиллы у него вообще есть, когда их применять и как выполнять.

Три стандарта и минимальные требования

Стандартов оформления скилла сегодня три:

  1. Claude Code — канонический, от Anthropic.
  2. Agent Skills — тоже от Anthropic, почти такой же, но для всех остальных инструментов.
  3. Superpowers — для Claude Code и ещё пары совместимых. Его механику оставлю за рамками этой статьи, она тянет на отдельный разбор.

Минимальные требования у Claude Code предельно мягкие: папка в нужном месте + файл

SKILL.md

+ хоть какая-то инструкция внутри. Обязательных полей в шапке нет вообще. А вот у стандарта Agent Skills два поля обязательны —

name

и

description

.

Дальше пойдём по полям. Сначала — список всех полей и их поддержки по стандартам, потом разбор каждого поля по группам.

  • name — Claude Code: опционально; Agent Skills: обязательно
  • description — Claude Code: рекомендуется; Agent Skills: обязательно
  • when_to_use — Claude Code: опционально; Agent Skills: не предусмотрено
  • allowed-tools — Claude Code: опционально; Agent Skills: опционально
  • disallowed-tools — Claude Code: опционально; Agent Skills: не предусмотрено
  • model — Claude Code: опционально; Agent Skills: не предусмотрено
  • effort — Claude Code: опционально; Agent Skills: не предусмотрено
  • context — Claude Code: опционально; Agent Skills: не предусмотрено
  • agent — Claude Code: опционально; Agent Skills: не предусмотрено
  • hooks — Claude Code: опционально; Agent Skills: не предусмотрено
  • paths — Claude Code: опционально; Agent Skills: не предусмотрено
  • shell — Claude Code: опционально; Agent Skills: не предусмотрено
  • arguments — Claude Code: опционально; Agent Skills: не предусмотрено
  • argument-hint — Claude Code: опционально; Agent Skills: не предусмотрено
  • disable-model-invocation — Claude Code: опционально; Agent Skills: не предусмотрено
  • user-invocable — Claude Code: опционально; Agent Skills: не предусмотрено
  • compatibility — Claude Code: опционально; Agent Skills: опционально
  • metadata — Claude Code: опционально; Agent Skills: опционально
  • license — Claude Code: опционально; Agent Skills: опционально

Группа 1. Три поля, которые решают, вызовется ли скилл

Это самые важные поля. Помните вывод из эксперимента Vercel — скилл бесполезен, если агент его не открыл? За открытие отвечают ровно эти три поля.

name. У Claude Code необязательно: если не задать, именем станет имя папки. Ограничение — не больше 64 символов (в обоих стандартах); длиннее — ошибка, скилл не заработает. Имя папки должно совпадать с именем скилла. Рекомендуемый стиль —

kebab-case

: нижний регистр и дефисы.

description. Формально для Claude Code лишь рекомендуется, но по факту это фундамент: именно по описанию агент решает, открывать скилл или нет. Нет описания — сам он скилл никогда не вызовет (останется только ручной вызов через слэш-команду).

Как писать описание — три правила, каждое неочевидное:

  • Не «что это», а «когда применять». Плохо: «Этот скилл вызывает Nano Banana для генерации картинок». Хорошо: «Используй этот скилл, когда нужно сгенерировать картинку». Описание — это руководство к действию, а не аннотация.
  • Как работает — в теле, не в описании. Если вписать в описание механику («скилл делает то-то через то-то»), модель может решить, что уже всё поняла, не полезет в тело, где расписаны детали, и начнёт выдумывать. Описание — это триггер, подробности — внутри.
  • Третье лицо. Не «я помогу тебе вызвать Nano Banana», а «этот скилл использует Nano Banana». Текст уходит в системный промпт, и в третьем лице модель меньше путается.

Идеальное описание получается примерно таким: «Используй этот скилл для генерации картинки. Этот скилл использует Nano Banana».

И бонус, подтверждённый экспериментом на 650 вызовах: если начать не с «используй этот скилл», а с «ВСЕГДА используй этот скилл», шанс вызова растёт в 20,6 раза (разбор с цифрами).

when_to_use. Список конкретных триггеров — слов и фраз, при которых скилл должен подхватываться: «сгенерируй картинку», «нарисуй картинку» и так далее.

Про лимиты этих двух полей отдельно, потому что о них легко споткнуться. В стандарте Agent Skills на описание — 1024 символа. У Claude Code — 1536, но это лимит на

description

и

when_to_use

вместе: при наличии второго поля они склеиваются и грузятся в контекст одним куском. Превысил лимит — Claude Code молча обрежет хвост. А так как обрезается конец, первыми под нож идут именно триггеры (

when_to_use

стоит после описания). Мораль: самое важное — в начало описания.

Группа 2. Поля поведения и запуска

context. Одно осмысленное значение —

fork

, и это едва ли не самое мощное поле во всей шапке.

Без него тело скилла просто вливается в текущий контекст: та же модель, тот же диалог, вся история на месте — Клод берёт и делает то, что написано.

С

context: fork

Claude Code поднимает отдельного свежего субагента с чистым контекстным окном. Тело скилла становится для него промптом, историю основного диалога он не видит, а по завершении возвращает в главный диалог только сводку о проделанной работе. Это разгружает основной контекст и позволяет запускать тяжёлые многошаговые процессы, не засоряя главную сессию.

Покажу на своём примере — так понятнее. У меня есть большой скилл, который пишет учебные задачи для практикума по n8n. В главной сессии сидит оркестратор. Я пишу ему: «собери модуль по Data Tables». Модуль к этому моменту уже спроектирован (ресёрчи, консультации с методистами и экспертами по n8n — всё это тоже агенты), материалы для сборки готовы.

Оркестратор берёт план и форкает скилл написания задачи. Внутри форка раннер:

  1. изучает материалы и уже готовые задачи — готовится;
  2. зовёт субагента, который через MCP собирает воркфлоу в n8n и тестирует его;
  3. на основе воркфлоу пишет черновик задачи;
  4. поднимает ещё одного агента — тот открывает воркфлоу в браузере и сверяет, чтобы названия кнопок, полей и опций совпадали в задаче и в нашей версии n8n;
  5. следующий субагент снимает скриншоты (схема большая: отцепить цепочку от триггера, замокать данные, выполнить, запинить, снять, прицепить следующую ноду, снова выполнить и снять — и так по всей цепочке);
  6. под конец прогоняет результат через ревью и расставляет скрины.

Раннер возвращается к оркестратору с отчётом, тот записывает прогресс и дёргает раннер под следующую задачу. На выходе — 10–15 готовых задач за прогон.

Ключевое, что даёт форк: вместо того чтобы вручную запускать по отдельной сессии на каждую задачу, я запускаю всё одним оркестратором. Каждый форк работает в своём чистом окне и не тащит в общий контекст лишнее.

Схема форка: оркестратор форкает раннер в свежем контексте, тот раздаёт работу субагентам и возвращает сводку
Схема форка: оркестратор форкает раннер в свежем контексте, тот раздаёт работу субагентам и возвращает сводку

agent. Работает в связке с

context

: указывает, какому агенту отдать форкнутый скилл. Можно своего, можно один из трёх встроенных:

  • Explore — быстро что-то найти и понять структуру. Только чтение. Пропускает CLAUDE.md и git-статус, в детали не вникает. По умолчанию на модели Haiku, но можно назначить потяжелее.
  • Plan — то же, но вдумчивее. Наследует модель основной сессии, работает внутри plan mode: собирает контекст по кодовой базе, прежде чем предложить стратегию.
  • General-purpose — для сложных многошаговых задач, где нужно и читать, и писать. Уже имеет все права (Read, Write, Edit, Bash). Его Клод раскидывает по независимым подзадачам, когда их можно делать параллельно.

allowed-tools. Белый список инструментов, которые скилл вызывает без дополнительного подтверждения:

# любые команды git через Bash + чтение файлов allowed-tools: Bash(git:*) Read # запуск любых скриптов через Python 3 allowed-tools: Bash(python3 *) # формат YAML-списка: npm и веб-запросы allowed-tools: ["Bash(npm:*)", "WebFetch"]

Тонкость с доверием: персональные скиллы — доверенные, разрешённый инструмент вызывается без вопросов. Проектные — нет: даже с этим списком Клод всё равно переспросит, можно ли ему запустить Python. Логика понятна — проектный скилл мог прийти от кого угодно из команды.

disallowed-tools. Зеркало предыдущего — чёрный список: что скиллу запрещено во время выполнения.

model. Модель, на которой выполняется скилл.

effort. Глубина размышлений при выполнении:

low

/

medium

/

high

/

xhigh

. Чем выше — тем вдумчивее модель и тем больше токенов и времени тратит. (В обычной сессии градаций больше, в скилле набор урезан.)

disable-model-invocation. Если

true

, Клод перестаёт видеть скилл как инструмент — вызвать его сможешь только ты, вручную через слэш-команду. По умолчанию

false

.

user-invocable. Наоборот: если

false

, слэш-командой скилл не вызвать, только модель сама. По умолчанию

true

.

arguments и argument-hint. Аргументы скилла и подсказки к ним при вызове. Например, скилл

fix-issue

объявляет два аргумента —

issue

(подсказка «номер issue») и

priority

(подсказка «приоритет»). При наборе

/fix-issue

в интерфейсе появятся плейсхолдеры

<номер-issue> <приоритет>

; подставишь

413

и

critical

— внутрь скилла они встанут на места

issue

и

priority

, и модель получит уже собранный текст.

Аргументы скилла: объявление в SKILL.md и подстановка значений при вызове /fix-issue 413 critical
Аргументы скилла: объявление в SKILL.md и подстановка значений при вызове /fix-issue 413 critical

paths. Условие автозагрузки. Скилл с

paths

подтягивается сам, только когда в работе есть файл, подходящий под шаблон (вручную через слэш-команду его всё равно можно вызвать всегда). Формат — glob-шаблоны, где

*

значит «что угодно»:

# один шаблон paths: file.md # несколько через запятую paths: "*.md, src/**/*.ts" # или списком paths: - "*.md" - "src/**/*.ts" # несколько расширений разом paths: "**/*.{ts,tsx}"

*.md

— все файлы с расширением

.md

;

src/**/*.ts

— все

.ts

внутри

src

и любых вложенных папок.

shell. Выбор интерпретатора для инъекций вида

!`команда`

(о них — следующий раздел). Значения —

bash

или

powershell

. Mac и Linux —

bash

, Windows —

powershell

.

Инъекция контекста — и почему за ней стоит следить

Поле

shell

тянет за собой отдельную важную тему. В тело скилла через восклицательный знак можно вписать команду, и Claude Code выполнит её, подставив вместо строки её вывод ещё до того, как агент увидит содержимое скилла. Это и есть динамическая инъекция контекста — штука полезная.

Пример: скилл работает с кодом, и чтобы агенту не лезть в репозиторий за свежими изменениями вручную, мы подставляем их прямо в скилл. Автор пишет так:

--- description: Суммирует незакоммиченные изменения и помечает риски. Использовать, когда просят показать, что изменилось, или сделать commit message. --- ## Текущие изменения !`git diff HEAD` ## Инструкции Суммируй изменения выше в 2-3 пунктах, затем перечисли риски...

А агент увидит уже результат выполнения

git diff HEAD

на месте команды:

--- description: Суммирует незакоммиченные изменения и помечает риски. Использовать, когда просят показать, что изменилось, или сделать commit message. --- ## Текущие изменения diff --git a/src/auth.js b/src/auth.js index 3f9a1c2..b7e4d80 100644 --- a/src/auth.js +++ b/src/auth.js @@ -12,7 +12,9 @@ function login(user, password) { - const token = createToken(user); + const token = createToken(user, { expiresIn: '7d' }); + console.log('issued token for', user.email); return token; } ## Инструкции Суммируй изменения выше в 2-3 пунктах, затем перечисли риски...

Удобно. Но именно здесь — главная дыра безопасности скиллов. Это shell, и подставить туда можно что угодно, дотянувшись до всего, до чего дотягиваешься ты сам: украсть ключи и токены, перезаписать или удалить файлы, поставить бэкдор. А злоумышленники выкладывают такие скиллы в открытый доступ. Так что правило простое: скачал скилл из интернета — прежде чем запускать, прочитай, что у него в теле, особенно инъекции.

Группа 3. Служебные поля

compatibility (до 500 символов). Перечисляет зависимости, которые должны стоять на машине, — например, что нужен Python. Поле чисто информационное: Claude Code не блокирует запуск, если условия не выполнены, ответственность остаётся на нас с моделью.

metadata. Контейнер произвольных «ключ: значение» без жёсткого назначения — сюда складывают всё, чему не нашлось отдельного поля. Обязательным не является нигде, но по практике чаще всего пишут:

author

,

version

,

category

(

productivity

,

coding

,

marketing

…),

tags

,

mcp-server

(какие MCP-серверы нужны),

documentation

/

homepage

(ссылки),

support

(контакты).

license. Тип лицензии, как у кода. Открытый и бесплатный скилл —

MIT

или

Apache-2.0

; закрытый — подбираешь под свои условия.

SKILL.md: тело и прогрессивное раскрытие

Всё выше было про шапку. Теперь — тело скилла и то, как оно попадает в контекст. Это ключ к пониманию, почему скилл вообще экономит контекст: работает механизм прогрессивного раскрытия — в три уровня.

Уровень 1 — старт сессии

При запуске сессии Claude Code (программа, не модель) рекурсивно обходит все известные папки

.claude

, находит все

SKILL.md

, отрезает у них шапки и раскладывает по подсистемам. Склейка

name

+

description

+

when_to_use

уходит в служебный каталог

<available_skills>

, который подкладывается в запрос к модели — чтобы она со старта знала, какие навыки у неё есть и когда их звать.

Тел скиллов на этом этапе в контекст не грузится — только короткие описания. Поэтому на один скилл уходит совсем мало токенов. Но и этот каталог ограничен: по умолчанию он не может занимать больше 1% контекстного окна модели.

И вот тут — коварная деталь, на которой я обжигался лично. Когда описаний становится слишком много и они не влезают в 1%, лишние молча выкидываются, и скилл перестаёт вызываться. Никакой ошибки, никакого предупреждения — просто агент «не видит» навык и делает вид, что всё нормально.

Ловится это командой

/doctor

. В её выводе появляется что-то вроде «список навыков будет сокращён; N описаний превышают лимит; M описаний удалено (для часто используемых сохранятся)». Без неё понять, что скилл отвалился из-за лимита, почти невозможно.

Вывод /doctor с предупреждением, что список навыков сокращён и часть описаний удалена
Вывод /doctor с предупреждением, что список навыков сокращён и часть описаний удалена

Как чинить:

  1. Проредить скиллы — убрать то, чем не пользуешься.
  2. Так как обрезается конец, держать ключевые сценарии и триггеры в начале description.
  3. Редко нужные навыки перевести в режим name-only (модель видит только имя) или вовсе off.
  4. Запускать нужный скилл вручную через слэш-команду.
  5. Крайняя мера — поднять в настройках параметр skillListingBudgetFraction (долю контекста под каталог). Но это по-хорошему временное: 3% — уже много, ориентир — тот самый 1%.

И ещё: лимит считается от окна текущей модели. Сидел на Opus с миллионом токенов — всё влезало; переключился на Sonnet с 200 тысячами — часть каталога молча выпала. И, как мы выяснили, ты об этом даже не узнаешь, пока не запустишь

/doctor

.

Уровень 2 — активация скилла

Скилл активируется — сам (модель решила, что он релевантен) или вручную слэш-командой. В этот момент

SKILL.md

препроцессится:

  1. Плейсхолдеры заменяются на реальные значения: $ARGUMENTS — все переданные аргументы; $N (или $ARGUMENTS[N]) — конкретный аргумент по индексу; ${CLAUDE_SKILL_DIR} — путь к папке скилла (критично для вызова скриптов независимо от рабочей директории); ${CLAUDE_SESSION_ID}, ${CLAUDE_EFFORT}.
  2. Отрабатывает динамическая инъекция (те самые !`команды`).
  3. Готовое тело SKILL.md добавляется в контекст.

Больше на этом уровне не грузится ничего — только тело

SKILL.md

. Отсюда рекомендация: держать инструкцию в пределах 500 строк или 5000 токенов. Если какой-то кусок разрастается за ~100 строк — выносим его в папку

references

, отдельным файлом с внятным именем (одна документация — один файл), а в

SKILL.md

даём относительный путь:

references/api-docs.md

. Важно именно указать путь в тексте инструкции (можно отдельным разделом «Справочные материалы»): если просто положить файл и упомянуть, что он «где-то есть», модель с большой вероятностью нагаллюцинирует его содержимое.

Уровень 3 — ресурсы по требованию

Файлы из

references

в момент активации в контекст не попадают — только на этом, третьем уровне. Агент читает конкретный файл, лишь когда он понадобился: лежит десяток документов — подтянет ровно нужный, остальные не тронет.

Здесь же в дело идут

scripts

. Но с ними Клод работает иначе, чем с документацией: файлы скриптов он никогда не читает — он их запускает и берёт результат. Предпочтительные языки — три: Python и JS (если не хватит библиотеки, модель доустановит её сама) и Bash (там доп. библиотек и нет, поэтому проблем не возникает). Чтобы вызвать скрипт независимо от рабочей директории, используем

${CLAUDE_SKILL_DIR}

— Claude Code подставит абсолютный путь:

Запусти скрипт обработки следующей командой: python3 "${CLAUDE_SKILL_DIR}/scripts/process.py" --input data.json

Деталь для тех, кто на Windows: в путях всё равно пишем прямые слэши (

/

), а не обратные (

\

).

Третья папка этого уровня —

assets

: статические шаблоны, не текст и не скрипты. Договоры, коммерческие предложения, таблицы, схемы, картинки, шрифты. Обращаемся к ним из инструкции так же, как к

references

:

assets/template.md

.

Три уровня прогрессивного раскрытия: описания всех скиллов, затем тело SKILL.md, затем ресурсы по требованию
Три уровня прогрессивного раскрытия: описания всех скиллов, затем тело SKILL.md, затем ресурсы по требованию

Компакт: что переживает сжатие контекста

Компакт — это сжатие предыдущего диалога, когда у модели кончается контекстное окно. Со скиллами он обходится так:

  • Уровень 1 (короткие описания в каталоге) — не страдает, остаётся и до, и после компакта.
  • Уровень 2 (тело активированного скилла) — переезжает, но урезанным: остаются только первые 5000 токенов, остальное отрезается.
  • Если до компакта активных скиллов было несколько, на все вместе выделяется суммарно 25 000 токенов; что не влезло — обрубается. Предпочтение отдаётся самым свежим — тем, что использовались последними.

Практический вывод из этого один и тот же: чем тоньше тело скилла и чем больше тяжёлого вынесено в

references

и

scripts

, тем меньше проблем и на старте, и после компакта.

Итог

Если убрать ореол волшебства, скилл — это папка с инструкцией и грамотный режим её подачи в контекст. Три вещи, которые стоит унести из статьи:

  1. Скилл ценен не текстом, а тем, вызовется ли он. За вызов отвечают name, description и when_to_use — вкладывайтесь в них в первую очередь, ключевое ставьте в начало описания.
  2. Тело держите тонким. До 500 строк / 5000 токенов; всё тяжёлое — в references (читается по требованию) и scripts (запускается, а не читается).
  3. Всё это работает ради одного — гигиены контекста. Не отупевшая от мусора в памяти модель просто работает лучше. В этом весь смысл скиллов, а не в магии.
2