Pick a model tier, not a flagship
lobstack-model-tier
Choose the cheapest model tier that can actually do the task instead of defaulting to a flagship, and verify the choice before spending on it. Use when selecting a model for a feature or agent, when one model dominates a bill, or when asked to cut inference cost without losing quality.
Copy the file and save it at the path below, then start a new session. Any agent that reads a skills directory will pick it up; the path shown is Claude Code's. Delete the folder to uninstall.
mkdir -p .claude/skills/lobstack-model-tier # paste SKILL.md into .claude/skills/lobstack-model-tier/SKILL.md
No package, no registry client, no telemetry. 142 lines of text, licensed MIT.
Frontmatter
An agent decides whether to load a skill from name and description alone — it does not read the body first. That is why the description says when to use this, not only what it is.
--- name: lobstack-model-tier description: "Choose the cheapest model tier that can actually do the task instead of defaulting to a flagship, and verify the choice before spending on it. Use when selecting a model for a feature or agent, when one model dominates a bill, or when asked to cut inference cost without losing quality." license: MIT metadata: title: "Pick a model tier, not a flagship" version: 1.0.0 author: lobstack category: cost tags: [cost, routing, models, gateway] ---
SKILL.md
---name: lobstack-model-tierdescription: "Choose the cheapest model tier that can actually do the task instead of defaulting to a flagship, and verify the choice before spending on it. Use when selecting a model for a feature or agent, when one model dominates a bill, or when asked to cut inference cost without losing quality."license: MITmetadata: title: "Pick a model tier, not a flagship" version: 1.0.0 author: lobstack category: cost tags: [cost, routing, models, gateway]--- # Pick a model tier, not a flagship Defaulting to the best available model is the most common and most expensivedecision in an LLM codebase, and it is almost never a decision — it is theexample from a quickstart, left in. ministral-8b costs $0.15/$0.15 per million tokens in/out. claude-fable-5-1 costs $10/$50. That is roughly 200× on the same tokens, which is why "which model" is a cost decision before it is a quality one. Prices last checked against each provider's own page on 2026-09-08. ## The five tiers Lobstack groups every model into five capability tiers and routes "auto"requests to the cheapest tier that can handle the request. The thresholds and thelead model of each tier are the router's actual configuration: | tier | complexity | what `auto` serves | $/Mtok in/out | relative cost || --- | --- | --- | --- | --- || nano | ≤ 20 | gemini-3.1-flash-lite | $0.25/$1.5 | 0.10× || small | ≤ 40 | claude-haiku-4-5 | $1/$5 | 0.30× || standard | ≤ 70 | claude-sonnet-5 | $2/$10 | 0.67× || premium | ≤ 90 | kimi-k3 | $3/$15 | 2.00× || flagship | ≤ 100 | claude-opus-5 | $5/$25 | 5.00× | complexity is a heuristic score from 0–100 over the prompt: length, whether itcontains code, whether it asks for multiple steps, analysis or creative writing,and how long the conversation already is. It is a heuristic and it is worthknowing that, but it is the same one the live path uses — not an approximation ofit. ## What each tier is actually for - nano — classification, routing, extraction, yes/no, tagging, short rewrites, "is this spam". Anything where the answer is short and the judgement is shallow. If you are calling a model in a loop over rows, start here.- small — summarisation, straightforward Q&A over supplied context, format conversion, commit messages, simple tool selection. The workhorse for anything where the context does the work and the model only has to be careful.- standard — most user-facing chat, most agent turns, code that fits in a file, multi-step tool use with a clear plan. This is the default you should be arguing yourself *up* from, not down to.- premium — genuine reasoning over a large context, hard debugging, design work with real trade-offs, long multi-file changes.- flagship — the tasks where a wrong answer costs more than the call. Use it deliberately, per call site, and be able to name why. ## The procedure 1. Write the task down in one sentence. If the sentence contains "classify", "extract", "label", "route" or "reformat", you are in nano or small and you are done.2. Ask what a wrong answer costs. Cheap to detect and cheap to fix (a draft a human reads, a retry, a suggestion) argues down a tier. Expensive and silent (a migration, a payment, a customer-visible claim) argues up.3. Try the cheap tier on twenty real inputs, not on the one you invented. Cheap models fail differently: they do not produce slightly worse prose, they miss an instruction or drop a field. Diff the outputs on the failure you care about, not on taste.4. Set a ceiling rather than a model wherever you can. "auto" plus a plan ceiling means the easy 80% of traffic lands cheap without anyone tuning anything, and hard requests still reach a capable model.5. Spend the saving on the prompt. A cheaper model with an explicit, well-structured prompt beats a flagship on a vague one, and costs a twentieth as much. See cost-aware-system-prompts. ## Verify before you spend POST /api/gateway/v1/route-preview answers "what would the router do withthis?" without running inference. It is unauthenticated, writes nothing, and usesthe same selectModel() and the same price registry the live path uses — so theanswer is the decision, not a simulation of it. ```bashcurl -s https://www.lobstack.ai/api/gateway/v1/route-preview \ -H 'Content-Type: application/json' \ -d '{"prompt":"Label this ticket: billing, bug, or feature request.\n\n…", "requested_model":"claude-opus-5", "plan_tier":"developer", "expected_output_tokens":8}'``` ```json{ "object": "routing_preview", "complexity": 12, "tier": "nano", "routed": true, "reason": "Trivial query → nano tier", "model": { "key": "gemini-3.1-flash-lite", "provider": "google", "price_per_mtok": { "input": 0.25, "output": 1.5 } }, "token_estimate": { "input": 31, "output": 8, "estimated": true }, "cost_usd": 0.0000198, "baseline": { "model": "claude-opus-5", "cost_usd": 0.000355, "saving_usd": 0.000335 }}``` Two honesty notes that matter when you quote these numbers: - token_estimate.estimated is true. It is roughly four characters per token, and the output length is unknowable before generation — pass expected_output_tokens when you know your own shape. The billed figure always comes from the provider's usage block on the real request.- baseline is null on an "auto" request. There is nothing to compare against when nobody named a model, and inventing a flagship comparison is how every savings claim in this category gets manufactured. ## The ceiling is a structural cap Plans carry a tier ceiling, and the router never exceeds it — so cost control isa property of the configuration rather than something to catch in review: | plan | price | meter | included | tier ceiling || --- | --- | --- | --- | --- || Free | $0/mo | spend | $1 of model spend | standard || BYOK | $19/mo | requests | 100,000 requests | flagship || Developer | $29/mo | spend | $10 of model spend | flagship || Studio | $99/mo | spend | $35 of model spend | flagship || Scale | $299/mo | spend | $120 of model spend | flagship | The effective ceiling is the lower of the model you asked for and your plan's.Naming a nano model on a flagship plan caps you at nano, which is the correctbehaviour and occasionally a surprise. ## Do not - Do not pick a model because it was in the example you copied.- Do not benchmark on one hand-written input.- Do not use "auto" and then quote a saving against a flagship. Nobody asked for the flagship; see lobstack-receipts, rule 2.- Do not assume cheap means fast or dear means slow. They are unrelated; measure p95 separately.
Read a Lobstack receipt
Read the receipt Lobstack returns on every model call — cost_usd, savings_usd, baseline_reason — and report cost from it instead of estimating. Use when a response carries x_lobstack or an x-lobstack-* header, when asked what a call or a run cost, or when a cost renders as $0.00.
lobstack-spend-budgetKeep an agent inside a budget
Hold an agent, job or run inside a hard dollar budget using the per-call cost the Gateway returns, and handle the 402 when an allowance runs out. Use when building an autonomous loop, when asked to cap spend on a task, or when a Gateway call returns 402 Payment Required.
cost-aware-system-promptsWrite a cost-aware system prompt
Write or review a system prompt that does not quietly multiply the bill — bounded output, no re-sent bulk, tool schemas counted as the input tokens they are. Use when authoring or reviewing a system prompt, when cost per turn is climbing, or when adding tools to an agent.


