24. Orchestrátor je providerem jen na úrovni bootstrapu a jeho worktrees jsou odkládací checkouty
Kontext
Tabulka poskytovatelů ví o nástroji, který v tomto repozitáři funguje, tři věci: bootstrap soubor, který čte, klientskou konfiguraci, jež pro něj startuje sdílený server MCP, a hooky, jimiž předává Majordomovi prompt dřív, než ho model uvidí (ADR 0009), a označuje, kde začíná a končí jeho vlastní epizoda (ADR 0015). Claude Code má všechny tři; Codex a Gemini první dvě; agents a generic mají bootstrap a nic jiného. Každý dosavadní poskytovatel byl agent: jeden proces, jedna konverzace, jeden povrch hooků.
bb (getbb.app, MIT, github.com/get-bb/bb) je první kandidát jiného tvaru. Je to orchestrátor: server nad SQLite, hostitelský daemon a UI, které spouští jiné agenty jako procesy — Claude Code přes @anthropic-ai/claude-agent-sdk s settingSources: ["user", "project", "local"], Codex přes svůj app server, Cursor, OpenCode, Grok a Hermes přes ACP — a provozuje jich několik najednou nad jedním repozitářem. Jeho vlastní vrstva je tenká: <workspace>/.bb/AGENTS.md připojené k instrukcím každého vlákna bez ohledu na poskytovatele (AGENTS.md v kořeni repozitáře se výslovně nečte), .bb/skills/, skripty pro zřízení a zrušení worktree a pluginy v TypeScriptu, jejichž povrch pro agenta je contributeInstructions a configure, oba synchronní, oba bez textu promptu, žádný neumí spustit příkaz. Události vlákna existují jen za HTTP a WebSocket API serveru.
Dvě fakta byla zjištěna dřív, než byl tento záznam napsán, protože rozhodnutí na nich stojí a ani jedno nešlo vyčíst ze stránky:
- Hooky souborového systému orchestrátor přežijí. Dokumentace Agent SDK uvádí, že hooky v
.claude/settings.json„run automatically in the SDK with no extra configuration“, kdyžsettingSourceszahrnujeproject, což bb nastavuje. Zachycení promptů a hranice epizod pro Claude Code pod bb jsou proto tytéž shimy spouštěné týmiž událostmi jako pod CLI. Průvodce MCP v SDK říká totéž o.mcp.json: „picked up when theprojectsetting source is enabled“, takže konfigurace klienta sdíleného serveru dosáhne vlákna Claude Code i pod bb, s jedním rozdílem, který stojí za znalost — server načtený ze souboru nastavení dostane před prvním tahem dvě sekundy, takžebin/majordomus-mcpsestavující spustitelný soubor na studeném checkoutu ukazujependingpři init a připojí se až poté. - Topologie worktree odmítá checkouty orchestrátoru. bb umisťuje spravovaný worktree do
~/.bb/plugins/environment-git-worktree/host-data/worktrees/<thread-id>/<repo>na novou větev. Worktree tam vytvořený 2026-09-09 byl hlášen jakomisplacedsworktree.path_mismatcha pre-commit stráž odmítla commit s nápravoumajordomus worktree migrate— nápravou, která by přesunula checkout zpod běžícího vlákna bb. Dočasné kořeny, které topologie již toleruje, tedy dočasný adresář a.claude/worktrees/, jsou seznam zkompilovaný doephemeral_root_ofvapps/majordomus-cli/src/worktree/service.rs, ne data, která deklaruje poskytovatel.
Otázkou není, zda lze bb podporovat. Je to, kterou ze tří úrovní orchestrátor zaujímá a kdo deklaruje cesty, které vytváří.
Rozhodnutí
Orchestrátor je poskytovatel jen na úrovni bootstrapu. Dostane řádek v tabulce poskytovatelů s projekcí bootstrapu a bez konfigurace klienta a bez hooků — tvar, který už mají codex a gemini — a projekce je jedna řádka, která ukazuje na .ai/README.md, vykreslená stejným rendererem jako každý jiný bootstrap (tvrzení provider-projections-one-renderer). Pro bb je tou projekcí <workspace>/.bb/AGENTS.md. Není to kopie AGENTS.md: bb ji připojuje za instrukce každého pluginu a agent, kterého spustí, načte nad ní svůj nativní bootstrap, takže druhé vyslovení jakéhokoli pravidla by byla duplikace, kterou vrstva zakazuje.
Zachycení promptů a hranice epizody zůstávají u agenta, kterého orchestrátor spouští. Jsou to hooky agenta, spouštějí se pod orchestrátorem přesně tak, jako pod vlastním CLI agenta, a Majordomus zaznamenává providera, který je spustil. Pro samotný orchestrátor se nezapisuje žádný řádek adaptéru, protože nemá událost, která by příkazu předala prompt před modelem, a adaptér, který by dotazoval svůj server, by byl jiný mechanismus pod stejným jménem (argument ADR 0009, beze změny).
Odkládací kořeny, které poskytovatel vytváří, jsou data, která poskytovatel deklaruje vedle svého bootstrapu, a topologie čte tuto deklaraci místo zkompilovaného seznamu. Checkout pod deklarovaným odkládacím kořenem je odkládací checkout relace se standardním postavením, jaké mu už dává ADR 0021: hlásí se, nikdy se nemigruje bez vyzvání, nástroj jej nikdy neuklízí a ochrana odmítne commit z něj s nápravou pokračovat v kanonickém worktree, ne přesunout checkout. Dva dnes zkompilované kořeny se stávají prvními dvěma deklaracemi; plugins/environment-git-worktree/host-data/worktrees od bb pod jeho datovým adresářem je třetí.
Zamítnuté alternativy
Plný adaptér nad API orchestrátoru. bb vystavuje každou událost vlákna přes HTTP a WebSocket, takže by se proces mohl přihlásit a zapisovat záznamy promptů a epizod pro každého agenta, kterého bb spouští, včetně ACP. Zamítnuto: je to démon samotného Majordomu, který se dotazuje serveru, zatímco každý jiný záchyt je shim, který poskytovatel sám vyvolá v okamžiku události. Záznamy by vznikaly druhým mechanismem s druhým způsobem selhání a agenti ACP, které by pokryl, nemají vlastní povrch hooků, ke kterému by se mohli vrátit, takže pokrytí by bylo skutečné a záruka ne.
Migrace worktree orchestrátoru do kontejneru. Topologie má migraci s kontrolou otisku; worktree bb by šly přesunout do <repo>-wt/<branch> tak, jak bylo 2026-09-07 přesunuto 32 sourozeneckých. Zamítnuto: bb ty cesty vlastní, eviduje je podle id vlákna ve své databázi a odstraňuje je, když je vlákno archivováno. Přesunutý checkout je takový, který bb už nenajde, a odstraněný takový, který by topologie hlásila jako zastaralý. ADR 0021 už tuto hranici pro .claude/worktrees/ vytyčuje.
Odmítnout spravovaná worktree pro tento repozitář. bb může spustit vlákno ve vlastním checkoutu projektu. Zamítnuto jako jediná odpověď: je to použitelná volba operátora a bootstrap to může říci, ale pravidlo, že výchozí režim nástroje zde nefunguje, je pravidlo, které poruší další, kdo nástroj nainstaluje. Topologie musí odpovídat správně pro cestu, kterou bb skutečně používá.
Přidat kořen bb do zkompilovaného seznamu. Jedno další is_inside v ephemeral_root_of. Zamítnuto: poslední pevně zapsaný seznam v objevování skryl devět objektů z dvaceti dvou a doktrína je od té doby běhová data nad zkompilovanými znalostmi. Každý orchestrátor by jinak byl změnou kódu v modulu, který s ním nemá nic společného.
Důsledky
- Tabulka poskytovatelů získá řádek
bbs bootstrapem.bb/AGENTS.md, konfigurací klienta-, hooky-;share/providers/bb.tmplvykreslí jednořádkový odkaz; kontrola projekce bootstrapu ho pokrývá stejně jakoAGENTS.mdaCLAUDE.md. - Deklarace poskytovatele získá pole pro scratch kořeny, s dvěma stávajícími kořeny přesunutými do dat pod poskytovatele, kteří je vytvářejí (
claude-codepro.claude/worktrees, dočasný adresář jako vlastní nástroje) a kořenem bb deklarovaným relativně k jeho datovému adresáři, jehož výchozí hodnota je~/.bba přepisBB_DATA_DIR.ephemeral_root_ofčte deklarace; jeho testy se přesouvají s ním. - Náprava ochrany pro odkládací checkout už jmenuje
majordomus worktree create; pro bb platí beze změny. Mění se to, že vlákno bb, které commituje ze svého worktree, je odmítnuto s touto nápravou, místo aby mu bylo řečeno migrovat. Vlákno bb, které musí commitovat, pracuje v projektovém checkoutu a.bb/AGENTS.mdto říká v jednom řádku odkazem na pravidlo. - Zachycení promptů a hranice epizody se zaznamenávají proti
claude-code, když Claude Code běží pod bb, ne protibb. Čtenář archivu vidí agenta, ne orchestrátor, což je pravda o tom, kdo prompt viděl. Agenti, které bb provozuje přes ACP, zůstávají nezachyceni acapture statuso nich říkáunsupportedjako dnes. - Obě ověření byla provedena. Worktree vytvořený na cestě bb je hlášen jako
ephemeral, „vytvořeno bb“, a kontrola odmítne commit z něj s nápravou pokračovat v kanonickém worktree. A 2026-09-09 byl bb spuštěn headless z odkládacího datového adresáře nad klonem této větve a v checkoutu projektu bylo spuštěno jedno vlákno Claude Code s jednoslovným promptem: prompt byl zachycen jakoprovider: claude-code,event: UserPromptSubmit, s id relace poskytovatele bb, větví a head; epizodu otevřel shim SessionStart před promptem;bin/majordomus-mcpbyl spuštěn z.mcp.jsona začal sestavovat spustitelný soubor; abb thread stopuzavřel epizodu s výsledkeminterrupted, což je pravda o agentovi zastaveném zvenčí. Samotná archivace vlákna nezavřela nic: proces agenta přežije vlákno, dokud ho bb nezastaví nebo neuvolní, takže operátor, který archivuje a odejde, nechá až do té doby otevřenou epizodu. - Nic z toho není specifické pro bb. Další orchestrátor je řádek, šablona a deklarovaný kořen.