Використовуй посилання @file, allowed-tools, субагенти та MCP-інструменти, щоб перетворити slash-команди з ярликів на командну бібліотеку воркфлоу.
Перші дві статті розповіли, що таке slash command (Markdown-файл) і як префіксом ! впроваджувати вивід shell у контекст. Ця йде далі: як змусити одну команду оркеструвати найпотужніші можливості Claude Code — посилання на файли, субагенти, MCP-інструменти — і при цьому тримати права під контролем.
На цьому рівні команда перестає бути просто «ярликом для промпту» і стає невеликим багаторазовим воркфлоу.
@file: статичне впровадження краще за !cat!cat file.md теж уміє проштовхнути вміст файлу в контекст, але робить це через shell, і в підходу купа мінусів: кожен запуск піднімає підпроцес; пробіли і спецсимволи в шляху треба екранувати; і Claude Code бачить результат не як «файл», а просто як шмат тексту.
Посилання @ — нативне:
---
description: Ревʼю змін за правилами проєкту
---
Орієнтуйся на такі правила:
@.claude/context/coding-standards.md
@.claude/context/security-checklist.md
Тепер перевір зміни у git diff і вкажи всі порушення правил.
!`git diff HEAD`
@шлях говорить Claude Code: «причепи цей файл до розмови як вкладення». Різниця:
| Сценарій | З !cat |
З @ |
|---|---|---|
Шлях з аргументу ($ARGUMENTS) |
✅ тільки !cat |
❌ @ не розгортає змінні |
| Фіксовані правила й шаблони проєкту | ⚠️ можна, але важко | ✅ нативно, економить виклик shell |
| Динамічний вміст (diff, логи, результати тестів) | ✅ лише ! |
❌ неможливо |
Правило: статичні файли — через @, динамічний вивід — через !, шлях з аргументу — !cat $ARGUMENTS.
allowed-tools: задати команді межі правЗа замовчуванням під час виконання команди модель може використовувати всі інструменти сесії. Це не завжди те, що тобі треба — наприклад, /review — це ревʼю в режимі лише читання, і ти не хочеш, щоб воно «заодно» правило рядок коду.
Якщо додати в frontmatter allowed-tools, на час роботи команди дозволені лише перелічені інструменти:
---
description: Код-ревʼю лише для читання
allowed-tools: Read, Grep, Glob, Bash(git diff:*), Bash(git log:*)
---
Порівняй поточну гілку з master, лише читай, нічого не змінюй.
!`git diff master...HEAD`
Декілька важливих деталей:
Bash(git diff:*) — це точковий дозвіл: дозволені тільки bash-виклики, що починаються з git diff; git push буде заблокованоRead / Grep / Glob явно відкривають лише інструменти читанняEdit / Write не перелічені — навіть якщо модель захоче поправити код, у неї просто немає такого інструментаІ навпаки, команду з високими правами на кшталт /deploy можна авторизувати явно:
---
description: Задеплоїти поточну гілку
allowed-tools: Bash(kamal deploy:*), Bash(git push:*), Read
---
Жорстко зафіксувати «що ця команда має право робити» надійніше, ніж щоразу вручну підтверджувати bash-промпт під час запуску.
Деякі задачі роздувають контекст основної розмови — пройти десятки файлів у пошуку всіх викликів функції, порахувати статистику по кодовій базі, розібрати великий шмат логів. Якщо робити це напряму, тисячі рядків виводу лишаються в контексті, і подальша розмова стає повільною й туплячою.
Правильний спосіб — віддати таку роботу subagent: субагент крутиться у своєму окремому контексті й повертає в основну розмову лише висновок. У команді достатньо явно це вказати:
---
description: Глибоке дослідження всіх використань символу
allowed-tools: Task
---
Використай субагент Explore, щоб глибоко дослідити всі використання символу: $ARGUMENTS
Субагент має покрити:
- Усі точки виклику (включно з тестовими файлами)
- Зачеплені бізнес-сценарії
- Наявність еквівалентних альтернативних реалізацій
Коли субагент повернеться, дай лише стислий підсумок ≤300 слів, без вставки сирих фрагментів коду.
Запуск /trace SomeClass#some_method піднімає в Claude Code субагент Explore, який паралельно сканує кодову базу; в основну розмову прилітає тільки витяжка. Жодного виводу grep, жодних фрагментів файлів, контекст чистий.
Далі крутіше:
---
description: Паралельне дослідження трьох кандидатів
allowed-tools: Task
---
Запусти одночасно 3 субагенти, кожен хай дослідить один з варіантів реалізації:
1. Використати наявний ActiveJob + Sidekiq
2. Використати Solid Queue
3. Зібрати власну легковагу чергу
Кожен агент відповідає: обсяг роботи, ризики, ступінь вторгнення в наявний код. Коли всі три висновки повернуться, порівняння зроблю я.
Три субагенти працюють паралельно, основна розмова чекає один раз. Це один з найбільших важелів, які дає команда: перетворити дослідницьку задачу, що зʼїла б купу токенів, на воркфлоу, запускний однією кнопкою.
Якщо до сесії підключені MCP-сервери (Linear, GitHub, Sentry, власний проксі до БД тощо), команда може прямо попросити модель їх використовувати:
---
description: Згенерувати todo з реалізації за Linear-issue
allowed-tools: mcp__linear__*, Read, Grep
---
Прочитай повний опис і коментарі Linear-issue $ARGUMENTS.
Зістав зі станом кодової бази (релевантні файли знайди сам через Grep/Read) і склади todo на реалізацію:
- Які файли треба змінювати
- Чи кожен крок окремий коміт, чи робимо разом
- Чи є неясні моменти, які треба спершу зʼясувати з PM
Не починай писати код, лише план.
mcp__linear__* дозволяє всі Linear MCP-інструменти — модель може витягнути деталі issue, коментарі, статус. Уся команда перетворюється на точку входу у воркфлоу «від тикета до плану реалізації».
Ключовий момент: в allowed-tools імʼя MCP-інструмента треба писати з повним префіксом (mcp__<server>__<tool>), інакше дозвіл не спрацює.
Дуже поширена помилка: написати /test у файлі /review і думати, що це запустить команду test. Не запустить. Slash command розгортається один раз, на верхньому рівні введення користувача. Усередині команди /xxx — це просто звичайний текст: модель його читає, але Claude Code його не виконує.
Щоб скомпонувати кілька команд, є кілька правильних підходів:
Підхід А: винести спільну логіку у файл контексту, і хай різні команди тягнуть його через @ або !cat
@.claude/context/review-checklist.md
@.claude/context/security-checklist.md
Підхід Б: прямо в команді написати «роби як /review» + повторити ключові інструкції
Некрасиво, але працює. Поки промпт достатньо чіткий, модель піде тим самим шляхом.
Підхід В: одна команда через інструмент Task піднімає субагента, а в промпті субагента повторно використовуються ті самі файли контексту
Справжня оркестрація воркфлоу йде саме цією дорогою. Батьківська команда диригує і збирає підсумок, субагент виконує конкретні кроки.
Антипатерн, якого треба уникати: писати команду на кілька сотень рядків, намагаючись зробити все однією вказівкою. Гранулярність сиплеться, вартість підтримки злітає, і бюджет токенів одного запуску зʼїдається однією командою.
На цей момент у Claude Code уже зібрано майже весь набір механізмів для впровадження «зовнішніх можливостей» у команду. Як вибирати:
| Потреба | Бажаний механізм |
|---|---|
| Фіксовані правила, шаблони, документи контексту | Посилання @file |
| Живий стан (diff, логи, результати тестів, запити до БД) | Інʼєкція !shell |
| Параметризований вміст файлу | !cat $ARGUMENTS |
| Затратне за контекстом дослідження, пошук по багатьох файлах | subagent через Task |
| Зовнішні системи (трекер, моніторинг, прод) | MCP-інструменти + allowed-tools |
| Багатокрокові послідовні/паралельні воркфлоу | Батьківська команда диригує субагентами |
Межі прав оголошуй явно через allowed-tools, особливо для команд, якими користується вся команда розробників — жорстко зафіксувати, що команда вміє, надійніше, ніж розраховувати на ручне підтвердження при кожному запуску.
Збираємо все разом — ось команда «дослідити шлях реалізації за Linear-тикетом»:
---
description: Скласти план реалізації на основі Linear-тикета
allowed-tools: mcp__linear__*, Task, Read, Grep, Glob, Bash(git log:*)
---
## Контекст
@.claude/context/architecture.md
@.claude/context/coding-standards.md
## Поточний стан кодової бази
!`git log --oneline -10`
## Задача
Витягни опис, коментарі та повʼязані тикети Linear-тикета $ARGUMENTS.
Потім підніми двох субагентів паралельно:
1. Перший: знайди в кодовій базі всі повʼязані наявні реалізації та модулі для перевикористання
2. Другий: оціни ризики — які високонавантажені ділянки коду зачепить ця зміна, чи є прогалини в покритті тестами
Коли обидва повернуться, видай:
- Кроки реалізації (упорядковані за залежностями)
- Список ризиків
- Рекомендовану гранулярність комітів
Код поки не пиши.
Запуск /plan ENG-4213, і одна команда проганяє весь ланцюжок: витягнути тикет → паралельне дослідження кодової бази → оцінка ризиків → зведення плану. Користувачу лишається лише прочитати підсумок і вирішити, чи починати.
Це повна дуга перших трьох статей серії про slash command: визначити багаторазові промпти (intro) → динамічно впроваджувати контекст (context) → оркеструвати інструменти та субагенти (ця стаття). На цьому рівні .claude/commands/ — це вже не тека ярликів, а невелика бібліотека воркфлоу команди розробників.