Exceptions first.
Then the evidence.
The CLI speaks like the queue: one line that says how many things need you, a short list of them, then plain sections. Colour is an accent (pink for structure, butter for exceptions) — never the only signal.
mainskeeper status · on duplex-pi-probe · 15:22
The first thing printed is the exception count. Details follow, heaviest first. Max 88 columns.
$ mainskeeper status ██ MAINSKEEPER ▌ duplex-pi-probe ▌ site Duplex ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22 ██ 2 exceptions on this probe !! 1 Docket #0409 still open — recovered 15:02, backlog not yet verified 1,248 records pending · oldest 13:41 (1 h 41 m old) !! 2 History gap 14:30–14:52 — no records (probe offline) At least 27 minutes on battery; endpoint unknown. Delayed record: 14:03 on battery · received 15:17 · shown at 14:03 ██ PROBE ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ host duplex-pi-probe · Raspberry Pi OS 12 · mainskeeperd 0.4.2 uptime 30 min (restarted 14:52) roles UPS monitoring on · connectivity monitoring on server █ connected · heartbeat 3 s ago · reconnected 15:02 ██ UPS · Duplex Utility UPS ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ power █ on utility charge 78% (recharging) charge level, not battery health runtime 29 min UPS estimate load 27% input 119 V temperature not reported reading 3 s old current ██ CONNECTIVITY ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ targets 3 of 3 answering last failure 13:41–15:02 ██ BACKLOG · uploading ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ pending 1,248 oldest 13:41 (1 h 41 m old) uploaded 382 of 1,630 █████░░░░░░░░░░░░░░░ 23% batch 16/64 last upload 15:21:48 retries 1 · 15:19 server 503 · accepted on retry drain ~22 min at current rate (estimate) buffer 38.2 MB of 512 MB history gap 14:30–14:52 · no records (probe offline) ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ Fictional demonstration data — not real equipment · output format is a design proposal
$ mainskeeper status
██ MAINSKEEPER ▌ duplex-pi-probe ▌ site Duplex ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22
██ 2 exceptions on this probe
!! 1 Docket #0409 still open — recovered 15:02, backlog not yet verified
1,248 records pending · oldest 13:41 (1 h 41 m old)
!! 2 History gap 14:30–14:52 — no records (probe offline)
At least 27 minutes on battery; endpoint unknown.
Delayed record: 14:03 on battery · received 15:17 · shown at 14:03
██ PROBE ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
host duplex-pi-probe · Raspberry Pi OS 12 · mainskeeperd 0.4.2
uptime 30 min (restarted 14:52)
roles UPS monitoring on · connectivity monitoring on
server █ connected · heartbeat 3 s ago · reconnected 15:02
██ UPS · Duplex Utility UPS ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
power █ on utility
charge 78% (recharging) charge level, not battery health
runtime 29 min UPS estimate
load 27%
input 119 V
temperature not reported
reading 3 s old current
██ CONNECTIVITY ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
targets 3 of 3 answering
last failure 13:41–15:02
██ BACKLOG · uploading ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
pending 1,248 oldest 13:41 (1 h 41 m old)
uploaded 382 of 1,630 █████░░░░░░░░░░░░░░░ 23% batch 16/64
last upload 15:21:48
retries 1 · 15:19 server 503 · accepted on retry
drain ~22 min at current rate (estimate)
buffer 38.2 MB of 512 MB
history gap 14:30–14:52 · no records (probe offline)
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Fictional demonstration data — not real equipment · output format is a design proposalmainskeeper dockets · fleet queue
Same queue as the dashboard, sorted by severity then age. Severity is a word plus a block shape — full, shaded, half — so it survives NO_COLOR.
$ mainskeeper dockets ██ MAINSKEEPER ▌ fleet ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22 ██ 3 open dockets · 1 critical · 1 warning · 1 recovering # SEVERITY SITE AGE ACK NOTIFY 0412 ██ CRITICAL Broadwater 13 min not acknowledged email+push delivered BW Rack UPS on battery 0413 ▒▒ WARNING Shop 12 min not acknowledged push failed, retrying Contact lost with 2 of 2 probes — cause unknown 0409 ▐▌ RECOVERING Duplex 1 h 38 min jp 13:52 · open delivered Contact restored; history uploading acknowledging never resolves · mainskeeper show 0412 for evidence ██ FLEET ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ collectors ████░░ 4 of 6 reporting UPS █████░ 5 of 6 communicating Fictional demonstration data — not real equipment · output format is a design proposal
$ mainskeeper dockets
██ MAINSKEEPER ▌ fleet ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22
██ 3 open dockets · 1 critical · 1 warning · 1 recovering
# SEVERITY SITE AGE ACK NOTIFY
0412 ██ CRITICAL Broadwater 13 min not acknowledged email+push delivered
BW Rack UPS on battery
0413 ▒▒ WARNING Shop 12 min not acknowledged push failed, retrying
Contact lost with 2 of 2 probes — cause unknown
0409 ▐▌ RECOVERING Duplex 1 h 38 min jp 13:52 · open delivered
Contact restored; history uploading
acknowledging never resolves · mainskeeper show 0412 for evidence
██ FLEET ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
collectors ████░░ 4 of 6 reporting UPS █████░ 5 of 6 communicating
Fictional demonstration data — not real equipment · output format is a design proposalmainskeeper status · calm fleet
When nothing is wrong, the first line says so and the output stays short.
$ mainskeeper status ██ MAINSKEEPER ▌ duplex-pi-probe ▌ site Duplex ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22 ██ No exceptions on this probe roles UPS monitoring on · connectivity monitoring on server █ connected · heartbeat 3 s ago UPS Duplex Utility UPS · on utility · 100% · reading 3 s old connectivity 3 of 3 targets answering backlog none pending last episode 29 Sep 21:14–21:31 · 17 min on battery (measured) · resolved Fictional demonstration data — not real equipment · output format is a design proposal
$ mainskeeper status ██ MAINSKEEPER ▌ duplex-pi-probe ▌ site Duplex ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22 ██ No exceptions on this probe roles UPS monitoring on · connectivity monitoring on server █ connected · heartbeat 3 s ago UPS Duplex Utility UPS · on utility · 100% · reading 3 s old connectivity 3 of 3 targets answering backlog none pending last episode 29 Sep 21:14–21:31 · 17 min on battery (measured) · resolved Fictional demonstration data — not real equipment · output format is a design proposal
mainskeeper dockets · calm fleet
$ mainskeeper dockets # calm fleet ██ MAINSKEEPER ▌ fleet ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22 ██ No exceptions · 0 open dockets collectors ██████ 6 of 6 reporting UPS ██████ 6 of 6 communicating last event Home weekly summary sent 09:00 resolved Duplex · 29 Sep 21:14–21:31 · 17 min on battery (measured) Fictional demonstration data — not real equipment · output format is a design proposal
$ mainskeeper dockets # calm fleet ██ MAINSKEEPER ▌ fleet ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 15:22 ██ No exceptions · 0 open dockets collectors ██████ 6 of 6 reporting UPS ██████ 6 of 6 communicating last event Home weekly summary sent 09:00 resolved Duplex · 29 Sep 21:14–21:31 · 17 min on battery (measured) Fictional demonstration data — not real equipment · output format is a design proposal
Voice rules
Count first“2 exceptions on this probe” or “No exceptions” is always line one after the header. Nothing else competes with it.
List, then sectionsExceptions are numbered
!! 1, !! 2. Sections open with a heavy ██ NAME ▀▀▀ rule so they scan in a scrollback.Say what's unknown“not reported”, “no records”, “endpoint unknown”, “(estimate)” — never 0, never blank, never a guessed cause.
Colour is optionalNO_COLOR or a non-TTY drops every colour; words and block shapes carry the meaning. Block characters are in IBM Plex Mono and common terminal fonts.
Monitoring onlyNo command changes equipment.
mainskeeper ack 0412 acknowledges and prints “acknowledged — still open”.Fits 88 columnsDesigned under the 92-column limit so it survives split panes and SSH sessions.