
Why Your Updated CLI Still Blocks New Subagents
Discover why a freshly updated CLI can still reject new subagent models when an old background daemon is holding onto stale code. The episode walks through diagnosing version mismatches, checking running processes, and using a socket-bypassing flag or process kill to restore proper model support.
Show Notes
- Stale app-server survives CLI update and causes 0.147.0 ...: https://github.com/openai/codex/issues/37536
Chapter 1
The Invisible Version Skew Locking Out Subagents
Ethan Park
So you run the command to spawn a new subagent, you pass in model gpt 5 point 6 luna, expecting pull request 36892 to just work, and instead... BOOM. You get this cryptic error: Unknown model gpt 5 point 6 luna for spawn agent. Available models: gpt 5 point 6 sol, gpt 5 point 6 terra.
Maya
Wait, Luna isn't even on the list? But, uh, if you just upgraded, it should definitely be there!
Ethan Park
Exactly. And after updating Codex CLI from 0.146.0 to 0.147.0, you naturally think, okay, I'm on the newest build, right? By the way, thanks to Jellypod to help make this daily show a reality. But yeah, this exact issue has been tripping up so many developers trying to spin up multi agent workflows.
Maya
So what is actually happening under the hood? If the CLI says version 0.147.0 right at the top of your terminal, why on earth is it telling you that Luna doesn't exist?
Ethan Park
Well, the architecture of the Codex CLI actually decouples the user interface from the background execution engine. It uses a long running background process called app server that listens over a Unix socket. When you type commands into the TUI, the frontend just passes messages over to that daemon.
Maya
Okay, so the terminal you see is just a wrapper, a client talking to a local server daemon over a socket.
Ethan Park
Right. And here is the fatal flaw in that design: the TUI frontend never performs a strict version parity check. It does not check if CLI version equals app server version when it launches.
Maya
Oh! So when you run npm install global at openai slash codex, or you drop in a new binary, it updates the executable file on your PATH... but it never restarts the daemon!
Ethan Park
You nailed it. The old 0.146.0 app server process stays alive in the background, quietly holding onto its stale model allowlist. So your client is 0.147.0, but the daemon servicing your tool calls is still running old code that has no idea gpt 5 point 6 luna exists!
Maya
That is such an evil trap. Because you look at the header, it literally prints OpenAI Codex version 0.147.0 in bold letters right at the top! You think you are safe, but your subagents are getting rejected by a ghost process from yesterday.
Chapter 2
Diagnosing Mismatches and Bypassing the App Server Socket
Maya
Okay, so how do you actually prove that this zombie process is running on your machine? If someone is sitting at their terminal right now facing this exact spawn failure, what is the diagnostic move?
Ethan Park
You can inspect active daemon processes directly in your terminal using pgrep flag f codex app server. That gives you the process ID of the running background server.
Maya
And then you check where that PID is actually executing from using proc slash PID slash exe, right?
Ethan Park
Exactly. And when people run that, what they find is horrifying. The binary linked in proc slash PID slash exe points to an old releases directory, like releases slash 0.146.0, even though usr local bin codex resolves to 0.147.0!
Maya
Wow. So your system path points to the new version, but the socket is still bound to the old binary sitting in memory.
Ethan Park
Precisely. Now, if you need an immediate bypass on the command line without tearing down your setup, you can launch your session with the flag disable tui app server. So you run codex disable tui app server minus m gpt 5 point 6 sol.
Maya
And bypassing the app server socket forces direct binary execution?
Ethan Park
Exactly! It completely bypasses the background daemon, runs straight off the fresh binary, and suddenly spawn agent with gpt 5 point 6 luna returns LUNA SPAWN OK!
Maya
That is a lifesaver workaround. But what about permanent clean up? What is the proper fix so you don't have to pass that bypass flag every single time?
Ethan Park
The cleanest approach is to outright terminate the background daemons using pkill flag f codex app server. Once that stale process dies, the next time you launch Codex CLI, it starts a fresh app server daemon matching your installed 0.147.0 or 0.148.0 build.
Maya
Right. Or setting up a post upgrade shell alias that automatically kills any lingering codex app server process right after npm update. Oh, and speaking of updates, if you use the VS Code extension, version 26.810.41047 actually bundles Codex 0.148.0 alpha 9, which handles Luna subagent spawning natively without any of these socket headaches!
Ethan Park
Yeah, extension updates usually wipe the slate clean, but CLI users definitely need to keep an eye on background daemons. Maya, how are you thinking about setting up automated checks for this?
Maya
Honestly, a simple post install shell hook that runs pkill after package manager updates is the easiest way to ensure stale daemons don't silently break your subagent swarms. Clean socket, fresh server, no surprises.
Ethan Park
That is the golden rule here. Keep your background daemons in check, and your agents will spawn smoothly. Good chatting today!