CoreCodeБлог

Руководства

Skills в Claude Code: как пользоваться и как писать SKILL.md

Опубликовано · Проверено

Skill — это файл SKILL.md с инструкциями: Claude использует его, когда он уместен, либо вы вызываете его напрямую командой /skill-name. Эта страница разбирает документацию Anthropic Extend Claude with skills: создание первого skill, где живут skills, как писать frontmatter, как управлять тем, кто вызывает skill, и что проверить, если он не срабатывает. Документация проверена 30 октября 2026 г.

Главное
  • Создайте файл SKILL.md, и Claude добавит его в свой набор инструментов. Claude использует его, когда он уместен, либо вы вызываете его напрямую командой /skill-name.
  • Личный skill помещается в ~/.claude/skills/<skill-name>/SKILL.md, а skill проекта — в .claude/skills/<skill-name>/SKILL.md. При совпадении имён уровень enterprise важнее личного, а личный важнее проектного.
  • Все поля необязательны. Рекомендуется только description, потому что Claude по нему решает, когда применять skill.
  • Чтобы Claude не использовал skill сам, задайте в его frontmatter disable-model-invocation: true.
  • Пользовательские команды объединены со skills: .claude/commands/deploy.md и .claude/skills/deploy/SKILL.md оба создают /deploy и работают одинаково.

Когда писать skill

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

В документации также сказано, что пользовательские команды объединены со skills. Файл .claude/commands/deploy.md и skill .claude/skills/deploy/SKILL.md оба создают /deploy и работают одинаково, а существующие файлы .claude/commands/ продолжают работать. Skills добавляют каталог для вспомогательных файлов, frontmatter для управления тем, кто их вызывает — вы или Claude, и возможность для Claude загружать их автоматически, когда они уместны.

Создайте свой первый skill

Этот пример взят из документации: skill, который кратко описывает незакоммиченные изменения в репозитории git и отмечает всё рискованное. Сначала создайте для него каталог в папке личных skills. Личные skills доступны во всех ваших проектах:

mkdir -p ~/.claude/skills/summarize-changes

Во-вторых, напишите SKILL.md. Этот файл нужен каждому skill, и состоит он из двух частей: YAML frontmatter между маркерами ---, который сообщает Claude, когда использовать skill, и содержимое в markdown с инструкциями, которым Claude следует при запуске skill.

---
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---

## Current changes

!`git diff HEAD`

## Instructions

Summarize the changes above in two or three bullet points, then list any risks you notice such as missing error handling, hardcoded values, or tests that need updating. If the diff is empty, say there are no uncommitted changes.

Имя каталога, или name из frontmatter, если вы его задали, становится командой, которую вы вводите, а description помогает Claude решить, когда загружать skill автоматически. Строка !`git diff HEAD` использует динамическую подстановку контекста: Claude Code выполняет команду и заменяет строку её выводом до того, как Claude увидит содержимое skill, так что инструкции приходят уже с подставленным текущим diff.

В-третьих, проверьте. Откройте проект git, внесите небольшую правку в любой файл и запустите Claude Code командой claude. Подойдёт любой способ:

What did I change?     # matches the description, so Claude can invoke it automatically
/summarize-changes     # or invoke it directly with the skill name

В любом случае Claude должен ответить кратким описанием вашей правки и списком рисков.

Где живут skills

Место, где вы сохраняете skill, определяет, какие сессии его загружают. Сохраните его в домашнем каталоге, чтобы он был в каждом проекте, закоммитьте в репозиторий, чтобы поделиться со всеми, кто там работает, либо распространите через плагин или managed settings, чтобы охватить всю команду.

РасположениеПутьГде загружается
Enterprise.claude/skills/<skill-name>/SKILL.md в каталоге managed settingsУ всех пользователей на машинах, куда его развёртывает ваша организация
Личный~/.claude/skills/<skill-name>/SKILL.mdВо всех ваших проектах на этой машине, но не в Cowork и не в облачных сессиях
Проект.claude/skills/<skill-name>/SKILL.mdВ сессиях в этом репозитории. Закоммитьте его, чтобы он был и у вашей команды
Вложенный<subdir>/.claude/skills/<skill-name>/SKILL.mdВ сессиях, запущенных в <subdir> или ниже; сессия, запущенная выше, загружает skill, когда Claude начинает работать с файлами там
Дополнительный каталог.claude/skills/<skill-name>/SKILL.md в каталоге, переданном через --add-dirВ этой сессии
Плагин<plugin>/skills/<skill-name>/SKILL.mdВезде, где включён плагин, как /plugin-name:skill-name

