While I was enjoying Fable 5, Claude hit its one-week quota limit. Just then GPT-5.6 came out, so this time I decided to use Sol from Codex. I chose the top-tier Ultra.
In one hour, five hours' worth of quota disappeared. This happened three times in a row.
At first, I thought I was overusing it. I was throwing heavy tasks at it in batches, and sometimes that's just how it goes. But the third time, it felt too fast. Using up five hours of quota in one hour is too fast, even for heavy tasks. I opened the logs to see what was eating it.
Looking at the logs, all the children were using the top model
Codex has a mechanism where a single task can be divided among child AI agents (sub-agents). When you throw a heavy task at it, Sol spawns several children and runs them in parallel. When I opened the logs, all those children were running on Sol's Ultra.
I have configuration files in ~/.codex/agents/ that assign models based on roles. For example, a child doing research uses a cheaper model, a child implementing uses a mid-range one, and so on. But when I looked at the logs, none of that configuration was taking effect. The command to spawn a child (spawn_agent) only accepts a task_name — there’s no field for role or model selection. So the role remained empty (agent_role was empty), and the model was simply inherited from the parent. Everyone was on Sol Ultra.

The parent Sol/Ultra spawns multiple children, and the children spawn more children. Since the model specification isn’t passed down, all subordinate children end up on the same Sol/Ultra
When you run a single top-tier model, multiple other top-tier models hang off it. If a child calls another child, the number multiplies. This was why five hours of quota disappeared in one hour. My carefully configured role-based assignments to keep costs down were completely bypassed, and everything was running at the highest price.
The model selection option was hidden
Why wasn't the configuration working? The spawn command simply had no field for specifying the model.
Codex's configuration has a setting called hide_spawn_agent_metadata. The default is to hide it (true). This "metadata" includes fields for selecting the model and the depth of thinking. So with the default settings, those fields were removed from the spawn command entirely. Without those fields, no matter how much I configured role-based models, they couldn't be passed on. Since they couldn't be passed, the children just inherited the parent's model. The higher-tier model you chose, the more your children all ran at the top tier.
I thought that choosing the top mode would let the smart model smartly delegate tasks. In reality, just silently selecting it meant even lightweight tasks continued running on the top-tier model.
The same reports were lined up on the same day
I wondered if this was just my environment, so I looked into it. From July 9th to 10th, on X, the same reports appeared in both Japanese and English. People said that leaving Sol Ultra alone caused them to hit the quota limit in three minutes. Five hours of quota disappeared in 20 minutes. They hit the five-hour limit twice in one day — something that had never happened before.
The diagnosis was consistent too. Someone wrote exactly what I saw in the logs: "spawn_agent only sends the task name. The child inherits the parent model with an empty role, ignoring the configuration file." An issue on GitHub also summarized it: with Sol, you can't specify a model for children, so all children end up on Sol. Some pointed out it was a bug introduced in version 0.144.1.
There was also a post describing how to fix it.
Enabling Model Selection for Children with Two Configuration Lines
A user named evi77ain posted two lines of configuration.
[features.multi_agent_v2]
hide_spawn_agent_metadata = false
tool_namespace = "agents"
The first line restores the hidden model selection field. The second line is to avoid errors caused by conflicting names for the tool that spawns children. After adding these two lines to config.toml and restarting the session, the model field returned to the spawn command.
After it was restored, the role-based assignments I had placed in ~/.codex/agents/ started working as intended. When I actually specified a role and spawned a child, it ran on the cheaper model as configured. The situation changed from everything running on the top-tier model to only the necessary parts running on the top-tier model and the rest using cheaper models. The rate at which quota decreased also returned to normal.

Before: both parent and children are all Sol/Ultra, causing quota to drain rapidly. After: the parent is Sol, children are assigned to cheaper models by role (research uses a light model, implementation uses a mid-range one), and the drain slows down
Just Picking the Top Tier Wasn't Enough
I added two lines of configuration to allow selecting a cheaper model for children. For now, things have settled down. But honestly, OpenAI — don't you think this kind of hidden parameter is a bit off?
Top comments (0)