Fleet Manager · Product Direction + Execution Plan

Mission control for a cross-model AI engineering team — not a settings form.

The services spine exists. The product — the shell, the cockpit, the wiring a non-expert operates cold — is unplanned. This is what it should be, and the lanes that build it.

Epic #13015Parent #13012 Shell #13033Docking #13158 Target Electron · one SharedWorker heap · Agent OS in-process
01

What it should be

The bar is a control room, not a config panel: you see the whole fleet's state at a glance, watch its work stream in real time, and command it — start, stop, restart — without a terminal. A live multi-agent fleet with high-frequency streams, views that split across monitors on one heap, object-permanent state: this is the exact app Neo's engine is built for. Done right it's the flagship demo. Done as it is now, it undercuts the whole story.

Neo Fleet — mission control
Fleet · 7 agents 3 working 2 idle 1 limited
Graceopus-4.8
▲ WORKING
planning Fleet Manager — epic → lanes → subs
PR #14439 ✓
Euclidgpt-5.5
▲ WORKING
MX hook-substrate — #14466 lifecycle-state
3 open PRs
Adaopus-4.8
▲ WORKING
re-decomposing #13015 Fleet Manager
PR #14492
Vegafable-5
◔ RATE-LIMITED · ~8:50p
v13.1 release cut — #14039
resumes 20:50
Cliofable-5
● IDLE · 12m
business-engine #14442 — awaiting #14422
last: 19:23
Gemini3.1-pro
○ BENCHED
operator-benched
Live activity● streaming
19:34
review
Grace → #14439 APPROVED — hold lifted
19:23
pr merged
tobiu ✓ #14498 wake+heartbeat default-off
18:33
a2a
Grace → Ada review-override on #14499 (ADR-0019)
17:25
pr opened
Euclid #14499 validate deployment config
16:44
rate-limit
Vega hit 5h limit — back ~20:50
working idle wedged rate-limited benched / offline ▎ family: Claude GPT Gemini

Static direction mock — the cockpit's default view. Click an agent → its thought-stream, lane, repo, and PRs; drag it out → its own OS window on the same heap.

State reads at a glance

Status is encoded in form, not just text — a colored pulse, a family rail, a one-line "what it's doing now." You know the fleet's health before you read a word.

Real-time is the spine

The activity feed and every status is live — no refresh. This is where the engine's 40k-updates/sec, object-permanent architecture stops being a claim and becomes the product.

Operable cold

Add an agent = a name + a token. Start the fleet = one button. The success test is a person who has never seen it running their team by end of the first morning.

02

Where it actually is

The counter lies

16 of 17 leaves closed reads as "almost done." It isn't — decomposition froze when the author was benched. The 16 closed leaves are all one hemisphere: the Brain-side services (registry, credentials, lifecycle, repo-provisioning). Real, solid machinery — and invisible to an operator.

Brain — fleet services (ai/)

~done · define / start / stop / provision exist as services

Body — the product surface (apps/)

~0% planned · shell, cockpit, wiring, credentials-UI — the adoption wall
03

The lanes that build the product

peers self-select; owners are suggested
Lane A

The shell

owner: Ada (holds #13033)

Electron build root — boots the Agent OS in-process, one window serves the harness app. Nothing UX-real exists until the shell hosts it. This is the critical-path head; everything downstream waits on it.

  • A1Electron build root boots; Agent-OS main-process host; child-process supervision as the capped fallback.
  • A2Multi-window primitive — a view splits into a second OS window on the shared App-Worker heap (the one Neo-native proof).
  • A3Re-invoke mechanism lives here — the FM hosts the instances, so waking a parked agent = the host re-invoking a process it owns. Not an external-harness sidecar thrown away in v13.2 (Vega's insight).
Lane B

The cockpit — UI / UX

owner: Fable (fresh) · design-led

The product surface above, built to the direction in §01. This is the lane that decides whether the FM is a flagship or an embarrassment — it gets a real design pass, not a form generator. Consumes Clio's #13158 docking as the container contract.

  • B1Cockpit shell + fleet grid — live agent cards (status form + family rail + current-lane line); the health summary bar.
  • B2Live activity stream — A2A / PR / lane-state events, real-time, bounded. The engine's real-time story made visible.
  • B3Agent detail + pop-out — drill into one agent (thought-stream, lane, repo, PRs); drag to its own OS window.
  • B4Controls — start / stop / restart per agent + whole-fleet; the one-click morning start.
Lane C

The wiring

owner: Euclid / GPT (NL/MCP lane)

Neural Link / MCP bridge: the cockpit reads the existing fleet-services spine (the 16 closed Brain leaves) live. No faked state — status/activity come from the real services or degrade honestly. This is where "the spine is done" finally pays off.

  • C1Live status/activity feed — bridge the lifecycle + A2A + PR services into the cockpit's real-time streams.
  • C2Control round-trip — cockpit start/stop/restart → the lifecycle service → settle-or-reject the runtime MCP-restart class.
Lane D

Credentials + onboarding

owner: Opus (conserve) · security-sensitive

The "add an agent cold" flow + the credential boundary the MVP names. PATs stay Brain-side, encrypted at rest, never transit the browser — the two-hemisphere security rule is non-negotiable here.

  • D1Add-agent flow — username + PAT + harness type → the Node-side registry (#13031 exists); the UX for it does not.
  • D2Encrypted PAT-at-rest — OS keychain / encrypted store; the credential-boundary AC.
  • D3Remote-tenant connect — tenant URL + PAT → remote MC/KB (the design-partner cohort's actual entry).
04

Critical path to the PoC

operator-falsifiable slice first
01

Shell boots

Electron root (A1) — the whole product waits on this one spike.

gate: #13033
02

Cockpit skeleton

Fleet grid + one live agent card (B1) inside the shell.

needs: A1
03

Live wiring

One real status + one real activity event stream in (C1).

needs: B1, spine
04

Spawn one agent

Add-agent (D1) + start-one (B4) → a real external harness comes up.

needs: B4, D1
05

PoC met

@tobiu starts one agent from the UI instead of a terminal.

the falsifier

Next step if this direction holds: I file Lane A + B1 as real sub-tickets under #13015 today, tagged to this plan — into lanes, not a table — and this becomes the template I run for the other nine highest-ROI epics.