All writing

GPT-5.4 Codex Deprecation: Aug 31 Migration Checklist

August 31 is not a soft sunset. If your Codex workflows authenticate through ChatGPT — not an API key — gpt-5.4 and gpt-5.4-mini stop responding on September 1. No grace period, no fallback. And the models you're migrating to are already cheaper, meaning every team still on GPT-5.4 is actively overpaying for the same work.

Here's what OpenAI confirmed in their release notes on August 8–10: GPT-5.4 and GPT-5.4 mini will no longer be available in Codex for users signed in with ChatGPT. API-key-authenticated Codex sessions get a reprieve — they keep working past August 31 — but any product surface that relies on ChatGPT sign-in for model access breaks without action. The prescribed migration targets are gpt-5.6-terra (replacing gpt-5.4) and gpt-5.6-luna (replacing gpt-5.4-mini), per OpenAI's model release notes.

Why This Deprecation Is Structured Differently

The auth-scoping is the engineering detail most teams will miss in the first read. This isn't a model-wide kill. The boundary is:

Session typeGPT-5.4 after Aug 31
ChatGPT-authenticated Codex❌ Unavailable
API-key-authenticated Codex✅ Still works

What that means in practice: if you've shipped a Codex-powered code review bot, CI agent, or developer workspace tool that your users access through their ChatGPT account (OAuth, SSO via ChatGPT, or similar), you are in the affected bucket. If you're calling the OpenAI API directly with a bearer token from your own key, you are not — yet. I'd still migrate; the GPT-5.4 era isn't getting new investment and the pricing math no longer favors it.

GPT-5.4 was a meaningful model when it shipped — it pulled together reasoning, coding, and agentic workflows into one frontier model, absorbing the coding capabilities that GPT-5.3-Codex introduced. But the successor generation has already been priced down aggressively. As of July 30, GPT-5.6 Luna costs 80% less than its prior pricing, and GPT-5.6 Terra costs 20% less. That's not a rounding error — that's a different order of magnitude for high-volume Codex workloads.

The Migration Is Trivial. The Audit Is Not.

Swapping model strings takes minutes. Finding every place you've hardcoded or configured gpt-5.4 is the actual work. OpenAI's release notes call out the specific surfaces to audit before the cutoff:

  • Workspace defaults — if your org has set a default model at the workspace level, that needs updating
  • Saved model settings — user-level or team-level saved configurations
  • Managed configurations — anything your infra team controls centrally
  • Custom agents — every GPT-based or Codex-based agent that has a model pinned
  • Scheduled tasks — async jobs, cron-triggered agents, overnight code analysis runs

The scheduled tasks one is the trap. A synchronous feature breaks loudly on September 1. A scheduled agent that runs at 2am fails silently, surfaces a degraded output or a missed run, and you spend a morning debugging something that should have been a 10-minute config change.

Here's the grep you should run today:

bash
# Find gpt-5.4 references across your codebase and config
grep -r "gpt-5\.4" . --include="*.py" --include="*.ts" --include="*.json" --include="*.yaml" --include="*.env"

Then extend that to your infra repos, your agent configuration files, and any environment variable definitions. If your team uses a model registry or routing layer — and you should be — the swap is one config update behind a flag, testable before you cut over. The teams I've seen handle model migrations cleanly are the ones who treat model identifiers as runtime configuration, not compile-time constants.

The Mapping: What to Replace With What

This is not ambiguous. OpenAI has been explicit:

Old modelReplacement
gpt-5.4gpt-5.6-terra
gpt-5.4-minigpt-5.6-luna

GPT-5.6 Luna landed its 80% price cut on July 30. If you've been using GPT-5.4 mini for high-frequency, lower-stakes coding tasks — inline completions, docstring generation, diff summarization — Luna is the natural target and it is substantially cheaper per token. GPT-5.6 Terra handles the heavier-weight tasks: multi-file refactors, architecture reasoning, complex code generation that benefits from the full model capacity.

Don't default everything to Terra. That's the mistake teams make when migrating under time pressure — they pick the most capable-sounding option, burn through token budget on tasks that don't need it, and then blame the model when costs spike. Luna exists precisely for the high-throughput, lower-stakes workloads. Match the model to the task, not to your anxiety about the deadline.

The output characteristics will be slightly different. That's expected — these are not identical models with a name change. Run your eval suite, or if you don't have one, spot-check at least ten representative prompts from each major use case before you cut over. Budget an hour for this. It's not optional.

What to Actually Do This Week

The engineering work here is short. What makes teams miss deadlines like this is scope discovery, not implementation. Here's the checklist:

Day 1 — Audit

  1. Run the grep above across every repo your team owns, including infra and config repos
  2. Check workspace-level model defaults in your OpenAI org settings
  3. List every scheduled task, cron job, and async agent that touches Codex — these are your silent failure risks
  4. Identify which sessions are ChatGPT-authenticated vs. API-key-authenticated; only the former is breaking on August 31, but document both

Day 2 — Map and test 5. Apply the replacement mapping: gpt-5.4gpt-5.6-terra, gpt-5.4-minigpt-5.6-luna 6. Do not default everything to Terra — route high-frequency, lower-stakes tasks to Luna 7. Run evals or spot-checks on ten or more representative prompts per use case; note any output drift that requires prompt adjustment 8. If you have a model routing layer or feature flag system, do the swap there first — one config change, staged rollout, easy rollback

Day 3 — Ship and monitor 9. Deploy the model string updates; confirm scheduled tasks are updated, not just synchronous paths 10. Watch your first 24 hours of post-migration logs specifically for silent failures in async jobs 11. Update your internal documentation so the next deprecation cycle takes half the time

The rule worth keeping for every future deprecation: never let a model identifier live as a hardcoded string in application code. It belongs in config, behind a variable, ideally behind a routing abstraction that lets you swap without a deploy. The teams that treat this migration as a 30-minute task are the ones who already built that layer. Everyone else is doing archaeology through their own codebase under a deadline.

August 31 is this month. Run the grep now.

Working on something like this? I take on a few fractional-CTO and AI engagements at a time.

The AI CTO playbook

Get my AI playbooks — straight to your inbox

Practical notes on shipping production AI, scaling teams, and the calls a CTO actually has to make. A few times a month. No spam, no fluff.