/control (open it from the navigation, or go to http://localhost:9858/control). If your server has keys, the UI asks for one on first use; changing the scheduler limits needs ADMIN (pause, resume and stop of runs need OPERATOR). The page reads metrics sampled in memory since startup, so it starts empty after a restart.
Steps
1
Read the command strip
The top row answers “is it healthy?” at a glance: runs per minute and p95 duration with their one-hour trend, success rate over 24 hours, approvals waiting (opens the overview, where they are answered), running and waiting runs, worker slots in use, and model spend over the last hour.
2
Scope the page
Use the Scope filter to pick the whole server, one session or one workflow. Runs, success rate, p95, approvals, the charts, live runs, the heat strip and the plugin table follow it. Capacity, running and waiting runs, worker slots, the control bus, system, model spend and AI usage always show the whole server (a scoped view labels those tiles). The scope, time range (
15m to 24h) and live or paused state are kept in the URL, so you can share a view:3
Change capacity
The Capacity panel shows running against the limit, the concurrent run limit (0 is unlimited) as a knob, the drain switch, and starts refused per reason. A change the server refuses is put back. The same from the command line:Draining is how you swap the server without cutting runs off: Deploy.
4
Steer live runs
Live runs lists runs in progress: nodes done, time so far against the workflow’s usual p95 (outlined when slower), and pause, resume and stop. Stepping is per node, in the run view the name links to. Control commands are marked under the throughput and latency charts: click one to open the run it steered, or the control audit for one that names no run, such as a limit change.
5
See who steered what
The Audit tab (
/control?tab=audit) lists every control command with who sent it (key:<name>, a supervisor id or the UI user) and whether it was applied or rejected. The Activity tab is the live event feed. The same data over REST is GET /api/control/audit.6
Check who owns what
The overview has a Supervisors section: how many supervisors there are, how many assignments, how many workflows are under direct control (nobody owns them), and how many of the newest decisions were applied or refused. Under them a heat strip shows when the supervisors decided, and links open the busiest ones. Open supervisors goes to the Supervisors page, where supervisors are created, assigned and inspected (Assign a supervisor). The same counts:
GET /api/supervision/summary.7
Put it on a wall
Kiosk opens a full-screen display: the command strip stays and the panels cycle in three groups every 15 seconds with larger type. Hovering pauses the cycle; the dots jump to a group; Esc or Exit leaves it. Animation stops under the system setting “reduce motion”.
Verify it worked
- Start a few runs: the command strip’s running count moves, Live runs lists them and the heat strip fills the current minute.
- Set the concurrent limit to 1 on the Capacity knob and start two runs: the second waits, and the waiting count in the strip shows it.
GET /api/scheduler/limitsreturns the same numbers:maxConcurrent,maxPerWorkflow,running,queued. - Pause a run from Live runs, open Audit, and the pause is there with your key name or
UI user. - Copy the address bar to a colleague: they see the same scope and range.
Variations
- Prometheus. The registry is on the class path but the endpoint is off by default. To scrape it, set
management.endpoints.web.exposure.include=health,info,metrics,prometheusand point the scraper at/actuator/prometheus. The dashboard does not need it: Observe runs. - Where the numbers come from.
GET /api/metrics/seriesandGET /api/metrics/snapshot(the same as the MCP toolget_metrics_snapshot). They are in-memory samples since startup. - AI usage. Tokens in and out and spend per provider, MCP tool calls, failed calls and refused heavy calls are server-wide meters, so a scoped view says so. To cap them: Set token budgets.
- Dashboard in an assistant.
get_scheduler_limits,get_control_bus_statusandget_metrics_snapshotgive an assistant the same picture: Connect an assistant.
Related
- Tune capacity and limits for queueing, priority and fairness.
- Use the web UI.
- Runs for statuses.