rdmsm4x-changelog-20260823-2122-codex-cli-fleet-consolidation-to-homebrew
Consolidated Codex CLI to a single Homebrew-managed install on all six fleet Macs by removing two shadowing non-brew installs; confirmed Claude Code, Codex and agy status lines are already at parity.
- When: started 2026-08-23 21:16 EDT, closed 2026-08-23 21:22:45 EDT
- Host executing: rdmsm4x (lead)
- Scope: rdmsm4x, rdmbair13m5, rdmbair15m5, rdmpw3265m, rdmpw3275m, jdmbair13m5
Context
Rich asked to run ~/install_codex-cli.zsh fleet-wide.
That path does not exist; the actual file is
~/dev/install_codex-cli.sh (created 2026-08-23 21:15),
containing one line: npm install -g @openai/codex.
Preflight found Codex already installed via Homebrew cask on
all six hosts at 0.149.0. Running the npm script would have
added a second, fnm-managed install on every host, outside brew's
upgrade path and orphaned by any node-version switch. This conflicts
with global rule 27 (prefer Homebrew where a cask exists;
brew install --cask codex does exist). Rich chose the
Homebrew consolidation path.
Findings
brew outdated --cask codex= up to date on all six. Cask latest is 0.149.0; npm publishes 0.149.1. No brew upgrade was available or performed.- Two hosts had shadowing installs, via two different mechanisms:
- rdmsm4x — npm global
@openai/[email protected]under fnm node v24.19.0. A non-login shell resolved the fnm shim while a login shell resolved brew, socodexdiffered by shell type. - rdmpw3275m — Codex's own standalone self-updater at
~/.codex/packages/standalone(releases 0.148.0 and 0.149.1,install.lockdated Aug 20), fronted by symlink~/.local/bin/codex, which preceded/usr/local/binon PATH. 566 MB.
- rdmsm4x — npm global
- Verified the brew binary and the standalone binary are independent Mach-O executables; brew's is not a launcher delegating to the standalone, so removal was safe.
Changes made
| Host | Action |
|---|---|
| rdmsm4x | npm uninstall -g @openai/codex (removed 2 packages);
fnm bin shim gone |
| rdmpw3275m | rm -f ~/.local/bin/codex;
rm -rf ~/.codex/packages/standalone (reclaimed 566 MB) |
| other four | no change — already brew-only |
~/.codex/config.toml was not modified on any host
(rdmpw3275m verified intact at 7316 bytes).
Verification (at close)
All six hosts, checked in login shells, plus rdmsm4x re-checked in a non-login shell:
rdmsm4x brew codex-cli 0.149.0 standalone=none localbin=none npm=0 tui_items=28
rdmbair13m5 brew codex-cli 0.149.0 standalone=none localbin=none npm=0 tui_items=28
rdmbair15m5 brew codex-cli 0.149.0 standalone=none localbin=none npm=0 tui_items=28
rdmpw3265m brew codex-cli 0.149.0 standalone=none localbin=none npm=0 tui_items=28
rdmpw3275m brew codex-cli 0.149.0 standalone=none localbin=none npm=0 tui_items=28
jdmbair13m5 brew codex-cli 0.149.0 standalone=none localbin=none npm=0 tui_items=28
Reproduce with zsh -l on any host:
command -v codex; codex --version
ls ~/.codex/packages/standalone 2>/dev/null; ls ~/.local/bin/codex 2>/dev/null
npm ls -g --depth=0 2>/dev/null | grep '@openai/codex'Status line parity (no changes needed)
Verified already at parity across all six hosts — the earlier
fleet-cli-status-meters handoff (mail
20260822-222323-9A551573) had completed:
| Surface | State |
|---|---|
| Claude Code | statusLine.command = bash ~/.claude/statusline.sh;
renderer sha256 86252490851c… identical on 6/6 |
| agy | statusLine set + enabled: true in
~/.gemini/antigravity-cli/settings.json on 6/6; renderer
sha256 32e399799337… identical on 6/6 |
| Codex | [tui] status_line array, 28 identical items, on
6/6 |
Note for future probes: agy's status line lives in
~/.gemini/antigravity-cli/settings.json,
not ~/.gemini/settings.json (the latter is auth-only, ~82
bytes). An initial probe against the wrong path falsely reported the
status line as unset on all six hosts.
Only remaining drift is cosmetic: rdmbair15m5's [tui]
block carries two extra comment lines and a trailing newline. The
status_line array itself is byte-identical. Left as-is.
Claude Code version check
rdmsm4x is on cask claude-code@latest (fast channel) at
2.1.241, matching the published cask latest. Exec bit
present. No action taken.
How to undo
- Reinstall npm global:
npm install -g @openai/codex(restores the fnm-managed shadow). - rdmpw3275m standalone rebuilds itself on demand via Codex's own updater; nothing else to restore.
- No config files were edited, so there is no config rollback.
Outstanding owner actions
- None blocking. When Homebrew publishes cask codex 0.149.1,
brew upgrade --cask codexfleet-wide brings all six to that patch through the managed path. ~/dev/install_codex-cli.shstill contains the npm one-liner. Left in place, unmodified — deleting or rewriting it was not authorized. Recommend replacing its body withbrew upgrade --cask codexif it is meant to stay as the fleet install path.