A SELF-REFERENTIAL INCIDENT REPORT

CODEX
FIXED CODEX.

The big update put Codex inside ChatGPT. My VM responded by keeping eight older Codexes alive in the walls.

$ codex --version
codex-cli 0.144.0

$ codex /model
mac  → sol terra luna
vm   → gpt-5.5

$ diagnosis
version == version
client  != client
reality != reality_ 
Four-panel stick-figure comic: a Mac sees Sol, Terra, and Luna while a VM only sees GPT-5.5; Codex discovers eight older processes rewriting its model catalog; a custom app server is questioned; Codex reinstalls itself and the new models arrive.

Click for the full-resolution evidence exhibit.

The binary upgraded.
The living system did not.

01

Two installs

/usr/local and an NVM tree each believed they were the one true Codex.

08

Old processes

Long-lived TUIs from 0.141–0.142.5 survived the package upgrade.

01

Shared cache

Every generation wrote to ~/.codex/models_cache.json. The elders kept winning.

Lifecycle vibes

The custom app server added orphan processes and ports. It amplified the haunting, but it was not the catalog’s only ghostwriter.

new package+old processes+shared mutable cache=Schrödinger’s upgrade

Debugging the debugger with the debugger.

The meta part was not asking an AI for shell commands. The meta part was the suspect reading its own process table.

  1. Mac upgrades to 0.144.0

    Sol, Terra, and Luna appear.

  2. VM also says 0.144.0

    The model picker remains spiritually in 0.142.2.

  3. Account mismatch ruled out

    Same ChatGPT login. Same Pro subscription.

  4. Eight ghost TUIs found

    Old clients keep rewriting one shared model cache.

  5. Custom app-server remnants stopped

    Useful suspect. Not the sole perpetrator.

  6. Standalone install becomes canonical

    One binary, one updater, considerably less folklore.

  7. Catalog refreshes to eight models

    Sol, Terra, and Luna finally enter the VM.

Yes, the homemade machinery is public.

The custom app-server experiment was reasonable engineering. The funny part was discovering that “stop” and “all descendants have stopped” were different product requirements.

How not to summon this incident again.

  1. 01

    Choose one canonical installation. On the VM: the official standalone binary in ~/.local/bin.

  2. 02

    After updating, restart every long-lived Codex process—not just the shell that ran the installer.

  3. 03

    Verify the active client and catalog, not merely codex --version.

  4. 04

    Treat shared caches as distributed state whenever multiple generations of a client can write them.

“If the version is current but reality is stale, look for an older process with tenure.”

POSTMORTEM COMPLETE

I used Codex to fix Codex
and ChatGPT to publish the incident.

It is turtles all the way down, but the turtles now self-update.

Browse botfiles ↗