Когда у двух skills одно имя (выдержка из таблицы документации):

Ещё одно правило: skills из каталога .claude/skills/ ниже места, где вы запустились, при старте не загружаются. Они загружаются, когда Claude впервые читает или правит файл в этом подкаталоге. До этого они не отображаются в меню /, и вызвать их по имени нельзя.

После изменения skill перезапускать ничего не нужно. Claude Code следит за каталогами skills, поэтому добавление, правка или удаление skill в ~/.claude/skills/ или в .claude/skills/ проекта вступает в силу в текущей сессии. Если вы создаёте каталог skills верхнего уровня, которого не было при старте сессии, выполните /reload-skills.

Самые важные поля frontmatter

Все поля необязательны. Рекомендуется только description. Имя поля должно в точности совпадать с таблицей, включая дефисы: Claude Code игнорирует нераспознанное поле, не сообщая об ошибке. Логические поля принимают yes, no, on, off, 1 и 0 в любом регистре, помимо true и false.

ПолеОбязательноЧто делает
nameНетИмя команды, показываемое в меню /. По умолчанию — имя каталога.
descriptionРекомендуетсяЧто делает skill и когда его использовать. Claude по нему решает, когда применять skill. Если опущено, берётся первая непустая строка содержимого markdown.
when_to_useНетДополнительный контекст о том, когда Claude должен вызывать skill, например триггерные фразы или примеры запросов. Добавляется к description и учитывается в лимите 1 536 символов.
argument-hintНетПодсказка при автодополнении, указывающая ожидаемые аргументы, например [issue-number] или [filename] [format].
argumentsНетИменованные позиционные аргументы для подстановки $name в содержимом skill. Принимает строку через пробел или список YAML.
disable-model-invocationНетЗадайте true, чтобы Claude не загружал этот skill автоматически. Используйте для процессов, которые вы хотите запускать вручную через /name. По умолчанию: false.
user-invocableНетЗадайте false, когда skill должен вызывать только Claude: Claude Code скрывает его из меню / и не запускает, когда вы вводите /name. По умолчанию: true.
allowed-toolsНетИнструменты, которые Claude может использовать без запроса разрешения в ходе, вызывающем этот skill. Разрешение сбрасывается, когда вы отправляете следующее сообщение.
pathsНетШаблоны glob, ограничивающие, когда этот skill активируется. Если заданы, Claude загружает skill автоматически только при работе с файлами, подходящими под шаблоны.
contextНетЗадайте fork, чтобы выполнять в контексте forked subagent.

В документации перечислены и другие поля, включая model, effort, agent, background, hooks, shell, metadata, license и compatibility; здесь они не рассматриваются. Одна оговорка: Claude Code читает frontmatter, только когда открывающий --- — первая строка файла. Иначе он считает содержимым skill весь файл, включая маркеры ---.

Вызвать skill самому или позволить Claude выбрать

По умолчанию любой skill могут вызывать и вы, и Claude. Вы вводите /skill-name, чтобы вызвать его напрямую, а Claude может загрузить его автоматически, когда он уместен в вашем разговоре. Два поля frontmatter это ограничивают:

FrontmatterМожете вызвать выМожет вызвать ClaudeКогда загружается в контекст
(по умолчанию)ДаДаОписание всегда в контексте, полный skill загружается при вызове
disable-model-invocation: trueДаНе самОписания в контексте нет, полный skill загружается при вызове
user-invocable: falseНетДаОписание всегда в контексте, полный skill загружается при вызове

Пример deploy из документации:

---
name: deploy
description: Deploy the application to production
disable-model-invocation: true
---

Deploy $ARGUMENTS to production:

1. Run the test suite
2. Build the application
3. Push to the deployment target
4. Verify the deployment succeeded

Если Claude всё равно попытается, Claude Code блокирует вызов и указывает не воспроизводить шаги деплоя другим способом, так что ждите, что Claude предложит вам самим выполнить /deploy.

Чтобы запустить skill напрямую, поставьте его имя в начале сообщения: /deploy staging запускает skill напрямую. После простого текста, как в go ahead and /deploy to staging, напрямую ничего не запускается. Имя считается вашим разрешением для этого сообщения: Claude может запустить skill, пока отвечает, и по формулировке судит, просили ли вы об этом. Чтобы написать о skill, не разрешая запуск, опустите косую черту.

