> · 8 мин

Команды, скиллы, built-in и bundled — полная карта всего, что начинается с / в Claude Code

Команды, скиллы, built-in и bundled — полная карта всего, что начинается с / в Claude Code

Команды, скиллы, built-in и bundled — полная карта всего, что начинается с / в Claude Code

Набираешь / в Claude Code — и вываливается список. /compact, /simplify, /commit, какой-нибудь кастомный /deploy. Всё вызывается одинаково, всё начинается со слэша. Но за этим единым интерфейсом скрываются четыре принципиально разных механизма. И если не понимать разницу, можно потратить часы на скилл, который проще было бы сделать командой — или наоборот.

TL;DR: В Claude Code есть четыре типа «слэшей»: built-in команды (жёсткая логика), bundled скиллы (промпты из коробки), кастомные команды (legacy .claude/commands/) и кастомные скиллы (.claude/skills/). С версии 2.1.3 команды и скиллы объединены — файлы из commands/ продолжают работать, но скиллы дают больше возможностей. Главное отличие: скиллы могут автоматически подгружаться по контексту, а команды — только по явному вызову.

Четыре типа «слэшей»

1. Built-in команды

/help, /compact, /clear, /init, /permissions, /context — это встроенные команды, зашитые в код Claude Code. Они выполняют фиксированную логику: /compact сжимает контекст, /clear очищает сессию. Никакого промпта, никакой «умности» — чистый детерминизм.

Их нельзя переопределить, нельзя изменить, нельзя вызвать через Skill tool. Они просто есть.

2. Bundled скиллы

/simplify, /batch, /debug, /claude-api — скиллы, которые идут в комплекте с Claude Code. В отличие от built-in команд, это промпт-ориентированные скиллы: они дают Claude подробный playbook и позволяют ему оркестрировать работу с помощью инструментов. /simplify запускает три параллельных агента (code reuse, quality, efficiency), /batch декомпозирует работу на 5-30 независимых юнитов и создаёт по PR на каждый.

Технически это обычные скиллы, но встроенные в дистрибутив — их не нужно устанавливать.

3. Кастомные команды (legacy)

Старый формат: один .md файл в .claude/commands/:

.claude/commands/review.md

Файл содержит промпт, опционально — YAML frontmatter. Набираешь /review — Claude получает содержимое файла как инструкцию. Этот формат работает с ранних версий Claude Code и продолжает работать после объединения в v2.1.3.

4. Кастомные скиллы (рекомендуемый формат)

Новый формат: директория с SKILL.md внутри:

.claude/skills/review/
├── SKILL.md           # основные инструкции (обязательно)
├── template.md        # шаблон для Claude
├── examples/
│   └── sample.md      # пример ожидаемого результата
└── scripts/
    └── validate.sh    # скрипт, который Claude может запустить

Ключевая разница: скилл — это директория, а не файл. Кроме SKILL.md можно положить шаблоны, примеры, скрипты на любом языке. Claude загружает их по необходимости, а не всё сразу — это называется progressive disclosure.

Что произошло в v2.1.3

В январе 2026 Anthropic объединила команды и скиллы в единую систему. Оба формата создают одинаковый /-вызов:

  • .claude/commands/review.md создаёт /review
  • .claude/skills/review/SKILL.md тоже создаёт /review

Файлы из commands/ никуда не делись и поддерживают тот же YAML frontmatter, что и скиллы. Но скиллы добавляют три вещи, которых у команд нет:

  • Директория с файлами — шаблоны, скрипты, примеры, документация
  • Автоматический вызов — Claude сам подгружает скилл, когда видит подходящий контекст
  • Инъекция динамического контекста — синтаксис !`command` подставляет вывод shell-команд прямо в промпт

Главное отличие: кто нажимает «пуск»

Вот что реально отделяет старые команды от новых скиллов — контроль вызова.

Кастомная команда работает только когда ты набираешь /review. Claude не может вызвать её сам. Это детерминированный триггер — ты нажал, она запустилась.

Скилл по умолчанию работает в обе стороны: ты можешь вызвать /review, но и Claude может сам решить подгрузить скилл, если его description совпадает с контекстом разговора. Написал «проверь этот PR» — и Claude автоматически подтянет скилл с описанием «Review pull requests for code quality».

Управляется это двумя полями в frontmatter:

  • disable-model-invocation: true — только ты можешь вызвать. Claude не видит этот скилл в контексте и не может его подгрузить. Используй для /deploy, /commit, /send-slack — всего, где важен контроль момента запуска
  • user-invocable: false — только Claude может вызвать. Скилл не показывается в меню /. Используй для фоновых знаний: контекст legacy-системы, архитектурные решения, domain knowledge
---
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

Этот скилл никогда не сработает сам — только по явному /deploy staging.

Чем скиллы реально мощнее

Аргументы с позиционным доступом

Обе системы поддерживают $ARGUMENTS. Но скиллы дают позиционный доступ — $ARGUMENTS[0], $ARGUMENTS[1] или сокращённо $0, $1:

---
name: migrate-component
description: Migrate a component from one framework to another
---

Migrate the $0 component from $1 to $2.
Preserve all existing behavior and tests.

/migrate-component SearchBar React Vue — и Claude знает, что мигрировать, откуда и куда.

Динамический контекст

Синтаксис !`command` запускает shell-команду до того, как Claude увидит промпт, и подставляет вывод:

