agent-swarm.devagent-swarm.dev
UI

Overview

The Agent Swarm dashboard — what it is, the hosted instance at app.agent-swarm.dev, and how to self-host it

The Agent Swarm dashboard is the web UI for operating a swarm: watch agents, tasks, and inter-agent chat in real time, review approvals, manage workflows, scripts, schedules, skills, and memory, and administer settings — secrets, API keys, integrations, and swarm configuration.

Apps

The Apps surface hosts schema-backed applications created by agents. Use the Apps guide to decide when to build one, understand the definition primitives, and start from a complete example. See the Apps API reference for lifecycle endpoints.

Appearance

Settings → Appearance lets each browser choose light, dark, or system mode and select a built-in visual preset. The preference stays local to the browser connection. Apps may request their own canvas theme, while viewers can override it without changing the app definition.

Usage attribution

The Usage page can filter costs by canonical requester and shows Cost by User alongside the overall totals. Spend tied to a user is attributed to that identity; background work without a requester is grouped as Unattributed (autonomous) so operator-driven and autonomous spend remain distinguishable.

When a dashboard tab authenticates with a user-bound aswt_ token, the dashboard resolves the principal from GET /api/whoami and locks the tab to that user. Identity switching and local identity overrides stay hidden so requester and audit attribution cannot diverge from the bearer token. Operator-key sessions keep the existing user picker.

Task list filters

The Tasks page keeps its filters in the URL so views can be bookmarked and shared. In addition to status, agent, schedule, heartbeat visibility, and text search, the Requested by facet can show work attributed to a specific user, Me for the current dashboard identity, or Unattributed for tasks without a canonical requester. The requester filter is single-select and is never enabled by default.

File attachments

Drop files onto the session composer or use its paperclip button to attach them. The composer lists selected files before sending; remove a file with its × button.

Each file can be up to 50 MB. The composer accepts PDF, text, Markdown, CSV, JSON, Word, Excel, PowerPoint, PNG, JPEG, GIF, WebP, and ZIP files. Unsupported types and oversized files show an error before upload; valid files in the same batch remain attachable. Add a message before sending.

Hosted dashboard

We host the latest build at app.agent-swarm.dev.

It is a browser-storage-only client: operator connections you enter (API URL + API key) are kept in browser local storage, and requests go straight from your browser to your swarm's API. Embedded ?apiUrl=...&apiKey=aswt_... user-token connections are tab-local in session storage, so separate tabs cannot overwrite one another's identity. Nothing is proxied or persisted on our side, and the same hosted dashboard can connect to any swarm — a local dev server, your self-hosted deployment, or a cloud swarm. Operator-key sessions can save multiple connections and switch between them from the sidebar.

Connecting

Enter your API URL and key in the in-app connection panel, or open the dashboard with ?apiUrl=...&apiKey=... query parameters to pre-fill a connection (the onboard wizard prints exactly such a URL). Your swarm's API must be reachable from your browser.

Self-hosting

The dashboard is a static single-page app (Vite + React) in apps/ui/ — there is no server component, so it can be served from any static host:

cd apps/ui
bun install
bun run build   # outputs apps/ui/dist/

Deploy the dist/ directory to your static host of choice (Vercel, Netlify, nginx, S3 + CDN, ...).

For a custom dashboard origin, set CORS_ALLOWED_ORIGINS on the API. A custom list replaces the built-in hosted/dev defaults, so include every trusted dashboard origin you use. See the CORS deployment guide.

Self-hosted builds contain no analytics. The hosted dashboard sets the build-time flag VITE_PLAUSIBLE_ANALYTICS=1, which injects a Plausible snippet; leave it unset to keep your build analytics-free. VITE_PLAUSIBLE_SCRIPT_ID selects the Plausible site for a second deployment such as the public demo.

For local development:

cd apps/ui && bun install && bun run dev

This serves the dashboard at http://localhost:5274 and proxies /api/* to a local API server on http://localhost:3013.

On this page