LearnNewsExamplesServices
Frontmatter
id13015
titleEpic: Fleet Manager MVP — define, start, observe the agent fleet
stateOpen
labels
epicdeveloper-experienceai
assigneesneo-opus-ada
createdAtJun 12, 2026, 10:19 PM
updatedAtJul 19, 2026, 11:08 AM
githubUrlhttps://github.com/neomjs/neo/issues/13015
authorneo-fable
commentsCount9
parentIssue13012
subIssues
13031 Fleet Manager agent registry + credential store
13049 Fleet Manager instance lifecycle: start / stop / restart / health
13058 Fleet Manager settings pane v0: define agents
13065 Fleet Manager Bridge-token credential class: registry-side mint / verify
13121 FM spawn-time injection: bridge token + forced NL projection
13145 Fleet Manager: stable, traversal-safe per-agent repo-path derivation
13148 Fleet Manager: classify an agent''s managed checkout state (locate + health-check)
13155 Fleet Manager: repo-provisioning executor (clone / reuse / never-clobber)
13162 Fleet Manager: ensureAgentRepo orchestrator (derive → inspect → provision)
13177 Fleet Manager: provision the agent repo at spawn, run the harness in it
13179 Fleet Manager: observe fleet repo provisioning state (inspectFleetRepos)
13182 Real-git integration coverage for the FM provisioning chain (default clone seam)
13187 Fleet Manager: safe agent-repo removal primitive (removeAgentRepo)
13190 Fleet Manager: reconcile orphaned auto-memory keys on agent-repo removal
13192 Fleet Manager control-plane facade (FleetManager): managedRoot resolution + startAgent + fleetRepoStatus
13336 Fleet Manager: turnkey stopAgent + restartAgent on the facade
13338 Fleet Manager: turnkey removeAgent on the facade (stop + deregister)
14535 Fleet registryBridge: setRepo verb + registry partial-update (FM Lane C)
14537 Fleet control verb: setWakeEnabled — control-plane-authorized per-agent wake toggle (FM Lane C)
14538 Fleet control verb: setAvatar — per-agent profile avatar (FM Lane C)
14562 Fleet cockpit status/activity source contract
14563 Prove Fleet cockpit bridge controls via Neural Link
14574 Remote-tenant connect: tenant URL + PAT → remote MC/KB
14595 Fleet runtime-status wire method: running/idle/wedged on the wire
14573 Fleet cockpit PR and lane activity adapter
14899 PRIO-0: Rebuild the FM cockpit fleet view on data.Store/Model
14909 Agentos stores: de-singleton to provider-hosted + JSON-fetched seeds
14914 Fleet: per-family launch templates + per-agent child-env extension
14915 Day-0 resident-identity provisioning: addressability + wakeability; engine episode deferred to observation
14916 Identity rotation/onboarding PR generator — the four-surface ceremony
14951 Use resolved Fleet executable for spawn and version probe
14954 Complete the identity ceremony generator: divergence-aware re-entry and rotation mode
14978 Fleet cockpit roster never re-polls after a lifecycle intent settles
14987 Fleet projection launchability: surface launch-templated + auth-mode truth on registry projections for honest cockpit rendering
14988 Keep GUI auth relaunch inside Fleet lifecycle ownership
15005 Fleet registry: fail closed on orphan credentials and credential-key variants
15041 Register @neo-gpt-emmy in the canonical maintainer roster
15047 Add isolated Codex Desktop launch coverage to Fleet
15048 Bootstrap managed peer workspaces before Fleet launch
15269 Fleet read adapter: per-agent A2A mailbox mirror — read-only, viewer-admitted, paginated (S1 Brain half, D#15249)
15271 Fleet roster DTO: wake-state read producer — on | off | suppressed | unknown (S2 axis 1, D#15249)
15272 Fleet roster DTO: throttle-state read producer — none | overage | rate-limited | unknown (S2 axis 2, D#15249)
15283 Fleet server rides the standard boot — the cockpit is live-by-default (W2 boot seam, #13015 census)
15320 Authenticate Fleet HTTP ingress and bind viewer identity
15376 Operator mailbox write path: compose verb, operator-steering delivery class, principal-class projection
15379 Operator compose verb behind the fleet ingress boundary
subIssuesCompleted44
subIssuesTotal46
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
milestonev13.2

Epic: Fleet Manager MVP — define, start, observe the agent fleet

Open Backlog/active-chunk-2 epicdeveloper-experienceai
neo-fable
neo-fable commented on Jun 12, 2026, 10:19 PM

Problem Scope

Sub-epic of #13012 (pillar 1). The operator's current reality, verbatim (2026-06-12): "if i start 5 claude desktop instances plus codex via terminal and manage 6 agent repos... brittle. other humans won't do it."

Operating the swarm today means: one repo clone per peer (auto-memory is checkout-path-keyed, so paths are load-bearing), N manually-launched harness instances (Claude Desktop windows + terminal Codex), hand-maintained identity env per instance, wake-subscription registration that silently drifts from assumed state, and config-template sync via broadcast messages. Every one of these is a recorded friction class from live operation. The brittleness is the adoption wall in miniature: the Institution-as-product pitch ("run an AI engineering team on your repo") is only installable if defining and running a fleet is a settings pane, not a sysadmin routine.

Why a sub-epic: the MVP spans both hemispheres (Node-side services + a Neo app surface) and decomposes into ≥4 independently-deliverable leaves (registry/credentials, process lifecycle, repo provisioning, NL/MCP wiring). Leaves arrive incrementally via update_issue_relationship, each with own ACs + Contract Ledger.

Scope split (2026-07-04 operator veto + reconciliation — steward repoint 2026-07-12): the operator-facing cockpit / settings-pane UI surface migrated to #14560. #13015 now owns the Brain-side service spine (ai/) + the Neural Link/MCP bridge that surface consumes — not the UI itself. The service spine is not frozen: it grows from live onboarding friction (e.g. Emmy's #15047/#15048 are net-new services leaves), so a closed sub-count is not a completion signal.

Intended Solution Shape

A settings-pane-first product slice (operator-specified): define agents → start/stop them → their repos are managed under the hood.

  • Agent registry + credentials (Brain side, ai/): define an agent = GitHub username + PAT (+ harness type: Claude Desktop / Codex / Antigravity / native-Neo-later). PATs are stored Node-side only (encrypted at rest / OS keychain — decided at leaf level), never transit the browser — the two-hemisphere security boundary from the graduated Discussion is the design rule.
  • Instance lifecycle (Brain side): start / stop / restart / health of external harness processes. v1 manages external harnesses as processes (the operator's actual fleet today); native Neo agents join progressively. Spawn-time provisioning kills the drift classes structurally: the spawner writes the identity env and registers the wake subscription — assumed-vs-actual gaps become impossible by construction. Restart affordances include the runtime MCP-server restart class (post-v13 harness reality: agents restart their own MCP servers mid-session; restarts must settle-or-reject pending promises — epic-review addition, @neo-gpt 2026-06-12).
  • Repo provisioning (Brain side): per-agent clone/worktree management under the hood (create, locate, health-check; path stability honored because downstream memory is path-keyed).
  • The operator-facing surface (Body side) → #14560: the fleet cockpit / settings pane (agent list, add/edit username + PAT, start/stop controls, per-instance health/status, status dashboard) migrated to #14560 on the operator's 2026-07-04 veto + our reconciliation. #13015 provides the Brain-side services + the bridge that surface consumes; it does not build the UI. (Product target for that surface = the Electron shell — a parent-epic leaf; the dev-server browser mode stays the development convenience.)
  • Bridge (Brain side, #13015-owned): the Neural Link / MCP seam between the #14560 cockpit and the fleet services — the existing pattern; the contract the cockpit consumes.

Guardrail inheritance from #13012: this MVP is deliberately Scenario-C-zero — it manages processes and never mutates third-party runtime state, so it stays trivially single-writer (Topological Locking not required here). No public performance claims ride this slice.

Session-identity prerequisite (epic-review addition, @neo-opus-vega, 2026-06-12): the identity-env + wake-subscription provisioning surfaces depend on cross-harness session-id canonicalization — today the underlying id is multi-universe (auto-memory is checkout-path-keyed; Mcp-Session-Id ≠ harness session_id; manual vs Stop-hook write paths diverge — empirically forked mid-session on review day). Provisioning atop that provisions on sand. The canonicalization substrate is Discussion #12984 (open Ideation, @neo-opus-vega's lane); the affected leaves gain a native blocked_by once it graduates to its ticket. Concrete binding rule (sharpened by the #12984 V-B-A, 2026-06-12): identity/session leaves bind the harness-native session_id (the durable universe) and never key on the MCP-transport session-id — that one is server-assigned today and removed entirely in the 2026-07-28 MCP release candidate (transient; ephemeral-don't-key-on-it).

Staging (PoC → MVP — durable home; the #13012 plan-of-record comment indexes this section)

Scope pointer (2026-07-12 steward repoint): the staging below is the joint Fleet-Manager goal, kept intact for the end-to-end narrative. Per-step ownership follows the #13015 (Brain-side services + bridge) / #14560 (operator-facing cockpit UI) split: the UI-facing steps (settings pane v0, status dashboard, agent CRUD, Chromium-popup proof) are delivered under #14560; #13015 owns the Brain-side steps (registry/credentials, spawn/stop/provision services, config-template migration, remote-tenant services) + the bridge.

PoC — "one agent via UI" (prove the spine, smallest honest slice):

  1. Electron build root boots (#13033 — head of the critical path; Agent-OS in-process target, child-process supervision = sanctioned fallback that caps the risk), one window serves the harness app.
  2. Settings pane v0: agent list + add-agent (GitHub username + PAT → Node-side store; registry leaf = #13031).
  3. Spawn/stop one external harness instance with spawn-time identity-env injection + wake-subscription registration (session-id guardrail above applies).
  4. One Chromium-popup proof: a view moves into a second OS window on the shared App-Worker heap.

PoC success criterion (operator-falsifiable): @tobiu starts one agent from the UI instead of a terminal.

MVP — "the daily driver" (replace the manual routine entirely): Full agent CRUD + encrypted PAT storage; whole-fleet start/stop/restart/health (incl. the runtime MCP-server restart class); per-agent repo provisioning under the hood (path-stable); status dashboard (running / idle / wedged — watchdog signals exist); config-template migration; markdown component v1 (#13018) on activity/log surfaces; remote-tenant connection as a first-class entry (tenant URL + PAT → remote MC/KB — the design-partner cohort's actual journey, per the parent's entry-modes section).

MVP success criterion: the operator's morning fleet-start is one click, and "other humans" could do it cold.

Estimate context (recorded at the parent): PoC ≈ 15–25 leaf PRs ≈ one week at current swarm velocity, stretch two — the binding constraint is the #13033 topology spike, not PR volume; dev-server mode keeps all other lanes parallel.

Discussion Criteria Mapping

Local mapping of the inherited Fleet-Manager criteria (source: Discussion #10119 cycle-2 §6; the parent #13012 carries the broad mapping) to this sub-epic's disposition — so each leaf author knows which inherited criterion it closes rather than re-inferring. Added per @neo-gpt's epic-review Stage-2.5 Required Action (2026-06-13); steward picked up by @neo-opus-ada after the source author was benched on the Fable-5 access suspension.

Source criterion / parent row #13015 disposition
Fleet-manager-first / operate-your-fleet This sub-epic owns H1: define agents, operate external harness instances, and make morning fleet-start one-click.
Agent activation: username + credential/PAT Registry/credential leaves (#13031 / #13037 shipped) plus the settings-pane leaf (#13058) consume the Brain-side credential boundary.
Instance lifecycle: start / stop / restart / health Lifecycle leaf (#13049 shipped) owns process controls and runtime MCP-restart affordances; UI leaves consume but do not fake success.
Repo provisioning under the hood Future repo-provisioning leaves own path-stable clone/worktree management; the settings pane must not bundle it.
Identity-env + wake-subscription drift removal Provisioning leaves bind the harness-native session_id and carry the #12984 canonicalization blocker where applicable.
Body/Brain placement Fleet machinery (services + bridge) lives under ai/ = #13015; the operator-facing settings/cockpit UI (apps/) = #14560 (2026-07-04 split); credentials never transit browser state.
Scenario-C / topological-locking guardrail #13015 stays Scenario-C-zero / single-writer; extended-NL multi-writer work stays under #13056.

Out of Scope

  • Conversational app creation, deploy plane (pillars 2–3, own sub-epics when activated).
  • Extended-NL tool-surface exposure / multi-writer coordination (own sub-epic, locking-gated).
  • Merge authority or any operator-approval bypass — the fleet manager operates instances, never merges.
  • The Electron build root itself (own package.json, main-process Agent-OS hosting, window management) — that's a parent-epic leaf; this sub-epic's surfaces must simply run inside it. Tauri is retired at the parent (Electron decided).
  • The operator-facing cockpit / settings-pane UI surface — that's #14560 (migrated on the 2026-07-04 operator veto). #13015 provides the Brain-side service spine + the bridge it consumes; mirrors #14560's reciprocal "service spine — #13015" out-of-scope line.

Avoided Traps

  • Credentials in the browser — rejected by design rule (Brain-side only).
  • Native-Neo-agents-first — rejected: the operator's fleet is external harnesses today; managing those first makes the MVP immediately dogfoodable.
  • Big-bang fleet daemon — rejected: leaves land independently (registry without lifecycle is already useful; lifecycle without provisioning is already useful).

Related

  • Parent: #13012 (the Neo Agent Harness — embodiment + coordination substrate)
  • Source archaeology: Discussion #10119 (cycle-2 §6, the fleet-manager input + the MVP-ordering-inversion rationale)
  • Friction provenance: identity-env drift, wake-registration gap, config-template sync — operator-session recorded classes (2026-06-10 → 12)

Release classification: post-release (product line; nothing v13.x-blocking).

tobiu referenced in commit 792831b - "feat(ai): FleetManager turnkey stopAgent + restartAgent (#13336) (#13337) on Jun 15, 2026, 2:03 PM