Command Center agent-runner · n8n · surfaces
Loading…

Alerts

Everything red or amber across the whole stack, worst first. Each row is dated: Last failed is the probe's own evidence of when the fault occurred, Seen since is when this browser first saw the alert — which is later than the fault whenever the tab was closed while it broke, so the two are shown apart rather than averaged into one confident number. Acknowledgements are remembered in this browser only, are stamped with the time you made them, and are released automatically if a cleared alert comes back: a recurring fault must never arrive pre-silenced.

Schedule

The full automation calendar — every scheduled job, with its live state, its runbook, and the switch to turn it off. This replaced the standalone /schedule/ page on 2026-08-05, which drew the same week from the same document but could show none of that; the URL now redirects here. Times are Pacific, converted from each engine's own zone so one calendar reads on one clock. What pause means depends on which engine owns the schedule: a tile with a cron slug is an agent-runner job, and pausing writes a marker that run-job.sh checks — cron still fires, the job does not run. Everything else is scheduled by its n8n workflow, and pausing deactivates that workflow. The n8n link on an agent-runner tile is only a manual-run shim; deactivating it would pause nothing, which is why the two are never offered as the same button.

Roster ↗ All n8n workflows ↗

Cost & quota

Are we paying for something we shouldn't be? The free agy path should be doing the image work; every render on the billed Gemini SDK is money.

Subscriptions

What each paid account has left. The four are not equally visible, and this board refuses to pretend otherwise — only Codex publishes a real plan-cap percentage, so only Codex gets a meter. Claude's remaining allowance cannot be read from a headless CLI at all, so its figure is consumption, not headroom, and its dollar amount is estimated from a dated price table (the token counts are exact). agy reports exhaustion but never a remaining balance, so it is a state light. DeepSeek is a prepaid balance. Four identical rings would be three lies and one fact.

Credentials & auth

Every engine, key and certificate — with when it was last actually exercised and the paste-ready command to fix it.

Last 24h · next 24h

Times shown in your local zone. Anything in flight right now pulses.

Jobs

Every slug in the live cron. A missed fire never started; a failed run exited non-zero; a soft miss exited 0 and committed nothing — the watchdog is blind to that last one. Anything a later successful run has already superseded is counted as recovered and stops colouring the tile; a fire missed since that run, and staleness, still do. The duration sparkline is informational and never changes a tile's colour — a job creeping toward a timeout is spending quota, not failing, so the probe rightly leaves it green.

Artifacts

The output, not the machinery. Every check above can be green while a job exits 0 and writes a broken artifact — this is the only section that would notice. Each artifact is judged against its own category's norm, never a fleet-wide rule: a missing date matters in a category that dates everything else and means nothing in one that dates nothing.

Infrastructure

The box itself: disk, the cron file's integrity, the in-container clone, caches and the watchdog that watches everything else.

Public surfaces & deploy

A green fleet that can't publish is still broken.

Deploy capacity

The ceilings the host imposes on the published site, measured in the deployed tree at deploy time. Cloudflare Pages refuses a deployment over 20,000 files and aborts the whole upload on the first file over 25 MiB — both fail the deploy outright rather than degrading, so the only useful time to look at them is long before they bite. The build guard already stops a deploy at 19,000; this board exists so 19,000 is never a surprise.

n8n

The digest workflows. If the Error Handler stops, no failure alert fires anywhere in the fleet. A workflow is red only while its last run is the failing one — once a later run succeeds it moves to n8n-recovered, and a run that fails on a known-expected condition (a Create PR 422 because the PR is already open) moves to n8n-expected. Both stay listed; neither counts as a fault.

Monitoring drift

Where the cron and the watchdog manifest disagree — a job in one but not the other is either unmonitored or permanently false-alarming.

Settings

Live feed

The site is static, so live data comes from a JSON endpoint the box publishes. Paste that URL once — it is kept in localStorage on this device only and is never baked into the deployed page. Leave it empty to read the snapshot that shipped with this build.

Control endpoint (pause & resume)

The only part of this dashboard that writes anything. Pausing posts to an n8n webhook on the box, which writes the marker file run-job.sh checks, or deactivates an n8n workflow. Both values are kept in localStorage on this device only and are never baked into the deployed page — the same rule as the status URL above. Leave them empty and the pause buttons stay honest: they hand you the exact command to run instead of pretending to have switched anything off.

This token can stop your automations, so treat it as a credential: it is worth a different value from the status path's secret, and rotating it means changing it on the box and re-pasting it here. Setup lives in Hetzner/stack/n8n/fleet-control.md in the docs repo.

Staleness

A green dashboard showing hours-old data is the worst failure this page can have, so it shouts about its own age.

Cost

Only used for the estimate on the cost board — the render counts come from the probe and are exact.