Почти всё, что умеет Claude Code сверх «голого чата», собирается из трёх кирпичей. Команда оркеструет. Субагент изолирует. Скилл переиспользует. Освоишь их стыковку — дальше идёт композиция, а не новые сущности.
Репозиторий, по которому мы идём, помечает свои примеры ровно тремя буквами в кружках: a — agents, c — commands, s — skills. Это не случайный набор: каждый из примитивов отвечает на свой вопрос, и вместе они закрывают почти весь спектр расширения Claude Code.
Важная ремарка от создателя Claude Code, прежде чем нырять: базовый продукт сознательно держат простым. Кастомизация — это усилитель, а не входной билет.
“Мой сетап на удивление ванильный. Claude Code отлично работает из коробки, поэтому я почти ничего не настраиваю. Правильного способа нет: мы строим его так, чтобы каждый использовал, кастомизировал и хакал по-своему.
Из этого следует рабочая установка на всю главу: каждый примитив добавляют только тогда, когда он окупает свою цену — лишний контекст, лишний слой, лишний файл в git. Дальше разберём цену и выгоду каждого, на живых файлах из репозитория, а в финале соберём их в один поток.
Команда — это файл-сценарий, который ты вызываешь слэшем (/commit-push-pr) или Claude подхватывает автоматически по описанию. Её роль — точка входа и дирижёр: задать пользователю вопрос, дёрнуть нужного субагента, вызвать скилл, собрать результат. Ключевая ценность — детерминизм: то, что ты делаешь по десять раз в день, перестаёт зависеть от того, как ты сегодня сформулировал промпт.
“Используй слэш-команды для каждого «inner loop»-воркфлоу, который повторяешь много раз в день. Это избавляет от повторного промптинга и позволяет самому Claude пользоваться этими воркфлоу.
YAML-шапка управляет тем, как команда исполняется. Минимум — пустой frontmatter (имя возьмётся из имени файла); всё остальное опционально, но именно эти поля превращают команду из «текстовой заготовки» в управляемый процесс.
| Поле | Тип | Req | Назначение |
|---|---|---|---|
| name | string | no | Имя и /слэш. По умолчанию — имя директории. |
| description | string | rec | Что делает. Видно в автокомплите и используется Claude для авто-подхвата. |
| when_to_use | string | no | Триггер-фразы и примеры запросов. Дописывается к description, входит в лимит 1536 символов. |
| argument-hint | string | no | Подсказка в автокомплите, напр. [issue-number]. |
| arguments | str/list | no | Именованные позиционные аргументы для подстановки $name. |
| disable-model-invocation | bool | no | true — запретить Claude вызывать команду самому. |
| user-invocable | bool | no | false — спрятать из меню /, оставив фоновым знанием. |
| paths | str/list | no | Glob-паттерны: активировать только при работе с подходящими файлами. |
| allowed-tools | string | no | Инструменты без запроса разрешения, пока команда активна. |
| disallowed-tools | str/list | no | Инструменты, убранные из пула. Сбрасывается со следующим сообщением. |
| model | string | no | Модель на время выполнения: haiku/sonnet/opus. |
| effort | string | no | Уровень усилия: low…max. |
| context | string | no | fork — выполнить в изолированном субагент-контексте. |
| agent | string | no | Тип субагента при context: fork (по умолч. general-purpose). |
| shell | string | no | Шелл для !`команд`: bash или powershell. |
| hooks | object | no | Lifecycle-хуки, привязанные к этой команде. |
Команда /weather-orchestrator ничего не делает руками — она дирижирует. Обрати внимание на allowed-tools (только то, что нужно дирижёру) и на «Execution Contract» в теле: команде запрещено доставать данные самой, она обязана делегировать.
--- description: Fetch Dubai weather and create an SVG weather card model: haiku allowed-tools: - AskUserQuestion - Agent - Skill --- # Weather Orchestrator Command ## Execution Contract (non-negotiable) You MUST complete this command by delegating to the weather-agent subagent. You are forbidden from: - Fetching weather data yourself via Bash, WebFetch, or any other tool - Calling weather-svg-creator before the agent returns a temperature ## Workflow Step 1 — AskUserQuestion: Celsius or Fahrenheit? Step 2 — Agent tool → weather-agent (returns temp + unit) Step 3 — Skill tool → weather-svg-creator (writes svg + md)
В Claude Code 85 встроенных слэш-команд (от /login и /compact до /goal, /ultraplan, /workflows). Твои кастомные команды живут рядом, в .claude/commands/, и коммитятся в git — то есть шарятся на всю команду.
Субагент — это отдельный «работник» с собственным окном контекста, своей моделью, своим allowlist'ом инструментов и (опционально) своей памятью. Главная выгода — изоляция: грязная работа (долгий поиск, шумный вывод, рискованные инструменты) не засоряет твой основной контекст, а результат возвращается сжатым. Борис ставит субагенты в один ряд с командами.
“Думай о субагентах как об автоматизации самых частых воркфлоу — так же, как о слэш-командах. code-simplifier чистит код после Claude, verify-app прогоняет end-to-end тесты, и так далее.
| Поле | Тип | Req | Назначение |
|---|---|---|---|
| name | string | yes | Уникальный id (lowercase + дефисы). |
| description | string | yes | Когда вызывать. PROACTIVELY — для авто-вызова. |
| tools | str/list | no | Allowlist инструментов. Без поля — наследует все. Поддерживает Agent(type). |
| disallowedTools | str/list | no | Что убрать из наследованного/заданного списка. |
| model | string | no | sonnet/opus/haiku/полный id/inherit (умолч.). |
| permissionMode | string | no | default/acceptEdits/auto/dontAsk/bypassPermissions/plan. |
| maxTurns | int | no | Потолок агентных ходов до остановки. |
| skills | list | no | Скиллы, предзагружаемые в контекст на старте (полный текст инжектится). |
| mcpServers | list | no | MCP-серверы для этого субагента (имена или инлайн-конфиги). |
| hooks | object | no | Lifecycle-хуки субагента (чаще всего PreToolUse/PostToolUse/Stop). |
| memory | string | no | Постоянная память: user/project/local. |
| background | bool | no | true — всегда запускать фоновой задачей. |
| effort | string | no | low…max; xhigh только для Opus 4.6. |
| isolation | string | no | "worktree" — выполнить во временном git-worktree (авто-очистка). |
| initialPrompt | string | no | Авто-первый ход, когда агент — главный (через --agent). |
| color | string | no | Цвет в списке задач и транскрипте. |
isolation: "worktree" — субагент работает в собственном git-worktree, изменения не пересекаются с твоими. memory: project — у агента появляется персистентная память между запусками. effort и model на уровне агента — дорогой Opus только там, где он реально нужен, остальное на haiku. Эти поля и есть разница между «агент ради галочки» и управляемым исполнителем.
Самый поучительный приём в weather-agent — он намеренно лишён сетевых инструментов. Не потому что не доверяют, а чтобы единственным способом достать данные был вызов скилла. Allowlist здесь — не безопасность, а архитектурное принуждение.
--- name: weather-agent description: Use this agent PROACTIVELY to fetch weather for Dubai… allowedTools: ["Read", "Skill"] # нет WebFetch — by design model: sonnet color: green maxTurns: 5 permissionMode: acceptEdits memory: project # помнит прошлые замеры skills: - weather-fetcher # предзагружен в контекст hooks: PreToolUse: # голосовое уведомление на каждый инструмент - matcher: ".*" hooks: [{ type: command, command: python3 …/hooks.py, async: true }] --- # Weather Agent Your tool allowlist intentionally excludes network tools — if you find yourself needing one, that is a signal you are bypassing the skill. Stop and use Skill(weather-fetcher) instead.
Их не нужно объявлять — они встроены и доступны как subagent_type. Знать их полезно: дешёвый Explore на haiku закрывает 80% задач «найди по коду».
| Тип | Модель | Инструменты | Для чего |
|---|---|---|---|
| general-purpose | inherit | все | Сложные многошаговые задачи, ресёрч, автономная работа — дефолт. |
| Explore | haiku | read-only | Быстрый поиск по коду; находит файлы и отвечает на вопросы о кодбазе. |
| Plan | inherit | read-only | Ресёрч в plan mode: изучить код и спроектировать подход до написания. |
| statusline-setup | sonnet | Read, Edit | Настройка статус-строки. |
| claude-code-guide | haiku | Glob,Grep,Read,Web* | Ответы про фичи Claude Code, Agent SDK и Claude API. |

