Web Dashboard
Action Llama includes an optional web-based dashboard for monitoring agents in your browser. It provides a live view of agent statuses and streaming logs — similar to the terminal TUI, but accessible from any browser.Enabling the Dashboard
Pass-w or --web-ui to al start:
[gateway].port setting in config.toml (default: 8080).
Authentication
The dashboard is protected by a gateway API key. The same key is used for both browser sessions and CLI access. Key location:~/.action-llama/credentials/gateway_api_key/default/key
The key is generated automatically by al doctor or on first al start. To view or regenerate it, run al doctor.
Browser login
Navigate tohttp://localhost:8080/dashboard. You’ll be redirected to a login page where you paste your API key. On success, an al_session cookie is set (HttpOnly, SameSite=Strict) so all subsequent requests — including SSE streams — are authenticated automatically.
A Logout link is available in the dashboard header.
CLI access
CLI commands (al stat, al pause, al resume, al kill) automatically read the API key from the credential store and send it as a Bearer token in the Authorization header.
What’s protected
The following routes require authentication:/dashboardand/dashboard/*— all dashboard pages and SSE streams/control/*— scheduler and agent control endpoints (pause, resume, kill, trigger, enable/disable)/locks/status— active lock information
/health), webhook endpoints (/webhooks/*), and container management routes are not protected.
Migrating from AL_DASHBOARD_SECRET
The old AL_DASHBOARD_SECRET environment variable (HTTP Basic Auth) is no longer used. If it’s still set, a deprecation warning is logged. Remove it from your environment and run al doctor to set up the new API key.
Dashboard Pages
Main Page — /dashboard
Displays a live overview of all agents:
| Column | Description |
|---|---|
| Agent | Agent name (click to view logs) |
| State | Current state: idle, running, building, or error |
| Status | Latest status text or error message |
| Last Run | Timestamp of the most recent run |
| Duration | How long the last run took |
| Next Run | When the next scheduled run will happen |
| Actions | Run (trigger an immediate run) and Enable/Disable (toggle the agent) |
- Pause/Resume button — pauses or resumes the scheduler (all cron jobs)
- Logout link — clears the session cookie and redirects to the login page
Agent Logs — /dashboard/agents/<name>/logs
Displays a live-streaming log view for a single agent. Logs follow automatically by default (new entries scroll into view as they arrive).
Features:
- Follow mode — enabled by default, auto-scrolls to the latest log entry. Scrolling up pauses follow; scrolling back to the bottom re-enables it.
- Clear — clears the log display (does not delete log files).
- Connection status — shows whether the SSE connection is active.
- Log levels — color-coded: green for INFO, yellow for WARN, red for ERROR.
How It Works
The dashboard is served by the same gateway that handles webhooks and container communication. When--web-ui is enabled, the gateway starts even if Docker and webhooks are not configured.
Live updates use Server-Sent Events (SSE) on two endpoints:
GET /dashboard/api/status-stream— pushes agent status and scheduler info whenever state changesGET /dashboard/api/logs/<agent>/stream— streams log lines for a specific agent by tailing its log file (500ms poll interval)
POST /control/trigger/<name>— trigger an immediate agent runPOST /control/agents/<name>/enable— enable a disabled agentPOST /control/agents/<name>/disable— disable an agent (pauses its cron job)POST /control/agents/<name>/pause— pause an agent (alias for disable)POST /control/agents/<name>/resume— resume an agent (alias for enable)POST /control/agents/<name>/kill— kill all running instances of an agentPOST /control/pause— pause the schedulerPOST /control/resume— resume the scheduler
credentials: 'same-origin' to carry the session cookie.
No additional dependencies or frontend build steps are required. The dashboard is rendered as plain HTML with inline CSS and JavaScript.