Dashboard & Desktop
InitRunner ships with a web dashboard for browser-based management and a native desktop app that wraps the same UI in a standalone window. Both provide real-time visibility into agents, flow pipelines, teams, audit logs, and ingestion.
Web Dashboard
The dashboard is a SvelteKit frontend backed by FastAPI API routers. It uses the "Electric Charcoal" design system — a dark-only mission control aesthetic with OKLCH colors, Space Grotesk / IBM Plex Mono typography, and a lime accent.
Installation
pip install initrunner[dashboard]Requires fastapi and uvicorn.
Launch
initrunner dashboard
initrunner dashboard --expose --port 9000| Flag | Default | Description |
|---|---|---|
--port | 8100 | Port to listen on |
--expose | off | Bind to 0.0.0.0 instead of localhost (no authentication — use with caution) |
--no-open | off | Don't auto-open the browser |
--roles-dir | — | Extra directory to scan for roles (repeatable) |
--api-key | — | API key for login authentication. Enables a login page with cookie-based sessions |
Pages
| Page | Description |
|---|---|
| Launchpad | Overview with total runs, success rate, token usage, average duration. Top agents by runs, recent activity, flows, and teams at a glance. On fresh installs, shows a zero-state view with a provider status banner, starter template cards (helpdesk, librarian, memory, telegram, discord, mail), capability chips, and quickstart links |
| Agents | SvelteFlow canvas view with draggable node graph. Auto-categorization (Reactive, Intelligence, Connected, Skilled, Cognitive, Equipped), auto-layout, minimap, search with / shortcut, and capability filters (tools, triggers, ingest, memory, sinks, skills, reasoning, autonomy). Agents without a pinned model show an auto pill badge. Auto-switches to list view on mobile |
| Flow | Visual editor with SvelteFlow graph for flow pipelines. Agent nodes, visual connections, and pattern templates (pipeline, fan-out, route). Tabbed detail view with YAML editor, events stream, and config panel |
| Teams | Team builder with structured persona configuration (sequential, parallel, debate), SvelteFlow pipeline visualization with debate round nodes and synthesis step, run panel with streaming output, memory and ingest tabs for managing team-level memory and shared documents |
| MCP Hub | Four-tab management center for MCP servers: Servers (aggregated health and tool introspection), Discover (curated registry with one-click install), Playground (execute tools without an LLM), Canvas (@xyflow/svelte topology visualization). Sidebar badge shows red dot when any server is unhealthy |
| Cost | Per-agent, per-model, and per-day cost breakdowns with summary strip, spend chart, and period selector. See Cost Tracking |
| Audit | Searchable, paginated audit log with export to CSV/JSON. Includes per-run cost column |
| Approvals | Queue of paused runs awaiting a human decision. Keyboard navigation, bulk approve/deny, multi-call drawer. Sidebar badge surfaces the pending count. Since v2026.4.17 — see Approvals queue below. |
| System | System health, doctor checks, provider status with inline API key configuration, default model configuration (provider/model picker, saves to run.yaml, shows provenance), and embedding provider health |
Key Features
| Feature | Description |
|---|---|
| Agent builder | Multi-turn LLM-powered wizard for drafting and refining agent roles |
| Flow visual editor | SvelteFlow graph for flow pipelines with agent nodes and pattern templates |
| Team builder | Persona configuration with pipeline visualization, streaming output, and debate strategy support (configurable rounds and synthesis) |
| Ingestion management | Upload files, add URLs, re-ingest with SSE progress streaming, per-document delete. Summary cards showing document count, chunk count, last ingested timestamp |
| ModelCombobox | Enhanced model selector with search filtering, keyboard navigation, custom model entry, and provider-specific presets |
| Confirm delete | Type-to-confirm deletion for agents, teams, and flow pipelines |
| Starter examples | 10 curated examples (helpdesk, mail, librarian, memory, telegram, discord, reviewer team, debate team, triage flow, pipeline flow) shown as interactive cards on the launchpad zero-state with capability chips and quickstart links. Starter packs work across agent, team, and flow builders. Link directly to a starter with ?starter={slug} on the creation page |
| Provider setup | Configure API keys for standard providers and OpenRouter directly from the dashboard — available on the launchpad zero-state, agent creation page, and System page. Supports optional key validation for OpenAI and Anthropic |
| Team ingest/memory tabs | Manage team-level memory configuration and shared documents — upload files, add URLs, re-ingest with SSE progress streaming, per-document deletion, and ingestion summary with document/chunk counts |
| Embedding warning banner | Agent builder warns when generated YAML needs embeddings but the effective provider is unusable, with selectable provider chips (openai/google/ollama) and inline key configuration |
| Clustered avatars | Debate rounds show clustered spinning avatar spheres for all concurrent personas. Flow runs show a pipeline stepper with spinning agent avatars |
| MCP Hub | Aggregated MCP server health monitoring, curated server discovery with copy-to-clipboard YAML snippets, single-tool playground with auto-generated forms, and @xyflow/svelte topology canvas showing server-to-agent relationships |
| Live tool activity | Real-time tool call events streamed via SSE in agent, flow, and team run views. Each tool call shows start/complete lifecycle with status dots, tool names, durations, and error summaries |
| Token/cost meter | Horizontal bar below tool activity showing budget frame before streaming, exact token counts and USD cost estimate (via genai-prices) on completion. Progress bar when guardrails set a token limit |
| Timeline view | Gantt-style chart on a Timeline tab showing runs over the last 24 hours. Available on agents (with triggers), flows, and teams. Swim lanes with color-coded outcome bars, hover tooltips, stats strip with run count/success rate/total cost, auto-refreshes every 30s |
| Quick-run drawer | Play button on agent list rows and flow canvas nodes opens a slide-over drawer for running agents without leaving the page |
| Cost analytics | Dedicated /cost page with per-agent, per-model, and per-day sortable tables, summary strip, and daily spend chart. See Cost Tracking |
| Unified bottom panel | Agent, flow, and team run views share one bottom panel showing token counts, cost, and tool activity |
| Cognition panel | Visual editor for reasoning and autonomy — configure patterns (react, todo_driven, plan_execute, reflexion), think/todo tools, tool search, and autonomy limits without editing YAML |
Approvals queue
Since v2026.4.17, the dashboard surfaces human-in-the-loop approvals in two places:
Inline in RunPanel. When a run kicked off from the agent detail page pauses, the approval_required SSE event slots an ApprovalCardGroup into the run panel in place of the "thinking" state. Each pending call renders with a 2px left state bar (muted = unset, lime = approved, red = denied), a tool-templated argument preview (e.g. rm -rf /tmp/cache instead of raw JSON), and an Approve/Deny pair with <kbd> chip hints. Submit fires only once every card has a decision; if the model re-pauses, the group updates in place.
Queue view (/approvals). Reviewers see every paused run across the daemon, API, and other sessions, grouped by run_id. Single-call runs have inline Approve/Deny; multi-call runs open a right-side ApprovalDrawer with the originating prompt and per-call controls. A sidebar badge under Operate shows the pending count in tabular-nums — polled every 20s and bumped immediately by SSE. A ? shortcut overlay documents the keyboard grammar:
| Keys | Action |
|---|---|
j / k | Navigate between pending cards |
A / D | Approve / deny the focused card |
⇧ A / ⇧ D | Bulk approve / deny everything visible |
↵ | Submit decisions |
Esc | Close drawer or overlay |
Absent-Kicker toasts. A session-local registry of run_ids you kicked off diffs against each poll; if a run you started shows up while you're on a different page, a toast links you back to /approvals/{run_id}. Runs other operators started get only the badge — no noise for work you didn't trigger.
The queue is backed by a new /api/approvals/* router that calls services.execution.resume_run_sync in-process, so approvals always resume in the same daemon that hosts the paused run.
Desktop App
The desktop command launches the dashboard in a native window via pywebview. No browser required.
Installation
pip install initrunner[desktop]Adds pywebview on top of the dashboard dependencies.
Launch
initrunner desktop
initrunner desktop --port 8100 --roles-dir ./extra-roles/| Flag | Default | Description |
|---|---|---|
--port | 8100 | Port for the embedded FastAPI backend |
--roles-dir | — | Extra directory to scan for roles (repeatable) |
How It Works
- Starts an embedded FastAPI backend in a background thread
- Opens a native window (1280×800, minimum 900×600)
- Polls
/api/healthuntil the backend is ready (30-second timeout) - Uses GTK/WebKit on Linux, Cocoa on macOS, WebView2 on Windows
On Linux, if GTK or WebKit is missing, the command prints distro-specific install hints (Ubuntu, Fedora, Arch).
Choosing an Interface
| CLI | Web Dashboard | Desktop App | |
|---|---|---|---|
| Requires browser | No | Yes | No |
| Remote access | No | Yes (bind to 0.0.0.0) | No (local only) |
| Real-time streaming | Yes | Yes | Yes |
| Chat | Yes (REPL) | Yes | Yes |
| Visual editors | No | Yes (SvelteFlow) | Yes (SvelteFlow) |
| Multiple users | No | Yes | No |
| File attachments | --attach flag | Upload button / drag-and-drop | Upload button / drag-and-drop |
| Install size | None | Moderate (fastapi, uvicorn) | Moderate + pywebview |
Cloud Hosting
The web dashboard can be deployed to a cloud platform for always-on remote access. Each platform builds from the same Dockerfile and seeds example roles on first boot.
| Platform | Deploy method | Persistent storage | Notes |
|---|---|---|---|
| Railway | One-click button | Manual volume at /data | Builds from railway.json |
| Render | One-click button | 1 GB disk via Blueprint | Auto-provisioned by render.yaml |
| Fly.io | CLI (fly deploy) | Volume via fly volumes create | Uses deploy/fly.toml |
Tip: Set
INITRUNNER_DASHBOARD_API_KEYto password-protect the dashboard when exposing it on a public URL.
See Cloud Deploy for step-by-step instructions for each platform.