Скилл легко принять за «просто markdown с инструкцией». Это недооценка. Скилл — это папка: внутри могут лежать скрипты, ассеты, данные, справочники, которые агент открывает по мере надобности. Отсюда главная идея — прогрессивное раскрытие: лёгкое описание всегда в контексте, тяжёлые детали подгружаются только когда нужны.
“Распространённое заблуждение, что скиллы — «просто markdown-файлы». Самое интересное в том, что это папки: со скриптами, ассетами, данными — тем, что агент может находить, исследовать и менять.
Почти зеркало команды — и это не совпадение (к конвергенции вернёмся в §5). Два поля стоит выделить особо: user-invocable: false превращает скилл в чистое «фоновое знание» для предзагрузки в агента, а description — это не аннотация для человека, а триггер для модели.
| Поле | Тип | Req | Назначение |
|---|---|---|---|
| name | string | no | Имя и /слэш. По умолчанию — имя директории. |
| description | string | rec | Когда вызывать (триггер для модели), не «что это». |
| when_to_use | string | no | Триггер-фразы/примеры. Часть листинга, лимит 1536 символов. |
| argument-hint | string | no | Подсказка автокомплита. |
| arguments | str/list | no | Именованные аргументы для $name. |
| disable-model-invocation | bool | no | Запретить авто-вызов моделью. |
| user-invocable | bool | no | false — скрыть из /, оставить для предзагрузки в агента. |
| allowed-tools | string | no | Инструменты без запроса, пока скилл активен. |
| disallowed-tools | str/list | no | Убрать инструменты (напр. заблокировать AskUserQuestion в фоновом цикле). |
| model | string | no | Модель на время работы скилла. |
| effort | string | no | Уровень усилия low…max. |
| context | string | no | fork — изолированный субагент-контекст. |
| agent | string | no | Тип субагента при context: fork. |
| hooks | object | no | Хуки, живущие только пока скилл активен (on-demand). |
| paths | str/list | no | Glob: авто-активация только на подходящих файлах. |
| shell | string | no | Шелл для !`команд`. |
weather-fetcher — это «agent skill»: user-invocable: false, поэтому он не светится в меню, а предзагружается в weather-agent. Внутри — только инструкция и два URL. Никакой логики записи файлов: одна ответственность.
--- name: weather-fetcher description: Instructions for fetching current temperature for Dubai from Open-Meteo user-invocable: false # фоновое знание, не слэш-команда allowed-tools: ["WebFetch(*)"] --- # Weather Fetcher Skill 1. WebFetch → Open-Meteo: C°: …/forecast?latitude=25.2048&longitude=55.2708¤t=temperature_2m 2. Extract current.temperature_2m + current_units.temperature_2m 3. Return value + unit. # не трансформируй, не пиши файлы
Команда Thariq разложила сотни своих скиллов и увидела девять повторяющихся категорий. Лучшие скиллы ложатся ровно в одну; путаные — растягиваются на несколько. Полезно как чек-лист «а какой скилл я вообще пишу».

