Demo state
Fictional demonstration data — not real equipment

MainsKeeper · Porchlight · command line

Talks like a neighbour. Counts like a meter.

The mainskeeper CLI speaks in plain sentences with sentence-case headings, then lays exact values out in an aligned list. Every status carries a symbol and a word, so nothing depends on colour. Colour stays quiet: coral headings, slate labels, status colours only on the symbol and its word.

mainskeeper status · on duplex-pi-probe

Run on the probe itself. Incident & recovery state at 15:22: current status stays current while history uploads.Calm fleet state at 15:22.

duplex-pi-probe — sshColour · 92 columns
duplex-pi-probe $ mainskeeper status

  MainsKeeper · duplex-pi-probe                              Wed 30 Sep 2026 · 15:22
  Site Duplex · Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 30 min (restarted 14:52)

  ◐ Recovering. Back in touch since 15:02; older history is still uploading.
    What you see below is current. Delayed records land at the time they happened.

  This probe
    Roles           ● UPS monitoring on      ● Connectivity monitoring on
    Server          ● Connected · heartbeat 3 s ago · reconnected 15:02
    Probe           ● 3 of 3 targets answering
                      Last failure window 13:41 – 15:02

  Duplex Utility UPS
    Power           ● On utility
    Charge          78% (recharging)  charge is not battery health
    Runtime         29 min  UPS estimate
    Load            27%
    Input           119 V
    Temperature     not reported
    Reading         3 s old

  History upload
    Progress        ██████░░░░░░░░░░░░░░░░░░  382 of 1,630 uploaded
    Pending         1,248 records · oldest from 13:41 (1 h 41 m old)
    Last upload     15:21:48 · batch 16 of 64
    Retries         1 · at 15:19 the server said 503; accepted on retry
    Drain           ~22 min at the current rate  estimate
    Buffer          38.2 MB of 512 MB
    History gap     ▨ 14:30 – 14:52 · no records (probe offline)

  Tip: `mainskeeper history --since 13:30` lists the delayed records in order.

  ────────────────────────────────────────────────────────────────────────────────────
  Fictional demonstration data — not real equipment. Output format is a design proposal.
duplex-pi-probe — sshNO_COLOR=1 · identical text, no colour
duplex-pi-probe $ mainskeeper status

  MainsKeeper · duplex-pi-probe                              Wed 30 Sep 2026 · 15:22
  Site Duplex · Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 30 min (restarted 14:52)

  ◐ Recovering. Back in touch since 15:02; older history is still uploading.
    What you see below is current. Delayed records land at the time they happened.

  This probe
    Roles           ● UPS monitoring on      ● Connectivity monitoring on
    Server          ● Connected · heartbeat 3 s ago · reconnected 15:02
    Probe           ● 3 of 3 targets answering
                      Last failure window 13:41 – 15:02

  Duplex Utility UPS
    Power           ● On utility
    Charge          78% (recharging)  charge is not battery health
    Runtime         29 min  UPS estimate
    Load            27%
    Input           119 V
    Temperature     not reported
    Reading         3 s old

  History upload
    Progress        ██████░░░░░░░░░░░░░░░░░░  382 of 1,630 uploaded
    Pending         1,248 records · oldest from 13:41 (1 h 41 m old)
    Last upload     15:21:48 · batch 16 of 64
    Retries         1 · at 15:19 the server said 503; accepted on retry
    Drain           ~22 min at the current rate  estimate
    Buffer          38.2 MB of 512 MB
    History gap     ▨ 14:30 – 14:52 · no records (probe offline)

  Tip: `mainskeeper history --since 13:30` lists the delayed records in order.

  ────────────────────────────────────────────────────────────────────────────────────
  Fictional demonstration data — not real equipment. Output format is a design proposal.
duplex-pi-probe — sshColour · 92 columns
duplex-pi-probe $ mainskeeper status

  MainsKeeper · duplex-pi-probe                              Wed 30 Sep 2026 · 15:22
  Site Duplex · Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 12 days

  ● All good. Reporting normally, nothing waiting to upload.

  This probe
    Roles           ● UPS monitoring on      ● Connectivity monitoring on
    Server          ● Connected · heartbeat 3 s ago
    Probe           ● 3 of 3 targets answering

  Duplex Utility UPS
    Power           ● On utility
    Charge          100%  charge is not battery health
    Runtime         46 min  UPS estimate
    Load            27%
    Input           119 V
    Temperature     not reported
    Reading         3 s old

  History upload
    Pending         Nothing waiting · last upload a few seconds ago

  Recently
    Yesterday       21:14 – 21:31 utility outage · 17 min on battery (measured)
                    Resolved. This measures that outage, not battery capacity.

  ────────────────────────────────────────────────────────────────────────────────────
  Fictional demonstration data — not real equipment. Output format is a design proposal.
