Skip to main content

Mission Control dashboard

Mission Control, at /dashboard, is the screen you land on. It answers three questions at a glance: what the loops are doing right now, what is waiting for them, and how the week is going. Every card leads to the screen where you act on it.

Mission Control: what the loops are doing now, what is waiting, and how the week is going.
Mission Control for acme-robotics, headed Good evening, Ken — the loop is turning., with 3 issues in flight, 12 queued behind them. Nothing has merged since midnight UTC., and the Edit workflows and Pull next issue buttons; the figures Loops live 3 (1 coding · 1 building · 1 in review), Queued issues 12 (est. 9h 40m of autonomous work), PRs merged · 7d 21 (▼ 4 vs last week) and Token spend · today 4.2M (≈ $18.60 across 4 providers); Active loops with three running loops; Loop pulse with its three bars and the auto-merge switch on; and the tops of System and Recently closed by the loop.Mission Control for acme-robotics, headed Good evening, Ken — the loop is turning., with 3 issues in flight, 12 queued behind them. Nothing has merged since midnight UTC., and the Edit workflows and Pull next issue buttons; the figures Loops live 3 (1 coding · 1 building · 1 in review), Queued issues 12 (est. 9h 40m of autonomous work), PRs merged · 7d 21 (▼ 4 vs last week) and Token spend · today 4.2M (≈ $18.60 across 4 providers); Active loops with three running loops; Loop pulse with its three bars and the auto-merge switch on; and the tops of System and Recently closed by the loop.

The dashboard refreshes itself while it is open; you never need to reload it.

The header​

The greeting says whether anything is running — the loop is turning when at least one loop is in flight, the loop is idle when none is. The line under it sums up the moment, for example 3 issues in flight, 12 queued behind them. Nothing has merged since midnight UTC.

Two buttons sit beside it:

  • Edit workflows — opens Workflows (see Workflows — Studio canvas).
  • ⟳ Pull next issue — greyed out. Starting the next issue by hand is not available yet; hovering it says so. Loops pick up issues from the queue on their own, and you fill the queue from Issues.

The four figures​

The row under the header holds four headline numbers:

CardWhat it counts
Loops liveRuns in flight now, broken down by what each is doing — 1 coding · 1 building · 1 in review.
Queued issuesIssues waiting for a loop, with the estimated loop time they add up to — est. 9h 40m of autonomous work.
PRs merged · 7dPull requests merged in the last seven days, against the seven before — ▼ 4 vs last week, or Level with last week.
Token spend · todayTokens used today, with their cost and how many model providers they went to — ≈ $18.60 across 4 providers.

A fall in merges is shown in red, a rise in green. Spend with no price shows the tokens alone; nothing is guessed. For trends over longer ranges, see Insights.

Active loops​

Active loops: each running loop, the stage it is in and how long it has been going.
Active loops, live, with Open run console: #482 Fix flaky CAN-bus telemetry test on standard-fix, Implementing · 4/6, claude-fable-5, coding; #479 Add OTA rollback on failed checksum on feature-loop, Build farm · 5/7, claude-sonnet-5, building; and #476 Bump MQTT client, migrate deprecated API on deps-refresh, Self-review · 6/6, ollama/qwen3-coder, review. The elapsed column is masked.Active loops, live, with Open run console: #482 Fix flaky CAN-bus telemetry test on standard-fix, Implementing · 4/6, claude-fable-5, coding; #479 Add OTA rollback on failed checksum on feature-loop, Build farm · 5/7, claude-sonnet-5, building; and #476 Bump MQTT client, migrate deprecated API on deps-refresh, Self-review · 6/6, ollama/qwen3-coder, review. The elapsed column is masked.

Active loops lists every run in flight, with a live tag while there are any:

  • Issue — the issue's number and title. Choose it to open that loop's run console.
  • Workflow — the workflow running it.
  • Stage — the stage it is in and how far along the workflow it is, such as Implementing · 4/6, with a bar.
  • Model — the model serving the current stage.
  • Elapsed — how long the loop has been running. It counts up while you watch.
  • Status — coding, building or review.

A loop leaves the table when it merges or stops for a person. Open run console → above the table is greyed out — a list of every run is not available yet; open a loop from its issue instead.

Loop pulse​

The week's pulse, with the workspace's auto-merge switch.
Loop pulse over 7 days: Autonomous merge rate 95%, Median cycle time 12m 40s and Human interventions 15 this week, each with a bar, and Auto-merge when checks pass switched on.Loop pulse over 7 days: Autonomous merge rate 95%, Median cycle time 12m 40s and Human interventions 15 this week, each with a bar, and Auto-merge when checks pass switched on.

Loop pulse shows the last 7 days in three bars:

  • Autonomous merge rate — the share of loop pull requests that merged without a person stepping in.
  • Median cycle time — the middle time from a loop starting to it merging.
  • Human interventions — how many times a person was needed this week, such as 15 this week.

Until a run has finished, the card says No runs have finished yet, so these three have nothing to measure. For the formulas and longer ranges, see Insights.

Auto-merge​

Auto-merge when checks pass, at the foot of the card, is a workspace setting: when it is on, a loop's pull request merges by itself once every required check is green. When it is off, a person merges each one from its pull request page. Only owners and admins can switch it; for anyone else it says Only an owner or an admin can change auto-merge for this workspace. Your workspace's policies can still require a person for some pull requests either way.

