# orchestration

холивары «какая модель умнее» уже скучные. модели у всех плюс-минус одинаковые, а вот результаты - нет. реальный gap сейчас в другом: кто как оркеструет. повидал за последний год кучу сетапов - по сути все они складываются в три уровня. разберем от простого, так чтобы зашло даже если вы вчера поставили свой первый агент, а дальше нырнем глубже

## теория на пальцах

модель сама по себе - это текст-в-текст: спросил - ответила. все.

агент - это модель, которую запустили в цикл и дали руки: терминал, файлы, браузер. сделала шаг - посмотрела что вышло - сделала следующий. и так пока задача не решена (или пока не кончился контекст, но об этом ниже)

оркестрация - это ответ на один вопрос: кто решает, что делать дальше. ты сам? агент? агент над агентами? крон по расписанию? от этого ответа зависит главная метрика - сколько твоего времени стоит одна фича

<figure>
<svg viewBox="0 -14 720 354" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="три уровня оркестрации: ручник, полуавтомат, автомат">
  <defs>
    <marker id="ar1" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path d="M0 0 L8 4 L0 8 z" fill="#262a22"/></marker>
    <marker id="ar1m" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path d="M0 0 L8 4 L0 8 z" fill="#2e6b41"/></marker>
  </defs>
  <line x1="30" y1="292" x2="690" y2="292" stroke="rgba(38,42,34,.25)" stroke-width="1"/>
  <line x1="30" y1="242" x2="240" y2="242" stroke="#262a22" stroke-width="1.6"/>
  <line x1="255" y1="157" x2="465" y2="157" stroke="#262a22" stroke-width="1.6"/>
  <line x1="480" y1="72" x2="690" y2="72" stroke="#262a22" stroke-width="1.6"/>
  <line x1="30" y1="242" x2="30" y2="292" stroke="rgba(38,42,34,.25)" stroke-width="1" stroke-dasharray="3 4"/>
  <line x1="255" y1="157" x2="255" y2="292" stroke="rgba(38,42,34,.25)" stroke-width="1" stroke-dasharray="3 4"/>
  <line x1="480" y1="72" x2="480" y2="292" stroke="rgba(38,42,34,.25)" stroke-width="1" stroke-dasharray="3 4"/>
  <text x="30" y="190" font-family="Bodoni Moda, serif" font-size="34" font-weight="700" fill="#262a22">01</text>
  <text x="30" y="212" font-family="IBM Plex Mono, monospace" font-size="15" font-weight="500" letter-spacing="2" fill="#262a22">РУЧНИК</text>
  <text x="30" y="232" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#5d6156">каждый шаг - твой</text>
  <circle cx="182" cy="200" r="6" fill="#262a22"/>
  <line x1="192" y1="200" x2="218" y2="200" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar1)"/>
  <circle cx="228" cy="200" r="6" fill="none" stroke="#2e6b41" stroke-width="1.8"/>
  <text x="255" y="105" font-family="Bodoni Moda, serif" font-size="34" font-weight="700" fill="#262a22">02</text>
  <text x="255" y="127" font-family="IBM Plex Mono, monospace" font-size="15" font-weight="500" letter-spacing="2" fill="#262a22">ПОЛУАВТОМАТ</text>
  <text x="255" y="147" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#5d6156">ты рулишь оркестратором</text>
  <circle cx="358" cy="108" r="6" fill="#262a22"/>
  <line x1="368" y1="108" x2="390" y2="108" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar1)"/>
  <circle cx="400" cy="108" r="6" fill="#2e6b41"/>
  <line x1="408" y1="105" x2="432" y2="90" stroke="#2e6b41" stroke-width="1.2" marker-end="url(#ar1m)"/>
  <line x1="410" y1="108" x2="434" y2="108" stroke="#2e6b41" stroke-width="1.2" marker-end="url(#ar1m)"/>
  <line x1="408" y1="111" x2="432" y2="126" stroke="#2e6b41" stroke-width="1.2" marker-end="url(#ar1m)"/>
  <circle cx="444" cy="86" r="5.5" fill="none" stroke="#2e6b41" stroke-width="1.8"/>
  <circle cx="444" cy="108" r="5.5" fill="none" stroke="#2e6b41" stroke-width="1.8"/>
  <circle cx="444" cy="130" r="5.5" fill="none" stroke="#2e6b41" stroke-width="1.8"/>
  <text x="480" y="20" font-family="Bodoni Moda, serif" font-size="34" font-weight="700" fill="#2e6b41">03</text>
  <text x="480" y="42" font-family="IBM Plex Mono, monospace" font-size="15" font-weight="500" letter-spacing="2" fill="#262a22">АВТОМАТ</text>
  <text x="480" y="62" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#5d6156">правила работают без тебя</text>
  <circle cx="588" cy="30" r="6" fill="none" stroke="#262a22" stroke-width="1.4" stroke-dasharray="3 3"/>
  <line x1="598" y1="30" x2="622" y2="30" stroke="rgba(38,42,34,.45)" stroke-width="1.2" stroke-dasharray="3 3" marker-end="url(#ar1)"/>
  <circle cx="638" cy="18" r="5.5" fill="#2e6b41"/>
  <circle cx="660" cy="18" r="5.5" fill="#2e6b41"/>
  <circle cx="682" cy="18" r="5.5" fill="#2e6b41"/>
  <circle cx="649" cy="40" r="5.5" fill="#2e6b41"/>
  <circle cx="671" cy="40" r="5.5" fill="#2e6b41"/>
  <circle cx="60" cy="322" r="5.5" fill="#262a22"/>
  <text x="74" y="327" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#5d6156">- ты</text>
  <circle cx="150" cy="322" r="5.5" fill="none" stroke="#2e6b41" stroke-width="1.8"/>
  <text x="164" y="327" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#5d6156">- агенты</text>
  <text x="690" y="327" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#5d6156" text-anchor="end">твоего времени на фичу: вечер -> час -> 5 минут</text>
