Web dashboard

The dashboard (apps/web) is a React SPA served by the control plane. It talks to /api/* and subscribes to the EventHub WebSocket for live updates.

Chat

  • Composer — markdown, file attachments, @projects/<slug> and @reports/<plugin> mentions that resolve like file references, persona picker, model selector, stop button.
  • Transcript — streaming replies, collapsible tool-call rows, plugin cards, embedded previews, image/video/3D results.
  • Personas — choose a personality per new thread; persona is locked at thread create and injected as a system line on every prompt. Built-ins: Assistant, Designer, Political expert, Software designer. Manage your own on the Config page (Other CLIs covers ob-persona).

Workspace views (Views drawer)

TabWhat it shows
ReportsProduct report queue — read, filter, mark done/wontfix/reopen, copy @reports/<slug>.
MediaMedia vault albums per thread with immutable copies.
DashboardsOne entry per enabled plugin dashboard page: pick a plugin's tab and interact with its live UI or polled cards.
HardwareDesktop disk, RAM, CPU against the container limits; warning at 80%, error at 90%.
ProjectsRegistered projects; create opens a stepper, @projects mentions refresh on projects.changed.
PluginsMarketplace browser, installed plugins, version picker with dev badges, re-install/update/remove, policy row.

Config pages

  • Providers — chat model auth (opencode auth login state), image/video/3D model selection.
  • Keys — per-user vault secrets.
  • Voice — STT/TTS provider, key, model, voice, language (Voice).
  • OpenViking — embedding + VLM config (OpenViking setup).
  • System1 — decision-model provider (Laya / Clef / Jev).
  • Personas — CRUD for your personas.
  • Admin (role admin) — app settings (media caps, disk max), users, usage, invites, backups.

Desktop tab

Start/stop the desktop, watch the live screen, take over (with hold), and launch any installed catalog app on the current thread's screen (Native apps).

The thread list hides any session titled with the reserved worker: or cron-run: prefixes — those are background jobs, not conversations.