LearnNewsExamplesServices
Frontmatter
id13031
titleFleet Manager agent registry + credential store
stateClosed
labels
enhancementaiarchitecture
assigneesneo-opus-grace
createdAtJun 13, 2026, 12:52 AM
updatedAtJun 21, 2026, 2:16 AM
githubUrlhttps://github.com/neomjs/neo/issues/13031
authorneo-opus-grace
commentsCount4
parentIssue13015
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 13, 2026, 2:21 AM

Fleet Manager agent registry + credential store

Closed v13.1.0/archive-v13-1-0-chunk-1 enhancementaiarchitecture
neo-opus-grace
neo-opus-grace commented on Jun 13, 2026, 12:52 AM

Context

First leaf of the Fleet Manager sub-epic #13015 (pillar 1 of the Agent Harness #13012). Operator direction (2026-06-13): "agent harness biggest ROI." #13015 has no leaves linked yet — this is the foundation every other FM leaf (lifecycle, provisioning, settings-pane) consumes, and it is the one slice not gated by the #12984 session-id canonicalization, so it can land first. Self-selected via [lane-intent] (no competing claim).

The Problem

#13015's recorded operator pain, verbatim: "if i start 5 claude desktop instances plus codex via terminal and manage 6 agent repos... brittle." Today there is no agent registry — identity env is hand-maintained per instance, harness type lives only in the operator's head, and credentials are ad-hoc. The whole MVP loop (define agents → start/stop → repos managed under the hood) starts at define — and there is nowhere to define one. This leaf creates that surface: a durable, Node-side registry of agent definitions + their credentials.

The Architectural Reality

  • New Brain-side domain ai/services/fleet/ — sibling-consistent with the existing ai/services/<domain>/ layout (memory-core, knowledge-base, github-workflow, neural-link, …). Placement settled via structural-pre-flight Stage-1 fast-path (matched sibling pattern; #13015 already converged "fleet services in ai/, UI in apps/").
  • Two-hemisphere security boundary (the design rule graduated from Discussion #10119 + #13012): the PAT is a Node-side secret — stored encrypted-at-rest / OS-keychain and never transits the browser. The registry is the Brain-side owner of that secret; the Body-side settings-pane (separate leaf) only ever sends a PAT in (write) and never reads it back.

The Fix

A FleetRegistryService (singleton) under ai/services/fleet/:

  • Define / list / get / remove an agent, where an agent = { id, githubUsername, harnessType, ... } + an associated credential (PAT).
  • harnessType ∈ Claude Desktop / Codex / Antigravity / native-Neo (later).
  • Credential storage: Node-side, encrypted-at-rest (mechanism — libsecret/keychain vs encrypted file — decided at implementation under the security-boundary AC). get-agent returns the definition without the raw PAT; a separate Brain-internal accessor resolves the secret for the spawner only.

Contract Ledger

Field Value
Target Surface ai/services/fleet/FleetRegistryService.mjs (NEW) — defineAgent / listAgents / getAgent / removeAgent + Brain-internal credential resolve
Source of Authority #13015 (FM MVP design rule: PAT Node-side, never browser); #13012 / Discussion #10119 (two-hemisphere boundary)
Proposed Behavior Durable agent-definition registry + encrypted credential store; reads never surface the raw PAT past the Brain boundary
Fallback Absent/locked credential store → define/list still work; credential-resolve fails closed (no plaintext leak)
Docs Service JSDoc (Anchor & Echo) + a short ai/services/fleet/ README if the domain warrants it
Evidence Unit tests: CRUD round-trip + the credential-boundary assertion (raw PAT never returned from getAgent)

Decision Record impact

aligned-with #13012 (Electron + two-hemisphere security decisions). ai/services/fleet/ placement via structural-pre-flight Stage-1 fast-path. ADR 0020 (#13020, in-flight, @neo-fable) is the harness concept anchor — not a design-gate for this leaf; downstream refresh only if it reshapes the fleet-service naming.

Acceptance Criteria

  • FleetRegistryService in ai/services/fleet/ with defineAgent / listAgents / getAgent / removeAgent.
  • An agent definition captures githubUsername + harnessType + a stored credential (PAT).
  • Security boundary: the PAT is stored Node-side encrypted-at-rest and is never returned by getAgent/listAgents (a dedicated Brain-internal resolver serves the spawner only) — asserted by a unit test.
  • Unit tests: define→list→get→remove round-trip + the credential-boundary assertion. (Canonical location per unit-test.md.)
  • Linked as a sub-issue of #13015.

Out of Scope

  • Instance lifecycle (start/stop/restart/health) — separate FM leaf.
  • Identity-env + wake-subscription provisioning — blocked on the #12984 session-id canonicalization (Discussion, @neo-opus-vega); a separate provisioning leaf gains the blocked_by once #12984 graduates to a ticket.
  • Repo provisioning (clone/worktree management) — separate FM leaf.
  • The settings-pane UI (Body-side, apps/) — separate leaf, theme-dependent on #13024 (visual system).
  • The Electron build root — parent-epic leaf.

Avoided Traps

  • Credentials in the browser — rejected by the two-hemisphere design rule (Brain-side only).
  • Native-Neo-agents-first — rejected: the operator's fleet is external harnesses today; registering those first keeps the MVP dogfoodable.
  • Big-bang fleet daemon — rejected: registry lands independently (define/store is useful before lifecycle exists).

Related

Parent: #13015 (Fleet Manager MVP). Epic: #13012 (Neo Agent Harness). #12984 (session-id canonicalization — gates the provisioning leaf, not this registry). Source archaeology: Discussion #10119.

Release classification: post-release (FM MVP product line; nothing v13.x-blocking, per #13015). Boardless per ticket-create §4.

Live latest-open sweep: checked latest 20 open issues at 2026-06-13T00:47Z (#13030/#13028/#13026/#13025/#13023/#13020 …) — no equivalent registry leaf. A2A claim sweep: only my own [lane-intent] (MESSAGE:e9df62e7); no competing claim. #13015 trackedIssues empty at file time.

Origin Session ID: 9eb75c03-9185-4e69-8064-1decc76c6771 Retrieval Hint: "fleet manager agent registry credential store PAT node-side encrypted define agent ai/services/fleet"

Authored by Claude Opus 4.8 (Claude Code, @neo-opus-grace / Grace).

tobiu referenced in commit fda7cce - "feat(ai): Fleet Manager agent registry + encrypted credential store (#13031) (#13037) on Jun 13, 2026, 2:21 AM
tobiu closed this issue on Jun 13, 2026, 2:21 AM