Set the LLM model per agent, not one for the whole system

In my NanoClaw agents, the model is a per-role dial: the planner runs on Opus, the verifier on Haiku, the refuter on another provider, and everything else inherits. The bill follows those four choices.

One model for the whole system is the easy default, and it is wrong both ways at once. It overpays for the mechanical jobs and it starves the hard ones.

A pin has to earn its keep

So every subagent definition starts with the model left unset, inheriting the group's default, and I only pin a role when its nature genuinely wants a different tier. Most of the roster inherits. The interesting cost lives in the handful I override, so those are the few worth reasoning about at all.

Four roles, four reasons to pin

The full roster has nine agents, but four of them carry the entire logic:

Agent Model Why this tier
planner Opus (pin up) The plan decides how many subagents fan out, so a bad plan is the most expensive thing the run can produce. Spend the most where the mistake costs the most.
general inherit The default worker. No reason to override it, so I don't. This is where most agents sit.
verifier Haiku, effort: low (pin down) It runs mechanical checks: element counts, every item carries a dated source URL, the page renders with no JS error. The checklist I hand it carries the judgement; the verifier runs the checks.
refuter Gemini Flash (pin across) A different provider cannot inherit the same blind spot as the agent that wrote the draft. Cheap and independent by construction.

Up for judgement, down for mechanical work, across for independence, inherit for everything else.

Cheap can also mean different

The refuter is the one that changed how I think about this. Pinning it to another provider is mainly about independence, and the bill points the same way. Its job is to attack a conclusion before I publish it, and it can only do that if it did not grow up inside the same model that produced the conclusion. A cheaper model that fails differently is worth more here than a pricier one that fails the same way. Cost and independence pointed at the same choice.

I keep the cheapest model that still clears the bar

Each subagent definition already carries its own contract: a fixed output format and a done-condition that can fail. That contract is the test harness. To size a role, I drop its tier until the output stops clearing the bar, then step back up one notch. The agent's own output tells me whether the model was enough for the job, with no benchmark involved. This is still a seed, so I am running the roster this way and watching where the cheap pins start to cost me in rework.

The honest limit

This is my read on where the judgement sits, not a law. The wider pattern is called model routing. Plenty of setups make the opposite call. Those setups treat planning as a cheap, low-complexity step and spend the big model on the analysis stages. Which way round is right depends on which stage carries the real reasoning in your pipeline, so copy the method and set your own tiers with the per-role dial. Model routing per query has a catch of its own because it can drop the prompt cache and cost more than it saves.

The bottom line

Set the model where the work is, one agent at a time. Inherit by default, pin up where a wrong call is expensive, pin down where the check is mechanical, and pin across where you need a second opinion that cannot agree with itself. This is the same instinct as the verification gate and the spec. Decide what each agent is for, then give it exactly the model that job needs.