</svg>
<figcaption>лестница оркестрации: чем выше - тем меньше тебя в цикле</figcaption>
</figure>

и сквозная мысль на весь пост: чем выше уровень, тем меньше решают промпты и тем больше решают правила. промпт живет одну сессию, правило (md файл, скилл, конвенция репозитория) - живет всегда. запомните, ниже пригодится

## уровень 1 - ручник

сидишь в чате с агентом, контролируешь каждый шаг, каждый diff глазами. попросил - посмотрел - поправил - дальше

медленно? да. но насамом деле это обязательный этап, перепрыгивать его нельзя. именно тут калибруется доверие: ты узнаешь, что модель тащит сама, а где стабильно падает. без этой калибровки на верхних уровнях будешь либо перепроверять все (и тогда зачем автоматика), либо вообще не проверять (и тогда жди сюрпризов в проде)

ручник навсегда остается правильным режимом для двух вещей: критичный код (auth, деньги, миграции) и незнакомая кодовая база

## уровень 2 - полуавтомат

ты все еще в чате, но говоришь уже не с исполнителем, а с оркестратором: агент сам спавнит других агентов и разруливает работу между ними. ты рулишь одним - он рулит десятью

зачем это, обьясняю просто: у агента лимит внимания, как у тебя в пятницу вечером. контекстное окно - самый дефицитный ресурс: прочитал двадцать файлов - начал забывать первые. сабагенты решают это разделением труда: каждый копает свой угол в своем чистом контексте, а наверх приносит только выжимку. оркестратор держит картину, воркеры - детали

как это выглядит в живых инструментах:

- сабагенты в Claude Code: главный агент раздает подзадачи, каждый сабагент со своим контекстом, работают параллельно
- threads control в Codex: одна сессия форкает от себя дочерние треды. киллер деталь - fork_context: форк наследует всю память родителя, тоесть клону не надо заново обьяснять проект. лимиты крутятся через agents.max_threads (дефолт 6 параллельных) и max_depth (дефолт 1 - чтобы клоны не плодили клонов до бесконечности)

## уровень 3 - автомат

тут ты уже не в чате. тут три рабочих формата

### лупы / cron

джоба запускается условно каждые 15 минут, ловит новый pull request, делает review, отвечает или мержит. без тебя

и вот тут возвращается мысль из начала: вся магия - в правилах. агент в лупе не думает «как правильно», он читает «как принято тут» - из репозитория, из md файлов, из скиллов. написал правила один раз - они отрабатывают каждые 15 минут вечно. очень недооцененный формат, работает жестко хорошо

### spec-driven

дал спецификацию, ответил на вопросы агента и пошел по своим делам. вечером посмотрел что вышло

такой уровень дает Droid by Factory AI с его mission control. и килер фича там - микс моделей разных семейств в одном pipeline:

