What version of the Codex App are you using (From “About Codex” dialog)?
26.721.30844
What subscription do you have?
ChatGPT Pro for the personal-project tests; ChatGPT Business for the work-project tests.
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
What issue are you seeing?
Related to #32503, but this report adds controlled same-model benchmarks, credit-weighted usage measurements, quality comparisons, and a tested workaround across two unrelated codebases.
I began investigating this independently after noticing an unusually high number of recent complaints about Codex usage depletion. I had not personally noticed an obvious long-term reduction in my limits, so I inspected my own .codex session logs rather than assume that allowances had been silently changed.
Only after reaching the batching hypothesis and completing my initial tests did I search for similar reports and find #32503. Its author had already identified essentially the same Code Mode parallelism problem from a long observational trace, including only 5 of 739 GPT-5.6 exec cells using Promise.all. The tests below appear to provide the controlled validation that report said was still missing.
I tested two unrelated repositories:
- one large proprietary work codebase;
- one smaller personal finance application.
Each repository had one fixed read-only investigation task. Within each comparison, the subscription plan, repository state, task prompt, model, reasoning effort and permissions were unchanged. Only the presence of the batching instruction differed. No code was modified during the investigations.
Main results
| Dataset |
Sample |
Model cycles |
Raw tokens |
Weighted usage |
Same-credit capacity |
| Large work codebase |
4 batched runs vs 3 controls, High |
52.1% fewer |
63.1% lower |
45.0% lower |
81.8% more |
| Personal finance app |
4 matched pairs, High/XHigh |
54.7% fewer |
52.6% lower |
27.0% lower |
37.0% more |
| Personal finance app, Max |
1 matched pair, adjusted |
80.4% fewer |
79.5% lower |
47.4% lower |
90.2% more |
The Max result is a single pair and needs replication. It still covered all required areas and aligned on the core conclusions, but the batched report referenced fewer unique files than its control, so I treat both its efficiency and quality result cautiously. The repeated High/XHigh results are the stronger basis for the current conclusion.
The exact improvement varied substantially by workload. I am not claiming that every Codex task will gain 37–82% more capacity.
“Weighted usage” is the Codex-credit equivalent calculated from the returned uncached-input, cached-input and output-token categories. Reasoning tokens are included in output tokens.
Most of the raw-token reduction came from repeated context processing:
- cached input fell by 56–65% in the repeated datasets;
- uncached input fell by 5–26%;
- output changed by only about 0–12%.
This is consistent with batching reducing outer model round trips rather than simply reducing the amount of investigation performed.
Normal-usage observation
At work I deleted my .codex directory and allowed it to rebuild from scratch.
By July 23, the fresh logs had accumulated roughly 1,600 calls that a post-hoc Codex analysis classified as independent and batchable. Only a little over 100 had actually been grouped by the agent.
This was not part of the controlled benchmark, but it suggests that GPT-5.6 sometimes discovers batching on its own while doing so very inconsistently without concrete instructions.
Quality
I did not find an apparent systematic quality reduction.
Across the Finance comparisons:
- both conditions covered every required investigation area;
- the main conclusions aligned;
- the aggregate performed 106 batched inspections versus 105 control inspections.
On the large codebase, the batched runs performed substantially more shell operations than the controls while still using much less.
Batched runs sometimes found additional useful details. Subtle quality differences may still exist, and implementation-heavy or mutation-heavy tasks may behave differently from these read-only investigations.
What steps can reproduce the bug?
-
Choose a read-heavy repository task involving several independent searches, file reads or metadata inspections.
-
Freeze the repository state.
-
Start fresh GPT-5.6 Sol sessions using the same:
- task prompt;
- reasoning effort;
- permissions;
- repository state.
-
Run one condition without custom batching guidance.
-
Run the other with this exact instruction in either repository AGENTS.md or the Codex App custom instructions:
In Code Mode, within each bounded stage, run independent, functions.exec-available tool calls concurrently in one functions.exec call. Use await Promise.allSettled([...]) when partial results are useful, and inspect every result; use await Promise.all([...]) only when any failure should abort the batch. Keep dependencies, waits/resumes, approvals, conflicting or interdependent mutations, and adaptive investigations where each result may change the next step sequential. Do not split otherwise batchable inspections across outer tool calls.
-
Compare the session logs:
- outer model/tool cycles;
- direct tool calls and
exec cells;
- nested calls per
exec cell;
- use of
Promise.all or Promise.allSettled;
- cached, uncached and output tokens;
- task coverage and final conclusions.
The controlled repository comparisons used AGENTS.md. I also used the same instruction through app-level custom instructions and observed the same multi-call Code Mode batching pattern.
Despite using older functions.exec terminology, it reliably caused GPT-5.6 Sol to group multiple nested operations into concurrent Code Mode stages.
What is the expected behavior?
GPT-5.6 Code Mode should receive concrete guidance to:
- group independent, non-conflicting calls into one bounded
exec stage;
- use
Promise.all or Promise.allSettled for nested concurrency;
- keep dependent, adaptive, approval-sensitive and conflicting operations sequential;
- avoid repeated one-call
exec cells when multiple independent calls are already known;
- avoid expanding investigation scope only because more calls can be launched concurrently.
The model-facing exec description should include an example containing multiple nested tools.* calls inside Promise.all(...) or Promise.allSettled(...).
It would also help if telemetry distinguished outer model cycles from nested tool calls and showed quota-weighted usage more directly.
Additional information
GPT-5.2 through GPT-5.5 were explicitly instructed to parallelize common independent reads using multi_tool_use.parallel.
GPT-5.6 moved to the Responses Lite and Code Mode path. Native top-level parallel calls are disabled there, while JavaScript inside exec is the practical replacement. The runtime supports nested concurrency, but the shipped GPT-5.6 guidance is generic and the exec example demonstrates only a single nested call.
I may be missing an internal constraint or implementation detail, but the public source, local traces, controlled behavior and the independent findings in #32503 are consistent with an instruction/tool-interface regression during that transition.
I do not see evidence that this was an intentional allowance reduction. OpenAI added a replacement batching mechanism; the model appears not to use it reliably without concrete guidance.
I also tested several rewritten instructions using the current exec and tools.* terminology. One essentially matched the original instruction on the large codebase, but none consistently matched its Finance results. Some expanded investigation scope, while others produced one-call Promise.allSettled cells that provided little real batching. One overly aggressive variant consumed 26.8% more weighted credits than its control.
Limitations
These tests covered read-heavy repository investigations.
The large-codebase result used grouped averages rather than matched simultaneous pairs. The Max result and each revised instruction variant currently have only one pair. Model sampling, service load and differences in peripheral investigation scope remain sources of variance.
“Same-credit capacity” means more comparable completed work from the same allowance. It does not mean the allowance necessarily lasts the same additional percentage in literal wall-clock time, because the batched tasks also tend to finish faster.
Additional sanitized per-run measurements are available on request.
What version of the Codex App are you using (From “About Codex” dialog)?
26.721.30844
What subscription do you have?
ChatGPT Pro for the personal-project tests; ChatGPT Business for the work-project tests.
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
What issue are you seeing?
Related to #32503, but this report adds controlled same-model benchmarks, credit-weighted usage measurements, quality comparisons, and a tested workaround across two unrelated codebases.
I began investigating this independently after noticing an unusually high number of recent complaints about Codex usage depletion. I had not personally noticed an obvious long-term reduction in my limits, so I inspected my own
.codexsession logs rather than assume that allowances had been silently changed.Only after reaching the batching hypothesis and completing my initial tests did I search for similar reports and find #32503. Its author had already identified essentially the same Code Mode parallelism problem from a long observational trace, including only 5 of 739 GPT-5.6
execcells usingPromise.all. The tests below appear to provide the controlled validation that report said was still missing.I tested two unrelated repositories:
Each repository had one fixed read-only investigation task. Within each comparison, the subscription plan, repository state, task prompt, model, reasoning effort and permissions were unchanged. Only the presence of the batching instruction differed. No code was modified during the investigations.
Main results
The Max result is a single pair and needs replication. It still covered all required areas and aligned on the core conclusions, but the batched report referenced fewer unique files than its control, so I treat both its efficiency and quality result cautiously. The repeated High/XHigh results are the stronger basis for the current conclusion.
The exact improvement varied substantially by workload. I am not claiming that every Codex task will gain 37–82% more capacity.
“Weighted usage” is the Codex-credit equivalent calculated from the returned uncached-input, cached-input and output-token categories. Reasoning tokens are included in output tokens.
Most of the raw-token reduction came from repeated context processing:
This is consistent with batching reducing outer model round trips rather than simply reducing the amount of investigation performed.
Normal-usage observation
At work I deleted my
.codexdirectory and allowed it to rebuild from scratch.By July 23, the fresh logs had accumulated roughly 1,600 calls that a post-hoc Codex analysis classified as independent and batchable. Only a little over 100 had actually been grouped by the agent.
This was not part of the controlled benchmark, but it suggests that GPT-5.6 sometimes discovers batching on its own while doing so very inconsistently without concrete instructions.
Quality
I did not find an apparent systematic quality reduction.
Across the Finance comparisons:
On the large codebase, the batched runs performed substantially more shell operations than the controls while still using much less.
Batched runs sometimes found additional useful details. Subtle quality differences may still exist, and implementation-heavy or mutation-heavy tasks may behave differently from these read-only investigations.
What steps can reproduce the bug?
Choose a read-heavy repository task involving several independent searches, file reads or metadata inspections.
Freeze the repository state.
Start fresh GPT-5.6 Sol sessions using the same:
Run one condition without custom batching guidance.
Run the other with this exact instruction in either repository
AGENTS.mdor the Codex App custom instructions:Compare the session logs:
execcells;execcell;Promise.allorPromise.allSettled;The controlled repository comparisons used
AGENTS.md. I also used the same instruction through app-level custom instructions and observed the same multi-call Code Mode batching pattern.Despite using older
functions.execterminology, it reliably caused GPT-5.6 Sol to group multiple nested operations into concurrent Code Mode stages.What is the expected behavior?
GPT-5.6 Code Mode should receive concrete guidance to:
execstage;Promise.allorPromise.allSettledfor nested concurrency;execcells when multiple independent calls are already known;The model-facing
execdescription should include an example containing multiple nestedtools.*calls insidePromise.all(...)orPromise.allSettled(...).It would also help if telemetry distinguished outer model cycles from nested tool calls and showed quota-weighted usage more directly.
Additional information
GPT-5.2 through GPT-5.5 were explicitly instructed to parallelize common independent reads using
multi_tool_use.parallel.GPT-5.6 moved to the Responses Lite and Code Mode path. Native top-level parallel calls are disabled there, while JavaScript inside
execis the practical replacement. The runtime supports nested concurrency, but the shipped GPT-5.6 guidance is generic and theexecexample demonstrates only a single nested call.I may be missing an internal constraint or implementation detail, but the public source, local traces, controlled behavior and the independent findings in #32503 are consistent with an instruction/tool-interface regression during that transition.
I do not see evidence that this was an intentional allowance reduction. OpenAI added a replacement batching mechanism; the model appears not to use it reliably without concrete guidance.
I also tested several rewritten instructions using the current
execandtools.*terminology. One essentially matched the original instruction on the large codebase, but none consistently matched its Finance results. Some expanded investigation scope, while others produced one-callPromise.allSettledcells that provided little real batching. One overly aggressive variant consumed 26.8% more weighted credits than its control.Limitations
These tests covered read-heavy repository investigations.
The large-codebase result used grouped averages rather than matched simultaneous pairs. The Max result and each revised instruction variant currently have only one pair. Model sampling, service load and differences in peripheral investigation scope remain sources of variance.
“Same-credit capacity” means more comparable completed work from the same allowance. It does not mean the allowance necessarily lasts the same additional percentage in literal wall-clock time, because the batched tasks also tend to finish faster.
Additional sanitized per-run measurements are available on request.