Routing the Work to the Right Model
You hand an agent a bug report. It opens four files to find where the function lives, reads a stack trace, searches for a symbol that turns up in two places, and none of that takes much thought. Then it decides what to change, which takes all of it, and that decision is the thing that lands in your repository. Then it runs the tests. Every one of those steps went to the same model at the same price. The looking around cost exactly what the deciding cost, and most of the bill is the looking around.
Cleaning a picture is not retouching it
A damaged painting arrives at a restoration studio and passes through several pairs of hands. Someone photographs it under raking light and writes down what is wrong: the tear, the lifted flakes, the yellowed varnish. Careful work, with no decisions in it. Someone else takes the old varnish off with solvent, a slow job done by a known method. The losses, the places where paint is simply gone, go to the most experienced hand in the room, because filling them is the step nobody can undo. Three jobs, three rates, sorted by what it costs to get each one wrong.
A workflow with named phases can be paid for the same way. Each phase declares which model it wants, and a phase that declares nothing inherits a default set once for the whole run. One harness built this way diagnoses on Haiku, escalates the phase that proposes a fix to Opus, and lets the phase that executes the change inherit Sonnet from the default: three tiers inside one task, ordered by stakes rather than by subject. How much explicit reasoning a phase gets can be dialled the same way, high for one, off for another.
The cheapest model belongs on the cheapest mistake
Once you can set a model per phase, the temptation is to set them all downward. That gets the arithmetic right and the point backwards. What the split buys is not a smaller number on every line, it is the room to spend where being wrong is expensive and to stop spending where it is not. Reading a file is recoverable. Writing a migration is not. Sending the phase that holds the irreversible action to the cheapest model, because it is the phase that runs most often, throws away the reason for routing at all.
The seams have to be real, which is why this pairs with loops that name each phase and gate it: plan until the requirements are clear, implement from what the plan wrote down, verify the diff against the spec with lint and tests, finish by folding what was learned back into the project’s notes. Each phase is a delegated job that starts only when the one before it produced something checkable. Treat verification as optional and a cheap phase’s mistakes walk straight through to the end. And check that your client honours the routing at all: some switch models programmatically, others read the declared model as a suggestion. Two setups read identically in the config and differently on the invoice.
The switch has to happen somewhere real
A line in a config file does not change models by itself. Something underneath has to hold one compatible interface over several providers and translate their formats, their authentication and their errors, so the same call reaches a different vendor. That layer is where the operational controls end up living: budgets, cost tracking, a retry when a deployment refuses, a fallback to another model when it keeps refusing. Configure that fallback without a ceiling and the cheap reconnaissance phase quietly reroutes to something expensive, or to a model whose handling of tools differs enough that the phase stops behaving the way you tested it.
The phases are not always fixed in advance, either. When a coordinator turns a goal into a graph of tasks while it runs, deciding what can go in parallel and what has to wait, the choice of model travels with nodes that did not exist a minute ago, which is why those systems show the plan before they dispatch it. An earlier piece described a harness carrying a profile per model; this is the same instinct one level down, inside a single run.
Paying frontier prices to read a file is a decision. Usually it is one nobody made.