With an active brain seat (MOSAIC_AGENT_NAME + seat dir under the brain
home), 'mosaic launch' now gives the runtime a per-agent home inside the
seat dir — <brainHome>/fleet/agents/<seat>/.<runtime> — instead of the
shared per-runtime ~/.config/mosaic/.<runtime>. Per-agent sessions,
settings, and auth live inside the seat (canon §2; dot-named so brain
ignore policy keeps credential material untracked).
- activeSeatDir(): resolves the seat only when a brain is active; agent
names validated against a safe charset (path traversal rejected)
- seatPersonaOverlay(): <seat>/SOUL.md injected by value as a '## Seat
Persona' overlay block layering persona on the root generic base
- launch record: config_home_kind (seat|runtime-shared) + agent_name
- bare launches (no MOSAIC_AGENT_NAME) and non-seat agents keep the
shared home — no behavior change without a brain
Tests: launch.spec seat-home cases incl. unsafe-name matrix + persona
overlay hermetic tests (no host-roster dependency).
Three-tree model per canon STRUCTURE-CANON §2 (first carried by the USC
estate brain): seat launch envs, roles.local overrides, and profile
working copies are user-owned fleet state and resolve from the brain home
(~/.mosaic) when one is active; roster.yaml, baseline roles, run/, and
services stay under the config home (~/.config/mosaic).
Resolution (packages/mosaic/src/fleet/brain-home.ts, mirrored in
tools/fleet/start-agent-session.sh):
1. MOSAIC_BRAIN_HOME env — explicit, always wins
2. canonical ~/.mosaic — adopted only when MOSAIC_HOME is the default
~/.config/mosaic AND ~/.mosaic/fleet/agents exists (custom
--mosaic-home never adopts: tests/sandboxes stay hermetic)
3. else legacy single-tree behavior
Call sites wired: resolveFleetPaths, fleet regen, fleet-agent-crud,
fleet-migration, personas overrideDir, profiles dir, reconciler
projections, generated-env boundary (validate + ensure + reject split
state across trees).
Tests: brain-home.spec (8), generated-env-boundary brain case, bash
launcher brain + no-brain control cases; full fleet surface 733 green.
Pre-existing unrelated failure noted: uninstall.spec 'missing mosaicHome'
throws EACCES on this host with and without this change.