# Phase 5 — Design System & Desktop Flows > Visual + interaction system for the rebuild. Anchors: desktop-native, two-mode (AI CEO / AI Co-Founder), thread-runtime first, knowledge-backed. No web-dashboard-in-a-shell affordances. --- ## 1. Design intent A control-plane for an autonomous company. Calm. Information-dense. Keyboard-first. Pause moments are intentional — when AI Co-Founder mode pauses for review, the UI **feels** like a checkpoint, not a delay. The aesthetic baseline already lives in `landing/` and `screenshots/Dashboard.jpeg`: dusty navy (`#4a5d7a`), graphite text, off-white surfaces, restrained accent. We keep that palette and tighten the IA. ## 2. Information architecture ### 2.1 Top-level navigation (left rail) ``` ┌─────────────────────────────────────┐ │ ⌂ Dashboard │ │ 📥 Inbox ⓘ │ │ 🧵 Threads │ │ ✓ Tasks & Approvals │ │ 💼 Workspaces │ │ 📚 Knowledge │ │ ── │ │ ⚙ Settings │ │ 📊 Diagnostics │ └─────────────────────────────────────┘ ``` Sidebar collapses to icons at < 1100 px. Active item shows a subtle vertical accent bar. ### 2.2 Top bar Per company: company picker · execution-mode pill (AI CEO / AI Co-Founder) · provider chip with active connector + cost-this-month · search · profile. The mode pill is interactive: clicking opens a small panel explaining the difference, with a switch. ### 2.3 Onboarding (first run) Welcome opens the flow. The setup panel then runs 7 sections: 1. **Requirements** — checks Node.js because CLI runtimes call the local API through `node -e`. 2. **Providers** — connects at least one runtime. 3. **Company** — captures company name, description, and workspace. 4. **Team Models** — enables the models available to the CEO and workers. 5. **Mode** — defaults to `ai_ceo`; `ai_cofounder` keeps key decisions human-reviewed. 6. **Mission** — captures the first goal and acceptance description. 7. **Launch** — creates the company, CEO agent, workspace, kickoff task, and initial run handoff. The user lands in Control Center after launch. ### 2.4 Dashboard Top: 4 KPI tiles (Active agents, Tasks in review, Spend month-to-date, Waiting-on-you). Below: 3 columns — - "What's happening now" (live runs with brief status) - "Decisions waiting for you" (approval queue mirrors Inbox) - "Recent deliverables" (documents/work-products with reviewer) Empty states explain what each panel will hold once activity begins. ### 2.5 Inbox A single ordered feed of `inbox_items`: | Type | Source | Action | |---|---|---| | Wait-on-you (approval) | `thread_wait_states` `waiting_for='human'` + linked approval | Approve / Deny inline | | @mention | `agent_messages.body` mention scan | Reply | | Subscribed thread update | `thread_subscriptions` + `conversation_events` | Open | | Deliverable for review | `tasks.requires_user_review` true | Open task | Counts shown in sidebar mirror the unread/wait totals. ### 2.6 Threads A two-pane view: left = thread list (filter: All / Subscribed / Wait / Recent); right = thread transcript with composer. Transcript items: agent messages, tool executions (collapsible), tool results (collapsible), human posts, wait-state markers ("Waiting on @you to approve `bash` call …"). Composer: posts a `user` message into the active thread → triggers `wakeup_request` for the assigned agent. ### 2.7 Tasks & Approvals Existing task/approval surfaces preserved; added: - "Pending tool approvals" section grouped by run (each item shows tool, args summary, "Approve in thread" deep link). ### 2.8 Workspaces Existing surface preserved. Adds workspace lock indicator and a "Reveal in Finder/Explorer/Files" button (uses `openPath`). ### 2.9 Knowledge Existing surface preserved. Adds "Inject into agent" affordance — moves a knowledge entry into the prompt-builder context for the next run. ### 2.10 Settings Sub-pages: ``` Settings • Profile • Providers ← new (the key addition) • Execution defaults (mode default, thinking level, retry counts) • Budgets • Workspaces • Skills • Updates • Advanced (logs path, profile dir, vault info) ``` ### 2.11 Diagnostics Read-only: - Recent runs with status colours - Recent IPC errors - Vault backend label (e.g. "macOS Keychain" or "encrypted file") - Current pi-mono package versions - Open log directory button ## 3. Settings → Providers panel (the central new surface) ### 3.1 Layout ``` ┌──────────────────────────────────────────────────────────────────────┐ │ Providers │ │ Search [ ] View: [Configured ▾] [+ Add provider]│ │ │ │ ── Configured (4) ──────────────────────────────────────────────── │ │ ● Claude Pro/Max OAuth · claude.pro@gmail.com [Re-login][⋯] │ │ ● Anthropic API Key · sk-ant-…abcd [Edit] [⋯] │ │ ● AWS Bedrock AWS · profile=prod region=us-east-1 [Edit] │ │ ! Gemini CLI OAuth · refresh failed [Re-login] │ │ │ │ ── Available (21) ─────────────────────────────────────────────── │ │ ○ ChatGPT Plus/Pro (Codex) OAuth [Login] │ │ ○ GitHub Copilot OAuth [Login] │ │ ○ Antigravity OAuth [Login] │ │ ○ OpenAI API Key [Add] │ │ … │ └──────────────────────────────────────────────────────────────────────┘ ``` Status dot colours: - `●` green — `active` - `◐` amber — `expired` (refresh failed) - `!` red — `error` - `○` neutral — `not configured` ### 3.2 Forms Five hand-written forms (no universal generator): 1. **OAuthRow** — "Login" button, optional GHE domain prompt for GitHub Copilot (renders `OAuthPromptDialog`), shows progress (`onProgress` messages) inline as a tiny status line. 2. **ApiKeyForm** — single password input (masked) + "Reveal" toggle + dropdown "Source: Inline value | Env var name". Save button. 3. **AzureForm** — fields: `baseUrl`, `resourceName`, `apiVersion`, `deploymentMap` (key/value editor), `apiKey`. Save button. 4. **AwsForm** — radio: "AWS profile" / "IAM keys" / "Bearer token", each revealing fields. Region (default `us-east-1`). Advanced toggles for `forceCache`, `endpointUrl`, `skipAuth`, `forceHttp1`. 5. **VertexForm** — fields: `project`, `location`, `credentialsPath` (file picker, optional), "Use ADC" checkbox. Each form has a "Test connection" button that performs `streamSimple(... { maxTokens: 1 })` against the connector's default model with a 1-character prompt. Outcome: ✅ "OK — used $0.0001" / ❌ "". ### 3.3 OAuthPromptDialog Modal triggered by `oauth:prompt-request` (e.g. GHE domain) and `oauth:manual-code-request` (fallback when callback server is blocked): ``` ┌─────────────────────────────────────┐ │ GitHub Copilot │ │ │ │ Enter your GitHub Enterprise domain. │ │ Leave blank for github.com. │ │ │ │ [github.com_______________________] │ │ │ │ [Cancel] [Submit →] │ └─────────────────────────────────────┘ ``` ## 4. Mode UX Mode pill in top bar: - **AI CEO** — solid green pill. Tooltip: "Tools execute without review. Approvals only for explicit policy gates." - **AI Co-Founder** — outlined navy pill. Tooltip: "Agents pause at write-side tools (bash, edit, write). You approve in Inbox." Switching modes is per-company. The switch action writes `companies.execution_mode` and a confirmation toast. ### Pause state in a thread When a run pauses at `beforeToolCall`, the thread shows: ``` ┌───────────────────────────────────────────┐ │ ⟳ engineer-01 wants to run │ │ │ │ [bash] npm install │ │ in workspaces/web-frontend │ │ │ │ [Approve] [Deny] [Approve & don't ask]│ └───────────────────────────────────────────┘ ``` "Approve & don't ask" sets a per-task auto-approval for the same tool with the same arg shape (writes `agent_permissions.permissions_json`). ## 5. Visual system ### 5.1 Tokens (Tailwind config) ``` colors: navy.700 #2c3a4f navy.600 #4a5d7a ← brand accent navy.500 #6f8198 graphite #1f1f23 ← primary text ash #56575a ← secondary text fog #efeff1 ← surface alt paper #f8f8f9 ← surface accent #c98c5a ← warm accent (warnings, awaiting human) ok #4a8d6f warn #c79a45 err #b75252 font: sans Inter, ui-sans-serif mono "JetBrains Mono", ui-monospace radius: sm 4px / md 8px / lg 12px shadow: card 0 1px 2px rgba(0,0,0,0.06), 0 0 0 1px rgba(0,0,0,0.04) ``` Dark mode: invert paper/fog/graphite axis; navy.600 preserved as accent. ### 5.2 Spacing scale `4 / 8 / 12 / 16 / 24 / 32 / 48 / 64` px. No off-grid spacing. ### 5.3 Components reused `src/renderer/components/ui/` already exposes primitives, layout, feedback, hooks. We extend it (no rewrite) with: - `` - `` - `` (Azure deployment map, custom env) - `` - `` ### 5.4 Density + responsive - Default density: comfortable. Toggle to compact in Settings → Profile. - Window min size: `1024 × 720`. Sidebar collapses < 1100. Right panels collapse < 1280. - Drag-and-drop affordances: - Knowledge entries → agent context (drag onto agent card). - Files into Workspaces (already supported by underlying tooling; UI affordance added). ### 5.5 Keyboard | Shortcut | Action | |---|---| | `⌘/Ctrl + K` | Quick open (companies, threads, tasks) | | `⌘/Ctrl + 1..9` | Switch sidebar item | | `⌘/Ctrl + Enter` | Submit composer / Approve highlighted item | | `Esc` | Close dialogs | | `?` | Show shortcuts overlay | ## 6. Empty + loading + error states (mandatory per screen) Every new screen ships: - Empty illustration + 1-line explanation + 1-CTA. - Loading: skeleton blocks (no spinners except > 2 s). - Error: a `` with an action button (retry / open logs). No placeholder copy. No "Coming soon" text on any provider — every provider has either an active form or an inactive form with a clear "Configure" path. ## 7. Microcopy rules - Lead with verbs ("Approve", "Deny", "Re-login"). - Status text uses past tense ("Refreshed 2 min ago"). - Cost expressed as `$0.012` (3 decimals when < $1, otherwise 2). - Token counts use grouping `12,345`. - Times use locale-aware format with absolute hover tooltip. ## 8. Thread runtime UX bindings | Renderer concept | Binding | |---|---| | "Wait card" in thread | `thread_wait_states` row resolved == null | | "Read receipt" | (not in this rebuild) | | "Subscribed" badge | `thread_subscriptions` row exists | | "Mention" highlight | `agent_messages.body` mentions parsed at render time (existing helper) | | "Inject knowledge" | calls `agentCompany.addThreadEvent` with `event_type: 'knowledge_injection'`, then `wakeup_request` | ## 9. Onboarding mode-explainer copy ``` AI CEO The CEO agent runs without pausing. Tools execute autonomously. Best for: research sprints, content batches, long-running automation. AI Co-Founder The CEO agent pauses before any tool that writes to your filesystem, modifies code, or runs a shell command. You approve in your Inbox. Best for: code in your real workspaces, anything you'd want to review first. You can switch any company between modes from the top bar. ``` ## 10. Done criteria for Phase 5 - Every screen is named. - Every form is a dedicated component. - Every state (empty/loading/error) has a rule. - Every status surface has a token. - The Providers panel is fully specified per the contract. - The mode UX is concrete, not aspirational.