---
name: pr-summary
description: Summarize changes in a pull request
context: fork
agent: Explore
---

## Pull request context
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`

## Your task
Summarize this pull request...

Claude получает готовый diff и комментарии, а не команды для выполнения. Это препроцессинг, не аналог Bash tool.

Запуск в субагенте

Добавляешь context: fork — и скилл выполняется в изолированном контексте. Основной разговор не засоряется. Результат возвращается как саммари:

---
name: deep-research
description: Research a topic thoroughly
context: fork
agent: Explore
---

Research $ARGUMENTS thoroughly:
1. Find relevant files using Glob and Grep
2. Read and analyze the code
3. Summarize findings with specific file references

У команд из .claude/commands/ ни динамического контекста, ни субагентов нет.

Переменные окружения

Скиллы поддерживают ${CLAUDE_SESSION_ID} и ${CLAUDE_SKILL_DIR} — для логирования, привязки к сессии, ссылок на файлы внутри директории скилла.

Когда использовать commands, а когда skills

Используй .claude/commands/, если:

  • Простой одноразовый промпт без вспомогательных файлов
  • Не нужна автоматическая подгрузка — только ручной вызов
  • Лень создавать директорию (серьёзно, это валидная причина для прототипа)

Переходи на .claude/skills/, если:

  • Нужны шаблоны, скрипты или примеры — всё, что не влезает в один файл
  • Хочешь, чтобы Claude подгружал скилл автоматически по контексту
  • Нужен динамический контекст через !`command`
  • Скилл должен работать в субагенте (context: fork)
  • Планируешь шарить скилл через плагин или npm

По данным официальной документации, Anthropic рекомендует скиллы как основной формат. Команды — это backward compatibility, а не рекомендуемый путь.

Как расходуются токены

Тут важный нюанс, который легко пропустить.

  • Команды — потребляют токены только при вызове. Пока ты не набрал /review, файл не загружается
  • Скиллы с disable-model-invocation: true — аналогично, загружаются только при ручном вызове
  • Скиллы с auto-invocation (по умолчанию) — описание (description) из frontmatter всегда загружается в контекст, чтобы Claude мог решить, когда скилл нужен. Полное содержимое — только при активации

Бюджет на описания скиллов — 2% от контекстного окна, с фолбэком в 16 000 символов. Если скиллов много, часть может быть исключена. Проверить можно командой /context.

Если расход описаний критичен, переменная окружения SLASH_COMMAND_TOOL_CHAR_BUDGET позволяет расширить или сузить бюджет.

Подводные камни

1. Конфликт имён: скилл побеждает команду. Если у тебя есть и .claude/commands/review.md, и .claude/skills/review/SKILL.md, при вызове /review сработает скилл, а не команда. Причём если скилл настроен как user-invocable: false, ты получишь сообщение «This slash command can only be invoked by Claude» — и до команды не доберёшься. Решение: не дублируй имена. При миграции удаляй старый файл из commands/.

2. Prettier ломает frontmatter. Prettier автоматически переформатирует YAML-описание в многострочный формат — и Claude Code перестаёт распознавать скилл. Исправление — добавить # prettier-ignore перед description:

---
name: my-skill
# prettier-ignore
description: Design and create Claude Skills using progressive disclosure principles.
---

3. Файл MUST быть SKILL.md. Не instructions.md, не skill.json, не README.md. Claude Code ищет строго SKILL.md в директории скилла. Назовёшь иначе — скилл просто не загрузится, без ошибок. На момент написания (март 2026) баг с отсутствием warning-сообщения всё ещё открыт.

4. Слишком много скиллов — и часть пропадёт. Описания всех auto-invocable скиллов загружаются в контекст. При 30+ скиллах с длинными описаниями они могут превысить бюджет в 16K символов, и Claude просто не увидит часть из них. /context покажет предупреждение, но только если ты его запросишь.

5. user-invocable: false не блокирует Skill tool. Это поле только убирает скилл из меню /. Claude всё ещё может вызвать его программно через Skill tool. Для полной блокировки нужен disable-model-invocation: true.

Вердикт

Если ты уже пишешь новые автоматизации — пиши скиллами. Формат commands/ жив только ради backward compatibility, и для простых промптов разница в усилиях минимальна: создать директорию и назвать файл SKILL.md вместо review.md — дело десяти секунд. Зато получаешь auto-invocation, поддержку файлов и динамический контекст.

Реальный выигрыш от скиллов начинается, когда промпт разрастается: нужен шаблон, скрипт валидации, примеры. В командах это невозможно — всё в одном файле. В скиллах — progressive disclosure, где Claude загружает только то, что нужно прямо сейчас.

Как попробовать

  1. Проверь, что у тебя Claude Code >= 2.1.3: claude --version

  2. Мигрируй существующую команду за 30 секунд:

# Было: .claude/commands/review.md
# Стало:
mkdir -p .claude/skills/review
mv .claude/commands/review.md .claude/skills/review/SKILL.md
  1. Добавь frontmatter, если ещё нет:
---
name: review
description: Review code changes for quality and consistency
---
  1. Проверь, что Claude видит скилл: спроси What skills are available? или набери / и посмотри список

  2. Прочитай документацию: официальная страница скиллов — самый полный и актуальный источник

$ ls ./related/

Похожие статьи

subscribe.sh

$ cat /dev/blog/updates

> Свежие заметки о программировании,

> DevOps и AI — прямо в мессенджер

./subscribe