Turning the Dial to Eleven - Elyra v0.8.4
Two releases ago, we added Claude Opus 4.8. One release ago, we fixed how it thinks. Today, we let you control how hard it thinks — all the way up to a new setting called ultracode.
This is a small release with an interesting story about mapping mismatches.
The new dial
When Opus 4.8 shipped, it came with a wider thinking range than its predecessor. Where Opus 4.7 topped out at xhigh, Opus 4.8 added two more levels above it:
Faster Smarter
──────────────────────────────▲────────────┆──────────────────
low medium high xhigh max ultracode
ultracode is the new ceiling. The most reasoning Opus 4.8 will do. Maximum judgment, maximum independence, maximum time spent thinking before acting.
The problem: Elyra's thinking control only has five settings.
The mismatch
Elyra exposes thinking as five levels: minimal, low, medium, high, xhigh. That worked fine when Anthropic's models had a matching range. But Opus 4.8 has six effort levels:
Elyra: minimal low medium high xhigh
Opus 4.8: low medium high xhigh max ultracode
Five knob positions, six destinations. Something has to give.
Our first instinct was to map the top of Elyra's scale to the top of Opus's scale and leave the rest alone:
high → max
xhigh → ultracode
But then we looked closer at our own defaults and noticed something. Elyra's minimal and low both mapped to the same Opus effort (low). Two distinct knob positions doing the exact same thing. Wasted slots.
As the maintainer put it: "we have minimal and low, we don't need both."
The fix
If minimal and low are redundant at the bottom, we can collapse them and spread the rest across the full range. That frees up enough positions to reach every meaningful Opus 4.8 effort:
minimal → low
low → medium
medium → high
high → max
xhigh → ultracode
Now every Elyra thinking level maps to a distinct Opus 4.8 effort. Crank the dial to xhigh and you get ultracode — the smartest setting Anthropic offers. Dial it down and you get progressively faster, cheaper responses.
In practice:
/settings → Thinking level → xhigh
Or set it for a single hard problem:
> Refactor the entire auth system to use passkeys. Take your time.
With thinking at xhigh, Opus 4.8 runs at ultracode — it'll reason longer, plan more carefully, and work more independently before producing the change.
For a quick lookup, dial it down:
/settings → Thinking level → minimal
That maps to low effort — fast, cheap, good enough for "what's the syntax for a PHP match expression again?"
The part where the SDK lagged
Here's a recurring theme in these model-day releases: the official SDK types are always a step behind the actual API.
When we went to add ultracode, the Anthropic SDK's type for effort levels was:
effort?: 'low' | 'medium' | 'high' | 'xhigh' | 'max' | null;
No ultracode. Just like a few days ago, when xhigh wasn't in the types either. The API supports it, the announcement mentions it, but the published TypeScript definitions haven't caught up.
We'd already solved this once with a targeted type cast for xhigh. This time we generalized it so it handles any effort value the SDK doesn't yet know about:
const sdkKnownEfforts = new Set(["low", "medium", "high", "max"]);
params.output_config = sdkKnownEfforts.has(options.effort)
? { effort: options.effort as "low" | "medium" | "high" }
: ({ effort: options.effort } as unknown as NonNullable<
MessageCreateParamsStreaming["output_config"]
>);
If the SDK knows the effort value, we pass it through with proper typing. If it doesn't — xhigh, ultracode, or whatever comes next — we cast around the stale types. When the SDK catches up, the cast becomes a harmless no-op. No more one-off patches for each new effort level.
Why we ship these so fast
This is the fourth release in three days that touches Opus 4.8. Add the model. Fix the thinking mode. Add the effort level. Refine the mapping.
That cadence isn't chaos — it's the point. When a frontier model ships, the details emerge over days: which effort levels exist, how thinking is configured, what the SDK supports. A monolithic agent locked to quarterly releases would make you wait. Elyra ships the moment we learn something new.
Each of these was a few lines of code, a passing npm run check, and a publish. The infrastructure is built so that following a fast-moving model is a small, repeatable operation rather than a project.
Get it
npm install -g @elyracode/coding-agent@0.8.4
Set your thinking level to xhigh and you're running Opus 4.8 at ultracode. Or leave it at the default and let adaptive thinking decide.
Full changelog: v0.8.4