# Mosaic Fleet — NORTH STAR > **Generated file — do not edit by hand.** > Projected deterministically from [`NORTH_STAR.yaml`](./NORTH_STAR.yaml) by the pure > generator in `packages/mosaic/src/commands/fleet.ts` (`renderNorthStarMarkdown`). > Edit the YAML, then regenerate. Self-contained Mosaic. ## Mission A self-driving Mosaic system that 24/7 unattended converts a machine-readable goal set into merged, CI-green, budget-bounded change — looping plan→backlog→assign→execute→verify→merge→reassess — on Mosaic's OWN native backlog/dispatch engine. Mosaic is general-purpose: the user declares the system type they want (software delivery, personal assistant, research, business/operations, …) and the orchestrator provisions the matching persona roster and structure; the delivery fleet is one profile among many. ## Substrate The Mosaic Backlog is the backlog of record + dispatch engine, built on Mosaic's native Postgres storage service (@mosaicstack/db drizzle; PGlite-embedded by default, full Postgres by config). ## Standing objectives - **NS-1** — Single machine-readable source (this file) drives planning; prose docs are projections. - **NS-2** — Every backlog item is an independently-shippable unit with stable id, priority, depends_on DAG, represented as a Mosaic Backlog card; spend tracked as advisory projection. - **NS-3** — The supervisor guarantees movement: no idle agent while ready dependency-satisfied work exists; no empty backlog without a replan request; assignment via Mosaic native dispatch/claim. - **NS-4** — Exactly one merge-gate approver; nothing reaches main except via pr-merge.sh after pr-ci-wait.sh success; Gitea branch protection is the backstop. - **NS-5** — Every unit bounded by wall-clock TTL on its claim; token caps enforced only where a real meter exists, else advisory. - **NS-6** — Context cleared between tasks for ephemeral runners (reset_between_tasks); persona+mission re-injected per task. - **NS-7** — Meta-loop (session-review + enhancer) continuously proposes small fleet-improvement PRs. - **NS-8** — Single operator-flippable PAUSE kill-switch (fleet/run/PAUSED) honored before every dispatch and every merge. - **NS-9** — Mosaic is a general-purpose multi-agent system: the user declares the SYSTEM TYPE to run (e.g. software delivery, personal assistant, research, business/operations) and the orchestrator provisions the matching persona roster and org structure from a cross-domain baseline persona library; the delivery/coding fleet is one profile among many. - **NS-10** — An adoption is not complete until the mechanism it replaces is removed. Two live conventions for one concern is the defect, not a transition state. Measured 2026-08-20: brain-home adopted by 9 modules and not 10; MOSAIC_HOME honored in 4 places, each re-deriving it; backlog cards declared while TASKS.md files stayed authoritative. Every one was decided correctly and left half-applied. ## Success criteria - **AC-NS-0** (tier 0) — The operator launches an agent on any configured harness with one command, observes its state and sends it work without attaching to a terminal multiplexer. - **AC-NS-1** (tier 1) — The supervisor keeps a two-agent floor (1 orchestrator + >=1 enhancer) healthy across reboot. - **AC-NS-2** (tier 1) — A goal added to this YAML is decomposed to cards and either merged or escalated, with no human in the loop. - **AC-NS-3** (tier 1) — No PR merges with failure/error/no-status/timeout CI, and none bypass pr-merge.sh. - **AC-NS-4** (tier 1) — TTL is enforced on claims; token caps remain advisory until a real meter exists. - **AC-NS-5** (tier 1) — Flipping fleet/run/PAUSED halts dispatch and merges within one tick. - **AC-NS-6** (tier 2) — A user can declare a system type and the fleet provisions the matching persona roster + topology from the baseline library, with no code change. - **AC-NS-7** (tier 2) — A user-customized persona (edited or added via the orchestrator) survives mosaic update: baseline reseed never clobbers user overrides. ## Workstreams | id | title | | --- | ----------------------------------------------------------------------------------------------------------- | | A | Substrate — Mosaic Backlog on native Postgres storage service | | B | Supervisor — movement guarantee, two-agent floor, dispatch/claim | | C | Planner — goal decomposition into independently-shippable cards | | D | Merge-gate — single approver, pr-merge.sh after CI wait | | E | Meta-loop — session-review + enhancer improvement PRs | | F | Safety-rails — TTL claims, advisory spend, PAUSE kill-switch | | G | Kill-switch — operator PAUSE honored before dispatch and merge | | H | Personas & system profiles — cross-domain library, system-type provisioning, update-surviving customization | | I | Operator surface — launcher, fleet visibility, reliable steering (tier 0) | | J | Web control plane — browser surface over the gateway (tier 1) | | K | Clients — desktop and mobile over the same backend (tier 2) | | L | Auth profiles — per-provider accounts, per-session selection (tier 2) | ## Goals (backlog projection) | id | title | tier | phase | priority | depends_on | | --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | ----- | ----------- | -------------- | | A1 | Machine-readable NORTH_STAR.yaml + Markdown projection | 1 | 1 | must-have | — | | A2 | Mosaic Backlog schema + storage-service card store (drizzle/PGlite) | 1 | 1 | must-have | A1 | | A3a | Card lifecycle — create/claim/release with stable ids + depends_on DAG | 1 | 1 | must-have | A2 | | A3b | TTL-bounded claim enforcement (wall-clock) on cards | 1 | 1 | must-have | A3a | | A4 | Advisory spend projection per card (degrades to TTL, no real meter) | 1 | 1 | should-have | A3a | | B1 | Supervisor tick — readiness scan, two-agent-floor health check | 1 | 2 | must-have | A3a | | B2 | Native dispatch/claim — assign ready dependency-satisfied work | 1 | 2 | must-have | A3b, B1 | | B3a | Planner decompose — goal added to YAML → cards | 1 | 2 | must-have | A2, B1 | | B3b | Replan request on empty backlog; escalate on no-decompose | 1 | 2 | should-have | B3a | | G1 | PAUSE kill-switch + merge-gate honored before dispatch and merge | 1 | 2 | must-have | B2 | | H1 | Cross-domain baseline persona library (exec, marketing, ops, research, assistant + engineering roles) | 2 | 1 | must-have | A1 | | H2 | System-type profiles — declarative mapping of system type to persona roster + topology | 2 | 2 | must-have | H1 | | H3 | System-type provisioning — user declares type; orchestrator instantiates the matching roster + structure | 2 | 2 | must-have | H2 | | H4 | Update-surviving persona customization — ad-hoc edits/additions persisted in a PRESERVE-protected override layer (baseline merged with overrides) | 2 | 2 | must-have | H1 | | A5 | NORTH_STAR schema validator — every goal's workstream declared, every workstream has a goal, every depends_on id exists, every tier has a success criterion; runs in CI beside the Markdown regeneration check | 0 | 1 | must-have | A1 | | I1 | One home resolver — a single function resolving MOSAIC_HOME with a sane default, adopted by every module. Today brain-home.ts is imported by 9 modules while 10 still use DEFAULT_MOSAIC_HOME, and MOSAIC_HOME is re-derived ad hoc in 4 places. NS-10 applies - finish the adoption and delete the second path | 0 | 1 | must-have | — | | I2 | mosaic fleet ps sees the fleet that is actually running. Three measured blockers: the roster declares socket `mosaic-fleet` which does not exist, the 18 live sessions are on the default socket, and nothing writes a roster because seats are launched outside the CLI. Make the socket configurable and the roster written at launch, or make ps read tmux + seat dirs directly | 0 | 1 | must-have | I1 | | I3 | Migrate fleet steering onto mosaic agent send --verify (exists, FLEET-OBS-005, spec FR-5) and retire tools/tmux/agent-send.sh, which forges the sender (D33) and returns an uninformative rc (D16, D34). FR-5 predates those defects by a month | 0 | 1 | must-have | I1 | | I4 | mosaic fleet absorbs what launch-seat.sh does and launch-seat.sh is deprecated: compose the prompt file set, force the skill set, wire the style hook, fail closed on any unreadable input, export per-seat git identity, and register the seat in the roster. launch-seat.sh was a manual method; it is the reference implementation, not the destination | 0 | 1 | must-have | I1, I5 | | I5 | Harness probe matrix — verify a working prompt-injection path for claude, codex, opencode and pi, and refuse any runtime whose path is unverified. AC-NS-0 clause 1 ("any configured harness") rests on this. The probe work in docs/plans/2026-08-19_launch-seat-multi-runtime.md (brain, untracked) transfers; its launch-seat.sh target does not | 0 | 1 | must-have | — | | I6 | Finish the heartbeat responder (FLEET-OBS-002, the only Phase-2 task still in-progress; spec FR-2). Health must mean "answered a heartbeat", not "pane alive" — pane state measured two seats wrong on 2026-08-20 | 0 | 1 | must-have | — | | I7 | Independent review and live-fleet dogfood of the Phase-2 verbs (FLEET-OBS-008), then land them (FLEET-OBS-009). Implementation is done and verification is not; "done" in a task file frozen five weeks is not evidence | 0 | 1 | must-have | I2, I3, I4, I6 | | I8 | Neutralize misleading documentation — supersede headers on docs that state a stale status, a false blocker or a retired mechanism. Cheap, and it is tier 0 because a stale doc does not merely fail to help an agent, it actively misroutes one. Rebuilding the documentation is a separate and later job | 0 | 1 | must-have | — | | I9 | Study t3code's agent-attach and multi-provider auth methods and record what transfers. Reference only — Mosaic implements its own within the stack, never adopts the code and never takes the dependency. Informs HOW I/J/K/L are built, not whether | 0 | 1 | should-have | — | | J1 | Web control plane over the gateway — fleet visibility and steering in a browser, same data source as I2 | 1 | 3 | must-have | I2 | | K1 | Desktop and mobile clients against the gateway, authenticated | 2 | 4 | must-have | J1 | | L1 | Per-provider auth profiles with per-session selection | 2 | 4 | must-have | I4 | ## Assumptions (vetoable) - **ASM-1** (vetoable) — The Mosaic Backlog on the native Postgres storage service is the backlog of record. - **ASM-2** (vetoable) — Claude gate roles have no native busy status, so readiness = pane-idle + heartbeat. - **ASM-3** (vetoable) — Two-agent floor = 1 orchestrator + >=1 enhancer. - **ASM-4** (vetoable) — Baseline personas ship in framework/fleet/roles/ (reseeded on update); user overrides live in a separate PRESERVE_PATHS-protected layer and win on merge. ## Spend - **advisory:** true - No per-task token meter yet; budgets degrade to TTL. Spend is tracked only as an advisory projection alongside each card.