<p>We shipped five releases in under two weeks. None of them is a headline-grabber on its own — no new subsystem, no grand feature. But together they tell a story about what we think a daily-driver tool owes you: it should clean up after itself, fail loudly never and quietly never, and keep pace with a model landscape that refuses to sit still. Here's the sum of it, with the why behind each piece.</p><h2>Why these releases</h2><p>Three things prompted this run. First, we noticed that adopting things in Elyra was easy but <em>un</em>-adopting them wasn't — extensions went in with two keystrokes and came out with homework. Second, a few of you reported battery and memory concerns, so we measured instead of guessing. And third, a genuine bug: everyone logged in with a Claude subscription suddenly hit a cryptic 400 error. That one taught us something about our own request anatomy, and the fix is a nice little story.</p><h2>Uninstall is now as easy as install (0.9.27)</h2><p>The <code>/ext</code> browser used to be a one-way door: space to mark, enter to install. Removing an extension meant leaving your session and typing <code>elyra remove npm:@elyracode/...</code> from memory. Friction like that means cleanup never happens.</p><p>Now space toggles the change you <em>want</em>: <code>[x]</code> to install something you don't have, <code>[-]</code> (in red) to remove something you do. Enter applies the whole batch:</p><pre><code class="language-text">Extensions  (1 to install, 2 to remove)

    [x]   lsp-rust        Rust LSP: go-to-definition, diagnostics
  → [-] ✓ anna            Presentations: slides, terminal demos
    [-] ✓ youtrack        YouTrack: issues, comments, tags
    [ ] ✓ laravel         Deep Laravel understanding

  ✓ = installed · space marks [x] install / [-] remove
</code></pre><pre><code class="language-text">Installed @elyracode/lsp-rust. Removed @elyracode/anna, @elyracode/youtrack.
Run /reload to apply the changes.
</code></pre><p>One mental model, one keypress, one pass.</p><h2>Find your forgotten sessions (0.9.27)</h2><p>When we investigated the battery reports, the data surprised us: an idle Elyra uses essentially zero CPU. The real cost was <em>forgotten</em> instances — sessions started in a tmux pane days ago, each quietly holding a few hundred megabytes, sometimes with a language server or headless browser still attached.</p><p>So we built visibility instead of guesswork:</p><pre><code class="language-text">$ elyra doctor resources

Running Elyra instances:

  PID 48213   up 2h 14m   CPU 3m 12s   mem 310 MB
    └─ intelephense (PHP LSP)           mem 145 MB
  PID 17902   up 3d 6h    CPU 1m 44s   mem 288 MB   ⚠ looks forgotten
    └─ chromium (headless)              mem 412 MB

⚠ If you no longer need it:  kill 17902
</code></pre><p>No automatic killing, no magic — just the list. Seeing it once is usually enough to build the habit.</p><h2>The 400 error that counted to five (0.9.29)</h2><p>If you logged in with Claude Pro/Max OAuth, you may have hit this:</p><pre><code class="language-text">Error: 400
"A maximum of 4 blocks with cache_control may be provided. Found 5."
</code></pre><p>Here's the anatomy: Anthropic allows four prompt-cache markers per request. We place them strategically — system prompt, last tool definition, first and last user message. That's four. But OAuth requests include an extra identity block, and it carried a marker too. Five. Boom.</p><p>The fix is satisfying because it costs nothing: prompt caching is <em>prefix-based</em>, so a marker on the system prompt already covers every block before it. The identity block's marker was pure waste. We removed it, added a regression test that counts markers across the whole payload, and shipped the hotfix same-day. Your cache hit rate is unchanged; the 400 is gone.</p><h2>Warnings that respect you (0.9.30)</h2><p>Speaking of subscription auth: Elyra warns you that third-party usage draws from Anthropic's paid extra usage rather than your plan limits. Useful information — exactly once. It used to reappear every single session, because the "already shown" flag lived in memory.</p><p>Now it's persisted per install. You get the heads-up once, and then your tool trusts that you read it. (The <code>warnings.anthropicExtraUsage: false</code> kill switch still exists if you want total silence.)</p><h2>Keeping pace with the models (0.9.28–0.9.31)</h2><p>The model world didn't pause while we did housekeeping, and the registry kept up:</p><ul><li><p><strong>Grok 4.6</strong> landed — first as a rumor we checked and couldn't confirm, then for real days later. $2/$6, 500K context. It's now the xAI default.</p></li><li><p><strong>GLM 5.3</strong> arrived on <a target="_blank" rel="noopener noreferrer nofollow" href="http://z.ai">z.ai</a>'s coding plan with a 1M context window, and is now the zai default.</p></li><li><p><strong>Gemini 3.7 Flash</strong> joined on Google, Vertex, and gateways — a strong candidate for the cheap tier in smart routing at $0.75/$3.75.</p></li><li><p>Google retired the Gemini 2.0 series, Cloudflare's gateway dropped its legacy catalog, and prices moved (GLM 5.2 down ~60%, kimi-k3 on Copilot up 3–4x — check your pinned tiers).</p></li></ul><p>And a small vanity fix along the way: the OAuth callback page in your browser now greets you with the Elyra constellation instead of a leftover placeholder logo. Details matter.</p><h2>Get it</h2><pre><code class="language-bash">elyra update
</code></pre><p>Then try <code>/ext</code> and mark a <code>[-]</code> or two, run <code>elyra doctor resources</code> and see what you find, and enjoy logging in without arithmetic errors.</p>