duplex-pi-probe — sshNO_COLOR=1 · identical text, no colour
duplex-pi-probe $ mainskeeper status

  MainsKeeper · duplex-pi-probe                              Wed 30 Sep 2026 · 15:22
  Site Duplex · Raspberry Pi OS 12 · mainskeeperd 0.4.2 · up 12 days

  ● All good. Reporting normally, nothing waiting to upload.

  This probe
    Roles           ● UPS monitoring on      ● Connectivity monitoring on
    Server          ● Connected · heartbeat 3 s ago
    Probe           ● 3 of 3 targets answering

  Duplex Utility UPS
    Power           ● On utility
    Charge          100%  charge is not battery health
    Runtime         46 min  UPS estimate
    Load            27%
    Input           119 V
    Temperature     not reported
    Reading         3 s old

  History upload
    Pending         Nothing waiting · last upload a few seconds ago

  Recently
    Yesterday       21:14 – 21:31 utility outage · 17 min on battery (measured)
                    Resolved. This measures that outage, not battery capacity.

  ────────────────────────────────────────────────────────────────────────────────────
  Fictional demonstration data — not real equipment. Output format is a design proposal.

mainskeeper sites · from any workstation

The same site-first order as the dashboard: what needs attention comes first, each site in two lines.

jp@studioColour
jp@studio $ mainskeeper sites

  4 places · 3 need a look                              Collectors 4 of 6 · UPS 5 of 6

  ■ Broadwater   On battery · BW Rack UPS since 15:09 (13 min) · 71%, est. 18 min
                 contact 4 s ago · live readings · not acknowledged
  ▲ Shop         Contact lost with 2 of 2 probes — cause unknown · since 15:10
                 UPS last known 15:10: on utility, 100% · not acknowledged
  ◐ Duplex       Recovering · contact restored 15:02 · 1,248 records uploading
                 acknowledged by jp 13:52 · open until the backlog is verified
  ● Home         All normal · 2 of 2 collectors · contact 6 s ago

  Next: `mainskeeper site broadwater` for readings and protected equipment.
  Fictional demonstration data — not real equipment. Output format is a design proposal.
jp@studioColour on a dark terminal
jp@studio $ mainskeeper sites

  4 places · 3 need a look                              Collectors 4 of 6 · UPS 5 of 6

  ■ Broadwater   On battery · BW Rack UPS since 15:09 (13 min) · 71%, est. 18 min
                 contact 4 s ago · live readings · not acknowledged
  ▲ Shop         Contact lost with 2 of 2 probes — cause unknown · since 15:10
                 UPS last known 15:10: on utility, 100% · not acknowledged
  ◐ Duplex       Recovering · contact restored 15:02 · 1,248 records uploading
                 acknowledged by jp 13:52 · open until the backlog is verified
  ● Home         All normal · 2 of 2 collectors · contact 6 s ago

  Next: `mainskeeper site broadwater` for readings and protected equipment.
  Fictional demonstration data — not real equipment. Output format is a design proposal.
jp@studioNO_COLOR=1
jp@studio $ mainskeeper sites

  4 places · 3 need a look                              Collectors 4 of 6 · UPS 5 of 6

  ■ Broadwater   On battery · BW Rack UPS since 15:09 (13 min) · 71%, est. 18 min
                 contact 4 s ago · live readings · not acknowledged
  ▲ Shop         Contact lost with 2 of 2 probes — cause unknown · since 15:10
                 UPS last known 15:10: on utility, 100% · not acknowledged
  ◐ Duplex       Recovering · contact restored 15:02 · 1,248 records uploading
                 acknowledged by jp 13:52 · open until the backlog is verified
  ● Home         All normal · 2 of 2 collectors · contact 6 s ago

  Next: `mainskeeper site broadwater` for readings and protected equipment.
  Fictional demonstration data — not real equipment. Output format is a design proposal.
jp@studioColour
jp@studio $ mainskeeper sites

  4 places · all calm                                   Collectors 6 of 6 · UPS 6 of 6

  ● Broadwater   All normal · 2 UPS on utility · contact 4 s ago
  ● Duplex       All normal · nothing waiting to upload · contact 3 s ago
  ● Home         All normal · 2 of 2 collectors · contact 6 s ago
  ● Shop         All normal · 2 of 2 probes · contact 5 s ago

  Last event: Home weekly summary sent 09:00.
  Fictional demonstration data — not real equipment. Output format is a design proposal.
jp@studioColour on a dark terminal
jp@studio $ mainskeeper sites

  4 places · all calm                                   Collectors 6 of 6 · UPS 6 of 6

  ● Broadwater   All normal · 2 UPS on utility · contact 4 s ago
  ● Duplex       All normal · nothing waiting to upload · contact 3 s ago
  ● Home         All normal · 2 of 2 collectors · contact 6 s ago
  ● Shop         All normal · 2 of 2 probes · contact 5 s ago

  Last event: Home weekly summary sent 09:00.
  Fictional demonstration data — not real equipment. Output format is a design proposal.
jp@studioNO_COLOR=1
jp@studio $ mainskeeper sites

  4 places · all calm                                   Collectors 6 of 6 · UPS 6 of 6

  ● Broadwater   All normal · 2 UPS on utility · contact 4 s ago
  ● Duplex       All normal · nothing waiting to upload · contact 3 s ago
  ● Home         All normal · 2 of 2 collectors · contact 6 s ago
  ● Shop         All normal · 2 of 2 probes · contact 5 s ago

  Last event: Home weekly summary sent 09:00.
  Fictional demonstration data — not real equipment. Output format is a design proposal.

Fictional demonstration data — not real equipment. Output format is a design proposal. MainsKeeper has no commands that control equipment.