Skip to content
Agentic Workflow
18 min readVuong Ngo

GPT-5.6 Codex: Get More Reviewed Work From Your Subscription

A practical GPT-5.6 Codex guide to choosing Sol, Terra, Luna, and reasoning effort by task, review risk, and accepted work per allowance window.

GPT-5.6 Codex: Get More Reviewed Work From Your Subscription

A GPT-5.6 Codex user on Plus currently gets an estimated 15 to 90 local GPT-5.6 Sol messages in a shared five-hour window. The listed range for GPT-5.6 Luna is 50 to 280. That gap seems to favor Luna, but message count is the wrong unit. OpenAI says the actual draw changes with the model, context, reasoning, tools, retrieval, and caching, and additional weekly limits may apply [1].

Consider two tasks. One renames a typed field across six known files and has an existing test. The other asks you to diagnose an intermittent authentication failure without a stable reproduction. Counting both as one message hides nearly everything that matters.

My operating rule is to start with the lowest model and reasoning-effort pair that can produce a checkable artifact. Escalate only the stage that failed. Spend stronger models on ambiguity, higher effort on incomplete reasoning, and a fresh review pass on consequential risk. Stop when the named tests, review criteria, and evidence pass.

I call a change that crosses its gate an accepted result. The method below is practical guidance derived from current controls and evidence, not an OpenAI guarantee.

Current as of 2026-07-10: GPT-5.6 launched on 2026-07-09 [4]. Recheck the official model and pricing pages before turning any number here into a permanent team policy.

Quick answer: start by task shape, then escalate the failure

There is no single best GPT-5.6 model for coding: OpenAI positions GPT-5.6 Sol for complex, open-ended and high-value work, Terra as the everyday balance, and Luna for clear, repeatable work. Its Codex guidance starts from Sol at Medium reasoning, while also advising users to increase effort when deeper planning or analysis is needed [2]. I would turn that into this starting policy:

Task shapeStarting configurationGate before acceptanceEscalate when
Clear transform with a known patternGPT-5.6 Luna, Light in the app or Low in CLINamed test or exact output checkThe model misses stated files or constraints
Routine implementation in an established patternGPT-5.6 Terra, MediumTargeted tests plus a diff reviewThe work needs more checking or judgment
Ambiguous investigation or high-value decisionGPT-5.6 Sol, MediumEvidence that distinguishes plausible causesThe first pass stops before resolving the uncertainty
Understood task with weak planning or verificationSame model, High or Extra HighMissing plan, test, or evidence now appearsMore effort still does not repair the judgment error
One genuinely hard blockerMax on the chosen modelA decision with alternatives and checksThe problem is actually several independent streams
Separable research, code, and test auditsUltraSynthesized findings with duplicated work removedThe work is tightly sequential or coupled
This is a starting policy, not a ranking. Codex cloud tasks currently do not let users change the default model, so the full routing method applies most directly to local work in the ChatGPT desktop app, Codex CLI, and the IDE extension [2].

The reason to treat this as a policy becomes clearer when price and allowance stop being proxies for completed work.

Codex Plus usage limits do not equal subscription value

Plus is currently listed at $20 per month. Pro starts at $100 per month with a choice of 5x or 20x higher rate limits than Plus. For Plus, OpenAI lists 15 to 90 local messages per five hours for Sol, 20 to 110 for Terra, and 50 to 280 for Luna. The local and cloud allowances share that window [1].

Codex Plus ranges are Sol 15 to 90, Terra 20 to 110, and Luna 50 to 280 local messages per five hours.
OpenAI lists broad ranges because workload affects consumption; message allowance is not accepted output.

The ranges measure access, not output quality. Per million tokens, OpenAI's Codex credit card lists Sol at 250 input, 25 cached-input, and 1,500 output credits; Terra at 125, 12.5, and 125; and Luna at 50, 5, and 300. It says a GPT-5.6 message averages 5 to 40 credits, too wide for a fixed per-task promise [1].

