Goal auto-continuation can enter an unbounded no-progress loop and generate thousands of duplicate turns
Summary
Codex Goal auto-continuation entered a self-sustaining loop after the active task began waiting on an external durable process. No new user messages were sent, but each assistant task_complete was followed by a new task_started 5–8 ms later and another <codex_internal_context source="goal"> injection.
Impact
- 7,480 Goal continuation turns over 10:37:57.
- 4,857 identical visible no-op replies over 6:01:55.
- Mean interval during the duplicate phase: 4.472 seconds.
- Local Goal usage counter increased by 26,321,578 during the full window.
- A separately configured heartbeat ran every 10 minutes and was not the tight-loop trigger.
Environment
- Codex Windows App 26.715.3651.0
- Session CLI 0.144.2
- Windows 11 10.0.26100
- GPT-5.6 Sol, xhigh
Expected behavior
Waiting/no-progress turns should pause or back off. Goal should detect duplicate output, cap consecutive automatic continuations, and trigger a usage anomaly circuit breaker.
Actual behavior
The scheduler immediately requeued the same Goal after every no-progress completion, producing thousands of visible duplicate replies and substantial usage impact.
Requested fix
Add no-progress detection, deduplication, exponential backoff, a continuation/time/usage cap, and explicit confirmation before ordinary continuation language is converted into persistent Goal mode.
The full private session and account-impact evidence have been submitted through OpenAI Support. The private evidence is intentionally not included in this public issue.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Support escalation and duplicate clarification — 2026-07-20
OpenAI Support case
11775178is open and has received the private account-impact evidence. The latest support response suggested sign-out, restart, and network troubleshooting, but those steps do not address the scheduler evidence described in this issue.The bot linked #33827. The two reports may share a Goal state-machine boundary, but they are not duplicates in their observed failure mode:
This issue therefore adds an unbounded no-progress continuation loop, duplicate-output failure, and usage-circuit-breaker failure. It also records that
create_goalwas invoked without an explicit user request to enable Goal mode.Requested maintainer action:
Private session and account evidence remains with Support and is intentionally not posted publicly. The case number is provided only for OpenAI's internal correlation.
I reproduced the same failure mode in Codex Desktop on macOS: after each assistant completion, the runtime immediately reinjected
<codex_internal_context source="goal">with no new user message. It continued even after blank/no-op final responses, producing a self-sustaining sequence of Goal continuation turns.Local evidence:
NOOP_INTERNAL_CONTINUATIONand did not start work, but that did not prevent the next product-side injection;This looks specifically aligned with the
task_complete -> task_started -> internal goal injectionbehavior described here, not merely normal context compaction. The needed product-level safeguard seems to be a circuit breaker that caps consecutive no-progress continuations and requires a real user/material trigger before requeueing.I can provide a private session identifier and timestamped evidence to OpenAI if useful.
Reproduced on macOS with Codex App 26.820.60940, bundled codex-cli 0.150.0-alpha.8, on Apple Silicon (Darwin 25.6.0). Session/thread ID: 01a02d90-0a8d-7220-a38c-2f415a216a2f.
In this reproduction, the user paused a long-running Goal while its initial tool-heavy turn was active. The agent produced one correct restart handoff, but Goal auto-continuation then generated repeated paused/no-progress final messages every few seconds without new user input. After the repeated-blocker audit, the agent reported that it had marked the Goal blocked, but automatic continuations still continued for days. Later continuations became normally completed turns with no user-visible items.
This adds two observations to the existing report:
The task content involved a private repository and is intentionally omitted. OpenAI can inspect the session ID above. The scheduler guard needs to be outside model behavior: recheck persisted paused/blocked state before enqueue and injection, invalidate queued continuations on state transition, and stop after repeated no-tool/no-state-change or empty completions.