◉CLAUDE LABJP
●2.1.301 — Adds the vim % motion, LaTeX math rendering in the VS Code panel, and a retry-watchdog limit for usage-limit waits (10/15)●2.1.299 — Conversations over 200K tokens left idle about 54 minutes get compacted; MCP allow rules now match only the server they name●SONNET 4.5 — Retires on the Claude API on 11/30, 45 days left. Migrate to Sonnet 5.5●WINDOWS — Reports say hooks break silently only on Japanese-locale Windows; check the character encoding first●FAST MODE — Opus 5.5 fast mode is out of research preview and no longer needs the beta header (10/15)●NEW — I Put a Ten-Line Promise File at the To…●2.1.301 — Adds the vim % motion, LaTeX math rendering in the VS Code panel, and a retry-watchdog limit for usage-limit waits (10/15)●2.1.299 — Conversations over 200K tokens left idle about 54 minutes get compacted; MCP allow rules now match only the server they name●SONNET 4.5 — Retires on the Claude API on 11/30, 45 days left. Migrate to Sonnet 5.5●WINDOWS — Reports say hooks break silently only on Japanese-locale Windows; check the character encoding first●FAST MODE — Opus 5.5 fast mode is out of research preview and no longer needs the beta header (10/15)●NEW — I Put a Ten-Line Promise File at the To…
Articles/API & SDK
⬡ API & SDK/2026-05-25Advanced

A Two-Tier Setup — Haiku 4.5 Orchestrator with Opus 4.6 Worker for Balancing Cost and Quality

An indie developer's two-tier setup — Haiku 4.5 as orchestrator, Opus 4.6 as worker — costed line by line against published rates, plus the price increase I planned around that never arrived and the tokenizer split that quietly moves every token-denominated threshold.

claude-api83haiku3opuscost-optimization31agent-orchestrationindie-development3

✦ Premium Article

One morning, while scrolling through Anthropic's billing dashboard, I paused on a line that surprised me. "Do I really need to send all of this to Opus?" As an indie developer I run a daily batch of long-form generation jobs. That billing line was the first time the per-token cost difference between models hit me as a real number tied to my own decisions.

The pattern I want to walk through here is what I call a two-tier setup: Haiku 4.5 sits on top as the orchestrator, and Opus 4.6 is called underneath as a specialist worker. The cheaper model leads, and the expensive one is called only when the work warrants it. That ordering may feel backwards at first — surely you want the smartest model to decide who does what? — but in my experience that mental flip is exactly where the savings live. The rest of this article unpacks the numbers, the routing criteria, the code I run in production, and the failure modes I tripped through on the way.

Why Put the Orchestrator on Haiku

The natural instinct is "let the smartest model route, let the cheap model do the work." I tried that first. The problem is that when Opus 4.6 acts as the router, its judgment latency and per-token cost compound, and once you measure things per 1M tokens, the routing layer can end up costing more than the actual production work it's dispatching.

Orchestration work is, structurally, short-context structured output. You care less about creative prose than about stable JSON returning the same schema every time. Haiku 4.5 is excellent at exactly this. Opus, by contrast, earns its keep when there's a long context to absorb and a creative or multi-hop output to write. Use each model where its shape fits.

It is the same division of labor as marking the timber and shaping it: the tool you use to judge the work is not the same as the tool you use to do it. Once I pulled the router out as a judgment-only model, I could finally tell whether a swing in output quality came from the decision layer or the generation layer.

Real Cost Breakdown — Counting Against Published Rates

Prices move, so I'll state the rates I'm using: these are the published rates as of September 2026. The token volumes come from my own operational logs.

ModelInputOutput
Claude Opus 4.6$5 / MTok$25 / MTok
Claude Sonnet 4.6$3 / MTok$15 / MTok
Claude Sonnet 5$2 / MTok$10 / MTok
Claude Haiku 4.5$1 / MTok$5 / MTok

This section used to carry a different set of numbers: "Opus-only runs about $15 per 1M blended, the two-tier setup about $4.50 per 1M." Reading it back, that was a comparison shaped to flatter the conclusion. In long-form generation, output tokens dominate — and output is priced at five times input. Blend them and every model's number becomes the price of an imaginary workload that happens to be half input, half output.

The unit for comparing cost isn't $/MTok. It's one of your own jobs. Counting input and output separately, the reduction is 59.6%, not the 70% I had been claiming. The line items are in the monthly estimate further down.

The 30% escalation figure isn't theoretical — it's what I measured across a hundred jobs' worth of routing logs in my own batch. The remaining 70% is handled by Haiku itself, sometimes via a lightweight downstream tool call, without ever invoking Opus.

At indie scale, that difference converts directly into attempts. Every dollar shaved off the unit cost widens the margin for experiments that don't work out.

Looking at the numbers alone, you might ask why not just go Haiku-only. I tried that. For my use case, the quality gap was not negligible — Opus produces noticeably better logical flow, more nuanced code examples, and cleaner structural choices on long-form output. Keeping Opus reachable, but only when warranted, was the right call for holding the quality bar. For choosing between the models themselves, I laid out task-by-task criteria in Claude Sonnet 4.6 vs Opus 4.6.

✦

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
✦A line-item monthly bill for 480 jobs at published rates, showing the real reduction is 59.6% and that a single line — Opus output tokens — accounts for 66% of the total
✦Five concrete criteria the orchestrator uses to decide when to escalate to Opus, written as a JSON-only system prompt with working Python code
✦Three operational pitfalls pulled from real router logs, each paired with the fix that stopped it
✦Why the September 1st Sonnet 5 increase never happened, and how the tokenizer generation split (~30% more tokens for the same text) changes the middle-tier math in a way the price table never shows
Secure payment via Stripe · Cancel anytime
✦

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

Related Articles

⬡ API & SDK2026-09-07
A 75% cheaper cache read moved one bill by 29% and another by 2.8%
Fable 5.1 and Mythos 5.1 changed the cache read multiplier from 0.1 to 0.025. Here is how to estimate your own saving from your token mix, and how to fix code that hard-codes the multiplier.
⬡ API & SDK2026-05-13
Design Decisions Every Indie Developer Faces When Integrating Claude API into Mobile Apps
The design decisions indie mobile developers hit when integrating Claude API — model selection, async UX, context management, offline resilience, and cost control — with working code and a per-user cost table recalculated for the September 2026 price change.
⬡ API & SDK2026-05-05
The Real Cost of Claude API Extended Thinking in Production — ROI Data by Task Type
Three months of measured cost, quality, and speed data for Extended Thinking across five task categories. Learn exactly when extended thinking is worth it—and when it's not.