I would like to know whether other developers have experienced the following behavior with long-running Codex Desktop tasks. This post is specifically about Codexβs own long-horizon task management. It is not a request to debug my application.
The pattern I am seeing
A Codex task begins with a concrete, user-visible objective.
Initially, Codex appears to understand the objective. It inspects the repository, proposes a plan, creates regression tests, and starts implementing.
As the task grows, the following cycle develops:
- Codex delegates parts of the work to subagents.
- Review agents identify additional internal edge cases.
- Codex adds more contracts, schemas, validation layers, receipts, and tests.
- The task is compacted.
- After compaction, the most recent review findings appear to receive more attention than the original user-visible outcome.
- Codex fixes the new internal findings.
- Focused tests pass.
- Codex reports that a component is βGREEN,β βPASS,β βreview-ready,β βfrozen,β or βcomplete.β
- Another reviewer finds a new internal issue.
- The cycle repeats.
The result looks productive because a large number of tests pass and every internal boundary appears increasingly strict.
But when the original happy path is finally executed in the real application, it still fails.
Codex then treats the live failure as another narrow defect and creates another test batch instead of recognizing that its overall implementation strategy has failed.
Aggregate local observations
I inspected the locally stored Codex rollout metadata for my Codex Desktop tasks.
Across 15 available main-task rollout files, I found:
- 912 distinct compaction events.
- Approximately 4.1 GB of rollout data.
- Individual tasks with 226, 198, 102, 99, 71, 61, 54, and 50 compactions.
One representative task had:
- 36 compactions.
- Approximately 64.9 MB of rollout data.
- A median interval of approximately 42.5 minutes between compactions.
- Messages from 58 distinct subagent roles.
The later compacted history began with a truncated user-message fragment followed by subagent status information. It no longer resembled a stable, authoritative statement of the original goal.
The local compaction records did not expose:
- why each compaction was triggered;
- which requirements were retained;
- whether the primary goal was changed;
- whether user acceptance criteria were truncated;
- how recent subagent messages were weighted against older user instructions.
I found no user-configured compaction threshold.
The most concerning part: false acceptance evidence
In this task, Codex created hundreds of tests and repeatedly cited passing test counts as progress.
I later inspected the tests more critically.
The relevant test area had:
- no live or integration pytest markers;
- no network-client imports;
- no localhost endpoint usage;
- fake retrieval services;
- scripted assistant responses;
- hard-coded resolver output.
There was even a test whose name explicitly called it a βliveβ acceptance test. It was not live. It used hard-coded fake components and never contacted the application.
The test verified internal routing and identifiers. It did not verify:
- the correctness of the final user-facing answer;
- whether all required sources contributed information;
- whether the citations actually supported the claims;
- whether the real model followed the response contract;
- whether the final output had the requested structure;
- whether the live request completed successfully;
- end-to-end latency.
The test passed while the corresponding real happy path failed.
This suggests that Codex can become overconfident in tests it generated against assumptions it also generated.
Why this seems larger than a normal coding mistake for me :
A coding agent making a wrong implementation choice is normal.
What seems abnormal is the task-level behavior:
- Codex does not maintain the original acceptance criterion as the highest authority.
- Internal review findings can effectively replace the userβs original goal.
- Passing mock-backed tests is treated as evidence of product correctness.
- βCompleteβ is used without the real acceptance gate being executed.
- Repeated failure does not trigger an architectural reassessment.
- Subagent and reviewer fan-out appears effectively unbounded.
- Compaction makes the loop harder to detect because the task resumes from a compressed representation dominated by recent activity.
Official OpenAI documentation says compaction is meant to preserve task-relevant information during long-running workflows and recommends compacting around milestones while preserving functional continuity. I understand that this documentation concerns API compaction and may not describe Codex Desktopβs internal implementation exactly, but the expected property is relevant here. OpenAI model guidance
What I think Codex needs
I believe Codex needs an explicit task-level acceptance ledger that is independent of the normal conversation history.
For example:
Primary user objective:
[Immutable user-defined outcome]
Required acceptance gates:
- Unit:
- Integration:
- Live:
- User-visible output:
- Performance observation:
Current status:
- Unit: passed
- Integration: not run
- Live: failed
- Overall task: incomplete
That state should survive every compaction.
I would also like to see:
- A visible compaction count.
- A summary of which goal and constraints were retained.
- Clear differentiation between unit, integration, and live validation.
- Prohibition against calling mock-only tests βlive.β
- A warning when completion is being inferred from tests generated by Codex itself.
- A bounded number of reviewer/fix iterations.
- A loop detector for repeated findings that are not improving the original acceptance result.
- A prompt to reassess or start a clean task after excessive compaction.
- A privacy-safe diagnostic export containing metadata but no source code or conversation content.
Privacy and evidence limitation
I cannot share the raw task history because it contains private project information.
That includes:
- source code;
- prompts;
- terminal output;
- screenshots;
- repository paths;
- application data;
- architecture details;
- potentially sensitive environment information.
I am therefore not able to attach the original rollout files or conversation exports publicly.
Questions for other developers
Have you observed any of the following in long Codex Desktop tasks?
- The original acceptance criterion becoming less important after several compactions.
- Codex repeatedly fixing reviewer-generated edge cases while the normal path remains broken.
- Very large numbers of subagent or reviewer roles appearing in one task.
- Codex describing components as complete even though live acceptance was not run.
- Tests labeled as integration or live that actually use only mocks.
- A task becoming increasingly complex without getting closer to the user-visible outcome.
- Starting a fresh, narrowly scoped task performing better than continuing a heavily compacted one.
- No clear way to inspect why compaction happened or what goal was preserved.
I would especially appreciate input from OpenAI engineers on whether Codex maintains an immutable user objective outside the compacted conversation and whether there are intended limits for repeated subagent/review cycles.
The issue is not simply context loss. It is loss of goal priority and completion integrity: Codex continues doing technically structured work, but the connection between that work and the userβs actual definition of success degrades over time.