openai / openai/codex

Changing a running Codex Goal from GPT-5.6 Luna to GPT-6 Astra updates the UI but the Goal continues running on Luna

Open
#45,294 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

agent app bug
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

What version of the Codex App are you using (From “About Codex” dialog)?

26.901.31953

What subscription do you have?

ChatGPT Plus

What platform is your computer?

Windows x64

What issue are you seeing?

When a long-running Codex Goal is started with GPT-5.6 Luna / Max and the selected model is later changed to GPT-6 Astra / Max, the Codex UI updates to show GPT-6 Astra Max, but the active Goal continues executing on gpt-5.6-luna.

This creates a model-selection mismatch where the user believes subsequent interactions and automatic Goal continuations are being handled by GPT-6 Astra, while the runtime model remains GPT-5.6 Luna.

I verified the actual runtime model using the local Codex rollout JSONL and turn_context records rather than relying on output quality or model self-identification.

Observed behavior:

  1. Start a Goal with GPT-5.6 Luna / Max.
  2. Allow the Goal to run for approximately 5-10 minutes.
  3. While the same Goal is still active, change the selected model in the composer to GPT-6 Astra / Max.
  4. The UI now displays GPT-6 Astra Max.
  5. Continue interacting with the same Goal and allow automatic continuations to run.
  6. The rollout JSONL still reports gpt-5.6-luna / max for the Goal continuation.

As a result, the visible model selection no longer represents the effective model executing the active Goal.

codex-goals-context-report.md

What steps can reproduce the bug?
  1. Open the Codex App.

  2. Select GPT-5.6 Luna with Max reasoning effort.

  3. Start a new persisted Goal.

  4. Allow the Goal to work normally for approximately 5-10 minutes, including automatic continuations and tool calls.

  5. While the same Goal is still active, change the model in the Codex composer from:
    GPT-5.6 Luna / Max

    to:
    GPT-6 Astra / Max

  6. Do not create a new Goal. Continue using the existing running Goal.

  7. Send another message and/or allow the Goal to continue automatically.

  8. Observe that the Codex UI/composer now displays GPT-6 Astra Max.

  9. Inspect the local rollout JSONL for the same Goal and check:
    turn_context.payload.model
    turn_context.payload.effort

  10. Observe that the active Goal continues using:
    gpt-5.6-luna / max

    even though the UI shows GPT-6 Astra Max.

  11. Continue interacting with the Goal. From the user's perspective it appears that GPT-6 Astra is now being used, while the runtime records continue to identify GPT-5.6 Luna.

The issue appears to be that changing the model in the composer does not update the effective model of an already-running Goal, while the UI gives the impression that the change has taken effect.

What is the expected behavior?

When the user changes the selected model of an active Goal from GPT-5.6 Luna / Max to GPT-6 Astra / Max, one of the following should happen:

  1. The active Goal should switch to GPT-6 Astra / Max for subsequent turns and automatic continuations.

or

  1. If running Goals are intentionally pinned to the model they were started with, the UI should clearly indicate that the Goal is still running on GPT-5.6 Luna and that changing the composer model only affects a new Goal or new task.

The UI should not display GPT-6 Astra Max in a way that makes the user believe the currently running Goal has switched models when the runtime continues using gpt-5.6-luna.

Additional information

The important detail is that the Goal was originally started on GPT-5.6 Luna / Max. The mismatch appears after changing the model selection to GPT-6 Astra / Max while keeping the same Goal active.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing how the composer’s selected model is passed to an active persisted Goal and its automatic continuations. Use the rollout JSONL and inspect turn_context.payload.model and turn_context.payload.effort; done means subsequent turns either use the selected model or the UI clearly reports that the Goal remains pinned to its original model.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
desktop-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.