<p>Some releases add buttons. This one changes a single line of configuration — the default model — and that quiet change is the most consequential thing we've shipped in a while. Here's the story of v0.9.12: why we moved the default to Claude Sonnet 5, how the smart router now uses it, and what it means for your day-to-day work.</p><h2>The news: Sonnet 5 landed</h2><p>Anthropic released <strong>Claude Sonnet 5</strong> on June 29. We verified it the boring, trustworthy way — straight against Anthropic's own <code>/v1/models</code> endpoint and a live "say pong" round-trip — before touching anything. It's real, it's <code>claude-sonnet-5</code>, and as of this release it's in Elyra's registry.</p><p>The specs that matter:</p><p>Old default (Opus 4.8) New default (Sonnet 5) Context window 200K <strong>1,000,000</strong> Thinking adaptive adaptive Input text + image text + image Price (per 1M, in/out) premium Opus tier <strong>$2 / $10</strong></p><p>For comparison, the previous Sonnet (4.5) was $3/$15. Sonnet 5 is <em>cheaper than the Sonnet it replaces</em> while being Anthropic's newest model — and it carries a full million tokens of context. That combination is exactly why it deserves to be the default.</p><h2>Why change the default at all?</h2><p>A default model is a quiet promise: "when you don't tell me otherwise, this is what runs your work." For a long time that promise was Opus — the heavyweight. Opus is wonderful, but it's expensive, and most of what a coding agent does all day isn't heavyweight: reading files, running greps, writing a test, applying a straightforward edit. Paying Opus prices for grep is like taking a limousine to the mailbox.</p><p>Sonnet 5 changes the math. It's strong enough to be the everyday default, priced so that an afternoon of agent work doesn't make you wince, and roomy enough (1M context) to hold a real chunk of your codebase in one session. So we moved the default — for both the Anthropic API and Amazon Bedrock (<code>us.anthropic.claude-sonnet-5</code>).</p><p>You don't have to do anything. Update, and your next session quietly runs on a newer, cheaper, longer-context model.</p><h2>How: the smart router does the interesting part</h2><p>Here's the piece I'm most happy about. Changing the default is half the story; the other half is <em>when</em> to reach for more power.</p><p>Elyra's smart router classifies each turn into a tier — <code>fast</code>, <code>balanced</code>, or <code>powerful</code> — based on what's actually happening (read-only tools, file edits, errors, long conversations, complex keywords). In v0.9.12, the <code>powerful</code><strong> tier is now pinned to </strong><code>claude-sonnet-5</code><strong> by default.</strong></p><p>So the flow becomes:</p><ul><li><p>Mechanical turns (reading, searching) → a cheap fast-tier model.</p></li><li><p>Ordinary work → balanced.</p></li><li><p>The genuinely hard turns — a refactor, a tricky bug, an architecture decision → <strong>Sonnet 5</strong>, with its big context and adaptive thinking.</p></li></ul><p>You can preview exactly what it'll do:</p><pre><code class="language-text">/route

Next turn: powerful — "complex keywords in user message"
  fast:     z-ai/glm-5.2
  balanced: claude-sonnet-5
  powerful: claude-sonnet-5  (pinned)
</code></pre><p>And watch the effect on spend:</p><pre><code class="language-text">/cost
  ... burn rate: $0.40/hr
</code></pre><h3>It's a default, not a cage</h3><p>This is the part that keeps it friendly. The pin is a <em>default</em>, and it bends to you:</p><ul><li><p><strong>Your settings win.</strong> If you set your own <code>smartRoutingModels</code>, your choice overrides the default, per tier: </p><pre><code class="language-jsonc">"smartRoutingModels": {  "powerful": "claude-opus-4-8"   // prefer Opus for the hard stuff? done}
</code></pre></li><li><p><strong>It fails safe.</strong> The pin only takes effect if <code>claude-sonnet-5</code> is actually available to you. If you don't have Anthropic configured, the router quietly falls back to its normal heuristic ranking among the models you <em>do</em> have. No broken sessions, no "model not found" surprises. We resolve the pin against your real model registry, so an absent model simply isn't pinned.</p></li></ul><p>That's the design rule we hold to: smart routing decides the <em>tier</em>, you decide the <em>model</em> — and sensible defaults fill the gap when you haven't.</p><h2>A small note on what <em>didn't</em> land</h2><p>While we were in the model registry, we also re-checked <strong>Claude Fable 5</strong>. Still export-control blocked for us (<code>404: not available, use Opus 4.8</code>) — it's listed in Anthropic's catalog but gated. Sonnet 5 is not affected by that restriction, which is part of why it's a safe model to build a default around. We'll keep watching Fable; the moment access opens, it already resolves from our registry with no code change.</p><h2>The takeaway</h2><p>v0.9.12 has an almost-empty feature list and an outsized effect. The default model is now newer, cheaper, and roomier; the smart router reaches for it precisely when the work is hard and rations cheaper models the rest of the time. The net result is the nicest kind of upgrade — you do nothing, your sessions get better, and your invoice gets smaller.</p><pre><code class="language-bash">npm install -g @elyracode/coding-agent@0.9.12
elyra            # already running on claude-sonnet-5
/route           # see the tiers
</code></pre><p>That's the whole release: one default, chosen carefully, doing a lot of quiet good.</p>