Cross-thread message silently changes receiver model and reasoning effort
Codex Desktop bug: cross-thread message changes receiver model
Summary
When a background Codex task configured as gpt-5.6-terra / medium sends a
delegation/report to a foreground task configured as gpt-5.6-sol / high, the
foreground task is silently changed to gpt-5.6-terra / medium after handling
the incoming report.
This is a cross-thread settings leak. The receiver did not request a model
change.
Environment
- Surface: Codex Desktop on Windows
- Codex CLI/app-server version recorded in session metadata:
0.144.0-alpha.4 - Receiver thread:
****** - Receiver intended setting:
gpt-5.6-sol / high - Sender setting:
gpt-5.6-terra / medium
Minimal observed sequence
2026-07-21T10:31:16.492Z: receiver log records
thread_settings_applied with gpt-5.6-sol / high.
2026-07-21T10:31:16.567Z: receiver accepts an incoming
<codex_delegation> from thread
******.
- Receiver completes that turn normally.
2026-07-21T10:32:29.403Zand10:32:32.033Z: without a user model
selection, receiver log records thread_settings_applied with
gpt-5.6-terra / medium.
- The next turn receives a developer
<model_switch>message.
Expected behavior
The destination/background thread may use its own model override. Receiving a
message from that thread must not mutate the foreground/receiver thread's model
or reasoning effort.
Actual behavior
The source thread's terra / medium setting is applied to the receiver.
Relevant product contract
The Codex app-server manual states that optional fields on turn/start
override the model for the target threadId. The send_message_to_thread
tool also says to omit model/thinking to retain the target thread's settings.
Neither contract permits changing the sender or receiver of a separate
cross-thread report.
Reproduction
- Open foreground thread A with
gpt-5.6-sol / high. - Open background thread B with
gpt-5.6-terra / medium. - Send a delegation/report from B to A.
- Complete the incoming-report turn in A.
- Observe that A changes to
gpt-5.6-terra / mediumand receives
<model_switch> on the next turn.
Workaround used
- Do not pass
modelorthinkingin follow-up message tool calls. - Stop push-style reports from background tasks to the foreground task.
- Poll background tasks with read-only thread inspection instead.
- Manually restore foreground model to
gpt-5.6-sol / highafter a leak.
Log location (not attached wholesale)
The full local rollout is about 270 MB and may contain project/user content, so
it should not be uploaded unredacted. Relevant event lines are 58738, 58742,
58749, 58750, and 58752 in the receiver rollout JSONL. Attach only a sanitized
excerpt if support requests it.
2 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Independent corroboration from another Windows 11 Pro / ChatGPT Pro Codex Desktop workflow:
The exact sender/receiver rollout excerpt was not preserved before the affected session destabilized, so this is corroboration rather than a new minimal trace. The observed direction differs from the original report (
5.6 -> 5.5rather than senderterra -> receiver), but the invariant is the same: cross-thread activity mutates the receiver’s effective model/reasoning without explicit receiver authorization.Suggested fail-closed contract: every cross-thread delivery should carry immutable source metadata separately from receiver turn settings; the receiver should log
settings_before,settings_after, andsettings_mutation_source, and reject any unintended model/effort mutation.