Summary
Track the Bellbird fix for pingdotgg/t3code#5629: one-click Codex updates can run npm against an OpenAI Standalone installation and fail with EEXIST instead of updating the active executable.
Verified symptom
The active Codex executable is installed by OpenAI Standalone and exposed through the standard ~/.local/bin/codex symlink. When a newer Codex release is available, the Bellbird update action executes:
npm install -g --allow-scripts=@openai/codex @openai/codex@latest
The captured npm result is:
npm error code EEXIST
npm error path ~/.local/bin/codex
npm error EEXIST: file already exists
npm verbose exit 1
The same npm command succeeds with an isolated temporary prefix, so the registry and package are healthy. The failure is the ownership collision with the Standalone launcher.
Root cause
The built-in Codex driver currently declares nativeUpdate: null, although supported Codex releases expose codex update. An unclassified bare binaryPath: "codex" can fall back to npm-global, so the updater targets an installation npm does not own.
Expected behavior
- Detect the Standalone layout through the resolved executable/realpath.
- Update that exact install with
codex update. - Keep unknown or ambiguous installation ownership manual-only instead of guessing npm.
- Preserve verified npm, Bun, pnpm, Vite+, and Homebrew update paths.
Acceptance criteria
Upstream work
Workaround
Use the active Standalone executable's native updater, then refresh provider status:
~/.local/bin/codex update
Avoid npm --force, which would overwrite the Standalone-owned launcher and change installation ownership.
Diagnosed with GPT-5.6 Sol via the Codex harness.
Summary
Track the Bellbird fix for pingdotgg/t3code#5629: one-click Codex updates can run npm against an OpenAI Standalone installation and fail with
EEXISTinstead of updating the active executable.Verified symptom
The active Codex executable is installed by OpenAI Standalone and exposed through the standard
~/.local/bin/codexsymlink. When a newer Codex release is available, the Bellbird update action executes:The captured npm result is:
The same npm command succeeds with an isolated temporary prefix, so the registry and package are healthy. The failure is the ownership collision with the Standalone launcher.
Root cause
The built-in Codex driver currently declares
nativeUpdate: null, although supported Codex releases exposecodex update. An unclassified barebinaryPath: "codex"can fall back to npm-global, so the updater targets an installation npm does not own.Expected behavior
codex update.Acceptance criteria
update.behind_latest.Upstream work
Workaround
Use the active Standalone executable's native updater, then refresh provider status:
~/.local/bin/codex updateAvoid
npm --force, which would overwrite the Standalone-owned launcher and change installation ownership.Diagnosed with GPT-5.6 Sol via the Codex harness.