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:
- agy — parsed its own selftest payload and confirmed all 38 fields are referenced by the script. Renders 5 meters (CTX, G5H, G7D, 3P5H, 3P7D) plus model/effort/plan and a full identity row. No field dropped.
- Codex — 28 native status-line items enumerated, capacity meters ordered first.
- Claude — 3 rows: CTX + 5H + 7D meters / identity / session, full stdin payload coverage.
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
scpcannot overwrite a mode-555 file. The canonical Claude script is installed read-only, so a bulk copy aborted withdest open … Permission deniedand — because of the&&chain — silently skipped the install step on three hosts. Fixed bychmod u+wbefore,chmod 555after, and by not copying the Claude script at all since it already matched everywhere.- rdmbair13m5 was unreachable by
.local. Tailscale shows two nodes for it:rdmbair13m5-1(active, 100.75.186.59) andrdmbair13m5(offline, last seen 1d ago) — the-1twin problem. Reached it by tailnet IP. Anything addressing that host by bare name or.localwill 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.