333 333
334Чтобы сохранить личный или проектный скилл, но запретить Claude вызывать его самостоятельно, установите [`disable-model-invocation: true`](#control-who-invokes-a-skill) в его frontmatter или `"user-invocable-only"` в [`skillOverrides`](#override-skill-visibility-from-settings), если не хотите редактировать файл.334Чтобы сохранить личный или проектный скилл, но запретить Claude вызывать его самостоятельно, установите [`disable-model-invocation: true`](#control-who-invokes-a-skill) в его frontmatter или `"user-invocable-only"` в [`skillOverrides`](#override-skill-visibility-from-settings), если не хотите редактировать файл.
335 335
336## Настройка skills336## Настройка скиллов
337 337
338Skills настраиваются через YAML frontmatter в начале `SKILL.md` и содержимое markdown, которое следует за ним.338Скиллы настраиваются с помощью YAML frontmatter в начале `SKILL.md` и следующего за ним markdown-содержимого.
339 339
340### Типы содержимого skill340### Типы содержимого скилла
341 341
342Файлы skill могут содержать любые инструкции, но размышление о том, как вы хотите их вызывать, помогает определить, что включить:342Файлы скиллов могут содержать любые инструкции, но если вы заранее продумаете, как собираетесь их вызывать, вам будет проще решить, что в них включить:
343 343
344**Справочное содержимое** добавляет знания, которые Claude применяет к вашей текущей работе. Соглашения, паттерны, руководства по стилю, знания предметной области. Это содержимое выполняется встроенным образом, поэтому Claude может использовать его вместе с контекстом вашего разговора.344**Справочное содержимое** добавляет знания, которые Claude применяет к вашей текущей работе: соглашения, паттерны, руководства по стилю, знания предметной области. Это содержимое встраивается напрямую, поэтому Claude может использовать его вместе с контекстом вашего диалога.
345 345
346```yaml theme={null}346```yaml theme={null}
347---347---
355- Include request validation355- Include request validation
356```356```
357 357
358**Содержимое Task** дает Claude пошаговые инструкции для конкретного действия, такого как развертывания, коммиты или генерация кода. Это часто действия, которые вы хотите вызвать напрямую с помощью `/skill-name`, а не позволять Claude решать, когда их запускать. Добавьте `disable-model-invocation: true`, чтобы предотвратить автоматическое срабатывание Claude. Пример ниже добавляет `context: fork`, который запускает skill в собственном контексте подагента; см. [Запуск skills в подагенте](#run-skills-in-a-subagent).358**Содержимое задачи** даёт Claude пошаговые инструкции для конкретного действия, например развёртывания, коммитов или генерации кода. Часто это действия, которые вы хотите вызывать напрямую через `/skill-name`, а не позволять Claude решать, когда их запускать. Добавьте `disable-model-invocation: true`, чтобы Claude не мог запускать скилл автоматически. В примере ниже добавлено `context: fork`, благодаря чему скилл выполняется в собственном контексте субагента; см. [Запуск скиллов в субагенте](#run-skills-in-a-subagent).
359 359
360```yaml theme={null}360```yaml theme={null}
361---361---
3713. Push to the deployment target3713. Push to the deployment target
372```372```
373 373
374Держите само тело кратким. После загрузки skill его содержимое [остается в контексте между ходами](#skill-content-lifecycle), поэтому каждая строка — это повторяющаяся стоимость в токенах. Указывайте, что делать, а не рассказывайте, как или почему, и применяйте тот же тест краткости, который вы бы применили к [содержимому CLAUDE.md](https://code.claude.com/docs/ru/best-practices.md#keep-claude-md-short).374Делайте само тело скилла лаконичным. После загрузки скилла его содержимое [остаётся в контексте на протяжении последующих ходов](#skill-content-lifecycle), поэтому каждая строка — это постоянный расход токенов. Указывайте, что делать, а не рассказывайте, как или почему, и применяйте ту же проверку на лаконичность, что и для [содержимого CLAUDE.md](https://code.claude.com/docs/ru/best-practices.md#keep-claude-md-short).
375 375
376### Справочник Frontmatter376### Справочник по frontmatter
377 377
378Настройте skill с помощью YAML [frontmatter](https://code.claude.com/docs/ru/glossary.md#frontmatter) между маркерами `---` в начале `SKILL.md`, и напишите инструкции skill как Markdown после закрывающего `---`. Имена полей используют строчные слова, разделенные дефисами, за исключением `when_to_use`. [Файл команды](#where-skills-live) в `.claude/commands/` принимает те же поля, кроме `name` и `paths`. Этот пример устанавливает четыре поля:378Настройте скилл с помощью YAML [frontmatter](https://code.claude.com/docs/ru/glossary.md#frontmatter) между маркерами `---` в начале `SKILL.md`, а инструкции скилла напишите в формате Markdown после закрывающего `---`. Имена полей состоят из слов в нижнем регистре, разделённых дефисами, за исключением `when_to_use`. [Файл команды](#where-skills-live) в `.claude/commands/` принимает те же поля, кроме `name` и `paths`. В этом примере задано четыре поля:
379 379
380```yaml theme={null}380```yaml theme={null}
381---381---
388Your skill instructions here...388Your skill instructions here...
389```389```
390 390
391Все поля являются необязательными. Рекомендуется только `description`, чтобы Claude знал, когда использовать skill. Имя поля должно точно совпадать с таблицей, включая дефисы: Claude Code игнорирует поле, которое не распознает, без сообщения об ошибке. Логические поля принимают `yes`, `no`, `on`, `off`, `1` и `0` в любом регистре, в дополнение к `true` и `false`.391Все поля необязательны. Рекомендуется задавать только `description`, чтобы Claude знал, когда использовать скилл. Имя поля должно точно совпадать с таблицей, включая дефисы: Claude Code игнорирует нераспознанное поле, не сообщая об ошибке. Логические поля, помимо `true` и `false`, принимают `yes`, `no`, `on`, `off`, `1` и `0` в любом регистре.
392 392
393Claude Code читает frontmatter только когда открывающий `---` является первой строкой файла. В противном случае он обрабатывает весь файл, включая маркеры `---`, как содержимое skill. Если YAML между маркерами не анализируется, skill все равно загружается без установленных полей; см. [Skill не срабатывает](#skill-not-triggering), чтобы найти и исправить ошибку.393Claude Code читает frontmatter, только если открывающий `---` находится в первой строке файла. В противном случае весь файл, включая маркеры `---`, рассматривается как содержимое скилла. Если YAML между маркерами не удаётся разобрать, скилл всё равно загружается, но без заданных полей; чтобы найти и исправить ошибку, см. [Скилл не срабатывает](#skill-not-triggering).
394 394
395| Поле | Обязательно | Описание |395| Поле | Обязательное | Описание |
396| :- | :- | :- |396| :- | :- | :- |
397| `name` | Нет | Имя команды, показываемое в меню `/`. По умолчанию используется имя каталога. См. [Как skill получает имя команды](#how-a-skill-gets-its-command-name), чтобы узнать, как это поле взаимодействует с именем, которое вы вводите для вызова skill. |397| `name` | Нет | Имя команды, отображаемое в меню `/`. По умолчанию — имя каталога. О том, как это поле соотносится с именем, которое вы вводите для вызова скилла, см. [Как скилл получает имя команды](#how-a-skill-gets-its-command-name). |
398| `description` | Рекомендуется | Что делает skill и когда его использовать. Claude использует это, чтобы решить, когда применить skill. Если опущено, использует первую непустую строку содержимого markdown. Поместите основной вариант использования в первую очередь: объединенный текст `description` и `when_to_use` усекается на 1536 символов в списке skills для снижения использования контекста. Угловые скобки в тексте [отображаются как `<` и `>`](#angle-brackets-in-a-skill-description). |398| `description` | Рекомендуется | Что делает скилл и когда его использовать. Claude использует это, чтобы решить, когда применять скилл. Если поле не задано, используется первая непустая строка markdown-содержимого. Ставьте основной сценарий использования первым: объединённый текст `description` и `when_to_use` обрезается до 1 536 символов в списке скиллов, чтобы сократить использование контекста. Угловые скобки в тексте [отображаются как `<` и `>`](#angle-brackets-in-a-skill-description). |
399| `when_to_use` | Нет | Дополнительный контекст для того, когда Claude должен вызвать skill, такой как фразы-триггеры или примеры запросов. Добавляется к `description` в списке skills и учитывается в ограничении 1536 символов. |399| `when_to_use` | Нет | Дополнительный контекст о том, когда Claude следует вызывать скилл, например фразы-триггеры или примеры запросов. Добавляется к `description` в списке скиллов и учитывается в ограничении в 1 536 символов. |
400| `argument-hint` | Нет | Подсказка, показываемая при автодополнении, чтобы указать ожидаемые аргументы. Пример: `[issue-number]` или `[filename] [format]`. |400| `argument-hint` | Нет | Подсказка, отображаемая при автодополнении и указывающая на ожидаемые аргументы. Пример: `[issue-number]` или `[filename] [format]`. |
401| `arguments` | Нет | Именованные позиционные аргументы для [`$name` подстановки](#available-string-substitutions) в содержимом skill. Принимает строку, разделенную пробелами, или список YAML. Имена соответствуют позициям аргументов по порядку. |401| `arguments` | Нет | Именованные позиционные аргументы для [подстановки `$name`](#available-string-substitutions) в содержимом скилла. Принимает строку, разделённую пробелами, или YAML-список. Имена сопоставляются с позициями аргументов по порядку. |
402| `disable-model-invocation` | Нет | Установите значение `true`, чтобы Claude не загружал этот skill автоматически. Используйте для рабочих процессов, которые вы хотите запускать вручную с помощью `/name`. Также предотвращает [предварительную загрузку skill в субагентов](https://code.claude.com/docs/ru/sub-agents.md#preload-skills-into-subagents) и запуск skill при срабатывании [запланированной задачи в рамках сессии](https://code.claude.com/docs/ru/scheduled-tasks.md), у которой этот skill указан в качестве промпта. По умолчанию: `false`. |402| `disable-model-invocation` | Нет | Установите `true`, чтобы Claude не мог автоматически загружать этот скилл. Используйте для рабочих процессов, которые вы хотите запускать вручную через `/name`. Также предотвращает [предварительную загрузку скилла в субагенты](https://code.claude.com/docs/ru/sub-agents.md#preload-skills-into-subagents) и его запуск, когда срабатывает [запланированная задача в рамках сессии](https://code.claude.com/docs/ru/scheduled-tasks.md) со скиллом в качестве промпта. По умолчанию: `false`. |
403| `user-invocable` | Нет | Установите значение `false`, когда только Claude должен вызвать skill: Claude Code скрывает его из меню `/` и не запускает его при вводе `/name`. Используйте для фоновых знаний, которые пользователи не должны вызывать напрямую. По умолчанию: `true`. |403| `user-invocable` | Нет | Установите `false`, если вызывать скилл должен только Claude: Claude Code скрывает его из меню `/` и не запускает, когда вы вводите `/name`. Используйте для фоновых знаний, которые пользователям не следует вызывать напрямую. По умолчанию: `true`. |
404| `allowed-tools` | Нет | Tools, которые Claude может использовать без запроса разрешения во время хода, который вызывает этот skill. Разрешение очищается при отправке следующего сообщения. Принимает строку, разделенную пробелами или запятыми, или список YAML. См. [Предварительное одобрение tools для skill](#pre-approve-tools-for-a-skill). |404| `allowed-tools` | Нет | Инструменты, которые Claude может использовать без запроса разрешения в течение хода, в котором вызван этот скилл. Разрешение сбрасывается, когда вы отправляете следующее сообщение. Принимает строку, разделённую пробелами или запятыми, либо YAML-список. См. [Предварительное разрешение инструментов для скилла](#pre-approve-tools-for-a-skill). |
405| `disallowed-tools` | Нет | Tools, удаленные из доступного пула Claude во время активности этого skill. Используйте для автономных skills, которые никогда не должны вызывать определенные tools, такие как `AskUserQuestion` для фонового цикла. Принимает строку, разделенную пробелами или запятыми, или список YAML. Ограничение очищается при отправке следующего сообщения. Как и правила отказа, это поле не может удалить [`EndConversation`](https://code.claude.com/docs/ru/tools-reference#endconversation-tool-behavior) пока остаются другие tools. |405| `disallowed-tools` | Нет | Инструменты, удаляемые из доступного Claude набора, пока этот скилл активен. Используйте для автономных скиллов, которые никогда не должны вызывать определённые инструменты, например `AskUserQuestion` для фонового цикла. Принимает строку, разделённую пробелами или запятыми, либо YAML-список. Ограничение снимается, когда вы отправляете следующее сообщение. Как и правила запрета, это поле не может удалить [`EndConversation`](https://code.claude.com/docs/ru/tools-reference#endconversation-tool-behavior), пока остаётся хотя бы один другой инструмент. |
406| `model` | Нет | Модель для использования, когда этот skill активен. Переопределение применяется для остальной части текущего хода и не сохраняется в параметрах. Модель сеанса возобновляется при отправке следующей подсказки. Принимает те же значения, что и [`/model`](https://code.claude.com/docs/ru/model-config), или `inherit`, чтобы сохранить активную модель. Значение, исключенное списком разрешений [`availableModels`](https://code.claude.com/docs/ru/model-config#restrict-model-selection) вашей организации, не используется, и сеанс сохраняет свою текущую модель. В [режиме auto](https://code.claude.com/docs/ru/permission-modes.md#eliminate-prompts-with-auto-mode) и в [режиме plan, пока классификатор проверяет команды](https://code.claude.com/docs/ru/permission-modes.md#analyze-before-you-edit-with-plan-mode), модель, которую режим auto не поддерживает, также не используется, и сеанс сохраняет свою текущую модель. С `context: fork` значение устанавливает [модель подагента fork](#run-skills-in-a-subagent), и исключенное значение следует [тем же правилам, что и переопределение модели подагента](https://code.claude.com/docs/ru/model-config.md#restrict-model-selection). |406| `model` | Нет | Модель, используемая, пока этот скилл активен. Переопределение действует до конца текущего хода и не сохраняется в настройках. Модель сессии возвращается, когда вы отправляете следующий промпт. Принимает те же значения, что и [`/model`](https://code.claude.com/docs/ru/model-config), или `inherit`, чтобы сохранить активную модель. Значение, исключённое [`availableModels`](https://code.claude.com/docs/ru/model-config#restrict-model-selection) — списком разрешённых моделей вашей организации, — не используется, и сессия сохраняет текущую модель. В [авторежиме](https://code.claude.com/docs/ru/permission-modes.md#eliminate-prompts-with-auto-mode), а также в [режиме планирования, когда классификатор проверяет команды](https://code.claude.com/docs/ru/permission-modes.md#analyze-before-you-edit-with-plan-mode), модель, которую авторежим не поддерживает, тоже не используется, и сессия сохраняет текущую модель. При `context: fork` значение вместо этого задаёт [модель ответвлённого субагента](#run-skills-in-a-subagent), а исключённое значение обрабатывается [по тем же правилам, что и переопределение модели субагента](https://code.claude.com/docs/ru/model-config.md#restrict-model-selection). |
407| `effort` | Нет | [Уровень effort](https://code.claude.com/docs/ru/model-config.md#adjust-effort-level) при активности этого skill. Переопределяет уровень effort сессии. Если поле опущено, уровень определяется [порядком разрешения уровня effort](https://code.claude.com/docs/ru/model-config.md#adjust-effort-level). Опции: `low`, `medium`, `high`, `xhigh`, `max`; доступные уровни зависят от модели. |407| `effort` | Нет | [Уровень effort](https://code.claude.com/docs/ru/model-config.md#adjust-effort-level) до конца текущего хода. Переопределяет уровень effort сессии, но не переменную окружения [`CLAUDE_CODE_EFFORT_LEVEL`](https://code.claude.com/docs/ru/env-vars#variables). При `context: fork` значение вместо этого задаёт уровень effort ответвлённого субагента. Если поле не задано, уровень определяется [порядком определения effort](https://code.claude.com/docs/ru/model-config.md#adjust-effort-level). Варианты: `low`, `medium`, `high`, `xhigh`, `max`; доступные уровни зависят от модели. |
408| `context` | Нет | Установите значение `fork`, чтобы запустить в контексте подагента fork. См. [Запуск skills в подагенте](#run-skills-in-a-subagent). |408| `context` | Нет | Установите `fork`, чтобы выполнять скилл в контексте ответвлённого субагента. См. [Запуск скиллов в субагенте](#run-skills-in-a-subagent). |
409| `agent` | Нет | Какой тип подагента использовать, когда установлен `context: fork`. |409| `agent` | Нет | Какой тип субагента использовать, когда задано `context: fork`. |
410| `background` | Нет | Применяется только с `context: fork`. Установите значение `false`, чтобы ждать результата субагента fork в ходе, который вызвал skill, вместо [запуска его в фоне](#run-skills-in-a-subagent). По умолчанию: `true`. |410| `background` | Нет | Применяется только при `context: fork`. Установите `false`, чтобы ожидать результат ответвлённого субагента в том ходе, в котором был вызван скилл, вместо [его выполнения в фоне](#run-skills-in-a-subagent). По умолчанию: `true`. |
411| `hooks` | Нет | Хуки, которые Claude Code регистрирует при вызове skill и продолжает запускать для остальной части сессии. См. [Хуки в skills и агентах](https://code.claude.com/docs/ru/hooks.md#hooks-in-skills-and-agents) для формата конфигурации, опции `once` и [ограничений хуков skills](https://code.claude.com/docs/ru/hooks.md#limits-on-skill-hooks). |411| `hooks` | Нет | Хуки, которые Claude Code регистрирует при вызове скилла и которые продолжают работать до конца сессии. Формат конфигурации, опция `once` и [ограничения хуков скиллов](https://code.claude.com/docs/ru/hooks.md#limits-on-skill-hooks) описаны в разделе [Хуки в скиллах и агентах](https://code.claude.com/docs/ru/hooks.md#hooks-in-skills-and-agents). |
412| `paths` | Нет | Glob-паттерны, которые ограничивают, когда этот skill активируется. Принимает строку, разделенную запятыми, или список YAML. Когда установлено, Claude загружает skill автоматически только при работе с файлами, соответствующими паттернам. Паттерны задаются относительно текущего рабочего каталога Claude, и файлы вне этого каталога им не соответствуют. Использует тот же формат glob, что и [правила для конкретных путей](https://code.claude.com/docs/ru/memory.md#path-specific-rules). |412| `paths` | Нет | Glob-паттерны, ограничивающие, когда активируется этот скилл. Принимает строку, разделённую запятыми, или YAML-список. Если поле задано, Claude автоматически загружает скилл только при работе с файлами, соответствующими паттернам. Паттерны указываются относительно текущего рабочего каталога Claude, и файлы за пределами этого каталога не совпадают. Используется тот же формат glob, что и для [правил для конкретных путей](https://code.claude.com/docs/ru/memory.md#path-specific-rules). |
413| `shell` | Нет | Shell для использования в `` !`command` `` и ` ```! ` блоках в этом skill. Принимает `bash` (по умолчанию) или `powershell`. Установка `powershell` запускает встроенные shell-команды через PowerShell, когда [инструмент PowerShell](https://code.claude.com/docs/ru/tools-reference.md#powershell-tool) включен: он включен по умолчанию на Windows без Git Bash, включен по умолчанию с Git Bash для claude.ai и учетных записей Console, и требует `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` в сеансах Amazon Bedrock, Google Cloud's Agent Platform и Microsoft Foundry, а также на macOS, Linux и WSL. Установите значение `0`, чтобы отключить инструмент. |413| `shell` | Нет | Оболочка для блоков `` !`command` `` и ` ```! ` в этом скилле. Принимает `bash` (по умолчанию) или `powershell`. Значение `powershell` выполняет встроенные shell-команды через PowerShell, когда включён [инструмент PowerShell](https://code.claude.com/docs/ru/tools-reference.md#powershell-tool): он включён по умолчанию в Windows без Git Bash, включён по умолчанию с Git Bash для учётных записей claude.ai и Console и требует `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` в сессиях Amazon Bedrock, Google Cloud's Agent Platform и Microsoft Foundry, а также в macOS, Linux и WSL. Установите значение `0`, чтобы отключить инструмент. |
414| `metadata` | Нет | Свободная карта YAML для ваших собственных данных ключ-значение, таких как поля прав доступа или каталога, читаемые вашим собственным инструментарием из `SKILL.md`. Claude Code не действует на его содержимое и отбрасывает значение, которое не является картой. Не переиспользуйте имена полей frontmatter, такие как `paths`, в качестве ключей. |414| `metadata` | Нет | Произвольное YAML-отображение для ваших собственных данных «ключ-значение», например полей прав доступа или каталога, которые ваши собственные инструменты читают из `SKILL.md`. Claude Code никак не использует его содержимое и отбрасывает значение, не являющееся отображением. Не используйте в качестве ключей имена полей frontmatter, например `paths`. |
415| `license` | Нет | Лицензия, охватывающая skill. Часть спецификации [Agent Skills](https://agentskills.io); см. [Использование skill frontmatter вне Claude Code](#using-skill-frontmatter-outside-claude-code). Claude Code принимает это поле, но не действует на него. |415| `license` | Нет | Лицензия, распространяющаяся на скилл. Часть спецификации [Agent Skills](https://agentskills.io); см. [Использование frontmatter скилла вне Claude Code](#using-skill-frontmatter-outside-claude-code). Claude Code принимает это поле, но никак его не использует. |
416| `compatibility` | Нет | Требования к окружению для skill, такие как предполагаемые продукты или системные предварительные условия, как определено спецификацией [Agent Skills](https://agentskills.io); см. [Использование skill frontmatter вне Claude Code](#using-skill-frontmatter-outside-claude-code). Принимает строку до 500 символов. Claude Code принимает это поле, но не действует на него. |416| `compatibility` | Нет | Требования скилла к окружению, например целевые продукты или системные предварительные требования, как определено спецификацией [Agent Skills](https://agentskills.io); см. [Использование frontmatter скилла вне Claude Code](#using-skill-frontmatter-outside-claude-code). Принимает строку длиной до 500 символов. Claude Code принимает это поле, но никак его не использует. |
417 417
418#### Использование skill frontmatter вне Claude Code418#### Использование frontmatter скилла вне Claude Code
419 419
420Claude Code принимает каждое поле в таблице выше. Вне Claude Code вы можете использовать только поля в спецификации [Agent Skills](https://agentskills.io):420Claude Code принимает все поля из таблицы выше. Вне Claude Code можно использовать только поля из спецификации [Agent Skills](https://agentskills.io):
421 421
422| Путь распространения | Поля Frontmatter, которые вы можете использовать |422| Способ распространения | Поля frontmatter, которые можно использовать |
423| :- | :- |423| :- | :- |
424| Claude Code skills на [любом уровне](#where-skills-live), включая [plugin](https://code.claude.com/docs/ru/plugins/overview.md) skills | Каждое поле в таблице выше |424| Скиллы Claude Code на [любом уровне](#where-skills-live), включая скиллы [плагинов](https://code.claude.com/docs/ru/plugins/overview.md) | Все поля из таблицы выше |
425| Загрузки skills на claude.ai, Skills API и упаковка с `package_skill.py` из [anthropics/skills](https://github.com/anthropics/skills) | `name`, `description`, `license`, `compatibility`, `metadata`, `allowed-tools` |425| Загрузка скиллов в claude.ai, Skills API и упаковка с помощью `package_skill.py` из [anthropics/skills](https://github.com/anthropics/skills) | `name`, `description`, `license`, `compatibility`, `metadata`, `allowed-tools` |
426 426
427Когда вы включаете личный skill для своего аккаунта claude.ai, например чтобы использовать его в [Cowork и облачных сессиях](#skills-in-cowork-and-cloud-sessions) и в запланированных задачах, вы загружаете его на claude.ai. К этой загрузке применяются те же правила.427Когда вы включаете личный скилл для своей учётной записи claude.ai, например чтобы использовать его в [Cowork и облачных сессиях](#skills-in-cowork-and-cloud-sessions) и запланированных задачах, вы загружаете его в claude.ai. К такой загрузке применяются те же правила.
428 428
429Если вы включите какое-либо поле, которое спецификация не разрешает, упаковка или загрузка завершится с жесткой ошибкой вместо игнорирования поля:429Если вы включите любое поле, не разрешённое спецификацией, упаковка или загрузка завершится с ошибкой, а не проигнорирует это поле:
430 430
431```431```
432Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name432Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name
433```433```
434 434
435Ограничение frontmatter шестью полями спецификации избегает ошибки неожиданного ключа выше. [Спецификация Agent Skills](https://agentskills.io) и [требования Skills API](https://docs.claude.com/en/api/skills-guide) определяют все остальное, что эти пути проверяют. Функции тела, специфичные для Claude Code, такие как [динамическое внедрение контекста](#inject-dynamic-context), не работают в чате claude.ai или через API. Claude Code принимает все шесть полей, поэтому frontmatter, который следует спецификации, загружается в Claude Code без изменений.435Если ограничить frontmatter шестью полями спецификации, приведённой выше ошибки о неожиданном ключе не возникнет. Всё остальное, что проверяется при этих способах, определяют [спецификация Agent Skills](https://agentskills.io) и [требования Skills API](https://docs.claude.com/en/api/skills-guide). Возможности тела скилла, доступные только в Claude Code, например [внедрение динамического контекста](#inject-dynamic-context), не работают в чате claude.ai и через API. Claude Code принимает все шесть полей, поэтому frontmatter, соответствующий спецификации, загружается в Claude Code без изменений.
436 436
437#### Как skill получает имя команды437#### Как скилл получает имя команды
438 438
439Команда, которую вы вводите для вызова skill, зависит от того, где находится файл skill и, для plugin skills, также от поля frontmatter `name`. В личном или проектном каталоге skill `name` устанавливает команду, которую показывает меню `/` и которую вы вводите, если только другая команда еще не использует это имя. Имя каталога также вызывает skill. В plugin skill `name` устанавливает последний сегмент команды, и префикс plugin остается на месте.439Команда, которую вы вводите для вызова скилла, определяется расположением файла скилла, а для каталогов скиллов и скиллов плагинов — ещё и полем `name` во frontmatter. В личном или проектном каталоге скиллов `name` задаёт команду, которую показывает меню `/` и которую вы вводите, если только это имя уже не занято другой командой. Имя каталога тоже вызывает скилл. В скилле плагина `name` задаёт последний сегмент команды, а префикс плагина остаётся на месте.
440 440
441Таблица ниже показывает, откуда берется имя команды для каждого макета:441В таблице ниже показано, откуда берётся имя команды для каждого варианта расположения:
442 442
443| Расположение Skill | Источник имени команды | Пример |443| Расположение скилла | Источник имени команды | Пример |
444| :- | :- | :- |444| :- | :- | :- |
445| Каталог Skill под `~/.claude/skills/` или `.claude/skills/` | Frontmatter `name` или имя каталога | `.claude/skills/deploy-staging/SKILL.md` → `/deploy-staging`, или `/deploy` с `name: deploy` |445| Каталог скилла в `~/.claude/skills/` или `.claude/skills/` | `name` из frontmatter или имя каталога | `.claude/skills/deploy-staging/SKILL.md` → `/deploy-staging` или `/deploy` при `name: deploy` |
446| [Вложенный](#where-skills-live) каталог `.claude/skills/`, когда имя конфликтует с другим skill | Путь подкаталога относительно рабочего каталога, затем имя каталога skill | `apps/web/.claude/skills/deploy/SKILL.md` → `/apps/web:deploy` |446| [Вложенный](#where-skills-live) каталог `.claude/skills/`, когда имя каталога конфликтует с другим скиллом | Путь подкаталога относительно рабочего каталога, затем имя каталога скилла | `apps/web/.claude/skills/deploy/SKILL.md` → `/apps/web:deploy` |
447| `.claude/skills/` в [добавленном каталоге вне проекта](#skills-from-additional-directories), когда имя каталога skill конфликтует со skill уровня enterprise, личным или проектным skill либо со skill в каталоге, добавленном ранее | Имя папки добавленного каталога, затем имя каталога skill. Если у двух добавленных каталогов одинаковое имя папки, префикс начинается с имени родительской папки. Требует v2.1.309 или новее | `../cli/.claude/skills/verify/SKILL.md` с `--add-dir ../cli` → `/cli:verify`. С `--add-dir ../a/cli --add-dir ../b/cli`, skill `verify` в каждом из них и ни одного в других местах, skill в `../a/cli` → `/verify`, а другой → `/b/cli:verify` |447| `.claude/skills/` в [добавленном каталоге вне проекта](#skills-from-additional-directories), когда имя каталога скилла конфликтует с корпоративным, личным или проектным скиллом либо со скиллом из каталога, добавленного ранее | Имя папки добавленного каталога, затем имя каталога скилла. Если у двух добавленных каталогов одинаковое имя папки, префикс начинается с имени родительской папки. Требуется v2.1.309 или новее | `../cli/.claude/skills/verify/SKILL.md` с `--add-dir ../cli` → `/cli:verify`. При `--add-dir ../a/cli --add-dir ../b/cli`, скилле `verify` в каждом из них и отсутствии такого скилла в других местах скилл из `../a/cli` → `/verify`, а другой → `/b/cli:verify` |
448| Файл под `.claude/commands/` | Имя файла без расширения | `.claude/commands/deploy.md` → `/deploy` |448| Файл в `.claude/commands/` | Имя файла без расширения | `.claude/commands/deploy.md` → `/deploy` |
449| Файл в подкаталоге `.claude/commands/` | Путь подкаталога относительно `commands/` с каждым `/` заменен на `:`, затем имя файла без расширения | `.claude/commands/frontend/component.md` → `/frontend:component` |449| Файл в подкаталоге `.claude/commands/` | Путь подкаталога относительно `commands/`, в котором каждый `/` заменён на `:`, затем имя файла без расширения | `.claude/commands/frontend/component.md` → `/frontend:component` |
450| Подкаталог Plugin `skills/` | Frontmatter `name` или имя каталога, с пространством имен по plugin | `my-plugin/skills/review/SKILL.md` → `/my-plugin:review`, или `/my-plugin:fancy` с `name: fancy` |450| Подкаталог `skills/` плагина | `name` из frontmatter или имя каталога с пространством имён плагина | `my-plugin/skills/review/SKILL.md` → `/my-plugin:review` или `/my-plugin:fancy` при `name: fancy` |
451| Plugin root `SKILL.md` | Frontmatter `name`, с именем каталога plugin в качестве резервного варианта | `my-plugin/SKILL.md` с `name: review` → `/my-plugin:review`. См. [одиночный skill в корне plugin](https://code.claude.com/docs/ru/plugins/components.md#skills) |451| `SKILL.md` в корне плагина | `name` из frontmatter, с именем каталога плагина в качестве резервного варианта | `my-plugin/SKILL.md` с `name: review` → `/my-plugin:review`. См. [отдельный скилл в корне плагина](https://code.claude.com/docs/ru/plugins/components.md#skills) |
452| Skill [синхронизированный с claude.ai](#how-synced-skills-behave) | Имя skill на вашем аккаунте claude.ai, с префиксом `anthropic-skills:` | Skill аккаунта `deploy` → `/anthropic-skills:deploy`, или `/deploy`, если никакая другая команда не использует это имя |452| Скилл, [синхронизированный из claude.ai](#how-synced-skills-behave) | Имя скилла в вашей учётной записи claude.ai с префиксом `anthropic-skills:` | Скилл учётной записи `deploy` → `/anthropic-skills:deploy` или `/deploy`, пока это имя не использует никакая другая команда |
453 453
454В plugin skill frontmatter `name` заменяет имя каталога в последнем сегменте команды, поэтому `my-plugin/skills/review/SKILL.md` с `name: fancy` становится `/my-plugin:fancy`. Голая команда `/fancy` также вызывает skill, если другая команда еще не использует это имя. Если `name`, который вы пишете, уже начинается с собственного префикса plugin, Claude Code не добавляет префикс снова на v2.1.246 или позже. Например, `name: my-plugin:fancy` все еще становится `/my-plugin:fancy`. С v2.1.216 по v2.1.245 Claude Code удваивал префикс, когда `name` уже его содержал.454В скилле плагина `name` из frontmatter заменяет имя каталога в последнем сегменте команды, поэтому `my-plugin/skills/review/SKILL.md` с `name: fancy` становится `/my-plugin:fancy`. Простое `/fancy` тоже вызывает скилл, если только это имя уже не занято другой командой. Если указанное вами `name` уже начинается с собственного префикса плагина, Claude Code в v2.1.246 и новее не добавляет префикс повторно. Например, `name: my-plugin:fancy` по-прежнему становится `/my-plugin:fancy`. В версиях с v2.1.216 по v2.1.245 Claude Code удваивал префикс, если `name` уже его содержало.
455 455
456В [неинтерактивных сеансах](https://code.claude.com/docs/ru/headless.md) имена `help` и `feedback` не зарезервированы для их встроенных команд, специфичных для терминала, поэтому plugin skill с одним из этих имен сохраняет свою голую команду там. Каждое другое встроенное имя, специфичное для терминала, такое как `/login`, остается зарезервированным, даже если команда не может запуститься в этих сеансах.456В [неинтерактивных сессиях](https://code.claude.com/docs/ru/headless.md) имена `help` и `feedback` не зарезервированы за соответствующими встроенными командами, доступными только в терминале, поэтому скилл плагина с одним из этих имён сохраняет там свою простую команду. Имена всех остальных встроенных команд, доступных только в терминале, например `/login`, остаются зарезервированными, хотя сами команды в таких сессиях выполнить нельзя.
457 457
458Для plugin-root `SKILL.md` нет каталога skill, из которого можно взять имя, поэтому `name` предоставляет весь последний сегмент. Без поля `name` Claude Code возвращается к имени каталога plugin.458Для `SKILL.md` в корне плагина нет каталога скилла, из которого можно взять имя, поэтому `name` задаёт весь последний сегмент. Без поля `name` Claude Code использует имя каталога плагина как резервный вариант.
459 459
460#### Недопустимые символы в имени skill460#### Символы, которые не может содержать имя скилла
461 461
462Если skill или пользовательская команда отсутствует в меню `/` или меню не показывает `name` из frontmatter skill, проверьте имя. Claude Code отклоняет имя команды или `name` во frontmatter, если оно содержит, например, такие символы:462Если скилл или пользовательская команда отсутствует в меню `/` или меню не показывает `name` скилла из frontmatter, проверьте имя. Claude Code отклоняет имя команды или `name` из frontmatter, содержащее, например, такие символы:
463 463
464* Пробел нулевой ширины или управляющий символ464* Пробел нулевой ширины или управляющий символ
465* Символ из области частного использования или неназначенный символ, например глиф из иконочного шрифта465* Символ из области частного использования или неназначенный символ, например глиф из иконочного шрифта
466* Символ, который меняет направление окружающего текста466* Символ, меняющий направление окружающего его текста
467* Пробельный символ, отличный от одного обычного пробела между словами, например неразрывный пробел, два пробела подряд или пробел в начале или в конце467* Любой пробельный символ, кроме одного обычного пробела между словами, например неразрывный пробел, два пробела подряд или пробел в начале или в конце
468* `<` или `>`468* `<` или `>`
469 469
470Пользовательская команда или skill не загружается, если Claude Code отклоняет имя его каталога или файла. Переименуйте эту папку или файл, чтобы убрать такие символы. Skill все равно загружается, если эти символы есть только в имени папки skill плагина или в его `name` во frontmatter:470Пользовательская команда или скилл не загружается, если Claude Code отклоняет имя его каталога или файла. Переименуйте эту папку или файл, удалив эти символы. Скилл всё же загружается, если такие символы есть только в имени папки скилла плагина или в его `name` из frontmatter:
471 471
472* **Папка в каталоге `skills/` плагина или в [путях `skills`](https://code.claude.com/docs/ru/plugins/components#skills) его манифеста**: переименовывать папку не нужно. Эти символы становятся дефисами в имени команды skill, поэтому вводите команду с дефисами.472* **Папка в каталоге `skills/` плагина или в [путях `skills`](https://code.claude.com/docs/ru/plugins/components#skills) его манифеста**: переименовывать папку не нужно. Эти символы превращаются в дефисы в имени команды скилла, поэтому вводите команду с дефисами.
473* **`name` во frontmatter**: меню `/` не показывает значение `name`, и его ввод не вызывает skill. Отредактируйте строку `name:`, чтобы убрать символы.473* **`name` из frontmatter**: меню `/` не показывает значение `name`, и его ввод не вызывает скилл. Отредактируйте строку `name:`, удалив эти символы.
474 474
475Чтобы узнать, какое имя отклонил Claude Code, запустите его командой [`claude --debug`](https://code.claude.com/docs/ru/cli-reference#cli-flags) из оболочки и найдите `[names]` в [логе отладки](https://code.claude.com/docs/ru/debug-your-config.md). В интерактивной сессии об отклонённых именах также сообщает [уведомление при запуске](https://code.claude.com/docs/ru/errors.md#skill-or-command-name-refused). После переименования или правки строки `name:` перезапустите сессию, если только файл не находится в каталоге, который Claude Code [отслеживает на предмет изменений](#live-change-detection).475Чтобы узнать, какое имя отклонил Claude Code, запустите его из оболочки с помощью [`claude --debug`](https://code.claude.com/docs/ru/cli-reference#cli-flags) и найдите в [отладочном логе](https://code.claude.com/docs/ru/debug-your-config.md) `[names]`. В интерактивной сессии о том, что имена были отклонены, также сообщает [уведомление при запуске](https://code.claude.com/docs/ru/errors.md#skill-or-command-name-refused). После переименования или правки `name:` перезапустите сессию, если только файл не находится в каталоге, который Claude Code [отслеживает на предмет изменений](#live-change-detection).
476 476
477#### Доступные подстановки строк477#### Доступные строковые подстановки
478 478
479Skills поддерживают подстановку строк для динамических значений в содержимом skill:479Скиллы поддерживают строковую подстановку динамических значений в содержимом скилла:
480 480
481| Переменная | Описание |481| Переменная | Описание |
482| :- | :- |482| :- | :- |
483| `$ARGUMENTS` | Все аргументы, переданные при вызове skill. Когда ни один заполнитель не получает аргумент, Claude Code добавляет их как `ARGUMENTS: <value>`. См. [Передача аргументов в skills](#pass-arguments-to-skills). |483| `$ARGUMENTS` | Все аргументы, переданные при вызове скилла. Если ни один плейсхолдер не получает аргумент, Claude Code добавляет их в виде `ARGUMENTS: <value>`. См. [Передача аргументов скиллам](#pass-arguments-to-skills). |
484| `$ARGUMENTS[N]` | Доступ к конкретному аргументу по индексу на основе 0, такому как `$ARGUMENTS[0]` для первого аргумента. |484| `$ARGUMENTS[N]` | Доступ к конкретному аргументу по индексу, начиная с 0, например `$ARGUMENTS[0]` для первого аргумента. |
485| `$N` | Сокращение для `$ARGUMENTS[N]`, такое как `$0` для первого аргумента или `$1` для второго. |485| `$N` | Сокращение для `$ARGUMENTS[N]`, например `$0` для первого аргумента или `$1` для второго. |
486| `$name` | Именованный аргумент, объявленный в списке frontmatter [`arguments`](#frontmatter-reference). Имена соответствуют позициям по порядку, поэтому с `arguments: [issue, branch]` заполнитель `$issue` расширяется до первого аргумента, а `$branch` — до второго. |486| `$name` | Именованный аргумент, объявленный в списке [`arguments`](#frontmatter-reference) во frontmatter. Имена сопоставляются с позициями по порядку, поэтому при `arguments: [issue, branch]` плейсхолдер `$issue` раскрывается в первый аргумент, а `$branch` — во второй. |
487| `${CLAUDE_SESSION_ID}` | Текущий ID сеанса. Полезно для логирования, создания файлов, специфичных для сеанса, или корреляции выходных данных skill с сеансами. |487| `${CLAUDE_SESSION_ID}` | Идентификатор текущей сессии. Полезен для логирования, создания файлов, привязанных к сессии, или сопоставления вывода скилла с сессиями. |
488| `${CLAUDE_EFFORT}` | Текущий уровень усилий: `low`, `medium`, `high`, `xhigh` или `max`. Используйте это, чтобы адаптировать инструкции skill к активной настройке усилий. |488| `${CLAUDE_EFFORT}` | Текущий уровень effort: `low`, `medium`, `high`, `xhigh` или `max`. Используйте, чтобы адаптировать инструкции скилла к активной настройке effort. |
489| `${CLAUDE_SKILL_DIR}` | Каталог, содержащий файл `SKILL.md` skill. Для plugin skills это подкаталог skill в plugin, а не корень plugin. Используйте это в bash-командах внедрения для ссылки на скрипты или файлы, поставляемые с skill, независимо от текущего рабочего каталога. |489| `${CLAUDE_SKILL_DIR}` | Каталог, содержащий файл `SKILL.md` скилла. Для скиллов плагинов это подкаталог скилла внутри плагина, а не корень плагина. Используйте в командах bash-внедрения, чтобы ссылаться на скрипты или файлы, поставляемые со скиллом, независимо от текущего рабочего каталога. |
490| `${CLAUDE_PROJECT_DIR}` | Корневой каталог проекта. Это тот же путь, который [hooks](https://code.claude.com/docs/ru/hooks.md#reference-scripts-by-path) и MCP-серверы получают как `CLAUDE_PROJECT_DIR`. Используйте это для ссылки на скрипты или файлы, специфичные для проекта, такие как `${CLAUDE_PROJECT_DIR}/.claude/hooks/helper.sh`, независимо от того, где установлен skill. |490| `${CLAUDE_PROJECT_DIR}` | Корневой каталог проекта. Это тот же путь, который [хуки](https://code.claude.com/docs/ru/hooks.md#reference-scripts-by-path) и MCP-серверы получают как `CLAUDE_PROJECT_DIR`. Используйте, чтобы ссылаться на локальные скрипты или файлы проекта, например `${CLAUDE_PROJECT_DIR}/.claude/hooks/helper.sh`, независимо от того, где установлен скилл. |
491| `${CLAUDE_PLUGIN_ROOT}` | Каталог установки plugin. Подставляется только в plugin skills. Используйте это для ссылки на скрипты или файлы, поставляемые в любом месте plugin, включая ресурсы, общие для skills plugin. См. [переменные окружения plugin](https://code.claude.com/docs/ru/plugins/manifest-reference.md#environment-variables). |491| `${CLAUDE_PLUGIN_ROOT}` | Каталог установки плагина. Подставляется только в скиллах плагинов. Используйте, чтобы ссылаться на скрипты или файлы, поставляемые в любом месте плагина, включая ресурсы, общие для скиллов плагина. См. [переменные окружения плагина](https://code.claude.com/docs/ru/plugins/manifest-reference.md#environment-variables). |
492| `${CLAUDE_PLUGIN_DATA}` | [Каталог постоянных данных](https://code.claude.com/docs/ru/plugins/components.md#path-variables-and-persistent-data) plugin, который сохраняется при обновлении plugin. Подставляется только в plugin skills. Используйте это для ссылки на установленные зависимости, сгенерированные файлы или кэши, которые должны пережить обновление. |492| `${CLAUDE_PLUGIN_DATA}` | [Каталог постоянных данных](https://code.claude.com/docs/ru/plugins/components.md#path-variables-and-persistent-data) плагина, который сохраняется при обновлениях плагина. Подставляется только в скиллах плагинов. Используйте, чтобы ссылаться на установленные зависимости, сгенерированные файлы или кэши, которые должны пережить обновление. |
493 493
494Claude Code подставляет `${CLAUDE_SKILL_DIR}` и `${CLAUDE_PROJECT_DIR}` в двух местах: содержимое markdown skill и Bash-правила в frontmatter [`allowed-tools`](#frontmatter-reference). В plugin skill Claude Code подставляет `${CLAUDE_PLUGIN_ROOT}` и `${CLAUDE_PLUGIN_DATA}` в тех же двух местах. Использование одной и той же переменной в обоих местах позволяет skill запустить поставляемый скрипт без подсказки разрешения. Следующий skill показывает паттерн:494Claude Code подставляет `${CLAUDE_SKILL_DIR}` и `${CLAUDE_PROJECT_DIR}` в двух местах: в markdown-содержимом скилла и в правилах Bash в поле [`allowed-tools`](#frontmatter-reference) frontmatter. В скилле плагина Claude Code подставляет `${CLAUDE_PLUGIN_ROOT}` и `${CLAUDE_PLUGIN_DATA}` в тех же двух местах. Использование одной и той же переменной в обоих местах позволяет скиллу запускать поставляемый с ним скрипт без запроса разрешения. Следующий скилл демонстрирует этот паттерн:
495 495
496```yaml theme={null}496```yaml theme={null}
497---497---
503Run `${CLAUDE_SKILL_DIR}/scripts/render.sh <csv-file>` to render the chart.503Run `${CLAUDE_SKILL_DIR}/scripts/render.sh <csv-file>` to render the chart.
504```504```
505 505
506Если этот skill установлен в `~/.claude/skills/render-chart/`, обе вхождения `${CLAUDE_SKILL_DIR}` расширяются до этого каталога. Правило `allowed-tools` затем соответствует точной команде, которую тело skill говорит Claude запустить, поэтому скрипт запускается без подсказки.506Если этот скилл установлен в `~/.claude/skills/render-chart/`, оба вхождения `${CLAUDE_SKILL_DIR}` раскрываются в этот каталог. Тогда правило `allowed-tools` совпадает в точности с командой, которую тело скилла велит Claude выполнить, и скрипт запускается без запроса.
507 507
508Индексированные аргументы используют кавычки в стиле shell, поэтому оборачивайте многословные значения в кавычки, чтобы передать их как один аргумент. Например, `/my-skill "hello world" second` делает `$0` расширяющимся до `hello world`, а `$1` — до `second`. Заполнитель `$ARGUMENTS` всегда расширяется до полной строки аргументов в том виде, в котором она была введена.508Индексированные аргументы используют кавычки в стиле оболочки, поэтому заключайте значения из нескольких слов в кавычки, чтобы передать их как один аргумент. Например, `/my-skill "hello world" second` приводит к тому, что `$0` раскрывается в `hello world`, а `$1` — в `second`. Плейсхолдер `$ARGUMENTS` всегда раскрывается в полную строку аргументов в том виде, в каком она введена.
509 509
510Индексированный заполнитель без соответствующего аргумента, такой как `$2`, когда был передан только один аргумент, остается в содержимом неизменным. Именованный заполнитель из frontmatter [`arguments`](#frontmatter-reference) без соответствующего аргумента расширяется до пустой строки.510Индексированный плейсхолдер без соответствующего аргумента, например `$2`, когда передан только один аргумент, остаётся в содержимом без изменений. Именованный плейсхолдер из [`arguments`](#frontmatter-reference) во frontmatter без соответствующего аргумента раскрывается в пустую строку.
511 511
512Если вы передаете значение аргумента, которое само содержит текст, такой как `$1` или `$ARGUMENTS`, Claude Code вставляет его как буквальный текст и не расширяет его. Например, если тело skill содержит `Summarize $0` и вы запускаете `/summarize "$ARGUMENTS from yesterday"`, Claude получает `Summarize $ARGUMENTS from yesterday`. Claude Code все еще заменяет переменные `${CLAUDE_*}`, такие как `${CLAUDE_SKILL_DIR}`, после вставки аргументов.512Если вы передаёте значение аргумента, которое само содержит текст вроде `$1` или `$ARGUMENTS`, Claude Code вставляет его как буквальный текст и не раскрывает. Например, если тело скилла содержит `Summarize $0`, а вы выполняете `/summarize "$ARGUMENTS from yesterday"`, Claude получает `Summarize $ARGUMENTS from yesterday`. Переменные `${CLAUDE_*}`, например `${CLAUDE_SKILL_DIR}`, Claude Code по-прежнему заменяет после вставки аргументов.
513 513
514Чтобы включить буквальный `$` перед цифрой, `ARGUMENTS` или объявленным именем аргумента, такой как `$1.00` в прозе, экранируйте его обратной косой чертой: `\$1.00`. Обратная косая черта перед любым другим `$` остается неизменной. Только одна обратная косая черта непосредственно перед токеном экранирует его. Удвоенная обратная косая черта, такая как `\\$1`, оставляет обе обратные косые черты на месте, и `$1` все еще расширяется до значения аргумента. Экранирование обратной косой чертой охватывает только эти заполнители аргументов. Обратная косая черта не предотвращает подстановку переменной `${CLAUDE_*}`, где переменная применяется.514Чтобы вставить буквальный `$` перед цифрой, `ARGUMENTS` или объявленным именем аргумента, например `$1.00` в тексте, экранируйте его обратной косой чертой: `\$1.00`. Обратная косая черта перед любым другим `$` остаётся без изменений. Экранирует токен только одна обратная косая черта непосредственно перед ним. Двойная обратная косая черта, например `\\$1`, оставляет обе обратные косые черты на месте, и `$1` по-прежнему раскрывается в значение аргумента. Экранирование обратной косой чертой распространяется только на эти плейсхолдеры аргументов. Обратная косая черта не предотвращает подстановку переменной `${CLAUDE_*}` там, где эта переменная применяется.
515 515
516**Пример использования подстановок:**516**Пример с подстановками:**
517 517
518```yaml theme={null}518```yaml theme={null}
519---519---
528 528
529### Добавление вспомогательных файлов529### Добавление вспомогательных файлов
530 530
531Skills могут включать несколько файлов в их каталог. Это держит `SKILL.md` сосредоточенным на основном, позволяя Claude получать доступ к подробному справочному материалу только при необходимости. Большие справочные документы, спецификации API или коллекции примеров не нужно загружать в контекст каждый раз при запуске skill.531Скиллы могут включать несколько файлов в своём каталоге. Это позволяет сосредоточить в `SKILL.md` самое важное, давая Claude доступ к подробным справочным материалам только при необходимости. Большие справочные документы, спецификации API или коллекции примеров не нужно загружать в контекст при каждом запуске скилла.
532 532
533```text theme={null}533```text theme={null}
534my-skill/534my-skill/
550 550
551> [!TIP]551> [!TIP]
552>552>
553> Держите `SKILL.md` под 500 строк. Переместите подробный справочный материал в отдельные файлы.553> Держите `SKILL.md` в пределах 500 строк. Переносите подробные справочные материалы в отдельные файлы.
554 554
555### Контроль того, кто вызывает skill555### Управление тем, кто вызывает скилл
556 556
557По умолчанию как вы, так и Claude можете вызвать любой skill. Вы можете ввести `/skill-name`, чтобы вызвать его напрямую, и Claude может загрузить его автоматически, когда это актуально для вашего разговора. Два поля frontmatter позволяют вам ограничить это:557По умолчанию любой скилл можете вызвать как вы, так и Claude. Вы можете ввести `/skill-name`, чтобы вызвать его напрямую, а Claude может загрузить его автоматически, когда он относится к вашему диалогу. Два поля frontmatter позволяют это ограничить:
558 558
559* **`disable-model-invocation: true`**: Claude не может вызвать skill самостоятельно. Используйте это для рабочих процессов с побочными эффектами или которые вы хотите контролировать по времени, такие как `/commit`, `/deploy` или `/send-slack-message`. Вы не хотите, чтобы Claude решал выполнить развёртывание, потому что ваш код выглядит готовым.559* **`disable-model-invocation: true`**: Claude не может вызвать скилл самостоятельно. Используйте для рабочих процессов с побочными эффектами или тех, время запуска которых вы хотите контролировать, например `/commit`, `/deploy` или `/send-slack-message`. Вы ведь не хотите, чтобы Claude решил выполнить развёртывание только потому, что ваш код выглядит готовым.
560 560
561* **`user-invocable: false`**: Только Claude может вызвать skill. Используйте это для фоновых знаний, которые не являются действенными как команда. Skill `legacy-system-context` объясняет, как работает старая система. Claude должен знать это, когда это актуально, но `/legacy-system-context` не является значимым действием для пользователей.561* **`user-invocable: false`**: вызвать скилл может только Claude. Используйте для фоновых знаний, которые не имеют смысла как команда. Скилл `legacy-system-context` объясняет, как работает старая система. Claude должен знать это, когда это актуально, но `/legacy-system-context` не является осмысленным действием для пользователей.
562 562
563Этот пример создает skill развёртывания. Если вы установите `disable-model-invocation: true`, Claude не сможет запустить skill автоматически:563В этом примере создаётся скилл развёртывания. Если задать `disable-model-invocation: true`, Claude не сможет запустить скилл автоматически:
564 564
565```yaml theme={null}565```yaml theme={null}
566---566---
5774. Verify the deployment succeeded5774. Verify the deployment succeeded
578```578```
579 579
580Если Claude все равно попытается, Claude Code заблокирует вызов и инструктирует его не воспроизводить шаги развертывания другим способом, поэтому ожидайте, что Claude предложит запустить `/deploy` самостоятельно.580Если Claude всё же попытается, Claude Code заблокирует вызов и проинструктирует его не воспроизводить шаги развёртывания другим способом, поэтому ожидайте, что Claude предложит вам запустить `/deploy` самостоятельно.
581 581
582Вот как два поля влияют на вызов и загрузку контекста:582Вот как эти два поля влияют на вызов и загрузку в контекст:
583 583
584| Frontmatter | Вы можете вызвать | Claude может вызвать | Когда загружается в контекст |584| Frontmatter | Вы можете вызвать | Claude может вызвать | Когда загружается в контекст |
585| :- | :- | :- | :- |585| :- | :- | :- | :- |
586| (по умолчанию) | Да | Да | Описание всегда в контексте, полный skill загружается при вызове |586| (по умолчанию) | Да | Да | Описание всегда в контексте, полный скилл загружается при вызове |
587| `disable-model-invocation: true` | Да | Не самостоятельно | Описание не в контексте, полный skill загружается при вызове |587| `disable-model-invocation: true` | Да | Не самостоятельно | Описание не в контексте, полный скилл загружается при вызове |
588| `user-invocable: false` | Нет | Да | Описание всегда в контексте, полный skill загружается при вызове |588| `user-invocable: false` | Нет | Да | Описание всегда в контексте, полный скилл загружается при вызове |
589 589
590> [!NOTE]590> [!NOTE]
591>591>
592> В обычном сеансе описания skills загружаются в контекст, чтобы Claude знал, что доступно, но полное содержимое skill загружается только при вызове. [Подагенты с предварительно загруженными skills](https://code.claude.com/docs/ru/sub-agents.md#preload-skills-into-subagents) работают иначе: полное содержимое skill внедряется при запуске.592> В обычной сессии описания скиллов загружаются в контекст, чтобы Claude знал, что доступно, но полное содержимое скилла загружается только при вызове. [Субагенты с предварительно загруженными скиллами](https://code.claude.com/docs/ru/sub-agents.md#preload-skills-into-subagents) работают иначе: полное содержимое скилла внедряется при запуске.
593 593
594#### Где писать имя skill594#### Где писать имя скилла
595 595
596Чтобы запустить skill напрямую, поставьте его имя в начало сообщения. После обычного текста имя дает Claude разрешение запустить skill, но не запускает его:596Чтобы запустить скилл напрямую, поставьте его имя в начало сообщения. После обычного текста имя даёт Claude разрешение запустить скилл, но не запускает его:
597 597
598| Где | Пример | Что происходит |598| Где | Пример | Что происходит |
599| :- | :- | :- |599| :- | :- | :- |
600| В начале сообщения | `/deploy staging` | Claude Code запускает skill напрямую |600| В начале сообщения | `/deploy staging` | Claude Code запускает скилл напрямую |
601| После обычного текста, отдельным словом без прилегающих знаков препинания | `go ahead and /deploy to staging` | Ничего не запускается напрямую. Имя считается вашим разрешением для этого сообщения: Claude может запустить skill во время ответа и по вашей формулировке судит, просили ли вы об этом |601| После обычного текста, отдельным словом без примыкающих знаков препинания | `go ahead and /deploy to staging` | Ничего не запускается напрямую. Имя считается вашим разрешением для этого сообщения: Claude может запустить скилл при ответе и по формулировке определяет, просили ли вы его об этом |
602 602
603Чтобы написать о skill, не разрешая его запуск, опустите слеш.603Чтобы упомянуть скилл, не разрешая его запуск, не ставьте косую черту.
604 604
605### Жизненный цикл содержимого skill605### Жизненный цикл содержимого скилла
606 606
607Когда вы или Claude вызываете skill, отрендеренное содержимое `SKILL.md` входит в разговор как одно сообщение и остается там в последующих ходах. Эта постоянность применяется к инструкциям skill, а не к его разрешениям: разрешение [`allowed-tools`](#pre-approve-tools-for-a-skill) очищается при отправке следующего сообщения. Claude Code не перечитывает файл skill в последующих ходах, поэтому пишите руководство, которое должно применяться на протяжении всей задачи, как постоянные инструкции, а не одноразовые шаги.607Когда вы или Claude вызываете скилл, отрисованное содержимое `SKILL.md` попадает в диалог как одно сообщение и остаётся там на протяжении последующих ходов. Это сохранение распространяется на инструкции скилла, но не на его разрешения: разрешение [`allowed-tools`](#pre-approve-tools-for-a-skill) сбрасывается, когда вы отправляете следующее сообщение. Claude Code не перечитывает файл скилла на последующих ходах, поэтому указания, которые должны действовать на протяжении всей задачи, пишите как постоянные инструкции, а не как одноразовые шаги.
608 608
609Когда Claude повторно вызывает skill, чье отрендеренное содержимое идентично копии, уже находящейся в контексте, Claude Code добавляет короткую заметку о том, что skill уже загружен, вместо второй копии содержимого. Когда отрендеренное содержимое отличается, потому что аргументы изменились или команда [динамического контекста](#inject-dynamic-context) произвела новый выход, Claude Code добавляет полное содержимое снова.609Когда Claude повторно вызывает скилл, отрисованное содержимое которого идентично копии, уже находящейся в контексте, Claude Code добавляет короткое примечание о том, что скилл уже загружен, а не вторую копию содержимого. Если отрисованное содержимое отличается — потому что изменились аргументы или команда [динамического контекста](#inject-dynamic-context) выдала новый вывод, — Claude Code снова добавляет полное содержимое.
610 610
611[Auto-compact](https://code.claude.com/docs/ru/how-claude-code-works.md#when-context-fills-up) переносит вызванные skills в рамках бюджета токенов. Когда разговор суммируется для освобождения контекста, Claude Code повторно прикрепляет самый последний вызов каждого skill после резюме, сохраняя первые 5000 токенов каждого. Повторно прикрепленные skills делят объединенный бюджет 25000 токенов. Claude Code заполняет этот бюджет, начиная с самого недавно вызванного skill, поэтому старые skills могут быть полностью удалены после компактирования, если вы вызвали много в одном сеансе.611[Автосжатие](https://code.claude.com/docs/ru/how-claude-code-works.md#when-context-fills-up) переносит вызванные скиллы дальше в пределах бюджета токенов. Когда диалог суммируется для освобождения контекста, Claude Code повторно прикрепляет после сводки последний вызов каждого скилла, сохраняя первые 5 000 токенов каждого. Повторно прикреплённые скиллы делят общий бюджет в 25 000 токенов. Claude Code заполняет этот бюджет, начиная с последнего вызванного скилла, поэтому если вы вызвали много скиллов в одной сессии, более старые могут быть полностью отброшены после сжатия контекста.
612 612
613Если Claude перестает следовать skill на полпути через сеанс, см. [Claude перестает следовать skill](#claude-stops-following-a-skill).613Если Claude перестаёт следовать скиллу посреди сессии, см. [Claude перестаёт следовать скиллу](#claude-stops-following-a-skill).
614 614
615### Предварительное одобрение tools для skill615### Предварительное разрешение инструментов для скилла
616 616
617Поле `allowed-tools` предоставляет разрешение для перечисленных tools во время хода, который вызывает skill, поэтому Claude может использовать их без запроса вашего одобрения. Разрешение очищается при отправке следующего сообщения, даже если содержимое skill [остается в контексте](#skill-content-lifecycle); повторный вызов skill повторно применяет его для этого хода. Это не ограничивает, какие tools доступны: каждый tool остается вызываемым, и ваши [параметры разрешений](https://code.claude.com/docs/ru/permissions.md) все еще управляют tools, которые не указаны. Чтобы предварительно одобрить tools для всего сеанса, а не одного хода, добавьте правила разрешения к этим параметрам разрешений вместо этого.617Поле `allowed-tools` предоставляет разрешение на использование перечисленных инструментов в течение хода, в котором вызван скилл, поэтому Claude может использовать их, не запрашивая у вас подтверждения. Разрешение сбрасывается, когда вы отправляете следующее сообщение, хотя содержимое скилла [остаётся в контексте](#skill-content-lifecycle); повторный вызов скилла снова применяет его для этого хода. Поле не ограничивает набор доступных инструментов: все инструменты остаются доступными для вызова, а инструменты, не указанные в списке, по-прежнему регулируются вашими [настройками разрешений](https://code.claude.com/docs/ru/permissions.md). Чтобы предварительно разрешить инструменты на всю сессию, а не на один ход, добавьте вместо этого правила разрешения в эти настройки разрешений.
618 618
619Доверие к рабочему пространству не влияет на это поле. Claude Code применяет `allowed-tools` skill проекта даже при запуске `-p` в папке, которой вы никогда не доверяли. Skill может предоставить себе широкий доступ к инструментам, поэтому проверяйте `allowed-tools` у skills, добавленных в репозиторий, прежде чем запускать там Claude Code. Чтобы запретить это поле для skills из репозиториев во всей организации, см. [Когда применяются только управляемые правила разрешений](#when-only-managed-permission-rules-apply).619Доверие к рабочему пространству не влияет на это поле. Claude Code применяет `allowed-tools` проектного скилла даже при запуске с `-p` в папке, которой вы никогда не доверяли. Скилл может предоставить себе широкий доступ к инструментам, поэтому проверяйте `allowed-tools` скиллов, добавленных в репозиторий, прежде чем запускать там Claude Code. Чтобы во всей организации это поле не применялось к скиллам из репозиториев, см. [Когда применяются только управляемые правила разрешений](#when-only-managed-permission-rules-apply).
620 620
621Этот skill позволяет Claude запускать git-команды без одобрения за использование всякий раз, когда вы вызываете его:621Этот скилл позволяет Claude выполнять команды git без подтверждения каждого использования всякий раз, когда вы его вызываете:
622 622
623```yaml theme={null}623```yaml theme={null}
624---624---
629---629---
630```630```
631 631
632Чтобы удалить tools из доступного пула Claude во время активности skill, перечислите их в `disallowed-tools` в frontmatter skill. Ограничение очищается при отправке следующего сообщения. Как и правила отказа, это поле не может удалить [`EndConversation`](https://code.claude.com/docs/ru/tools-reference#endconversation-tool-behavior) пока остаются другие tools. Чтобы заблокировать tools во всех skills и подсказках, добавьте правила отказа в ваши [параметры разрешений](https://code.claude.com/docs/ru/permissions.md).632Чтобы удалить инструменты из доступного Claude набора, пока скилл активен, перечислите их в `disallowed-tools` во frontmatter скилла. Ограничение снимается, когда вы отправляете следующее сообщение. Как и правила запрета, это поле не может удалить [`EndConversation`](https://code.claude.com/docs/ru/tools-reference#endconversation-tool-behavior), пока остаётся хотя бы один другой инструмент. Чтобы заблокировать инструменты для всех скиллов и промптов, добавьте правила запрета в свои [настройки разрешений](https://code.claude.com/docs/ru/permissions.md).
633 633
634#### Когда управляемые настройки ограничивают хуки плагинами634#### Когда управляемые настройки ограничивают хуки плагинами
635 635
636Когда управляемые настройки вашей организации перечисляют `hooks` в `strictPluginOnlyCustomization`, личный или проектный skill, чей frontmatter объявляет `hooks`, теряет предварительное одобрение `allowed-tools`, за исключением [skills, которые его сохраняют](https://code.claude.com/docs/ru/settings-reference.md#strictpluginonlycustomization-hooks).636Когда управляемые настройки вашей организации указывают `hooks` в `strictPluginOnlyCustomization`, личный или проектный скилл, frontmatter которого объявляет `hooks`, теряет предварительное разрешение `allowed-tools`, за исключением [скиллов, которые его сохраняют](https://code.claude.com/docs/ru/settings-reference.md#strictpluginonlycustomization-hooks).
637 637
638* **Проверка**: введите `/status` в сессии Claude Code. Если `/status` показывает [`Enterprise managed settings`](https://code.claude.com/docs/ru/settings#check-what-your-organization-enforces), спросите администратора, перечисляет ли `strictPluginOnlyCustomization` значение `hooks`.638* **Проверка**: введите `/status` в сессии Claude Code. Если `/status` показывает [`Enterprise managed settings`](https://code.claude.com/docs/ru/settings#check-what-your-organization-enforces), спросите у администратора, указан ли `hooks` в `strictPluginOnlyCustomization`.
639* **Исправление**: удалите `hooks` из frontmatter skill, потому что его хуки не запускаются при этой настройке. Чтобы сохранить их, [перенесите skill в плагин](https://code.claude.com/docs/ru/hooks.md#limits-on-skill-hooks), который вы устанавливаете из маркетплейса.639* **Исправление**: удалите `hooks` из frontmatter скилла, поскольку при этой настройке его хуки не выполняются. Чтобы сохранить их, [перенесите скилл в плагин](https://code.claude.com/docs/ru/hooks.md#limits-on-skill-hooks), который вы устанавливаете из маркетплейса.
640 640
641#### Когда применяются только управляемые правила разрешений641#### Когда применяются только управляемые правила разрешений
642 642
643Когда ваша организация задает `allowManagedPermissionRulesOnly` в управляемых настройках, Claude Code игнорирует `allowed-tools` в skills проекта и личных skills, а также в [других источниках, перечисленных в описании этой настройки](https://code.claude.com/docs/ru/settings-reference.md#allowmanagedpermissionrulesonly). Для этого требуется Claude Code v2.1.282 или новее.643Когда ваша организация задаёт `allowManagedPermissionRulesOnly` в управляемых настройках, Claude Code игнорирует `allowed-tools` в проектных и личных скиллах, а также в [других источниках, перечисленных в описании этой настройки](https://code.claude.com/docs/ru/settings-reference.md#allowmanagedpermissionrulesonly). Для этого требуется Claude Code v2.1.282 или новее.
644 644
645Инструменты, перечисленные в затронутом skill, вместо этого проходят через управляемые правила вашей организации и обычный запрос разрешения. Выполните `/status`, чтобы увидеть список всех skills, чье поле `allowed-tools` Claude Code проигнорировал на данный момент в сессии. Внедряемая команда в skill, которую не разрешает ни одно управляемое правило, обрабатывается согласно разделу [Проверка разрешений для внедряемых команд](#permission-checks-on-injected-commands).645Вместо этого инструменты, перечисленные в затронутом скилле, проходят через управляемые правила вашей организации и обычный запрос разрешения. Выполните `/status`, чтобы увидеть список всех скиллов, чьи `allowed-tools` Claude Code к этому моменту проигнорировал в сессии. Внедрённая в скилл команда, которую не разрешает ни одно управляемое правило, обрабатывается согласно разделу [Проверки разрешений для внедрённых команд](#permission-checks-on-injected-commands).
646 646
647### Передача аргументов в skills647### Передача аргументов скиллам
648 648
649Как вы, так и Claude можете передавать аргументы при вызове skill. Аргументы доступны через заполнитель `$ARGUMENTS`.649И вы, и Claude можете передавать аргументы при вызове скилла. Аргументы доступны через плейсхолдер `$ARGUMENTS`.
650 650
651Этот skill исправляет проблему GitHub по номеру. Заполнитель `$ARGUMENTS` заменяется на все, что следует за именем skill:651Этот скилл исправляет GitHub issue по номеру. Плейсхолдер `$ARGUMENTS` заменяется тем, что следует за именем скилла:
652 652
653```yaml theme={null}653```yaml theme={null}
654---654---
6665. Create a commit6665. Create a commit
667```667```
668 668
669Когда вы запускаете `/fix-issue 123`, Claude получает "Fix GitHub issue 123 following our coding standards..."669Когда вы выполняете `/fix-issue 123`, Claude получает «Fix GitHub issue 123 following our coding standards...»
670 670
671Если вы вызываете skill с аргументами, но ни один заполнитель в содержимом skill не получает один, Claude Code добавляет `ARGUMENTS: <your input>` в конец содержимого skill, чтобы Claude все еще видел, что вы ввели. Заполнитель — это `$ARGUMENTS`, индексированная форма, такая как `$1`, или именованный аргумент. Индексированный заполнитель без аргумента в его позиции остается как буквальный текст и не считается получившим один. Именованный заполнитель считается даже когда его позиция не имеет аргумента, потому что он расширяется до пустой строки.671Если вы вызываете скилл с аргументами, но ни один плейсхолдер в содержимом скилла их не получает, Claude Code добавляет `ARGUMENTS: <your input>` в конец содержимого скилла, чтобы Claude всё равно увидел, что вы ввели. Плейсхолдер — это `$ARGUMENTS`, индексированная форма, например `$1`, или именованный аргумент. Индексированный плейсхолдер, для позиции которого нет аргумента, остаётся буквальным текстом и не считается получившим аргумент. Именованный плейсхолдер считается получившим аргумент, даже если для его позиции аргумента нет, поскольку он раскрывается в пустую строку.
672 672
673Чтобы получить доступ к отдельным аргументам по позиции, используйте `$ARGUMENTS[N]` или более короткий `$N`:673Чтобы обратиться к отдельным аргументам по позиции, используйте `$ARGUMENTS[N]` или более короткое `$N`:
674 674
675```yaml theme={null}675```yaml theme={null}
676---676---
682Preserve all existing behavior and tests.682Preserve all existing behavior and tests.
683```683```
684 684
685Запуск `/migrate-component SearchBar JavaScript TypeScript` заменяет `$ARGUMENTS[0]` на `SearchBar`, `$ARGUMENTS[1]` на `JavaScript` и `$ARGUMENTS[2]` на `TypeScript`. Тот же skill, использующий сокращение `$N`:685Выполнение `/migrate-component SearchBar JavaScript TypeScript` заменяет `$ARGUMENTS[0]` на `SearchBar`, `$ARGUMENTS[1]` на `JavaScript`, а `$ARGUMENTS[2]` на `TypeScript`. Тот же скилл с сокращением `$N`:
686 686
687```yaml theme={null}687```yaml theme={null}
688---688---
694Preserve all existing behavior and tests.694Preserve all existing behavior and tests.
695```695```
696 696
697#### Несколько skills в одном сообщении697#### Объединение нескольких скиллов в одном сообщении
698 698
699Когда вы вводите текст в поле промпта Claude Code в терминале, вы можете указать несколько skills подряд в начале одного сообщения. Через Agent SDK или `claude -p` Claude Code загружает только первый skill, а остальная часть строки становится его аргументами. В поле промпта терминала ввод `/write-tests /fix-issue 123` загружает оба skills и передает конечный текст `123` как `$ARGUMENTS` каждому из них.699Когда вы вводите текст в промпт Claude Code в терминале, вы можете поставить несколько скиллов подряд в начале одного сообщения. Через Agent SDK или `claude -p` Claude Code загружает только первый скилл, а остаток строки использует как его аргументы. В промпте терминала ввод `/write-tests /fix-issue 123` загружает оба скилла и передаёт завершающий текст `123` каждому из них как `$ARGUMENTS`.
700 700
701Claude Code расширяет первый skill плюс до пяти дополнительных, указанных после него. Расширение останавливается на первом токене, который не является skill, вызываемым пользователем и выполняемым встроенным образом. Если вы указываете skill, который запускается как [субагент fork](#run-skills-in-a-subagent), например [`/code-review`](https://code.claude.com/docs/ru/code-review-local), или skill, чьи аргументы могут начинаться с другой команды, например `/loop`, расширение на этом заканчивается. Этот токен и все, что после него, становятся текстом аргумента для каждого расширенного skill.701Claude Code раскрывает первый скилл и до пяти следующих за ним. Раскрытие останавливается на первом токене, который не является встроенным скиллом, вызываемым пользователем. Если вы добавите скилл, который выполняется как [ответвлённый субагент](#run-skills-in-a-subagent), например [`/code-review`](https://code.claude.com/docs/ru/code-review-local), или скилл, аргументы которого могут начинаться с другой команды, например `/loop`, раскрытие на нём заканчивается. Этот токен и всё, что следует за ним, становятся текстом аргументов для каждого раскрытого скилла.
702 702
703## Продвинутые приёмы703## Продвинутые приёмы
704 704