Cockpit & MOTHER
Phase 14 design. Most sub-phases shipped 2026-05-05 (Sessions tab, terminal lock-in, mobile PWA polish); MOTHER bridge landed 2026-05-07 (4869422); TOPO renderer + planet detail + NOW lane landed 2026-05-09 (75cf5aa, 12b44b2, 2ab5b91). This page synthesizes the 1036-line design at ~/.optimalos/transfers/fabric-design/04-cockpit-and-mother-design.md against current code.
Sub-phase status
| Sub-phase | Title | Status | Code |
|---|---|---|---|
| 14-1 | Sessions tab — list-then-form, SSE-ready | Shipped 85d8226 then redesigned 68cf6db (Item G) | client/sessions/index.ts, client/sessions/sse-parser.ts, GET /api/sessions/devices, GET /api/activity |
| 14-2 | TOPO renderer (starmap) | Partially shipped — home + planet-detail landed (merge 098381e, commits 75cf5aa + 12b44b2); BOARD-wrapped variant still pending | client/topo/{index,sculpture,stack,state,planet-detail,today-lane,mother-chat,mission-clock,activity-drawer}.ts |
| 14-3 | Terminal lock-in / two-pane derived/raw | Shipped ee414b6 (+ replay wire-up 0eed264, replay endpoint 8931546) | client/terminal-lockin/ |
| 14-4 | Fuel meter chrome (THROUGHPUT/MISSION/YIELD) | Retired 2026-05-09 (c5cc6c1, Phase A1-A4 chrome retirement) — was shipped a4807ba | gone |
| 14-5 | Mobile PWA polish | Shipped b815e17 | client/styles/sessions.css mobile breakpoints + manifest + service worker |
Aesthetic
- Bloomberg Terminal × Project Hail Mary × Alien × Interstellar
- Amber-on-black palette (CRT pretense, not retro affectation)
- Panels-not-streams: every surface is a static panel that snapshots state, not a chat scroll. Logs go to a separate raw-stream pane.
- Mobile-first iPhone Safari with Web Speech API + Web Push + passkeys. iPad and desktop are progressive enhancements.
- JetBrains Mono for monospace; Inter only for chrome.
TOPO home — what the cockpit boots into
Fabric origins (fabric.optimal.miami) render TOPO instead of the legacy widget dashboard. Entry at client/topo/index.ts mounts:
| Surface | What it shows | Source |
|---|---|---|
| Sculpture / Stack (≥768px / <768px) | Devices as planets, sessions as ships, MOTHER bubble centered. Click a planet → planet-detail. | client/topo/{sculpture,stack}.ts, polls /api/devices via state.ts |
| NOW lane | Top 3 priority-triage briefs from GET /api/morning (lane caps: ≤3 NOW, ≤7 NEXT, ≤30 LATER per src/triage/prompt-builder.ts). Replaces the legacy today widget. | client/topo/today-lane.ts (mounted by index.ts:98) |
| MOTHER chat | Click the MOTHER bubble → modal (desktop) / bottom-sheet (mobile) with model picker (qwen2.5-coder:7b default, gemma2:9b, qwen2.5:14b, free-text). Cmd/Ctrl+Enter sends; STOP cancels via DELETE /api/sessions/:id. | client/topo/mother-chat.ts |
| Activity drawer | Unified bottom-sheet of fabric/tmux/loom rows from GET /api/activity. Per-row drill-downs route through client/activity/row-drilldown.ts. | client/topo/activity-drawer.ts |
| Mission clock | Top-right (desktop) / header strip (mobile); layout-independent. | client/topo/mission-clock.ts |
| Vault status | Per-recipient revoke + access log live in the planet-detail "Vault" section per device, plus the legacy /vault/dashboard SPA route. | planet-detail §6 |
A separate Sessions tab (unified list-then-form, 68cf6db) lives off the tab bar — it lists running/recent fabric + tmux + loom sessions across all paired devices, with a "Start new" form below. See sessions.md.
Planet detail — per-device drill-down
Phase A3 + E1, commit 12b44b2. Click any planet on TOPO to open a modal (desktop) / bottom-sheet (mobile) reading GET /api/devices/:id. Sections render top-to-bottom in "anxiety order":
- Identity — label · hostname · tailscale IP · age pubkey · paired-at
- Runtime — status pill · RAM free · connected duration
- Active sessions — sessions targeting THIS device only
- Capabilities — pill grid (
mother-llm,gpu-cuda,harness:claude-code,ram:31g, etc.) - Harnesses — installed harnesses list
- Vault — the device's own age recipient row, with revoke
- Variant — capability-driven extra section (MOTHER STATUS, WORKHORSE STATUS, CLOUD STATUS, 🦞 OPENCLAW STATUS)
- Actions — Ping · Refresh caps · Open MOTHER · Open OpenClaw
Replaces five legacy widgets in one drill-down: system, gateway, openclaw-access, openclaw-visibility, cron. Design doc: ~/.optimalos/transfers/planet-drilldown-design-2026-05-08.md.
Chrome retirement (2026-05-09)
Eight legacy dashboard widgets were deleted in cc3e2ba (chore(legacy/cleanup): delete 8 widgets superseded by Phase A fabric ports) after TOPO ports landed:
today→ ported to TOPO NOW lane (75cf5aa)alerts→ ported to chrome alerts pill (d008452)endpoints→ ported to chrome services + sites slide-over (2ab5b91)system,gateway,openclaw-access,openclaw-visibility,cron→ all rolled into per-device planet-detail (12b44b2)
Additionally, the fuel meter chrome (THROUGHPUT / MISSION / YIELD readings, Phase 14-4) was retired in c5cc6c1 along with the standalone "Pair Device" nav, as part of the chrome slot consolidation (c5cc6c1 — feat(fabric/chrome): retire fuel meter + Pair Device nav + chrome slots). The proof-of-burn ambitions deferred indefinitely; tokens are tracked in Phoenix traces instead.
MOTHER
Parent AI; named after the ship's mainframe in Alien and the AI in Project Hail Mary. Now wired end-to-end as of commit 4869422 (feat(fabric): MOTHER bridge — local LLM adapter + cockpit chat panel).
Locked decisions
- Local model only — Ollama only. Never cloud LLM. Privacy (MOTHER sees plaintext), cost ($0 marginal), latency (no roundtrip).
- Authority v1 = narrate + suggest only. MOTHER cannot act. v2 (Phase 16) gates auto-act behind phone-push approval.
- Quantized model in the 7B–14B range. Default
qwen2.5-coder:7b; cockpit picker also offersgemma2:9b,qwen2.5:14b, and a free-text override. - Context source: Phoenix traces + active session stdout + Loom kanban state + recent vault access log. MOTHER never sees decrypted credential content.
How the bridge works (commit 4869422)
- Cockpit click on the MOTHER bubble (TOPO sculpture or stack) →
mother-chat.tsopens the modal/bottom-sheet. - User types a prompt, hits Cmd/Ctrl+Enter →
POST /api/sessionswithharness: "mother-llm",deviceTarget: "auto". - Cloud's capability-aware scheduler (
src/server/device-router.ts, Phase 12-1 commitc125cfa) injects the impliedmother-llmcapability requirement viaHARNESS_REQUIRES_CAPABILITY(src/fabric/types.ts:42), hard-filters to devices that both expose the capability tag AND listmother-llmininstalledHarnesses, then soft-scores byramHeadroom * 0.5 + inverseLoad * 0.3 + heartbeatFreshness * 0.2. - Today's only mother-qualified device: pop-os (i7-12700, 32 GB RAM, RTX 3060 12 GB), paired with
--capabilities mother-llm,gpu-cuda,ollama. Pi 5 (16 GB, no GPU) is not in the candidate set. - Daemon spawns
ollama run [--format json] <model> <prompt>via themother-llmadapter (src/daemon/adapters/mother-llm.ts). Empty cred-allowlist — no provider keys. Inherits HOME, PATH, OLLAMA_HOST, OLLAMA_MODELS, CUDA_VISIBLE_DEVICES. - stdout streams back as
session.stdoutenvelopes; cockpit renders into the chat panel; STOP firesDELETE /api/sessions/:id.
The scheduler now accepts pop-os correctly per commit a290d7a (fix(triage/mother): scheduler accepts pop-os now + default to coder model) — the capability detector in src/daemon/capabilities.ts was extended to map mother-llm → ollama binary so the daemon advertises both harness:mother-llm AND installedHarnesses: ["mother-llm", ...].
MOTHER's device.installedHarnesses contract
Pair-time --capabilities mother-llm,... declares operator intent; runtime heartbeats publish actual binary detection. As of 6fccb61, pair-time tags are durable: WSMultiplex.absorbHeartbeat MERGES the runtime set into the pair-time set rather than replacing it, so the mother-llm tag from pairing survives heartbeat updates that don't re-list it.
What MOTHER will narrate (v1 surface)
- "You opened a Claude session on pop-os 4 minutes ago, no output yet. CPU is at 8% — not blocked on compute. Check the harness logs."
- "Three vault recipients are revoked but their device JWTs haven't expired." (Note: T4 cross-check + 13b-1 revocation cascade now close that gap automatically.)
- "Last two
optimal board viewcalls were 1.2s and 4.5s. Latency drift detected; Loom poller is at 87% of its budget."
Per-session JSONL logs land in ~/.optimalos/mother-sessions/ (override via OPTIMALOS_MOTHER_SESSIONS_DIR) — see src/daemon/handlers/session-start.ts §MOTHER log writer.
Two-pane terminal redesign (14-3, shipped)
Replaces the previous single-stream terminal. Code at client/terminal-lockin/.
| Pane | Content | Persistence |
|---|---|---|
| Left (derived state) | Status snapshots updated every render: file diff, env vars set, exit codes per command, MOTHER's running summary | Refreshed on every change |
| Right (raw stream) | Stdout/stderr lines exactly as emitted | Append-only; copy-friendly |
Resizable splitter; left pane defaults to 40% on desktop, slides into a tab on iPhone. Both panes addressable via keyboard. Replay endpoint GET /api/sessions/:id/stream wired in 0eed264 so old sessions can be re-rendered into both panes.
iPhone PWA (14-5, shipped)
Mobile-first means the Tier-1 surface is iPhone Safari, not desktop. Code at client/styles/sessions.css mobile breakpoints + manifest + service worker.
- Web Push for MOTHER suggestions and approval gates (Phase 16)
- Web Speech for voice input on TOPO ("show me pop-os") and dictation in the terminal
- Passkeys via WebAuthn (already wired in Phase 10a)
- Service worker for offline read of dashboard + cached cockpit assets
- App-icon adds; no App Store presence
iPad and desktop reuse the same code with breakpoints; no native apps.
What's NOT in MOTHER v1
- No auto-act. MOTHER cannot run commands, edit files, push code, send messages, or modify state. v1 narrates and suggests, full stop. Phase 16 gates auto-act behind phone-push approval per session.
- No multi-turn context. Ollama CLI is one-shot per invocation; HTTP
/api/chatswitch is the v2 path (per commit4869422"NOT in this scaffold" note). - No memory beyond the current Loom run window. MOTHER doesn't persist a model of you.
- No cloud fallback. If the local model is down, MOTHER is silent. We never bounce to Anthropic / OpenAI for commentary on plaintext data.
Source
- Full design doc (1036 lines):
~/.optimalos/transfers/fabric-design/04-cockpit-and-mother-design.md - TOPO charter (2026-05-09 cleanup): planet-drilldown design at
~/.optimalos/transfers/planet-drilldown-design-2026-05-08.md - MOTHER bridge commit:
4869422 - MOTHER scheduler fix:
a290d7a - Chrome retirement:
cc3e2ba,c5cc6c1 - Cockpit decision amendments:
03-decision-ledger.md#18 (fuel meter unit), #25 (TOPO default screen) - Hermes harness drop: Decision #24 — catalog locked at CC + Kimi + Codex + OpenClaw + OpenCode + MOTHER