Свои команды — это кнопки на пульте под твои сценарии: один раз записал промт в файл, и дальше зовёшь его коротким /имя. Разберём, как создать первую команду, передавать аргументы и подтягивать вывод терминала.
Если ты пишешь Claude один и тот же длинный промт в каждом проекте — «сделай ревью по нашему чек-листу», «собери коммит по конвенции», — самое время превратить его в команду. Кастомная slash-команда (своя команда через слеш) — это просто markdown-файл с готовым промтом, к которому ты обращаешься коротким /имя. Никакого кода, никаких плагинов: создал файл, и команда работает.
Что узнаешь из гайда
$ARGUMENTS и подтягивать вывод bashЧасть 1 · Понятие
Главное
Кастомная команда — это markdown-файл с промтом, который Claude выполняет, когда ты зовёшь его через /имя. Имя файла = имя команды. Кода нет, есть только текст инструкции.
Расшифруем. Slash-команда — это всё, что ты вводишь в чате Claude Code через слеш: /clear, /compact, /init. Встроенные команды идут «из коробки». А кастомные ты добавляешь сам: кладёшь файл в специальную папку, и его имя становится новой командой. Внутри файла — обычный текст, тот самый промт, что ты раньше копировал вручную.
Зачем это нужно. Промт, который ты повторяешь, перестаёт жить в голове и буфере обмена. Он лежит в файле, его видит вся команда (если файл в гите), его можно улучшать как код. Разовое поручение остаётся промтом, а вот повторяемый сценарий заслуживает своей команды.
| Инструмент | Как запускается | Где живёт |
|---|---|---|
| Промт | Пишешь руками в чате | В голове и буфере |
| Slash-команда | Явный вызов: /имя | Файл в .claude/commands |
| Скил | Claude подключает сам по описанию | Файл SKILL.md, фоном |
Полный разбор встроенных команд — в гайде про все команды Claude Code. А чем команда отличается от навыка, который подключается сам, — подробно в гайде про скилы Claude Code.
Часть 2 · Старт
Главное
Создаёшь файл .claude/commands/имя.md, пишешь внутрь промт — всё. Команда /имя появляется сразу, без перезапуска.
Сделаем команду /review, которая запускает ревью кода по твоему чек-листу. Создаём папку и файл внутри проекта:
# Папка для проектных команд (поедет в гит вместе с кодом)
mkdir -p .claude/commands
# Дальше кладём review.md — имя файла станет именем команды /reviewСодержимое review.md — обычный markdown. Это и есть промт, который выполнится по команде /review:
Сделай ревью изменений в текущей ветке. Проверь по чек-листу:
1. Логика и крайние случаи (пустой ввод, ошибки, гонки)
2. Обработка ошибок — нет проглоченных исключений
3. Нет утечек секретов и небезопасных мест
4. Тесты покрывают новое поведение
Выдай список замечаний по приоритету, без воды.Теперь в чате Claude Code набираешь /review, и модель выполняет ровно этот сценарий. Не нужно каждый раз вспоминать формулировку: она зафиксирована в файле. Хочешь поправить чек-лист — правишь файл, как обычный код.
Личные против проектных
Папка .claude/commands/ в репозитории — команда едет в гит, вся команда получает её при git pull. Папка ~/.claude/commands/ в домашней директории — личная команда, работает во всех проектах, но в гит не попадает. Общий сценарий команды держи в проекте, личные привычки — дома.
Часть 3 · Динамика
Главное
Плейсхолдер $ARGUMENTS подставляет в команду весь текст после имени, а $0, $1 — отдельные аргументы по порядку. Так одна команда работает с любыми входными данными.
Команда без аргументов делает всегда одно и то же. Но часто хочется параметра: «протестируй вот этот паттерн», «почини вот эту задачу». Тут и нужен $ARGUMENTS — на его место встанет всё, что ты напишешь после имени команды.
---
argument-hint: [паттерн-теста]
description: Прогнать тесты по паттерну и починить упавшие
---
Прогони тесты по паттерну: $ARGUMENTS
1. Определи фреймворк тестов (Jest, pytest и т.п.)
2. Запусти тесты с этим паттерном
3. Если упали — найди причину и почини
4. Перезапусти, чтобы убедиться, что зеленоВызов /test auth подставит auth на место $ARGUMENTS. Если аргументов несколько и они разные по смыслу — разбирай их позиционно через $0 и $1. Например, для команды /fix-issue 123 high в теле $0 будет 123, а $1 — high.
Команда может сама собрать контекст из терминала ещё до того, как Claude начнёт работу. Префикс ! перед строкой в обратных кавычках выполняет bash-команду, и её вывод попадает прямо в промт. Это мощно для команд вокруг git:
---
# Перечисляем, какие именно bash-вызовы команде разрешены
allowed-tools: Bash(git add *), Bash(git status *), Bash(git commit *)
description: Собрать git-коммит по изменениям
---
## Контекст
- Текущий статус: !`git status`
- Текущий дифф: !`git diff HEAD`
## Задача
Собери коммит с осмысленным сообщением по этим изменениям.К моменту, когда Claude читает задачу, статус и дифф уже подставлены в текст. Модель не тратит ход на отдельный вызов git status — контекст готов. Безопасный git-воркфлоу с командами и ветками разбираем отдельно в гайде про Claude Code и Git.
Часть 4 · Заголовок
Главное
Между --- в начале файла живёт YAML-заголовок: description (что команда делает), argument-hint (подсказка по аргументам), allowed-tools (что разрешено) и model (какая модель). Все поля необязательны.
Заголовок — это настройки команды. Без него файл всё равно работает, но с ним команда становится аккуратнее: в списке команд видно описание, а Claude понимает границы. Разбор по полям:
| Поле | Зачем |
|---|---|
| description | Короткое пояснение, показывается в списке команд |
| argument-hint | Подсказка, какие аргументы команда ждёт |
| allowed-tools | Какие инструменты команда вправе использовать |
| model | Конкретная модель под эту команду (если нужна не дефолтная) |
---
allowed-tools: Read, Grep, Glob
description: Скан кода на уязвимости
model: claude-opus-4-7
---
Проанализируй код на уязвимости:
- SQL-инъекции
- XSS
- утёкшие секреты и ключи
- небезопасные конфигурацииЗдесь команда ограничена чтением (Read, Grep, Glob) — она не сможет ничего изменить, только проанализировать. Это разумно для проверяющих команд: меньше прав, меньше шанс что-то сломать.
Коротко
.claude/commands/ (проект) или ~/.claude/commands/ (везде). Имя файла = имя команды.$ARGUMENTS или $0/$1. Вывод bash — через !`...`.---: описание, подсказка, инструменты, модель. Все поля опциональны.Часть 5 · Порядок
Главное
Когда команд много, раскидывай их по подпапкам внутри commands/. Папка становится пространством имён: frontend/component.md попадёт в группу frontend. Имя самой команды при этом остаётся коротким.
Десяток команд в одной папке быстро превращается в кашу. Подпапки наводят порядок: команды по фронту в frontend/, по бэку в backend/. Имя команды от этого не удлиняется, но в списке видно, к какой области она относится.
.claude/commands/
├── frontend/
│ ├── component.md # /component (группа frontend)
│ └── style-check.md # /style-check (группа frontend)
├── backend/
│ ├── api-test.md # /api-test (группа backend)
│ └── db-migrate.md # /db-migrate (группа backend)
└── review.md # /review (без группы)Дальше — по тому же принципу, что и со скилами: заводи команды только под сценарии, которые реально повторяешь. По шагам:
.claude/commands/, внутри — тот самый промт.$ARGUMENTS вместо жёсткого значения.Повторяемый промт — кандидат в команду. Разовый — остаётся промтом.
Когда команда не нужна
Если инструкция одноразовая или специфична для одного чата — это просто промт, не команда. Общие правила всего проекта (стиль кода, конвенции) лучше держать в CLAUDE.md — он читается всегда. А если хочешь, чтобы инструкция подключалась сама без явного вызова, — это уже скил, а не команда.
Пример набора
У вайбкодера обычно живут 4-6 команд: /review, /commit, /test, /fix-issue и пара под свой стек. Этого хватает на рутину. Всё остальное — разовые промты или скилы.
Коротко
$ARGUMENTS, вывод bash через !`...`, настройки в YAML-заголовке.Вопросы
Создай markdown-файл в папке .claude/commands/ внутри проекта или в ~/.claude/commands/ для личных команд. Имя файла становится именем команды: review.md даёт /review. В теле файла — обычный текст промта, который Claude выполнит при вызове команды. Перезапуск не нужен, команда появляется сразу.
Slash-команду ты вызываешь руками через /имя, а скил Claude подключает сам по описанию, когда задача подходит. Команда — это кнопка на пульте: нажал и получил готовый сценарий. Скил — фоновая способность, которую модель достаёт автоматически. Команды удобны для действий, что ты запускаешь осознанно: «сделай ревью», «собери коммит».
Используй плейсхолдер $ARGUMENTS в теле команды — туда подставится весь текст после имени команды. Для нескольких аргументов по отдельности бери $0, $1 и так далее. Например, /fix-issue 123 high подставит $0 = 123 и $1 = high. Так одна команда работает с разными входными данными.
Проектные команды лежат в .claude/commands/ внутри репозитория и едут в гит вместе с кодом — вся команда получает их при git pull. Личные команды лежат в ~/.claude/commands/ и работают во всех проектах, но в гит не попадают. Выбор зависит от того, нужна команда всей команде или только тебе.
Читать дальше
Прикладной материал, разборы и рабочие приёмы — то, чем пользуюсь сам, без воды. Залетай, там самое полезное.
Зайти в Telegram