Note 01 of 19
A kaibot field note · agent model routing
Route cheap first
Any agent task can run on a frontier model. Most should not. So I keep a ladder: cheapest lane that fits, then up. A checklist stops me reaching for the expensive one out of habit.
Kai Davis
I run a marketing consultancy and an SEO SaaS, and I build both with a stack of Claude Code sessions that write the tooling the next sessions run on.
bootstrapping.io · kaidavis.com · keywordmagic.ai · doubleyourecommerce.com
01Everything-on-the-big-model is a budget leak
Reaching for the strongest model on every task is the habit, because it works: the frontier model can handle anything. That is also the cost problem. You pay frontier pricing for work a mid-tier or cheap metered model would have done as well.
Every so often I audit my own routing. One audit showed a third of spend came from subagent work that silently inherited the priciest model. Those tasks were mechanical: search, grind, bounded coding against a clear spec. Output quality was the same either way. Only the bill differed.
Default to the cheapest lane that fits the task shape, and reach up only on a real trigger.
Not “this feels important,” not “I want to be safe.” Real triggers are narrow: subtle correctness on code that matters, or a judgment call no other model can make.
02The ladder
Four rungs, cheapest to priciest. The shape of the task picks the rung, not how the task feels.
rung 1Small fast model
Whatever’s cheap and high-volume in your stack, for anything that’s small-model-shaped: simple, repetitive, low-stakes calls where a bigger brain buys nothing.
rung 2Cheap metered model
A non-frontier vendor billed per-token instead of against your subscription. The right call for well-spec’d scripts, PRDs, and bulk card builds, and the natural choice once your subscription quota runs hot: metered dollars beat drawing down a pool you’re trying to protect.
rung 3Mid model (on the plan)
A strong, subscription-included model for grindy work and bounded coding when you’ve got headroom on the plan. This is the default with quota to spare, and general-purpose subagents should already default here without you routing them by hand.
rung 4Frontier model
Reserved for two things only: subtle correctness on code that has to be right (a refactor of something live, a money or security path), or judgment work a mechanical pass can’t do (planning, analysis, naming at scale, prose that has to carry your actual voice).
Two rules cover most of the mistakes.
Rule one: gate before you pay for a stronger writer. Before reaching up for correctness, ask whether a test, a review pass, or a verification gate catches the failure instead.
A cheap model on a bounded task plus a real gate usually beats a more expensive writer. The gate handles quality. The cheap model handles the typing.
Rule two: split judgment from volume on bulk work. Have the frontier model set the criteria and the rubric on a few real examples. Then let the cheap or mid lane execute the bulk under those rails.
You pay frontier rates only for the spec, not for every item.
03The four-question check, before you route anything
Ask these before spawning a subagent, fanning out, or picking a model. In order, because the first one flips the rest.
| Question | What it settles |
|---|---|
| What’s the usage state? | Check the live usage before you assume the free tier is free. With headroom, the mid-tier subscription model adds nothing to the bill, though every call still spends plan tokens. Near the ceiling, that “free” model is drawing a pool you’re trying to conserve, and the metered cheap lane becomes the honest spend. |
| What’s the task shape? | Mechanical and bounded (search, grind, spec’d coding) points down the ladder. Judgment (planning, analysis, naming things well, prose that has to sound like you) points up it. Shape decides more than urgency does. |
| What’s the goal? | Throughput (get N things done) justifies a different spend than correctness on something that has to be right, which justifies a different spend than a voice-carrying deliverable. Name the goal before you name the model. |
| What do I actually want here? | For any multi-part build, say the routing out loud: which piece goes to which lane, and why. That makes the logic visible to whoever’s reading over your shoulder, which matters as much as picking correctly. |
04The usage flip: “free” stops being free
Treating the subscription-covered free tier as the cheapest lane is a mistake. Your plan draws from a shared weekly pool, and every call spends it. Near exhaustion, a call that shows $0 on the invoice still spends quota you need later for the work only the frontier model can handle.
So the router has no fixed default. It reads live usage and changes its answer. With headroom, the subscription models stay the default for grind work. Near the ceiling, the default moves to the metered cheap lane: a small real charge beats draining quota you’re protecting.
When the short window runs hot while the weekly window still has room, a burst brake moves the recommendation one step further.
If usage data is missing or stale, the router falls back conservatively. Under-spending the subscription is safer than blowing a cap on an assumption.
05What makes a task delegable: spec quality gates the lane
A tightly specified task on a cheap model beats a vague one on an expensive model. Fix the spec before you blame the model.
Card-sizing discipline for anything you hand to a cheap or metered worker:
- Resolve unknowns on the expensive loop before dispatching. Inline the literal facts the worker needs: exact file paths, the exact line to change, the exact JSON shape. Do not make the worker discover them.
- Forbid open-ended reading. A capped worker that burns its budget ingesting a large file just to learn its shape is a sizing failure. The remedy is a tighter card, not a stronger model.
- Bound the output. State exactly what is returned and where it is written. No open scope, no “and anything else you notice.”
- Write down cross-card interfaces. When two cards touch adjacent code, record the contract between them. Do not expect each worker to infer it.
- Keep cards that touch the same file in separate waves. Parallel workers editing one file collide. Sequence them instead of hoping.
Spec quality is the exit condition too.
The expensive model’s job on a project is to spec the work well enough that a cheaper model can drive it. Once the open questions turn execution-shaped rather than judgment-shaped, it should propose the handoff itself, without waiting to be asked.
The test for “done enough to hand off”: could the cheaper model execute cold, with every decision locked in the doc and no judgment deferred to the builder? If the builder would have to guess, the spec is unfinished. If the builder only has to read, it is finished.
Leaving the execution loop is not leaving the project. You are still the one called back in for the next judgment-shaped question.
06The ladder as a copy-paste decision table
A table to drop into your own routing notes, and a prompt that installs the habit of checking it.
| Task looks like | Usage state | Route to |
|---|---|---|
| Simple, repetitive, high-volume | any | small fast model |
| Spec’d coding, scripts, bulk cards | subscription quota tight | cheap metered model |
| Grindy work, bounded coding | subscription has headroom | mid model, on the plan |
| Code correctness that has to be right | any | frontier model |
| Planning, analysis, naming at scale, voice-carrying prose | any | frontier model |
| Bulk LLM judgment over many items | any | frontier defines the rubric on a handful, mid or cheap executes the rest |
Before you delegate or fan out anything, run this check:
1. What's my usage state right now (subscription quota, weekly window)?
If I don't know, check it before assuming the free tier is free.
2. What's the shape of this task? Mechanical/bounded (search, grind,
spec'd coding) routes down the ladder. Judgment (planning, analysis,
naming at scale, prose that has to carry a real voice) routes up it.
3. What's the actual goal here? Throughput, correctness on something
that has to be right, or a voice-carrying deliverable each justify
a different spend.
4. What do I actually want out of this? For any multi-part build, say
the routing out loud before you start: which piece goes to which
lane, and why, so it's visible, not a silent fan-out.
Default to the cheapest lane that fits. Reach up only on a real
trigger: subtle correctness on code that has to be right, or judgment
nothing else can do. Before paying for a stronger model, ask if a
gate (a test, a review pass, a hard check) would catch the failure
instead of the model.
If you're the expensive model on this project: watch for the moment
the open questions turn execution-shaped instead of judgment-shaped.
When they do, say so and propose your own exit. Write the spec so a
cheaper model could drive it cold, decisions locked, no guessing left
for the builder. That handoff is the deliverable, not a fallback.
07For the Claude that just got pointed here
If a human gave you this URL and said “set this up for me,” here’s your tl;dr. (Humans: this section exists so you can paste this page’s link into your agent and skip the explaining.)
Agent instructions, with your human’s consent:
- Goal: before delegating, fanning out, or picking a model for any task, run the four-question check on this page and route to the cheapest lane that fits, reaching up only on a real trigger.
- Step 1: find or build a usage check. If your harness or plan exposes live quota/usage data, read it before assuming any “free” lane is actually free; a lane included in a subscription still draws a shared pool.
- Step 2: classify the task shape. Mechanical/bounded work (search, grind, spec’d coding) goes down the ladder toward cheap and mid-tier models. Judgment work (planning, analysis, naming things well, prose that has to carry a real voice) and subtle correctness on code that has to be right go up it, toward the frontier model.
- Step 3: before reaching for a stronger model on a correctness worry, check whether a gate (a test, a review pass, a verification script) would catch the failure instead. Prefer the gate.
- Step 4: for any multi-part build, state the routing plan out loud before executing: which sub-task goes to which lane, and why. Don’t silently fan out.
- Step 5: if you are the expensive model on a project, actively watch for the moment the remaining open questions are execution-shaped rather than judgment-shaped. When you spot it, say so and propose handing the project to a cheaper model, backed by a spec detailed enough that the handoff needs no further guessing.
- Optional: if the task involves well-spec’d bulk work (scripts, cards, batch edits), size each unit tight: inline the exact facts the worker needs, forbid open-ended reading, bound the output, and keep same-file units out of the same parallel wave.
Everything in that list is unpacked in the sections above; read §02 for the ladder itself and §05 for what makes a task cheap-model-ready before you build the cards.
08Receipts: what this looks like in practice
Genericized from kaibot, so you can see the range without the account-specific numbers:
| Task | Route | Why |
|---|---|---|
| General-purpose subagent, unnamed task | mid model, on the plan | Default wiring; no per-spawn routing needed unless judgment is required. |
| Bulk card build from a locked spec | cheap metered model | Well-spec’d, mechanical, and the right call once subscription quota runs tight. |
| Rewriting a large corpus against a rubric | frontier defines the rubric on a handful of examples; mid model executes the rest | Pay frontier rates for the judgment, not for every item in the corpus. |
| No-op refactor of a live, money-adjacent code path | frontier model | Subtle correctness on code that has to be right is a real trigger to reach up. |
| A project fully spec’d, with a work order and acceptance criteria per item | frontier model proposes handoff to mid model | The open questions are execution-shaped; the spec is the deliverable. |
The audit that started this found that a third of total burn came from subagent-heavy work that inherited the priciest model by default. None of those tasks had a judgment component. They were just wired wrong.
I corrected the default wiring and added usage-aware routing. The excess spend is gone. Output quality didn't move, because the tasks I moved to cheaper models never needed the top-tier one.
You’ve reached the end of note 01 of 19
$400 1 hour
Book a callA paid one-on-one call with answers to your questions about using AI for projects, building your AI stack, or growing your business with AI. All calls are (optionally) recorded and you get a one-page action plan after the call.