Аргументы и вспомогательные файлы

Аргументы при вызове skill могут передавать и вы, и Claude. Аргументы доступны через заполнитель $ARGUMENTS, который заменяется всем, что следует за именем skill:

---
name: fix-issue
description: Fix a GitHub issue
disable-model-invocation: true
---

Fix GitHub issue $ARGUMENTS following our coding standards.

1. Read the issue description
2. Understand the requirements
3. Implement the fix
4. Write tests
5. Create a commit

Когда вы выполняете /fix-issue 123, Claude получает «Fix GitHub issue 123 following our coding standards...». Чтобы обращаться к отдельным аргументам по позиции, используйте $ARGUMENTS[N] или более короткое $N. Если вы вызываете skill с аргументами, но ни один заполнитель в содержимом skill их не получает, Claude Code добавляет ARGUMENTS: <your input> в конец содержимого skill, чтобы Claude всё равно видел то, что вы набрали.

В каталоге skill может быть несколько файлов. Так SKILL.md остаётся сосредоточенным на главном, а Claude читает подробный справочный материал только при необходимости:

my-skill/
├── SKILL.md (required - overview and navigation)
├── reference.md (detailed API docs - loaded when needed)
├── examples.md (usage examples - loaded when needed)
└── scripts/
    └── helper.py (utility script - executed, not loaded)

Ссылайтесь на вспомогательные файлы из SKILL.md, чтобы Claude знал, что в каждом файле и когда его загружать:

## Additional resources

- For complete API details, see [reference.md](reference.md)
- For usage examples, see [examples.md](examples.md)

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

Как написать хорошее описание

Устранение неполадок

Skill не срабатывает

Если YAML frontmatter написан с ошибками, Claude Code загружает тело skill с пустыми метаданными, поэтому /skill-name всё ещё работает, но Claude не может сопоставлять запросы с вашим description. Запустите с --debug, чтобы увидеть ошибку разбора. Чтобы найти файлы SKILL.md, frontmatter которых не разбирается, выполните claude plugin validate для каталога skills, например claude plugin validate .claude/skills или claude plugin validate ~/.claude/skills. Нужен Claude Code v2.1.233 или новее.

Skill срабатывает слишком часто

Сделайте описание конкретнее. Добавьте disable-model-invocation: true, если нужен только ручной вызов.

Claude перестаёт следовать skill

Когда skill вызван, Claude Code добавляет его содержимое в разговор и не перечитывает файл в следующих ходах, поэтому указание, относящееся ко всей задаче, формулируйте как «Run the tests after every edit», а не «Run the tests». После сжатия Claude Code может сохранить только начало вызванного skill, поэтому самые важные инструкции помещайте ближе к началу SKILL.md и вызовите skill снова, чтобы восстановить его полное содержимое. Для правила, которое должно соблюдаться каждый раз, документация рекомендует вместо этого hook.

Описания обрезаются

При большом числе skills Claude Code отбрасывает часть описаний, чтобы уложиться в бюджет символов списка, а это убирает ключевые слова, нужные Claude для сопоставления с вашим запросом. Бюджет масштабируется как 1% контекстного окна модели, а описания отбрасываются начиная с тех skills, которые вы вызываете реже всего. Выполните /doctor, чтобы получить оценку стоимости списка в контексте и его самых крупных составляющих.

FAQ

Работают ли мои старые файлы .claude/commands/?

Да. В документации сказано, что пользовательские команды объединены со skills, а существующие файлы .claude/commands/ продолжают работать. Они поддерживают тот же frontmatter, кроме name и paths. Для новой работы предпочтите skill, поскольку skills поддерживают и вспомогательные файлы. Когда у skill и файла .claude/commands/ одно имя, побеждает skill.

Как сделать, чтобы Claude не использовал skill автоматически?

Добавьте disable-model-invocation: true в его frontmatter. Тогда Claude больше не сможет вызывать его сам, а запускается он, когда вы вводите /name. Если вы не хотите править файл, в документации сказано, что можно задать для skill значение "user-invocable-only" в skillOverrides.

Что относится к CLAUDE.md, а что к skill?

По документации, раздел CLAUDE.md, ставший процедурой, — кандидат в skill, потому что, в отличие от содержимого CLAUDE.md, тело skill загружается только при использовании. О написании CLAUDE.md см. как написать CLAUDE.md; об установке и подключении Claude Code — настройку Claude Code.

Источники