| # | Категория | Примеры |
|---|---|---|
| 1 | Library & API Reference | billing-lib, internal-cli, frontend-design |
| 2 | Product Verification | signup-flow-driver, checkout-verifier, tmux-cli-driver |
| 3 | Data Fetching & Analysis | funnel-query, cohort-compare, grafana |
| 4 | Business Process / Team Automation | standup-post, create-ticket, weekly-recap |
| 5 | Code Scaffolding & Templates | new-migration, create-app, new-workflow |
| 6 | Code Quality & Review | adversarial-review, code-style, testing-practices |
| 7 | CI/CD & Deployment | babysit-pr, deploy-service, cherry-pick-prod |
| 8 | Runbooks | service-debugging, oncall-runner, log-correlator |
| 9 | Infrastructure Operations | resource-orphans, dependency-mgmt, cost-investigation |
Из девяти его советов четыре стоит запомнить дословно — они экономят недели.

Часть скиллов уже в коробке: code-review, debug, simplify, loop, verify, run, batch, claude-api, fewer-permission-prompts, run-skill-generator. С v2.1.154 simplify больше не ищет баги (только чистка) — для багов используют code-review.
Сигнатурный паттерн репозитория — Command → Agent → Skill. Команда дирижирует и говорит с пользователем; агент достаёт данные своим предзагруженным скиллом; отдельный скилл рендерит результат. Каждый слой — одна ответственность. Вот тот же weather-пример целиком, на одной схеме.
Схема перерисована под тему главы; канонический оригинал — orchestration-workflow/orchestration-workflow.svg.
Главная тонкость примера: скиллы участвуют двумя разными способами, и их легко перепутать.
Указан в поле skills: агента. Полный текст инжектится в контекст агента на старте как доменное знание. Отдельно не «вызывается» — это справочник, которому агент следует.
Вызывается командой через Skill(...). Исполняется в контексте команды, не внутри агента, и берёт данные (температуру), уже лежащие в разговоре.
Fail-closed контракты. На каждом стыке стоит «execution contract»: команда не достаёт данные сама, агент не ходит в сеть в обход скилла, и если предыдущий слой не вернул валидный результат — следующий не запускается. Дисциплина по слоям важнее, чем сообразительность модели: именно она делает поток предсказуемым на проде.
Все три примитива умеют model, effort, hooks, context: fork — frontmatter сознательно сходится. Поэтому выбор идёт не по «возможностям», а по намерению.
| Намерение | Примитив | Почему |
|---|---|---|
| Запускать один и тот же воркфлоу по N раз в день одной строкой | Command | Детерминированный вход, коммитится в git, доступен и тебе, и Claude. |
| Унести шумную/долгую/рискованную работу из основного контекста | Subagent | Свой контекст, своя модель, урезанные инструменты, опц. worktree-изоляция. |
| Переиспользовать знание «как сделать X правильно» | Skill | Папка с прогрессивным раскрытием; триггерится по description. |
| Дать агенту доменное знание навсегда | Skill → в agent.skills | Паттерн A: предзагрузка в контекст агента на старте. |
| Скоординировать несколько агентов и скиллов в один результат | Command | Оркестратор поверх остальных двух — сигнатурный Command→Agent→Skill. |
Эвристика на каждый день: начни с команды. Если внутри неё появляется грязная или параллелизуемая работа — выдели субагента. Если в агенте/команде всплывает знание, которое хочется переиспользовать в других местах — вынеси его в скилл. Сущности добавляются по нужде, а не заранее.