<figure>
<svg viewBox="0 0 800 330" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="pipeline: спека, planning, воркеры, верификация, merge">
  <defs>
    <marker id="ar2" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path d="M0 0 L8 4 L0 8 z" fill="#262a22"/></marker>
    <marker id="ar2m" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path d="M0 0 L8 4 L0 8 z" fill="#2e6b41"/></marker>
  </defs>
  <rect x="30" y="130" width="110" height="52" rx="3" fill="#ece7da" stroke="#262a22" stroke-width="1.2"/>
  <text x="85" y="152" font-family="IBM Plex Mono, monospace" font-size="14.5" fill="#262a22" text-anchor="middle">спека</text>
  <text x="85" y="171" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#5d6156" text-anchor="middle">ты, 5 минут</text>
  <line x1="140" y1="156" x2="182" y2="156" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar2)"/>
  <rect x="185" y="130" width="130" height="52" rx="3" fill="#ece7da" stroke="#262a22" stroke-width="1.2"/>
  <text x="250" y="152" font-family="IBM Plex Mono, monospace" font-size="14.5" fill="#262a22" text-anchor="middle">planning</text>
  <text x="250" y="171" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#2e6b41" text-anchor="middle">fable 5</text>
  <line x1="315" y1="146" x2="357" y2="97" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar2)"/>
  <line x1="315" y1="156" x2="357" y2="156" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar2)"/>
  <line x1="315" y1="166" x2="357" y2="215" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar2)"/>
  <rect x="360" y="72" width="150" height="40" rx="3" fill="none" stroke="#2e6b41" stroke-width="1.4"/>
  <rect x="360" y="136" width="150" height="40" rx="3" fill="none" stroke="#2e6b41" stroke-width="1.4"/>
  <rect x="360" y="200" width="150" height="40" rx="3" fill="none" stroke="#2e6b41" stroke-width="1.4"/>
  <text x="435" y="97" font-family="IBM Plex Mono, monospace" font-size="13.5" fill="#262a22" text-anchor="middle">воркер · sol</text>
  <text x="435" y="161" font-family="IBM Plex Mono, monospace" font-size="13.5" fill="#262a22" text-anchor="middle">воркер · sol</text>
  <text x="435" y="225" font-family="IBM Plex Mono, monospace" font-size="13.5" fill="#262a22" text-anchor="middle">воркер · sol</text>
  <line x1="510" y1="92" x2="552" y2="146" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar2)"/>
  <line x1="510" y1="156" x2="552" y2="156" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar2)"/>
  <line x1="510" y1="220" x2="552" y2="166" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar2)"/>
  <rect x="555" y="130" width="140" height="52" rx="3" fill="#ece7da" stroke="#262a22" stroke-width="1.2"/>
  <text x="625" y="152" font-family="IBM Plex Mono, monospace" font-size="14.5" fill="#262a22" text-anchor="middle">верификация</text>
  <text x="625" y="171" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#2e6b41" text-anchor="middle">fable 5</text>
  <line x1="695" y1="156" x2="730" y2="156" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar2)"/>
  <text x="737" y="161" font-family="IBM Plex Mono, monospace" font-size="14.5" fill="#2e6b41">merge</text>
  <path d="M 640 182 L 640 262 L 435 262 L 435 246" fill="none" stroke="#2e6b41" stroke-width="1.3" stroke-dasharray="5 5" marker-end="url(#ar2m)"/>
  <text x="450" y="280" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#2e6b41">retry - сколько решит модель</text>
  <text x="30" y="305" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#5d6156">сплошное - этапы прибиты гвоздями (Droid mission control)</text>
  <text x="30" y="324" font-family="IBM Plex Mono, monospace" font-size="12.5" fill="#5d6156">пунктир - динамика: воркеры и retry решает модель (ultracode)</text>
</svg>
<figcaption>один pipeline - два семейства моделей: умный планирует, эффективный копает</figcaption>
</figure>

свежая жара по этой теме: GPT-5.6 Sol - новый фронтир OpenAI, вышел на прошлой неделе. по интеллекту на уровне Fable 5 от антропик, но токенно эффективнее (Altman заявляет -54% токенов на агентном кодинге) и примерно вдвое дешевле в реальных тасках. расклад для pipeline получается идеальный: Fable 5 думает и проверяет, Sol копает. умный планирует - эффективный исполняет

