CLI voice: a ruled ledger in plain text
The terminal gets the same discipline as the grid: one label column, values on a shared left edge, numbers right-aligned to their unit, two spaces between fields instead of punctuation. Copper appears once, on the header line. Every meaning is in the words, so the NO_COLOR rendition loses nothing. Samples show the incident state at 15:22; every line is 92 columns or fewer.
mainskeeper status · on duplex-pi-probe
The local view from the Duplex probe. Recovery is its own line on the Server row; the backlog is a separate Sync block; the history gap and the unknown utility return time close the report.
$ mainskeeper status MainsKeeper duplex-pi-probe Wed 30 Sep 2026 15:22 local site Duplex · Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 30 min since 14:52 Roles UPS monitoring on connectivity monitoring on Server connected heartbeat 3 s ago recovered 15:02 UPS Duplex Utility UPS power on utility charge 78 % recharging runtime 29 min est. UPS estimate, a prediction load 27 % input 119 V temp not reported reading 3 s old Probe 3 of 3 targets answering last failure window 13:41 to 15:02 Sync 1,248 pending 382 of 1,630 uploaded oldest 13:41 1 h 41 m old last upload 15:21:48 batch 16 / 64 retries 1 15:19 server 503 accepted on retry drain ~22 min est. buffer 38.2 MB / 512 MB History gap 14:30 to 14:52 no records, probe offline utility return time unknown, sometime within the gap Fictional demonstration data, not real equipment. Output format is a design proposal.
$ mainskeeper status MainsKeeper duplex-pi-probe Wed 30 Sep 2026 15:22 local site Duplex · Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 30 min since 14:52 Roles UPS monitoring on connectivity monitoring on Server connected heartbeat 3 s ago recovered 15:02 UPS Duplex Utility UPS power on utility charge 78 % recharging runtime 29 min est. UPS estimate, a prediction load 27 % input 119 V temp not reported reading 3 s old Probe 3 of 3 targets answering last failure window 13:41 to 15:02 Sync 1,248 pending 382 of 1,630 uploaded oldest 13:41 1 h 41 m old last upload 15:21:48 batch 16 / 64 retries 1 15:19 server 503 accepted on retry drain ~22 min est. buffer 38.2 MB / 512 MB History gap 14:30 to 14:52 no records, probe offline utility return time unknown, sometime within the gap Fictional demonstration data, not real equipment. Output format is a design proposal.
mainskeeper fleet ups · server view
The equipment grid as text. Sites are group headings with their mixed-state summary, so Broadwater never collapses into one power state. Unsupported values are spelled out as “not reported”; estimates carry “est.”.
$ mainskeeper fleet ups MainsKeeper fleet 6 UPSs at 4 sites server view 15:22 local UPS POWER CHARGE EST RUNTIME LOAD READING Broadwater 1 of 2 UPSs on battery · 1 on utility, separate circuit BW Rack UPS on battery 15:09 71 % 18 min est. 38 % 4 s BW Office UPS on utility 100 % not reported 12 % 5 s Home 2 of 2 UPSs on utility Office Desk UPS on utility 100 % 42 min est. 22 % 6 s Garage UPS on utility 100 % not reported not reported 11 s Shop contact lost with 2 of 2 probes · cause unknown Shop Bench UPS last known 15:10 100 % 26 min est. 31 % 12 min, last known Duplex recovered 15:02 · uploading backlog, 1,248 pending Duplex Utility UPS on utility 78 % 29 min est. 27 % 3 s Open incidents 3 collectors 4 of 6 reporting UPSs 5 of 6 communicating est. is the UPS prediction · not reported means the UPS does not provide the value Fictional demonstration data, not real equipment. Output format is a design proposal.
$ mainskeeper fleet ups MainsKeeper fleet 6 UPSs at 4 sites server view 15:22 local UPS POWER CHARGE EST RUNTIME LOAD READING Broadwater 1 of 2 UPSs on battery · 1 on utility, separate circuit BW Rack UPS on battery 15:09 71 % 18 min est. 38 % 4 s BW Office UPS on utility 100 % not reported 12 % 5 s Home 2 of 2 UPSs on utility Office Desk UPS on utility 100 % 42 min est. 22 % 6 s Garage UPS on utility 100 % not reported not reported 11 s Shop contact lost with 2 of 2 probes · cause unknown Shop Bench UPS last known 15:10 100 % 26 min est. 31 % 12 min, last known Duplex recovered 15:02 · uploading backlog, 1,248 pending Duplex Utility UPS on utility 78 % 29 min est. 27 % 3 s Open incidents 3 collectors 4 of 6 reporting UPSs 5 of 6 communicating est. is the UPS prediction · not reported means the UPS does not provide the value Fictional demonstration data, not real equipment. Output format is a design proposal.
Voice rules
Labels left, values aligned
A 14-column label gutter, sub-fields indented two spaces. Numbers right-align in five columns so 78 % and 119 V share an edge.
Minimal punctuation
No colons, no brackets, no exclamation marks. Ranges read “13:41 to 15:02”. A single “·” separates facts on one line.
Words carry state
“on battery”, “last known 15:10”, “recovered 15:02”, “not reported”, “est.”. Colour is limited to the copper header, bold labels and dim notes, all optional.
Separate facts stay separate
Recovery, backlog and history gap are three lines, never one status. Contact lost is reported with “cause unknown”.
Monitoring only
There is no subcommand that shuts down, restarts, switches outlets or runs a self-test. Thresholds only change notifications.
Honest footer
Every sample ends with the fictional-data notice and the note that the output format is a design proposal.
Fictional demonstration data — not real equipment. Output format is a design proposal.