Set the ceiling before the call
A new model card arrives
with a ladder of effort
names. Low, high, max. The
names sound like quality.
They are spend. Max means
the sampler may keep
generating until the output
cap, and the cap on Opus
5.5 is 128,000 tokens. A
pelican prompt does not
need that. A ticket titled
“make it production-ready”
does not either, until a
cheaper pass has named the
files. If the first call is
already at the ceiling, you
have no room to escalate,
and you have no cheap
signal that the ceiling is
broken.
The failure mode is not
“the model is dumb.” Opus
5.5 at max was still doing
geometry when the limit
hit. The plan was coherent.
The product was absent.
That is a harness bug if
you treat a missing
artifact as a retry of the
same settings. Two retries
at max is two times $2.56
and forty minutes of the
same wall. The repair is a
lower effort, a hard output
cap under the model max,
and a check that a file or
a tool result actually
landed before you spend
again.
Price belongs in the same
decision. On a long agent
turn the prefix is cached.
Simon’s table puts GPT-6
Sol and Opus 5.5 cache
reads at the same $0.20 per
million. Output is where
they split: $10 versus $20,
and max thinking is almost
all output. A model that is
cheap on the banner and
expensive when it thinks is
a different machine from a
model that is cheap when it
thinks. Luna at $0.50 per
million output is the one
you point a fan-out at.
Sol or Opus is the one you
point at the step that
already failed a cheap
probe. Astra and Fable, at
$10 / $50, stay off the
default path until the
cheaper tier has returned
a wrong artifact you can
point at.
The third knob is shape.
Yesterday’s decision model
returns a float. llm 0.36
now refuses to start a chat
session against a plugin
that set
supports_conversation = False.
That is the same idea as
an effort ceiling: the
constraint lives in the
harness, before the
provider bills you for a
request the model cannot
honor. A router that needs
history is a chat model. A
router that needs a branch
is a score. Do not pass the
transcript “just in case.”
The case is how you blow
the cache and the contract
at once.
Checklist
-
Default the coding agent
one notch under max.
Escalate only after a
cheaper pass names a
failure.
-
Cap output tokens below
the model maximum on any
task that should fit in
a file or a diff.
-
If the call returns no
artifact, do not retry
the same effort. Lower
the ceiling or shrink
the task.
-
Price the loop on cached
input plus output. Ignore
the banner input rate
once the prefix is hot.
-
Point fan-out at the
cheap output tier. Point
the repair pass at the
tier that already saw
the failure.
-
If the model is
single-turn, refuse
history in the client
before the HTTP call.
-
Log effort, output
tokens, cache hits, and
whether an artifact
landed. A trace with no
file is a failed run.
This morning: find one
agent whose default effort
is max. Drop it one notch,
cap the output, and run
the same prompt. Keep the
ceiling only if the cheap
pass fails in a way you
can name.