HTTP Dashboard
Symphony provides an optional HTTP observability interface for monitoring agent activity in real-time.Enabling the Dashboard
Enable the HTTP server using the--port flag or configuration:
config.ex:348-362 (elixir/lib/symphony_elixir/…)
Accessing the Dashboard
Once enabled, access the dashboard at:- Active agent count and capacity
- Token throughput (tokens per second)
- Total runtime and token consumption
- Rate limit status
- Running agents with detailed status
- Retry queue for failed agents
- Links to Linear project and dashboard URL
http_server.ex:410-434 (elixir/lib/symphony_elixir/…)
Terminal Dashboard
Symphony also renders a live status dashboard directly in the terminal:status_dashboard.ex:125-141 (elixir/lib/symphony_elixir/…)
API Endpoints
Symphony exposes several JSON API endpoints for programmatic monitoring.GET /api/v1/state
Returns the current orchestrator state including all running and retrying agents.http_server.ex:234-292 (elixir/lib/symphony_elixir/…)
The
/api/v1/state endpoint uses a configurable snapshot timeout (default: 15 seconds). If the orchestrator doesn’t respond in time, an error payload is returned.GET /api/v1/:issue_identifier
Retrieve detailed status for a specific issue.http_server.ex:253-332 (elixir/lib/symphony_elixir/…)
Status Values:
running- Agent is actively working on the issueretrying- Agent failed and is scheduled for retry
POST /api/v1/refresh
Trigger an immediate refresh of the Linear issue polling cycle.http_server.ex:237-245 (elixir/lib/symphony_elixir/…)
Returns:
202 Accepted- Refresh request queued successfully503 Service Unavailable- Orchestrator is not responding
Observability Configuration
Configure dashboard refresh behavior inWORKFLOW.md:
config.ex:133-149 (elixir/lib/symphony_elixir/…)
Configuration Options
| Option | Default | Description |
|---|---|---|
dashboard_enabled | true | Enable terminal dashboard rendering |
refresh_ms | 1000 | Milliseconds between orchestrator polls |
render_interval_ms | 16 | Minimum milliseconds between terminal renders |
The terminal dashboard uses throttling to prevent excessive rendering. Even if data changes rapidly, renders are limited by
render_interval_ms.HTTP Server Details
Server Configuration
http_server.ex:10-13 (elixir/lib/symphony_elixir/…)
Error Responses
The HTTP server returns structured error responses:| Status Code | Error Code | Description |
|---|---|---|
| 400 | bad_request | Malformed HTTP request |
| 404 | not_found | Route not found |
| 404 | issue_not_found | Issue not in orchestrator state |
| 405 | method_not_allowed | HTTP method not supported |
| 413 | headers_too_large | Request headers exceed limit |
| 413 | body_too_large | Request body exceeds limit |
| 503 | orchestrator_unavailable | Orchestrator not responding |
http_server.ex:247-267 (elixir/lib/symphony_elixir/…)
Metrics and Telemetry
Token Metrics
Symphony tracks cumulative token consumption across all agents:- Input Tokens - Total tokens sent to Codex
- Output Tokens - Total tokens generated by Codex
- Total Tokens - Sum of input and output
- Throughput (TPS) - Tokens per second, calculated over a rolling 5-second window
status_dashboard.ex:486-523 (elixir/lib/symphony_elixir/…)
Runtime Tracking
Runtime is tracked per agent and aggregated:- Per-agent runtime in seconds
- Total runtime across all agents
- Turn count per agent
http_server.ex:345-362 (elixir/lib/symphony_elixir/…)
Rate Limit Monitoring
Symphony captures and displays rate limit information from Codex:status_dashboard.ex:917-935 (elixir/lib/symphony_elixir/…)
Rate limit data is provided by Codex through the app-server protocol and may vary based on the model and account type.