API pricing is a separate meter. OpenAI lists Sol at $5 input and $30 output per million tokens, Terra at $2.50 and $15, and Luna at $1 and $6 [4]. Do not copy API price ratios into a subscription-routing rule. The Codex credit table itself shows why: Terra's listed output-credit rate is lower than Luna's even though Luna has the lower API output price.

One early practitioner result adds a useful warning. CodeRabbit reports that Sol passed 63.7% of more than 100 long-horizon coding tasks with 20,968 average output tokens per task. Terra passed 40.7% with 55,594. This is CodeRabbit's harness, not an independent ranking for every repository, and its own article warns that other model comparisons used different setups and denominators [6].

A cheaper Terra turn can cost more per accepted result if it needs another implementation attempt and a repair pass. A Sol run can waste more if it explores beyond a six-file rename. Token price, message allowance, and accepted work answer different questions.

That is why I prefer measuring the full workflow cost and latency, including retries and review, instead of celebrating the cheapest turn. There is no official conversion from reasoning effort to an exact message cost, and no representative field study yet proves a universal GPT-5.6 routing policy. Your gate supplies the missing unit of measurement.

Once value is measured at the gate, a common configuration mistake becomes obvious: changing model tier and reasoning effort together removes the evidence about which control helped.

Choose a GPT-5.6 Codex model: Sol vs Terra vs Luna

Model choice routes the task to a capability tier. Reasoning effort changes how much planning and checking the chosen model applies. OpenAI describes the tiers this way [2]:

ModelOfficial roleGood first useMain tradeoff
GPT-5.6 SolFlagship for complex coding, computer use, research, and cybersecurityAmbiguous multi-file work, difficult diagnosis, high-risk reviewLowest listed Plus message range and highest family credit rates
GPT-5.6 TerraBalanced model for everyday workRoutine implementation and scoped multi-file changesLower unit cost does not guarantee a cheaper accepted result
GPT-5.6 LunaFast, affordable model for clear, repeatable workExtraction, transformation, summaries, and mechanical editsLess room for open-ended judgment or recovery
The six-file rename belongs with Luna because the pattern, file set, and test are known. The authentication bug belongs with Sol because the first useful artifact is a causal explanation backed by logs, not a mechanical patch.

Effort labels vary by surface. Codex uses Light in the app and IDE where the CLI uses Low, followed by Medium, High, and Extra High [2]. OpenAI's API uses none, low, medium, high, xhigh, and max, with Medium as the default. Its API migration advice is refreshingly restrained: preserve the current effort as a baseline, then compare one level lower; reserve Max for the hardest quality-first work [3].

Four nearby controls are easy to confuse:

  • Max gives one selected model more time to reason about one hard task.
  • Ultra uses subagents for separate parts that can run in parallel. Most tasks need neither Max nor Ultra [2].
  • API pro mode applies more model work before one Responses API answer. It is independent of reasoning effort and uses the selected model's normal token rates [3].
  • Fast mode increases speed at a higher credit rate for supported models. As of this review, the speed page lists GPT-5.5 and GPT-5.4, not GPT-5.6 [7].

Higher effort can help a model finish an analysis it already understands. It cannot turn a vague task into a good contract. To choose the baseline well, define what the model must hand back before you touch the selector.

Start with the cheapest configuration that can pass a named gate

A gate has four parts: the files or boundary in scope, the acceptance criteria, the smallest relevant test, and the evidence a reviewer must see. “Small prompt” is not one of them. A one-line request to change authentication can contain more uncertainty than a 20-line request to rename a typed field.

Here is the matrix I would use for five common task shapes:

