Автор: Валерий Курземнек, CMO Zerocoder. Команда использует самописные скиллы Claude Code в продакшене с весны 2026. Обновлено: июль 2026.

Skill (навык) в Claude Code — это папка с файлом SKILL.md: YAML-шапка с описанием плюс инструкции в Markdown. Claude подгружает скилл сам, когда ваш запрос совпадает с полем description, либо вы вызываете его вручную командой /имя-скилла. Минимум для рабочего скилла — одна папка в ~/.claude/skills/ и десять строк текста. Программировать не нужно. Часть скиллов уже встроена в Claude Code — например, автоматический код-ревью.

Главное в двух минутах:

  • Скилл = SKILL.md + опционально скрипты, шаблоны и справочники в той же папке.
  • Обязательных полей в шапке нет, рекомендовано одно — description: по нему Claude решает, когда применить скилл.
  • Личные скиллы лежат в ~/.claude/skills/, проектные — в .claude/skills/ репозитория.
  • В контекст постоянно попадает только описание; тело грузится при вызове, поэтому длинная инструкция почти ничего не стоит.
  • Слэш-команды и скиллы объединены в одну сущность: файл .claude/commands/deploy.md и скилл deploy дают одинаковую команду /deploy.

Что такое skill в Claude Code и когда он нужен

По официальной документации Anthropic, скилл стоит заводить в двух случаях: вы раз за разом вставляете в чат одну и ту же инструкцию или чек-лист, либо секция CLAUDE.md разрослась из фактов в процедуру. В отличие от CLAUDE.md, который загружается целиком в каждую сессию, тело скилла попадает в контекст только при вызове.

Skills в Claude Code следуют открытому стандарту Agent Skills — тот же формат понимают и другие ИИ-инструменты, так что папка скилла переносима. Скиллы к тому же можно паковать в плагины и раздавать команде или всей организации.

Рабочий критерий из практики: если задача формулируется одной фразой «сделай X», а под капотом всегда одна и та же процедура из нескольких шагов — нужен скилл. «Поправь опечатку» — не скилл. «Подготовь пост в канал: цепляющая первая строка, лимит знаков, проверка по чек-листу» — скилл.

Скилл — это упакованная процедура, а не заметка. Процедуры — в скиллы, факты о проекте — в CLAUDE.md.

Структура SKILL.md: из чего состоит скилл

Каждый скилл — директория, где SKILL.md обязателен, остальное опционально:

my-skill/ ├── SKILL.md # инструкции — единственный обязательный файл ├── reference.md # справочник, грузится только при необходимости ├── examples/ # образцы выходного формата └── scripts/ └── helper.py # скрипт: выполняется, в контекст не грузится

Сам SKILL.md состоит из YAML-шапки между маркерами --- и Markdown-тела. Это трёхуровневая прогрессивная загрузка: описание из шапки видно Claude всегда, тело загружается при вызове, вспомогательные файлы — только когда реально понадобились.

У листинга описаний есть бюджет, о котором молчат все гайды: связка description + when_to_use обрезается на 1536 символах, а суммарный листинг всех скиллов занимает около 1% контекстного окна (документация Claude Code, раздел Troubleshooting). Практический вывод: главный сценарий использования — в первую фразу description, иначе при десятках скиллов ключевые слова срежутся. Команда /doctor показывает, чьи описания уже урезаны.

Совет из той же доки: держите SKILL.md короче 500 строк, детали выносите в соседние файлы и ссылайтесь на них из тела.

Как создать свой первый skill: 4 шага

Шаги ниже соответствуют разделу Getting started официальной инструкции. Для примера соберём скилл, который пишет пост для Telegram-канала по фиксированным правилам.

Шаг 1. Создайте папку скилла. Личный скилл (виден во всех проектах):

mkdir -p ~/.claude/skills/tg-post

На Windows это C:\Users\<имя>\.claude\skills\tg-post. Для проектного скилла — .claude/skills/tg-post внутри репозитория.

Шаг 2. Запишите SKILL.md. Файл целиком, имя строго SKILL.md:

--- name: tg-post description: Пишет пост для Telegram-канала по шаблону редакции. Использовать, когда просят пост, анонс, текст в канал или «оформи это для Телеграма». argument-hint: [тема поста] --- Напиши пост для Telegram на тему: $ARGUMENTS Правила: 1. Первая строка — хук до 80 знаков, без кликбейта. 2. Объём 400–800 знаков, абзацы по 1–2 предложения. 3. В конце — один вывод и один вопрос читателю. 4. Запрещены канцелярит, восклицания и обороты вроде «в современном мире». Перед выдачей проверь текст по правилам 1–4 и молча исправь несоответствия.

$ARGUMENTS — плейсхолдер: при вызове /tg-post запуск нового курса он заменится на «запуск нового курса».

Шаг 3. Убедитесь, что скилл виден. Рестарт не нужен: Claude Code следит за папками скиллов и подхватывает изменения в текущей сессии (если сама папка skills/ существовала на старте). Спросите: «какие скиллы доступны?» — tg-post должен быть в списке.

Шаг 4. Протестируйте оба способа вызова. Автоматический: «напиши пост про наш вебинар» — Claude сопоставит запрос с description и подгрузит скилл. Ручной: /tg-post анонс вебинара.

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

Настройка скилла: поля frontmatter, которых нет в гайдах

База работает и с одним description. Управляемость дают остальные поля:

