Control center
Use the embedded dashboard to see whether the loop should keep running or whether a developer needs to step back in.
What the dashboard is for
The embedded dashboard is where you re-enter the loop. It keeps enough runtime state visible that you can check progress, spot drift, and intervene only when the queue actually needs you.
Three questions should be easy to answer from the dashboard:
- Can I leave the loop alone for a while longer?
- Which issue actually needs a developer right now?
- Are retries, sessions, or token burn drifting in a way that needs intervention?
Core surfaces
Overview
Use the overview page before you open a specific issue. It tells you whether the loop is healthy enough to leave alone or whether it needs attention:
- running agents
- retry queue pressure
- total issue count
- token burn across recent runtime snapshots
- 24h throughput and retry trends
Work board
The work board is where you reroute work without losing the rest of the queue:
- drag issues between lanes
- filter by project, state, and search
- keep blockers, live sessions, and token spend visible on the card
- inspect an issue quickly without losing board context
Issue detail
Issue pages are intentionally dense because this is the main re-entry surface. They keep the execution transcript, live state, blockers, branch and PR state, token usage, image attachments, and agent controls close together so you do not have to context-switch during supervision.
The image card on the issue page is where screenshots and bug captures live:
- thumbnails stay visible next to the transcript and controls
- uploads and deletions happen directly on the issue page
- the same local images also appear when you edit the issue through the composer dialog
Sessions
The sessions surface is for active orchestration periods when multiple workspaces are moving at once. Use it to read live session identifiers, last activity, and retry context without opening each issue individually.
Embedded server behavior
By default, maestro run starts the HTTP server on http://127.0.0.1:8787. Use --port to override it. That server serves:
- the embedded dashboard on
/ - the health endpoint on
/health - the live observability API on
/api/v1/... - the dashboard application API on
/api/v1/app/... - the dashboard invalidation stream on
/api/v1/ws
The UI and API are intentionally colocated because they describe the same live daemon.
The split matters:
- the dashboard UI reads the richer local control-plane API under
/api/v1/app/* - the CLI helpers such as
status --dashboard,sessions, andeventsuse the older live runtime endpoints under/api/v1/* - the browser refreshes dashboard data when
/api/v1/wssends an invalidate event
Practical reading order
If you are debugging live behavior:
- Start on overview.
- Move to the work board to isolate the affected issue.
- Open the issue detail page for transcript, screenshots, and control data.
- Use sessions when the problem is broader than one issue.