Why Your Subscription Drained in Hours: Codex Context-Window Defaults, Explained

Tuesday morning, you open the ChatGPT usage page and the meter reads 87% — yet you barely touched your agent this week: no marathon overnight runs, no giant uploads, just an ordinary afternoon of chatting. If you run Hermes against ChatGPT Codex OAuth (the gpt-5.4 / gpt-5.6 family), the culprit was likely a context window that had been silently set far larger than the provider advertises. The bigger the window, the more input tokens every request carries, and on a subscription the meter drains accordingly. The good news: Hermes fixed the default behavior on August 23 — base Codex slugs are back to the advertised 272K, and the verified 900K window is now an explicit -900k opt-in. This post explains the mechanics and the knobs you control.
Why a bigger context window can cost you real money
First, a quick definition: the context window is how many tokens a model can read in a single request — system prompt, conversation history, and tool output combined. A large window means the agent can “remember” more, but the catch is that every turn re-sends the whole window, and all those input tokens count against your usage.
On pay-per-token APIs that is simply a bill; on a ChatGPT subscription (Plus / Pro) accessed through Codex OAuth, it is a monthly allowance. Growing the window from 272K to 900K inflates each request’s input by up to 3x+ — and if you also keep long-running sessions, draining the allowance in hours is entirely realistic. That is exactly what the community reported on Discord in mid-August: usage vanishing with almost no activity.
Hermes had auto-raised Codex context to 900K on August 16 (the reasoning was “if it is verified, use it”), which silently put every Codex OAuth session on the large window. PR #92797, merged on August 23, corrected course: base slugs default back to the advertised 272K, and 900K is strictly opt-in.
The -900k picker variants: opt in explicitly
In the /model picker, Codex base models now come with -900k-suffixed siblings:
gpt-5.6-sol-900kgpt-5.6-terra-900kgpt-5.6-luna-900kgpt-5.4-900k
These are Hermes-side aliases: pick gpt-5.6-sol-900k and the suffix is stripped before the model id hits the wire (the backend still sees gpt-5.6-sol), and usage pricing counts it as the base model. You are simply declaring “I want the large window” — which is safe because Hermes live-verified in August that the Codex backend, while advertising 272K, actually accepts ~911K input tokens for subscription accounts.
One caveat: not every Codex model gets a -900k variant. Slugs that genuinely enforce 272K — gpt-5.5 and gpt-5.4-mini — have no variant at all. Whether a slug is eligible is decided by the live-verified list in agent/model_metadata.py (_CODEX_900K_ELIGIBLE_BASES); only those models get synthesized variants in the picker.
Compaction follows the window
The context window does more than cap how much you can stuff into a session — it also decides when Hermes compacts (summarizes old history to free room). The trigger is compression.threshold, by default 50% of the window.
Here is the subtle interaction: at 50%, a 272K window would compact at ~136K, wasting half the space. So for Codex OAuth routes on gpt-5.4 / 5.5 / 5.6 base slugs, Hermes auto-raises the trigger to 85% (~231K) — the so-called autoraise.
The -900k variants work the other way: at 50% of 900K (~450K) compaction already happens late enough, so no autoraise is needed. PR #92848, merged the same day, enforces exactly that: -900k variants always use the global compression.threshold, base slugs keep the 85% autoraise. The rule of thumb: the compaction threshold always follows the window you selected.
Take control with these config keys
If the defaults do not fit your workflow, all of this is configurable:
# Turn off the 85% autoraise for 272K Codex base slugs (back to the global threshold)
hermes config set compression.codex_gpt55_autoraise false
# Keep the autoraise but hide the one-time banner
hermes config set compression.codex_gpt55_autoraise_notice false
Note:
codex_gpt55_autoraiseis a legacy key name — it actually governs the whole gpt-5.4 / 5.5 / 5.6 family, not just gpt-5.5.
Other knobs worth knowing:
compression.threshold: the global compaction ratio (default 0.50).compression.model_thresholds: per-model overrides — keys are substring-matched, longest match wins. Compress a 1M-window model later ("glm-5.2-1M": 0.25) and a 128K one earlier ("claude-sonnet": 0.35).- Small-window floor: models with context below 512K are floored at 0.75 (raise-only), so compaction never fires with half the window still free.
compression.proactive_prune_tokens: on large-window models the 50% trigger rarely fires, so old tool output rides in history and gets re-sent every turn. Setting a value (e.g. 48000) reclaims it early and saves tokens.- For full manual control over a model’s window, use the
context_windowfield inmodel_overrides— we covered that in a complete configuration guide.
The takeaway
A bigger context window is not free — it is a bill you pay on every single turn. The lesson from this Codex episode is that defaults should be conservative and the large window should be reserved for people who explicitly need long documents and long histories. Practically: keep the base slugs (272K) for everyday sessions, reach for a -900k variant in /model only when you are actually working with long documents, and tune the compaction keys above to your own rhythm. One heads-up: these changes live on main (merged August 23, after the v0.20.5 tag), so grab them with hermes update — and the fuzzy /model picker filter is part of the recent CLI polish wave, which makes finding -900k variants much faster. For more everyday token-saving habits, see our productivity tips roundup.