So, Maya, I- I- I was looking through the GitHub tracker last night,
and I stumbled on this issue, number 33390, that is just...
it is an absolute horror story for anyone running local development.
This developer was running a routine repository audit, right?
Just scanning some code, and they triggered a multi-agent swarm.
Before they knew it, this thing had spawned 328 spawn_agent tool calls,
spinning up 386 distinct thread IDs.
And the kicker?
Codex Desktop consumed 130.58 GB of memory.
One hundred and thirty gigabytes?
On- on a local machine?
That's not a memory leak, Ethan, that's a hostile takeover!
I mean, most high-end developer setups, like a beefy MacBook Pro,
max out at 24 or maybe 36 gigs.
A 24-gig Mac would just melt trying to swap that much data to the SSD.
Oh, it did.
It brought the entire system to a grinding halt.
Just endless macOS out-of-memory alerts.
But the really wild part isn't just the sheer scale of the swarm.
It's *why* it got so heavy.
It turns out, under the hood, there's this feature called the Multi-Agent V2
runtime.
And if your main parent agent is running on the "Sol Ultra" profile...
you know, with the model_reasoning_effort set to "ultra"...
it silently, and I mean completely silently, upgrades every single spawned sub-agent
to that exact same Sol Ultra profile.
Wait.
So if the parent is pulling out the heavy-duty, expensive reasoning model,
every little helper agent it spawns to, say, read a single file or regex a string,
also gets upgraded to Sol Ultra?
Even if you explicitly configured them to be lightweight?
Exactly.
It completely bypasses your local agent configurations.
So you think you're spinning up a bunch of cheap, quick helper agents,
but instead you've got three hundred and eighty-six mini-Einstein minds running at
maximum effort.
And if you're hooked up to your ChatGPT Plus or custom enterprise API keys,
those token quotas?
Vanished.
Gone in minutes.
That is terrifying.
It's like calling a team of specialized surgeons just to hand you a band-aid.
But why is it doing this?
Is it just a bug, or is there some weird architectural decision behind it?
It's actually a schema-constraint issue.
See, in Multi-Agent V2, OpenAI tried to prevent token bloat.
The old default schema for collaboration.spawn_agent had all these fields where you
could specify the agent_type, the model, the reasoning_effort.
But they stripped all those arguments out to save context window tokens.
And to make matters worse, there's this parameter called fork_turns which defaults
to "all".
That means when a sub-agent is spawned, it gets a full-history fork of the parent's
conversation.
Because it's a full fork, the runtime just rejects any manual model overrides you
try to pass it, and it forces the child to inherit that heavy Sol Ultra profile from
its parent.
Ah, I see.
So because it wants to carry over the whole conversation history,
it- it basically says, "Well, I have to keep using the same massive engine to
understand this context."
And you're left with a 130-gigabyte memory footprint.
It's a complete trap.
It really is.
But the good news is, there are actually ways to fight back and re-tame these
swarms.
You don't have to just sit there and watch your system memory evaporate.
Okay, spill.
How do we break this inheritance chain?
Because I am not letting an agent spawn three hundred sub-agents on my watch.
Well, the first step is exposing those hidden overrides.
There's a hidden feature flag in your configuration file.
If you open up your config at ~/.codex/config.toml, you need to go to the
section and set hide_spawn_agent_metadata = false.
By default, this is set to true, which is what hides the metadata and breaks model
selection.
If you set it to false, it restores what developers are calling "v1 parity."
It forces the schema to actually expose those advanced arguments to the model,
so the parent model can actually see and select cheaper specialist models,
like gpt-5.6-luna, instead of defaulting to Sol Ultra every time.
Oh, interesting.
So by exposing that metadata, you're giving the master model the option to say,
"Hey, this is a simple task, let's use the lightweight Luna model instead of the
heavy-duty Sol."
But what about that fork_turns issue you mentioned?
The whole "all history" inheritance thing?
Right.
To fix that, you have to look at your workspace instructions.
If you inject fork_turns = "none" into your instructions, it tells Codex to spawn a
fresh, clean specialist sub-agent.
No conversation history baggage.
And when it's a fresh agent, it actually honors your custom agent profiles under
.codex/agents/*.toml-meaning you can explicitly set a
lower reasoning effort there, and it will actually stick.
Okay, so fork_turns = "none" is like giving the sub-agent amnesia so it doesn't
bring the whole family history with it, which lets it run lightweight.
That makes total sense.
But what if a swarm just goes completely rogue?
Like, is there a panic button?
A way to just say, "No, you cannot go deeper than one level of nesting"?
Yes, absolutely.
And honestly, if you're running headless automation or CI/CD pipelines,
you *have* to set this.
You can use the CLI configuration option agents.max_depth = 0.
Or, if you're running a specific command, you can pass it inline like codex exec
--config agents.max_depth=0.
What this does is it hard-stops any recursive nesting.
If an agent tries to delegate a task to another agent, the system blocks it and
forces Codex to fall back to serial execution.
It essentially clips the wings of the swarm before it can even start.
Oh, thank goodness.
That is a massive relief for automated pipelines.
But while we're talking about updates, didn't they just roll out some quick fixes in
the latest versions to address some of this stuff?
They did!
Version 0.144.6 brought a really important hotfix for model metadata.
They corrected the context windows for the GPT-5.6 suite-specifically the Sol,
Terra, and Luna models-to exactly 272,000 tokens.
Before this, the system was getting confused about how much context it could handle,
which was causing its own set of routing headaches.
Mm, 272,000 tokens is a lot of room, so having that metadata corrected
is huge for stability.
I also noticed they updated the TUI-the terminal user interface-with a new /usage
credit redemption screen.
It actually displays your credit types and their expiration dates now,
so you don't accidentally burn through your high-priority Ultra credits on a
massive, unintended debug session.
Yeah, that visibility is key when you're managing costs.
And on the safety front, they also pushed a patch in v0.144.5 that expands the
dangerous-command filtering.
It catches a lot more variations of the rm command, so even if a rogue agent swarm
gets out of hand, it's blocked from doing any serious damage to your local file
system.
Well, that's reassuring.
I'd prefer my agents not to delete my entire hard drive while they're busy eating up
a hundred and thirty gigabytes of RAM.
Alright, I'm going to go flip that hide_spawn_agent_metadata flag right now.
Good talking to you, Ethan!
Yeah, definitely check that config.
Talk soon, Maya.