Routing matrix maps clear, ambiguous, easy-to-verify, and high-consequence tasks to Luna, Terra, Sol, or Ultra.
Start from task clarity and consequence, then change one control when the gate fails.
ScenarioBaselineRequired artifactSmallest gateEscalation trigger
Rename a typed field across six known filesLuna Light/LowFocused diffExisting named test passesA declared reference or file is missed
Add an API endpoint beside an established exampleTerra MediumEndpoint, validation, and testTargeted endpoint test plus pattern reviewThe diff works but skips an important edge case
Diagnose an intermittent authentication failureSol MediumRanked causes with discriminating evidenceLog or reproduction check separates the leading causesThe model identifies causes but does not test between them
Review a database migrationSol HighFindings tied to schema, rollout, and rollbackData-loss and downtime risks are resolved or acceptedMaterial ambiguity remains after evidence review
Audit sources, code paths, and test gaps independentlyUltraThree bounded audits plus one synthesisFindings are deduplicated and mapped to evidenceStreams depend on each other's intermediate decisions
The endpoint example shows why the artifact matters. “Implemented endpoint” is too soft. A useful contract names the neighboring handler, request schema, expected status codes, test target, and forbidden migration or permission changes. If the test succeeds but review finds a missing authorization check, the next run is a bounded repair, not a reason to replay the whole task with Sol Max.

The migration example moves in the other direction. A cheap syntax check cannot establish that a backfill avoids long locks or that rollback preserves writes. Starting with Sol High is reasonable because the consequence of a missed failure is high and the review artifact needs judgment.

A baseline earns its lower usage only when the next run reacts to a diagnosed failure. Repeating the same request at a vaguely stronger setting is just an expensive retry.

Escalate the failed stage, one variable at a time

The central loop is short: define the gate, choose a baseline, run, classify the failure, change one control, review in a fresh pass, repair, and run the gate again.

Implementation and review loop changes model tier or effort after a failed gate, repairs findings, and stops on acceptance.
Classify the failed stage, change one variable, review fresh, and stop after the gate passes.

Use this failure classifier:

  1. If the model understood the task but stopped short on planning, checking, or follow-through, raise reasoning effort one step.
  2. If it misunderstood the tradeoff, could not recover, or applied the wrong judgment, raise the model tier.
  3. If meaningful streams can proceed independently, consider Ultra. Keep one agent when the work is tightly sequential.
  4. If the contract was vague, fix the contract. A stronger configuration should not be charged with guessing what “done” means.

Return to the authentication bug. Suppose Sol Medium identifies a token-refresh race and a cache invalidation issue, then proposes both without checking the timestamp sequence already present in the logs. The task is understood. The missing move is discriminating evidence, so Sol High is a clean next test.

Now suppose Terra Medium treats the same failure as password validation and edits the wrong boundary. More effort may produce a longer defense of the wrong frame. Move the investigation to Sol Medium and keep the gate unchanged. You have changed capability while preserving the test.

During an active production incident, increasing model tier and effort together can be rational. You will learn less about which variable fixed the failure, so do not promote that result to a default without another measured run.

This loop improves implementation routing, but the implementation thread has already invested in its own answer. Consequential work needs a reviewer with a smaller, cleaner context.

Use a fresh reviewer, then route clear repairs back down

Implementation and review are separate routing decisions. A fresh reviewer should receive the objective, diff, test evidence, and risk focus. It does not need the full transcript that produced the change.

There are two current reasons to be strict here. OpenAI's GPT-5.6 system card reports a greater tendency than GPT-5.5 to go beyond user intent in agentic coding evaluations, while noting that absolute rates remained low [5]. Separately, CodeRabbit reports that its Sol review lane reached 31.6% actionable precision while producing 231 raw comments and 61 nitpicks in its filtering context [6]. More capability can uncover more issues and still create review noise.

For a database migration, give the fresh reviewer six things:

  • the migration objective;
  • the exact diff;
  • the schema and data-volume assumptions;
  • test or dry-run evidence;
  • the data-loss and downtime constraints;
  • the rollback requirement.

Ask it to separate blockers, material risks, and optional improvements. That structure prevents a style comment from competing with an irreversible backfill error.

Routine review can begin with Terra at a measured effort. A high-risk migration can justify Sol High. After review, route an explicit index-name fix or test addition back to Luna or Terra. Keep an ambiguous transaction-boundary finding with Sol. This is the same evidence-based handoff contract that keeps work coherent across different coding agents and sessions.