System​

System: whether the services behind the loops are reachable.
System, operational: REST API up, Serving requests.; Database up, Accepting queries.; Engine up, Build 0.7.17.System, operational: REST API up, Serving requests.; Database up, Accepting queries.; Engine up, Build 0.7.17.

System says whether the services behind the loops are answering. Each row is up, down or unknown, with a line from the service itself:

  • REST API — Serving requests.
  • Database — Accepting queries.
  • Engine — the service that runs the loops, with its build number.

The tag in the corner sums them up: operational when everything is up, degraded when anything is down. While the engine is down, no loop can make progress — tell whoever runs your Ouroboros installation.

Recently closed by the loop​

Recently closed: the loops that finished, and what became of them.
Recently closed by the loop, with All issues: #474 → PR #512 Debounce e-stop interrupt handler, claude-fable-5, 11m, 14/14, merged; #471 → PR #509 Unit tests for motor PID edge cases, 19m, 14/14, merged; #468 → PR #507 i18n strings for pairing screen, 6m, 12/12, merged; and #465 → PR #504 Refactor telemetry buffer allocation, claude-sonnet-5, 42m, 13/14 tinted, needs human.Recently closed by the loop, with All issues: #474 → PR #512 Debounce e-stop interrupt handler, claude-fable-5, 11m, 14/14, merged; #471 → PR #509 Unit tests for motor PID edge cases, 19m, 14/14, merged; #468 → PR #507 i18n strings for pairing screen, 6m, 12/12, merged; and #465 → PR #504 Refactor telemetry buffer allocation, claude-sonnet-5, 42m, 13/14 tinted, needs human.

Recently closed by the loop lists the runs that finished, newest first:

  • Issue → PR — the issue and the pull request the loop opened for it. The pull request number is a link to its verification page when Ouroboros has that pull request; otherwise it is plain text.
  • Model, Cycle (how long the loop took) and Checks (how many of its checks passed, such as 14/14; a short count is tinted, and hovering it says how many did not pass).
  • Outcome — merged, needs human, failed or canceled. A run that needs a person carries Review →, which opens Needs You.

All issues → opens Issues.

Up next in queue​

The queue: issues waiting for a loop, in the order they will be picked.
Up next in queue, with Manage queue: #485 Watchdog reset on I²C bus lockup (M, standard-fix), #486 Expose battery health over BLE GATT (L, feature-loop), #488 Typo sweep in operator manual (XS, docs-loop), #490 Migrate build to Zephyr 4.2 (XL, deps-refresh) and #491 Add CRC to config persistence layer (S, standard-fix), then +7 queued.Up next in queue, with Manage queue: #485 Watchdog reset on I²C bus lockup (M, standard-fix), #486 Expose battery health over BLE GATT (L, feature-loop), #488 Typo sweep in operator manual (XS, docs-loop), #490 Migrate build to Zephyr 4.2 (XL, deps-refresh) and #491 Add CRC to config persistence layer (S, standard-fix), then +7 queued.

Up next in queue lists the issues waiting for a loop, in the order Ouroboros will pick them up, each with its size (XS to XL) and the workflow that will run it. When more are waiting than fit, a button such as +7 queued → shows how many more. Both it and Manage queue → open Issues, where you queue and size issues.

A new workspace​

A fresh workspace: every card says what will fill it, and the banner offers the Get Started wizard.
Mission Control for a new workspace, headed Good evening, Ken — the loop is idle., with the banner New workspace — your first loop in about 4 minutes. and its Get started and Dismiss buttons; every figure reads 0 with a line saying what will fill it; Active loops reads Nothing is running right now; and Loop pulse reads No runs have finished yet, so these three have nothing to measure.Mission Control for a new workspace, headed Good evening, Ken — the loop is idle., with the banner New workspace — your first loop in about 4 minutes. and its Get started and Dismiss buttons; every figure reads 0 with a line saying what will fill it; Active loops reads Nothing is running right now; and Loop pulse reads No runs have finished yet, so these three have nothing to measure.

In a workspace where nothing has run yet, every card says what will fill it rather than showing an empty box — for example Nothing is running right now, with Loops appear here the moment Ouroboros picks an issue up, and stay until they merge or stop for a person. — and the figures read 0.

A new workspace also shows the banner New workspace — your first loop in about 4 minutes. Get started → opens the Get Started wizard; Dismiss hides the banner. It stays until you run a first loop or dismiss it.

What can go wrong​

  • "Showing data from 14:20 — the latest refresh failed." The dashboard could not refresh; what you see is from the time it names. The cards keep the last good figures. Choose Retry, or wait for the next refresh.
  • "The dashboard could not be read." Nothing could be read since you opened the page. Each card says what it could not read — such as The loops could not be read — and the banner says why, once. Choose Retry.
  • System reads degraded. One of the services is down; the row says which. Loops cannot make progress while the engine or database is down.
  • Auto-merge could not be changed. The setting did not save; it shows what is really set. Try again, or check that you are an owner or admin.
  • A closed run has no pull request link. Ouroboros has not synced that pull request from your git host yet; it is still listed with its number.