You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fleet_spawn creates one disposable worker. It already takes provider + model, so the conductor can deliberately put a task on Opus, Fable, or Codex — that part works.
What it cannot do is start a collaboration: a goal with role→backend bindings, a shared blackboard, and panels (collaboration.ts, shipped through #271–#274). That is the natural target when the conductor decides a task should be fanned out rather than handed to a single worker, and there is no verb for it.
Today the owner has to create a collaborative session by hand, which breaks the premise that the conductor is the front door to getting work done.
Scope
A fleet_collaborate (name bikesheddable) verb: goal, role→backend bindings, workdir
Send-class by definition — it must be in FLEET_SEND_TOOL_NAMES so isFleetSendTool hard-gates it, and deliberately kept OUT of allowedTools. R3 is an invariant, not a mode default
The approval prompt carries the goal's cost roll-up, the way fleet_panel already does — a collaboration is the most expensive thing the conductor can start, so the owner should see the projected spend before approving
Delegated identity for each role's child, same chain as fleet_spawn; a collaboration child is still a leaf unless explicitly promoted to orchestrator
Completion returns a digest, never the collaboration's artifacts — the never-OOC guarantee applies here more than anywhere, since a collaboration produces N children's output
fleet_list / fleet_tasks should surface a conductor-started collaboration as one unit, not N unrelated sessions
Note on the orchestrator backend
A conductor-started collaboration puts an orchestrator role on some backend. Under #245's v1 the orchestrator is pinned to claude because the fleet surface is an in-process Claude-SDK object. So either this lands after #245, or it lands with the orchestrator pinned and the pin removed by #245.
Gap recorded in conductor-design.md §5.1 (landed in #275).
The gap
fleet_spawncreates one disposable worker. It already takesprovider+model, so the conductor can deliberately put a task on Opus, Fable, or Codex — that part works.What it cannot do is start a collaboration: a goal with role→backend bindings, a shared blackboard, and panels (collaboration.ts, shipped through #271–#274). That is the natural target when the conductor decides a task should be fanned out rather than handed to a single worker, and there is no verb for it.
Today the owner has to create a collaborative session by hand, which breaks the premise that the conductor is the front door to getting work done.
Scope
fleet_collaborate(name bikesheddable) verb: goal, role→backend bindings, workdirFLEET_SEND_TOOL_NAMESsoisFleetSendToolhard-gates it, and deliberately kept OUT ofallowedTools. R3 is an invariant, not a mode defaultfleet_panelalready does — a collaboration is the most expensive thing the conductor can start, so the owner should see the projected spend before approvingfleet_spawn; a collaboration child is still aleafunless explicitly promoted toorchestratorfleet_list/fleet_tasksshould surface a conductor-started collaboration as one unit, not N unrelated sessionsNote on the orchestrator backend
A conductor-started collaboration puts an orchestrator role on some backend. Under #245's v1 the orchestrator is pinned to
claudebecause the fleet surface is an in-process Claude-SDK object. So either this lands after #245, or it lands with the orchestrator pinned and the pin removed by #245.Related