The ChatGPT subscription meters on TOKENS, not messages. OpenAI moved to
token-based accounting and states plainly that "a longer task can use more of
your allowance than a short task, so a fixed number of messages is not a
reliable measure of remaining usage". On that plan the declared context IS
the budget.
Reverts chatgpt/* and agent/*-gpt-5.x from 1,050,000 back to 272,000 in all
three profiles. Raising them to the API's published figure was correct for
capability and wrong for cost: measured over 450 requests, chatgpt/gpt-5.6-
terra averaged 128,395 prompt tokens against 374 completion -- a 343:1 ratio
-- and peaked at 249,647, i.e. sessions grew until they hit the declared
ceiling and compacted there. Quadrupling the ceiling quadruples the room they
grow into, and every turn re-sends the whole context. 272,000 also matches
Codex's own documented context.
⚠ THE LESSON FROM THE LOCAL TIER DOES NOT TRANSFER. Declaring the true
context is strictly right for a local model, where context is free -- that
fix took muse-glimmer-30b from 15/24 to 21/24. On a metered subscription the
same change is a bill. Same edit, opposite sign, and the distinguishing
question is who pays per token.
Also points dev/architect/review/duck/brainstorm at a new
chatgpt/gpt-5.6-terra-low alias, which pins reasoning_effort server-side.
GPT-5.6 defaults to MEDIUM when effort is omitted, and nothing anywhere in
these configs set it, so every work agent has been running at medium. The
hypothesis being tested is not that this saves the ~374 completion tokens
directly, but that less reasoning means fewer tool calls, fewer turns, and
therefore less context re-transmission -- which is where the tokens actually
go.
⚠ THAT HYPOTHESIS IS UNVERIFIED, and so is whether the parameter arrives at
all. LiteLLM documents dropping reasoning_effort from gpt-5.4-and-newer
requests that carry tools, which is every agentic request; this route goes
through the Responses transformer, which may exempt it. A dropped param
returns a normal 200 and changes nothing. A synthetic A/B was run and was
INCONCLUSIVE: the fixture was too easy, reasoning came back 11 tokens and 0
in the two arms, so there was no signal to compare, and low made MORE tool
calls (9 vs 8) at n=1. Real sessions will settle it -- watch completion_
tokens in the spend log against the 374 baseline.
OMO agents are untouched: they are defined in ~/.omo/omo.jsonc, not here.
personal.json's five stay on muse-glimmer-30b-low from the local trial.