Поле Что делает
description По нему Claude решает, когда применить скилл. Ключевой сценарий — в первую фразу
disable-model-invocation: true Claude не запустит скилл сам — только вы через /имя. Обязательно для деплоя, коммитов, рассылок
user-invocable: false Обратная ситуация: скилл-справочник виден только Claude, из /-меню скрыт
allowed-tools Список инструментов, которые скилл использует без запроса разрешения, например Bash(git add *)
context: fork + agent Скилл выполняется в изолированном субагенте, не засоряя основной контекст
model, effort Переопределяют модель и уровень усилия на время работы скилла
paths Glob-паттерны: скилл активируется только при работе с подходящими файлами

Второй механизм без освещения в рунете — динамическая инъекция. Строка вида !`git diff HEAD` в теле скилла выполняется до того, как Claude увидит текст, и заменяется выводом команды. Скилл «суммаризуй мои изменения» получает живой diff прямо в промпт — Claude не гадает по открытым файлам.

Опыт нашей команды. В Зерокодере в скилл упакована транскрибация вебинаров: yt-dlp тянет аудио, ffmpeg режет на чанки, Whisper через Groq отдаёт текст и субтитры. Два урока из прода. Первый: скилл не срабатывал на «расшифруй вебинар», пока в description стояло сухое «транскрибация» — добавили формулировки, которыми реально пользуются люди, и автовызов стал стабильным. Второй: скрипт пришлось сделать резюмируемым — бесплатный тариф Groq пропускает около 7200 секунд аудио в час, полуторачасовой вебинар в лимит не помещается с первого прохода.

Skill, subagent, MCP или слэш-команда: что выбрать

Четыре механизма расширения Claude Code решают разные задачи:

Механизм Что это Когда брать
Skill Инструкции + файлы, грузятся по требованию в текущий контекст Повторяемая процедура, стиль, шаблон, чек-лист
Subagent Отдельный контекст со своим системным промптом; возвращает только результат Многошаговая изолированная задача: ресёрч, ревью, чтобы не жечь основной контекст
MCP-сервер Внешний процесс с инструментами: API, база данных, браузер Доступ к внешним системам, которых у Claude нет из коробки
Слэш-команда Объединена со скиллами: .claude/commands/x.md = скилл /x Легаси-формат; новое пишите как скиллы — у них есть папка и frontmatter

Механизмы комбинируются: context: fork в шапке запускает скилл внутри субагента. Скилл отвечает на вопрос «что делать», субагент — «где и чьими руками», MCP — «какими внешними инструментами».

Если осваиваете Claude Code с нуля, связка «скиллы + субагенты» — самый быстрый путь собрать личную ИИ-команду без единой строки кода; на курсе Зерокодера по вайб-кодингу этому посвящён отдельный модуль.

Skill-creator: скилл, который делает скиллы

Для генерации и проверки скиллов у Anthropic есть плагин skill-creator из официального маркетплейса:

/plugin install skill-creator@claude-plugins-official

Он собирает структуру папки по вашему описанию, а главное — гоняет оценку: хранит тест-промпты в evals/evals.json, запускает каждый в чистом субагенте с включённым и выключенным скиллом, сравнивает pass-rate, время и токены, и предлагает правки description, если скилл срабатывает не на тех запросах. Смысл проверки — сравнение с базовой линией: скилл, который триггерится, но не меняет результат, — это только расход токенов.

Готовые примеры скиллов Anthropic выложила в открытый репозиторий anthropics/skills — удобная стартовая точка вместо пустого файла.

Типичные ошибки при создании скиллов

  • Скилл не срабатывает. В 9 случаях из 10 — description без слов, которыми формулирует задачу человек. Перепишите описание под реальные фразы, проверьте /doctor: не урезан ли листинг.
  • Срабатывает, когда не просили. Сузьте description или поставьте disable-model-invocation: true и вызывайте вручную.
  • SKILL.md на 800 строк. После вызова тело висит в контексте всю сессию и стоит токенов каждый ход. Больше 500 строк — выносите в reference.md.
  • Сломанный YAML в шапке. Скилл продолжит работать через /имя, но останется без description — автовызов молча умирает. Диагностика: запуск с флагом --debug.
  • Ожидание, что скилл «помнит». Содержимое попадает в контекст один раз при вызове и не перечитывается; правила формулируйте как постоянные инструкции, а не разовые шаги.

Чек-лист перед сдачей скилла: папка в правильном месте → файл называется SKILL.md → description с реальными формулировками задач → тело короче 500 строк → протестированы автовызов и /имя → для опасных действий стоит disable-model-invocation: true.

Частые вопросы

Нужно ли уметь программировать, чтобы создать skill?
Нет. Минимальный скилл — текстовый файл SKILL.md с YAML-шапкой и инструкциями на русском. Скрипты — опциональный уровень для продвинутых сценариев.

Чем skill отличается от CLAUDE.md?
CLAUDE.md грузится целиком в каждую сессию и подходит для фактов о проекте. Скилл загружается только при вызове и подходит для процедур: длинная инструкция в скилле не тратит контекст, пока не нужна.

Работают ли скиллы в Claude.ai и API?
Да, Agent Skills — общий механизм: тот же формат SKILL.md поддерживается в Claude.ai, Claude Code и Claude API, папка скилла переносится между ними.

Как заставить Claude всегда спрашивать перед запуском скилла?
Поставьте в шапку disable-model-invocation: true — тогда скилл запускается только вручную командой /имя-скилла.