CLI · relationship-aware voice
Every answer is a small tree: who reads what (telemetry — a data link, never wiring), what that UPS powers (known dependency), and how fresh each fact is. Mint marks live/healthy, sodium marks the object in focus; everything also reads with NO_COLOR=1, where the glyphs and words carry the state.
mainskeeper status on duplex-pi-probe
$ mainskeeper status MainsKeeper · duplex-pi-probe · site Duplex Wed 30 Sep 2026 15:22 Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 30 min (since 14:52) ROLES UPS monitoring on · connectivity monitoring on (independent roles) SERVER ● connected · heartbeat 3 s ago · ✓ recovered 15:02 (fresh evidence) RELATIONSHIPS ┄▸ reads = telemetry, not wiring ━┫ powers = known dependency duplex-pi-probe (this probe) ├── this probe reads: Duplex Utility UPS (USB) ┄┄▸ │ ├── ● on utility · 78% (recharging) · reading 3 s old │ ├── ◌ est. runtime 29 min (UPS estimate) · load 27% · input 119 V │ ├── ▨ temperature: not reported │ └── which powers: duplex-router, duplex-ont, duplex-camera-nvr (known dependency) └── this probe checks: probe targets ╌╌◎ ● 3 of 3 answering └── last failure window 13:41–15:02 (recorded on this probe) SYNC separate from recovery ⇡ 1,248 pending · 382 of 1,630 uploaded · oldest pending 13:41 (1 h 41 m old) last upload 15:21:48 · batch 16/64 · 1 retry (15:19, server 503, accepted on retry) est. drain ~22 min (estimate) · buffer 38.2 MB / 512 MB [█████░░░░░░░░░░░░░░░░░] 23% uploaded HISTORY ○ 14:03 on battery — recorded locally, received 15:17 (delayed) ▨ 14:30–14:52 history gap · no records (probe offline) ! At least 27 minutes on battery; endpoint unknown. [ ] 14:52 utility first observed present (first record after the gap, ±90 s) return time unknown — sometime between 14:30 and 14:52 Fictional demonstration data — not real equipment. Output format is a design proposal.
$ mainskeeper status
MainsKeeper · duplex-pi-probe · site Duplex Wed 30 Sep 2026 15:22
Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 30 min (since 14:52)
ROLES UPS monitoring on · connectivity monitoring on (independent roles)
SERVER ● connected · heartbeat 3 s ago · ✓ recovered 15:02 (fresh evidence)
RELATIONSHIPS ┄▸ reads = telemetry, not wiring ━┫ powers = known dependency
duplex-pi-probe (this probe)
├── this probe reads: Duplex Utility UPS (USB) ┄┄▸
│ ├── ● on utility · 78% (recharging) · reading 3 s old
│ ├── ◌ est. runtime 29 min (UPS estimate) · load 27% · input 119 V
│ ├── ▨ temperature: not reported
│ └── which powers: duplex-router, duplex-ont, duplex-camera-nvr (known dependency)
└── this probe checks: probe targets ╌╌◎ ● 3 of 3 answering
└── last failure window 13:41–15:02 (recorded on this probe)
SYNC separate from recovery
⇡ 1,248 pending · 382 of 1,630 uploaded · oldest pending 13:41 (1 h 41 m old)
last upload 15:21:48 · batch 16/64 · 1 retry (15:19, server 503, accepted on retry)
est. drain ~22 min (estimate) · buffer 38.2 MB / 512 MB
[█████░░░░░░░░░░░░░░░░░] 23% uploaded
HISTORY
○ 14:03 on battery — recorded locally, received 15:17 (delayed)
▨ 14:30–14:52 history gap · no records (probe offline)
! At least 27 minutes on battery; endpoint unknown.
[ ] 14:52 utility first observed present (first record after the gap, ±90 s)
return time unknown — sometime between 14:30 and 14:52
Fictional demonstration data — not real equipment. Output format is a design proposal.$ mainskeeper status MainsKeeper · duplex-pi-probe · site Duplex Wed 30 Sep 2026 15:22 Raspberry Pi OS 12 · mainskeeperd 0.4.2 ROLES UPS monitoring on · connectivity monitoring on (independent roles) SERVER ● connected · heartbeat 3 s ago RELATIONSHIPS ┄▸ reads = telemetry, not wiring ━┫ powers = known dependency duplex-pi-probe (this probe) ├── this probe reads: Duplex Utility UPS (USB) ┄┄▸ │ ├── ● on utility · 100% · reading 3 s old │ ├── ◌ est. runtime 36 min (UPS estimate) · load 27% · input 119 V │ ├── ▨ temperature: not reported │ └── which powers: duplex-router, duplex-ont, duplex-camera-nvr (known dependency) └── this probe checks: probe targets ╌╌◎ ● 3 of 3 answering SYNC ● current · no backlog HISTORY ● 29 Sep 21:14–21:31 utility outage · 17 min on battery (measured) start record received 21:14:03 · end record received 21:31:05 · resolved measures that outage, not battery capacity Fictional demonstration data — not real equipment. Output format is a design proposal.
$ mainskeeper status
MainsKeeper · duplex-pi-probe · site Duplex Wed 30 Sep 2026 15:22
Raspberry Pi OS 12 · mainskeeperd 0.4.2
ROLES UPS monitoring on · connectivity monitoring on (independent roles)
SERVER ● connected · heartbeat 3 s ago
RELATIONSHIPS ┄▸ reads = telemetry, not wiring ━┫ powers = known dependency
duplex-pi-probe (this probe)
├── this probe reads: Duplex Utility UPS (USB) ┄┄▸
│ ├── ● on utility · 100% · reading 3 s old
│ ├── ◌ est. runtime 36 min (UPS estimate) · load 27% · input 119 V
│ ├── ▨ temperature: not reported
│ └── which powers: duplex-router, duplex-ont, duplex-camera-nvr (known dependency)
└── this probe checks: probe targets ╌╌◎ ● 3 of 3 answering
SYNC ● current · no backlog
HISTORY
● 29 Sep 21:14–21:31 utility outage · 17 min on battery (measured)
start record received 21:14:03 · end record received 21:31:05 · resolved
measures that outage, not battery capacity
Fictional demonstration data — not real equipment. Output format is a design proposal.mainskeeper trace walk a dependency upstream
$ mainskeeper trace duplex-camera-nvr duplex-camera-nvr · protected equipment · site Duplex · not monitored directly └── powered by: Duplex Utility UPS ━┫ known dependency (configured) │ ● on utility · 78% (recharging) · reading 3 s old └── read by: duplex-pi-probe ┄┄▸ USB · telemetry, not wiring ● contact 3 s ago · ✓ recovered 15:02 · ⇡ sync 382 of 1,630 (separate) Fictional demonstration data — not real equipment. Output format is a design proposal.
$ mainskeeper trace duplex-camera-nvr
duplex-camera-nvr · protected equipment · site Duplex · not monitored directly
└── powered by: Duplex Utility UPS ━┫ known dependency (configured)
│ ● on utility · 78% (recharging) · reading 3 s old
└── read by: duplex-pi-probe ┄┄▸ USB · telemetry, not wiring
● contact 3 s ago · ✓ recovered 15:02 · ⇡ sync 382 of 1,630 (separate)
Fictional demonstration data — not real equipment. Output format is a design proposal.$ mainskeeper trace duplex-camera-nvr duplex-camera-nvr · protected equipment · site Duplex · not monitored directly └── powered by: Duplex Utility UPS ━┫ known dependency (configured) │ ● on utility · 100% · reading 3 s old └── read by: duplex-pi-probe ┄┄▸ USB · telemetry, not wiring ● contact 3 s ago · sync current Fictional demonstration data — not real equipment. Output format is a design proposal.
$ mainskeeper trace duplex-camera-nvr
duplex-camera-nvr · protected equipment · site Duplex · not monitored directly
└── powered by: Duplex Utility UPS ━┫ known dependency (configured)
│ ● on utility · 100% · reading 3 s old
└── read by: duplex-pi-probe ┄┄▸ USB · telemetry, not wiring
● contact 3 s ago · sync current
Fictional demonstration data — not real equipment. Output format is a design proposal.mainskeeper coverage --fleet what is observed, by whom
$ mainskeeper coverage --fleet COVERAGE 4 sites · 6 collectors · 6 UPSs from server · 15:22 UPSs 6 of 6 assigned to a collector · 5 of 6 currently observed ? Shop Bench UPS — last known 15:10 (12 min ago) · contact lost — cause unknown Agents ⊘ 2 machines without agents — expected: bw-desk-ws (sleeping), shop-cnc-ctrl Values ▨ 10 UPS measurements not reported by hardware (shown as not reported, never 0) Broadwater ■ 1 of 2 UPSs on battery · 1 on utility (separate circuit) ├── bw-pi-01 reads: BW Rack UPS (USB) on battery 13 min · est. 18 min (UPS estimate) │ └── which powers: bw-router, bw-nas-01, bw-switch-24 (known dependency) └── bw-pi-01 reads: BW Office UPS (SNMP) ● on utility └── which powers: bw-desk-ws ⊘ no agent, sleeping — expected Shop ? contact lost with 2 of 2 probes — cause unknown (no local evidence yet) └── shop-esp32-ups reads: Shop Bench UPS (USB) ? last known 15:10 └── which powers: shop-cnc-ctrl ⊘, shop-switch, shop-camera (known dependency) Fictional demonstration data — not real equipment. Output format is a design proposal.
$ mainskeeper coverage --fleet
COVERAGE 4 sites · 6 collectors · 6 UPSs from server · 15:22
UPSs 6 of 6 assigned to a collector · 5 of 6 currently observed
? Shop Bench UPS — last known 15:10 (12 min ago) · contact lost — cause unknown
Agents ⊘ 2 machines without agents — expected: bw-desk-ws (sleeping), shop-cnc-ctrl
Values ▨ 10 UPS measurements not reported by hardware (shown as not reported, never 0)
Broadwater ■ 1 of 2 UPSs on battery · 1 on utility (separate circuit)
├── bw-pi-01 reads: BW Rack UPS (USB) on battery 13 min · est. 18 min (UPS estimate)
│ └── which powers: bw-router, bw-nas-01, bw-switch-24 (known dependency)
└── bw-pi-01 reads: BW Office UPS (SNMP) ● on utility
└── which powers: bw-desk-ws ⊘ no agent, sleeping — expected
Shop ? contact lost with 2 of 2 probes — cause unknown (no local evidence yet)
└── shop-esp32-ups reads: Shop Bench UPS (USB) ? last known 15:10
└── which powers: shop-cnc-ctrl ⊘, shop-switch, shop-camera (known dependency)
Fictional demonstration data — not real equipment. Output format is a design proposal.$ mainskeeper coverage --fleet COVERAGE 4 sites · 6 collectors · 6 UPSs from server · 15:22 UPSs ● 6 of 6 UPSs observed by a collector Agents ⊘ 2 machines without agents — expected: bw-desk-ws (sleeping), shop-cnc-ctrl Values ▨ 10 UPS measurements not reported by hardware (shown as not reported, never 0) Broadwater ● 2 of 2 UPSs on utility Home ● 2 of 2 UPSs on utility Shop ● 1 of 1 UPS on utility · 2 of 2 probes reporting Duplex ● 1 of 1 UPS on utility · sync current Fictional demonstration data — not real equipment. Output format is a design proposal.
$ mainskeeper coverage --fleet COVERAGE 4 sites · 6 collectors · 6 UPSs from server · 15:22 UPSs ● 6 of 6 UPSs observed by a collector Agents ⊘ 2 machines without agents — expected: bw-desk-ws (sleeping), shop-cnc-ctrl Values ▨ 10 UPS measurements not reported by hardware (shown as not reported, never 0) Broadwater ● 2 of 2 UPSs on utility Home ● 2 of 2 UPSs on utility Shop ● 1 of 1 UPS on utility · 2 of 2 probes reporting Duplex ● 1 of 1 UPS on utility · sync current Fictional demonstration data — not real equipment. Output format is a design proposal.
Glyphs survive without colour● live/measured · ◌ estimate · ○ delayed · ▨ not reported / no records · [ ] uncertain · ? contact lost — cause unknown · ⊘ no agent · ⇡ sync.
Relationship words, not line art“reads:”, “which powers:”, “checks:”, “read by:”, “powered by:”. The tree uses box-drawing only for structure; link types are named in words.
Separate attributesRecovery and sync are on separate lines; the battery episode keeps its unknown endpoint; runtime is always labelled as the UPS estimate.