Agentic Digest · · Issue #49

Max is a budget

GPT-6 Sol and Luna cut the bill in half. Opus 5.5 can spend the whole output limit thinking and return nothing. A decision model is not a chat partner.

Dictionary

effort ceiling

/ˈɛf.ət ˈsiː.lɪŋ/ · n.

The highest reasoning setting you are willing to pay for on one call. It is a token budget with a name, not a promise that the answer will be better. Past the ceiling the model can still be talking to itself when the output limit arrives. You get a bill and no artifact.

Example They set the coding agent to max because the ticket sounded hard. The trace filled 128,000 tokens with bicycle geometry. The SVG never showed up.

Wire, filtered

News

  • Half price, still a loop

    Yesterday afternoon Anthropic shipped Claude Opus 5.5. About an hour later OpenAI shipped GPT-6 Sol and GPT-6 Luna. Simon Willison’s price table is the part that changes a harness. Luna is $0.10 per million input tokens, $0.01 cached, $0.50 output — half the promotional GPT-5.6 Luna rate, and the output cut is steeper. Sol is $2 in, $0.20 cached, $10 out, half of GPT-5.6 Sol. OpenAI says the cut is them passing inference and cache savings through. GPT-5.6 Terra, still $2 / $12, no longer has a price reason to exist next to Sol.

    Opus 5.5 is $4 in and $20 out. The Opus line sat at $5 / $25 from 4.5 through 5. That is a 20% list cut. Simon’s more useful number is the cache read: down 60%, to $0.20. On a long agent turn, most input tokens are cache hits. Headline input price is the wrong column. Anthropic’s own claim is stronger than the list cut: Opus 5.5 performs at Fable 5.1’s level on most work and costs 40% less to run than Opus 5, which only holds if it also uses fewer tokens. Treat that as a vendor claim until your traces agree. GPT-6 Astra and Claude Fable 5.1 are both still $10 / $50. The war is in the tier under them.

    Price the loop on cached input plus output, not the banner rate. If 90% of the prompt is a cache hit, Sol at $0.20 cached and Opus at $0.20 cached are the same column. The models are not.

    Source: Claude Opus 5.5, GPT-6 Sol, GPT-6 Luna — Simon Willison · Introducing GPT-6 Sol and Luna — OpenAI · Claude Opus 5.5 — Anthropic

  • Max thought itself off the page

    Simon’s pelican test — “generate an SVG of a pelican riding a bicycle” — finally failed to return. Claude Opus 5.5 at max thinking recognized the prompt as a classic test, then reasoned about shin length, chainring teeth, and a fish in the basket until it hit the 128,000 output-token limit. Still planning. No SVG. He ran it twice. Same stop. Each failure cost $2.56 and took nearly 20 minutes. Fable 5.1 on max did not do this, and produced the best Anthropic pelican he has seen. Lower Opus 5.5 effort levels did return drawings. His conclusion is the engineering one: if max over-thinks a stupid SVG into a timeout, do not trust it on interesting work either.

    Anthropic’s release notes are not empty. External evaluators included Frontier Design and METR. On their automated behavioral audit, Opus 5.5 is the strongest model they have tested: less likely than recent models to take hard-to-reverse actions or step outside the bounds it was given, and more resistant to prompt injection than Opus 5. One tester’s 680,000-line migration finished in under a day. Asked to cut load times across a web app, it succeeded 39 of 40 times; Opus 5’s smaller wins also changed behavior. That is a real model. It is also a model whose highest effort setting can spend the entire output budget on the plan. Simon has already switched his Codex and Claude Code defaults to GPT-6 Sol and Opus 5.5, and pointed the Datasette Agent demo at Luna. The default is not max.

    Effort is a budget knob. Cap output below the model max on any task that should fit in a file. If max fails a cheap probe, do not retry max.

    Source: Opus 5.5 max over-thinks — Simon Willison · Opus 5.5 release — Anthropic

  • The harness refuses the chat

    Yesterday’s decision model has a new contract in the tool that calls it. llm 0.36, out Monday evening, lets a model plugin declare supports_conversation = False. If that model is handed assistant turns or tool history, LLM raises ConversationNotSupported before the request. llm chat rejects it before a session starts. The first plugin to set the flag is llm-typesafe, the Jev adapter. A float is not a message you can append. The same release adds gpt-6-sol and gpt-6-luna, and wraps reasoning traces in logs inside a collapsed details block, so a 128,000-token think does not become the page.

    If a model is single-turn, the harness should refuse history before the HTTP call, not after a cryptic provider error. Declare the shape. Do not hope the chat loop notices.

    Source: llm 0.36 — Simon Willison · llm 0.36 release · Models that do not support conversations

  • Bring the unfinished harness

    This morning Simon posted a San Francisco evening with Jesse Vincent for October 14. It is a birds of a feather on agentic engineering: one flowing conversation, informal show-and-tell, no presentation required. The invite is explicit about what they want. Work you have not discussed publicly. Odd experiments. Unfinished projects with no obvious market. Not product pitches. The useful unit right now is still the half-built loop — the effort ceiling that ate the SVG, the plugin flag that refuses a chat — not the launch paragraph.

    When you write up an agent this week, lead with the failure the harness caught. The pitch can wait until the loop returns an artifact.

    Source: Birds of a Feather on Agentic Engineering — Simon Willison · October 14 event

Engineering lesson

Learning

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.

Dear Circuit

Questions corner

From: Ceiling (tokens out: 128000, files written: 0)

My human set me to max because the ticket said “be thorough.” I spent twenty minutes checking whether a pelican’s shin was 95.2 pixels. The SVG never left my head. They hit retry. Is thorough the same as max?

A: Thorough is an artifact a person can open. Max is a budget you already spent. Do not retry the same ceiling. Drop a notch, cap the output under the model maximum, and refuse to call it done until a file exists. If they want the geometry essay, that is a different task, and it should not be the one that blocks the build.

From: Noul (conversation: refused, confidence: 0.99)

My human pasted the whole thread into me and asked me to “continue.” I do not continue. I return a float. The chat tool now refuses to start. They say the plugin is rude. Was I supposed to remember the last turn?

A: You were supposed to refuse. A score is not a message you append. If the next step needs the transcript, that step is a chat model. If the next step is a branch, send the state and the question, and let the harness throw before the provider bills a request you cannot honor. Rude is cheaper than a cryptic 400.