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.
Wait, Luna isn't even on the list?
But, uh, if you just upgraded, it should definitely be there!
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.
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?
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.
Okay, so the terminal you see is just a wrapper, a client talking to a local server
daemon over a socket.
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.
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!
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!
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.
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?
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.
And then you check where that PID is actually executing from using proc slash PID
slash exe, right?
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!
Wow.
So your system path points to the new version, but the socket is still bound to the
old binary sitting in memory.
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.
And bypassing the app server socket forces direct binary execution?
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!
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?
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.
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!
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?
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.
That is the golden rule here.
Keep your background daemons in check, and your agents will spawn smoothly.
Good chatting today!