> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agtos.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Web Dashboard

> Browser-based management UI for health monitoring, voice interaction, memory browsing, device management, and system configuration

agtOS includes a built-in web dashboard served on the health port (default `4102`). The dashboard provides a real-time management interface for all platform features.

**URL**: `http://localhost:4102`

## Tech Stack

| Technology  | Purpose                      |
| ----------- | ---------------------------- |
| React 19    | UI framework                 |
| Vite 6      | Build tooling and dev server |
| TailwindCSS | Styling                      |

The dashboard is built with accessibility in mind (WCAG AA), supports keyboard navigation, and is fully responsive.

## Pages

### Welcome

Landing page with mode selection (Cloud AI / Local AI / Hybrid). Displays system capabilities and guides new users into the onboarding flow.

### Chat

Real-time text chat with SSE streaming via `POST /api/chat/stream`. Features include:

* **Streaming responses** with token-by-token rendering and rAF batching
* **Thinking/reasoning blocks** — collapsible display for Claude thinking, OpenAI reasoning, Ollama think output, and OpenRouter reasoning
* **Tool call visualization** — shows tool name, input, result, and duration inline
* **Syntax highlighting** via react-shiki for code blocks in responses
* **Image/vision support** — paste or drag-and-drop images into the chat
* **Session management** — conversations persist in sessionStorage with resume capability
* **Keyboard shortcuts** — Enter to send, Shift+Enter for newline, Escape to cancel

### Health

System health overview with color-coded status cards for each service (Redis, STT, TTS, Ollama, Claude, MCP). Shows latency metrics, request rates, error counts, and server uptime. Auto-refreshes every 5 seconds. Health checks are prioritized into three tiers (critical/important/optional) — the system shows green when critical services are healthy.

### Voice

Real-time voice interaction via the browser. Supports both Push-to-Talk (PTT) and Voice Activity Detection (VAD) modes. Displays live transcripts and TTS playback status. Unified session management shares the active session ID with the Chat page.

Uses AudioWorklet-based capture with ScriptProcessorNode fallback for older browsers. Connects to the WebSocket audio transport on port 3000.

### Memory

Browse episodic memories, run semantic searches, view the user profile and Dialectic conclusions, and import memories from external AI tools (Claude Code, Cursor, Windsurf, Aider, Copilot). Includes a maintenance history widget showing contradiction pipeline statistics from recent sweeps.

### Knowledge

Entity browser for the entity-centric memory system ([ADR-030](/architecture/decisions#adr-030)). Browse, search, and filter entities extracted via NER (people, places, organizations, events, things). View entity relationships, merge duplicates, and edit aliases.

### Entity Detail

Detailed view for a single entity showing:

* Name, type, aliases, and confidence score
* Related episodes (conversations that mention this entity)
* Related conclusions (facts derived about this entity)
* Relationships with other entities (subject/object graph)
* Edit, merge, and delete actions

### Devices

View and manage registered devices. Shows device type, platform, capabilities, trust level, and status. Supports device activation, suspension, and revocation.

### Tasks

Create and view background agent tasks. Monitor task execution with duration, step count, and tool call metrics.

### Conversations

Browse conversation history with summaries and per-conversation memory. Resume past sessions or view how working memory was assembled for each conversation.

### Providers

Browse available models from all configured providers (Claude, OpenAI, Ollama, OpenRouter). One tab per provider with search, capability filtering (AND semantics — all selected capabilities must be present), and sort options (name, context length, input price). Shows deprecation dates, `via {upstream}` badges for OpenRouter-aggregated models, Ollama disk size estimates, and account balance information. Manual "Refresh catalog" button bypasses the 1-hour cache TTL.

### Slot Configuration

Configure the Model Slot Registry — map each named slot to a provider and model. The model picker dropdown pulls live models from the ProviderCatalog and disables during catalog load to prevent race conditions. Unknown models retain their ID in the picker (round-trip safe). Shows a "Required" badge on the `chat` slot and "Custom" badge on user-defined slots. A restart-required banner appears when changes need a server restart.

### Providers

Browse available models from all configured providers (Claude, OpenAI, Ollama, OpenRouter). One tab per provider with search, capability filtering (AND semantics — all selected capabilities must be present), and sort options (name, context length, input price). Shows deprecation dates, `via {upstream}` badges for OpenRouter-aggregated models, and Ollama disk size estimates. Manual "Refresh catalog" button bypasses the 1-hour cache TTL.

### Slot Configuration

Configure the Model Slot Registry — map each named slot to a provider and model. The model picker dropdown pulls live models from the ProviderCatalog and disables during catalog load to prevent race conditions. Unknown models retain their ID in the picker (round-trip safe). Shows a "Required" badge on the `chat` slot and "Custom" badge on user-defined slots. A restart-required banner appears when changes need a server restart.

### Settings

Dynamic settings UI with 9 categories (TTS, STT, LLM, System, Memory, VAD, Audio, Privacy, Desktop). The form is generated from the settings schema (`GET /api/settings/schema`) and supports real-time updates via `PUT /api/settings`. Includes inline credential management for API key rotation with live validation.

Changes with `immediate` reload type take effect instantly. Changes with `provider-restart` reload type require a provider restart (triggered automatically).

### Configuration

System-level configuration for runtime behavior. View writable config keys, current values, and reload types. Accessible via `GET /api/config/writable` and `PUT /api/config`.

### System

Dependency status checks for Docker, Ollama, Redis, and sherpa-onnx models. Shows feature degradation status and actionable remediation hints. Includes App Management actions (re-run setup, reset onboarding, reset slot configuration).

### Logs

Structured JSON log viewer with filtering by level (`trace`, `debug`, `info`, `warn`, `error`, `fatal`), component, and correlation ID.

### Onboarding

Consumer-first 3-step setup wizard:

1. **Mode Selection** — choose Cloud AI (Claude/OpenAI key), Local AI (Ollama), or Hybrid
2. **Redis** — auto-detect or install Redis via Docker with one click
3. **Done** — service summary and next steps

Slot auto-configuration runs based on the selected mode, hardware-aware model recommendations are provided for local/hybrid setups, and voice models are downloaded just-in-time on first microphone use.

<Info>
  The onboarding page is shown automatically on first visit when no configuration is detected. See [ADR-033](/architecture/decisions#adr-033) for the consumer experience design rationale.
</Info>

## Configuration

The dashboard connects to the same ports as all other clients:

| Port | Service                                             |
| ---- | --------------------------------------------------- |
| 4102 | REST API (health, settings, memory, devices, tasks) |
| 3000 | WebSocket audio streaming (voice page)              |

No additional configuration is needed. The dashboard is served as static files from the health server.

<Note>
  When running inside the Tauri desktop app, the dashboard gains additional features: global push-to-talk hotkey configuration, native audio capture, and server health monitoring from the Rust backend. These features are progressively enhanced — the same codebase works in both browser and desktop modes.
</Note>
