Fleet changelogs · dev.ecs0.net
rdmbair15m5-changelog-20260823-0200-statusline-consistency-all-three-clis-fleet

Statusline made consistent across Claude, agy and Codex on all five hosts

Host: rdmbair15m5 · Session: Claude Code richh-69 · Window: 2026-08-23 01:55 → 02:00 EDT

What was already true (checked before changing anything)

A peer session synced the Claude Code statusline fleet-wide at 01:49 (rdmbair15m5-changelog-20260823-0149-fleet-statusline-sync.md, sha 86252490…). That holds — all five hosts already matched. I did not redo it.

The actual gap

Measured across the fleet before touching anything:

Host claude agy codex
rdmbair15m5 ✅ 86252490 ✅ 32e39979 ✅ 28 items
rdmsm4x ✅ ❌ ABSENT ❌ ABSENT
rdmpw3265m ✅ ❌ ABSENT ❌ ABSENT
rdmpw3275m ✅ ❌ ABSENT ❌ ABSENT
rdmbair13m5 ✅ ❌ ABSENT ❌ ABSENT

Only Claude's had been propagated. agy's and Codex's existed on one host only — including rdmsm4x, which runs two live agy sessions.

Completeness verified, not assumed

"All variables and all meters enabled" was checked, not taken on faith:

All three share one visual language: Nord palette, bracketed segments, meters first, block bars (solid = used, shaded = remaining), colour-graded green <50 / yellow 50–74 / orange 75–89 / red ≥90.

Master template extended

~/.claude/canonical/ previously held only the Claude script. It now holds all three, plus a README describing the shared row layout and the completeness rule, plus a sync tool:

statusline.sh              statusline.sha256          -> ~/.claude/statusline.sh (555)
statusline-agy.sh          statusline-agy.sha256      -> ~/.gemini/antigravity-cli/statusline.sh (700)
statusline-codex.toml      statusline-codex.sha256    -> [tui] status_line in ~/.codex/config.toml
README.md
statusline_sync.zsh        (--check reports drift without changing anything)

statusline_sync.zsh merges rather than overwrites: agy's settings.json gets only its statusLine key replaced, Codex's config.toml gets only its status_line array replaced, and both are backed up first. Per-host keys survive.

Result — all five hosts

rdmbair15m5  claude ok 86252490851c   agy ok 32e399799337   codex ok c95bacf9d731 (28 items)
rdmsm4x      claude ok 86252490851c   agy ok 32e399799337   codex ok c95bacf9d731 (28 items)
rdmbair13m5  claude ok 86252490851c   agy ok 32e399799337   codex ok c95bacf9d731 (28 items)
rdmpw3265m   claude ok 86252490851c   agy ok 32e399799337   codex ok c95bacf9d731 (28 items)
rdmpw3275m   claude ok 86252490851c   agy ok 32e399799337   codex ok c95bacf9d731 (28 items)

Verified by re-running --check on each host after install, and by executing agy's selftest on rdmsm4x to confirm it renders rather than merely being present.

Two obstacles worth recording

  1. scp cannot overwrite a mode-555 file. The canonical Claude script is installed read-only, so a bulk copy aborted with dest open … Permission denied and — because of the && chain — silently skipped the install step on three hosts. Fixed by chmod u+w before, chmod 555 after, and by not copying the Claude script at all since it already matched everywhere.
  2. rdmbair13m5 was unreachable by .local. Tailscale shows two nodes for it: rdmbair13m5-1 (active, 100.75.186.59) and rdmbair13m5 (offline, last seen 1d ago) — the -1 twin problem. Reached it by tailnet IP. Anything addressing that host by bare name or .local will keep failing.

Note for the running sessions

Installed configs are read at session start. The two agy sessions on rdmsm4x and any Codex sessions on the other hosts will show the new statusline after a restart, not immediately. rdmbair15m5's agy sessions already had it.