Часть III · Оркестрация и воркфлоу · Глава 06
06

Command → Agent → Skill на практике

В Главе 01 мы увидели три примитива. Теперь соберём из них рабочий поток и вытащим главный урок репозитория: дисциплина по слоям важнее сообразительности модели. Разбираем weather-оркестрацию по контрактам.

~13 минут источник: orchestration-workflow/orchestration-workflow.md Claude Code v2.1.179
§1 · Одна ответственность на слой

Дирижёр, исполнитель, мастер

Сигнатурный паттерн репозитория звучит просто: команда дирижирует и говорит с пользователем, агент достаёт данные своим предзагруженным скиллом, отдельный скилл рендерит результат. Сила не в самой цепочке, а в том, что у каждого слоя ровно одна работа, и границы между ними жёсткие.

Возьмём пример из репозитория целиком и проследим, что именно происходит на каждом шаге.

трасса выполнения /weather-orchestratortrace
Вход: /weather-orchestrator
├─ Шаг 1: Спрашивает — Celsius или Fahrenheit?
│  └─ Пользователь: Celsius
├─ Шаг 2: Agent tool → weather-agent
│  ├─ предзагружен skill: weather-fetcher  (знание в контексте)
│  ├─ тянет из Open-Meteo → 26°C
│  └─ возвращает: temperature=26, unit=Celsius
├─ Шаг 3: Skill tool → weather-svg-creator
│  ├─ создаёт: orchestration-workflow/weather.svg
│  └─ пишет:   orchestration-workflow/output.md
└─ Итог: единицы, температура, путь к карточке и сводке
Каждый слой получает на вход результат предыдущего и отдаёт ровно свой кусок. Fetch (агент) → Render (скилл): чистое разделение.
§2 · Контракты исполнения

Главный урок: fail-closed

Самое ценное в этом примере — не цепочка, а «execution contract» в теле каждого файла. Команде запрещено доставать данные самой; агенту запрещено ходить в сеть в обход скилла; если предыдущий слой не вернул валидный результат, следующий не запускается.

контракты по слоямnon-negotiable
# команда (/weather-orchestrator):
You are forbidden from fetching weather yourself via Bash/WebFetch.
You MUST delegate to the weather-agent subagent.
Fail-closed: if the agent returns no numeric temp+unit → STOP, don't render.

# агент (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.
Контракт усилен дважды: словами в теле и урезанным allowedTools в шапке. Слова задают намерение, allowlist делает обход физически невозможным.
Почему это переносится на любой воркфлоу

Модель умна, но недетерминированна. Контракт + урезанные инструменты + остановка на невалидном входе превращают «обычно работает» в «работает предсказуемо». На проде это и есть разница между демкой и инструментом.

§3 · Два паттерна скиллов

Предзагрузка против вызова

В одном потоке скиллы участвуют двумя разными способами. Перепутать легко, и это меняет поведение.

Agent Skill · предзагрузка

weather-fetcher

В поле skills: агента. Полный текст вшит в контекст агента на старте как знание. Отдельно не вызывается, агент ему следует.

Skill · прямой вызов

weather-svg-creator

Вызывается командой через Skill(...). Работает в контексте команды, берёт данные, уже лежащие в разговоре.

Правило выбора: знание, которое нужно агенту всегда → предзагрузка. Действие, которое запускают в нужный момент → вызов.

§4 · Собери свою

Рецепт оркестрации под задачу

Тот же скелет переносится на что угодно: триаж PR, релизные заметки, разбор инцидента. Шаги одинаковы.

Когда НЕ оркестровать

Если задача атомарная и одношаговая, цепочка только добавит слоёв и латентности. Оркестрация окупается, когда есть разделимые роли (координация / тяжёлая работа / рендер) или нужен параллелизм и изоляция. Иначе хватит одной команды.

Шпаргалка главы

Пять тезисов на вынос

  1. Одна ответственность на слой: команда координирует, агент добывает, скилл рендерит.
  2. Контракты исполнения в теле каждого файла: запреты явные, обход закрыт.
  3. Allowlist как принуждение: урезанные инструменты делают «срезать угол» невозможным, а не просто нежелательным.
  4. Два паттерна скиллов: предзагрузка знания в агента против вызова действия командой.
  5. Скелет универсален, но оркестрация окупается только на разделимых ролях. Атомарное оставь одной команде.