Then stop. Acceptance means the named tests pass, material findings are resolved or consciously accepted, and the required evidence exists. Polishing outside the task contract burns allowance without improving the accepted result.

The stop rule covers ordinary work. Max and Ultra need a narrower justification because both spend more to solve different kinds of hard problem.

Codex Max vs Ultra: depth versus parallelism

Max is depth. Ultra is parallelism. OpenAI says Max gives the chosen model more time for one task, while Ultra assigns separable work to subagents. Its GPT-5.6 launch material describes Ultra's default setup as four agents working in parallel [2] [4].

Use Max for one difficult migration decision where the work cannot be split without losing the chain of reasoning. The artifact might compare two rollout strategies, check lock behavior, inspect rollback semantics, and choose one based on evidence. More independent agents could duplicate the same investigation without reducing uncertainty.

Use Ultra when the boundaries are real. One subagent can audit source documentation, another can trace the code path, and a third can inspect test coverage. A synthesis pass can then reconcile the findings. Ultra is a poor fit when agent two cannot start until agent one decides which schema change is valid.

There is a sensible opposing policy: use Sol Medium for almost everything. It is easier to operate, avoids routing mistakes, and may beat a cheaper model that loops. OpenAI itself says to start with Sol when unsure [2]. For a low-volume user, or for urgent ambiguous work, I would take that simplicity.

A routing matrix earns its overhead only after task shapes repeat or allowance pressure becomes visible. No public table can know which configuration reliably passes your repository's tests. Five observed runs can give you a useful local answer.

Build a routing policy from five accepted or rejected runs

Record five runs from the same task class. Do not mix endpoint work, migration review, and vague debugging into one average. For each run, capture the task shape, model, effort, required artifact, gate, outcome, failure class, approximate usage, and next change. Use /status in Codex CLI or the Codex usage dashboard to observe remaining limits [1].

Copy this worksheet:

RunTask shapeModelEffortArtifact and gatePass or failFailure classApprox. usageNext change
ExampleRoutine endpoint beside a known patternTerraMediumEndpoint diff; targeted test and auth reviewFailMissing verificationObserved in /statusKeep Terra, raise effort for review
1
2
3
4
5
Copy the five-run routing worksheet and find the lowest model-effort pair that passes your gate.

After five routine endpoint tasks, promote the lowest configuration that passes the same test and review gate reliably. Keep the scope narrow. That default says nothing about a destructive migration or an authentication failure with no reproduction.

The result also needs to survive beyond one chat. A team can keep the task contract, status, artifacts, review findings, and handoff in an MCP-connected project board such as Agiflow. Agiflow preserves work state for external AI assistants. It does not run Codex or route GPT-5.6 models [8]. That boundary is part of choosing an AI coding control surface, not a reason to turn a project board into an agent runtime.

My final rule is deliberately uneven: spend capability on ambiguity, effort on incomplete reasoning, and review on consequential risk. Spend nothing after the gate passes. Copy the five-run routing worksheet and find the lowest model-effort pair that passes your gate. That is how to get more accepted work from a GPT-5.6 Codex subscription.

References

[1] Codex Pricing | ChatGPT Learn (2026)

[2] Models | ChatGPT Learn (2026)

[3] Using GPT-5.6 | OpenAI API model guidance (2026)

[4] GPT-5.6: Frontier Intelligence That Scales With Your Ambition | OpenAI (2026)

[5] GPT-5.6 System Card | OpenAI Deployment Safety Hub (2026)

[6] GPT-5.6 Sol and Terra: Where They Fit for Coding Agents and Code Review | CodeRabbit (2026)

[7] Speed | ChatGPT Learn (2026)

[8] Agiflow product registry, MCP Integration domain, and Project Management domain: docs/products.yaml, docs/architecture/agiflow/domains/mcp-integration.domain.yaml, and docs/architecture/agiflow/domains/project-management.domain.yaml (first-party sources, verified 2026-07-10)

Put this project board inside ChatGPT

Open Agiflow in ChatGPT to plan campaigns, create tasks, and check what needs attention. Create a free Agiflow account when you are ready to keep the board for your team.