Skip to main content
Use this when you run Yukta for a team and need to answer “how is it doing, who steered what, and what do I change?” without reading logs. Prerequisites: the web UI at /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/limits returns 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,prometheus and point the scraper at /actuator/prometheus. The dashboard does not need it: Observe runs.
  • Where the numbers come from. GET /api/metrics/series and GET /api/metrics/snapshot (the same as the MCP tool get_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_status and get_metrics_snapshot give an assistant the same picture: Connect an assistant.