### ultracode

и самый простой вход в полный автопилот - режим ultracode в Claude Code. разбивает таску на теже этапы: оркестрация/planning -> воркеры -> верификация. разница с Droid философская: у Droid этапы прибиты гвоздями, у ultracode они динамические - модель сама решает, как собрать workflow, сколько ей нужно воркеров, валидаций и retry. на схеме выше пунктир - это оно

## лайфхак про подписки

за подписку Droid можно не платить. берете CLIProxyAPI или VibeProxy - они цепляют ваш существующий аккаунт Codex/Claude по oauth и экспозят локальный API прямо у вас на машине. дальше прописываете endpoint в config.json - и mission control крутится на подписках, которые у вас и так есть

<figure>
<svg viewBox="0 0 720 230" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="схема: подписки через локальный прокси в любой инструмент">
  <defs>
    <marker id="ar3" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path d="M0 0 L8 4 L0 8 z" fill="#262a22"/></marker>
  </defs>
  <text x="360" y="34" font-family="IBM Plex Mono, monospace" font-size="13" fill="#2e6b41" text-anchor="middle">0$ сверху - все крутится у тебя на машине</text>
  <line x1="360" y1="44" x2="360" y2="86" stroke="#2e6b41" stroke-width="1" stroke-dasharray="3 4"/>
  <rect x="30" y="90" width="180" height="64" rx="3" fill="#ece7da" stroke="#262a22" stroke-width="1.2"/>
  <text x="120" y="117" font-family="IBM Plex Mono, monospace" font-size="14.5" fill="#262a22" text-anchor="middle">твои подписки</text>
  <text x="120" y="138" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#5d6156" text-anchor="middle">Codex / Claude</text>
  <line x1="210" y1="122" x2="267" y2="122" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar3)"/>
  <text x="239" y="112" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#5d6156" text-anchor="middle">oauth</text>
  <rect x="270" y="90" width="180" height="64" rx="3" fill="none" stroke="#2e6b41" stroke-width="1.5"/>
  <text x="360" y="117" font-family="IBM Plex Mono, monospace" font-size="14.5" fill="#262a22" text-anchor="middle">CLIProxyAPI</text>
  <text x="360" y="138" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#5d6156" text-anchor="middle">или VibeProxy</text>
  <text x="360" y="176" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#5d6156" text-anchor="middle">localhost · config.json</text>
  <line x1="450" y1="122" x2="507" y2="122" stroke="#262a22" stroke-width="1.3" marker-end="url(#ar3)"/>
  <text x="479" y="112" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#5d6156" text-anchor="middle">api</text>
  <rect x="510" y="90" width="180" height="64" rx="3" fill="#ece7da" stroke="#262a22" stroke-width="1.2"/>
  <text x="600" y="117" font-family="IBM Plex Mono, monospace" font-size="14.5" fill="#262a22" text-anchor="middle">Droid</text>
  <text x="600" y="138" font-family="IBM Plex Mono, monospace" font-size="11.5" fill="#5d6156" text-anchor="middle">или любой другой tool</text>
</svg>
<figcaption>подписка уже оплачена - пусть работает во всех инструментах</figcaption>
</figure>

*VibeProxy - только apple silicon, менюбар аппка. CLIProxyAPI - кроссплатформенный, go

## вывод

уровень оркестрации = цена фичи в твоем времени. на ручнике платишь вечер, на полуавтомате - час, на автомате - пять минут на спеку и правила

и да, правила важнее промптов. с них и начните

спишь - агенты работают)

<nav class="post-links" aria-label="links">
<div class="links-label">// links</div>
<a href="https://developers.openai.com/codex/subagents" target="_blank" rel="noopener"><b>codex subagents</b><span class="dom">developers.openai.com</span><span class="arr">→</span></a>
<a href="https://github.com/router-for-me/CLIProxyAPI" target="_blank" rel="noopener"><b>CLIProxyAPI</b><span class="dom">github.com/router-for-me</span><span class="arr">→</span></a>
<a href="https://github.com/automazeio/vibeproxy" target="_blank" rel="noopener"><b>VibeProxy</b><span class="dom">github.com/automazeio</span><span class="arr">→</span></a>
<a href="https://openai.com/index/gpt-5-6/" target="_blank" rel="noopener"><b>GPT-5.6 Sol</b><span class="dom">openai.com</span><span class="arr">→</span></a>
</nav>
