⚡ Claude Terminal v1.3.4
Opus 5.5, a picker that keeps itself current, and about a gigabyte back on a window you leave open.
The headline
🧠 Opus 5.5, and a picker that followsThe primary tier comes from the CLI, so it already followed upgrades. Three lists did not, and a model missing from one of them is not rejected - an automation configured on it silently ran on the inherited model instead. The catalog is also pushed now, so a tab opened before the CLI answered stops naming the model the previous one knew about. |
🪶 ~1 GB back after four daysA detached transcript entry is still a full Blink tree with its listeners. Measured here: 34 118 bytes each, against 1 017 held as its own markup. The far side of the pruned window is now a string, rebuilt on the way back - 33x smaller per message, and roughly 1 GB of the 2.19 GB seen on a window left open four days. |
🎚️ Change the model mid-turnThe composer queues your next message and the permission-mode picker stays live, but the two beside them were simply dead. They work now: the pick is held, not refused, applied when the turn ends, and the chip says so until it lands (#217). |
🖥️ GPU terminal rendering can be turned offFor the drivers that leave ghost characters behind or draw the caret a column away from the text. |
📊 The usage tools were answering into the void
usage_get read a file nothing wrote, and usage_refresh dropped a request into a directory nothing watched - then reported that data would be updated shortly. Both ends are connected now, and what the tool prints stopped overstating what it knows (#211).
| What was wrong | |
|---|---|
| No data, ever | The figures live in an in-memory map in the main process and the MCP server is a separate process. UsageService now mirrors the focused account to usage.json, and watches the trigger directory it was already being written to
|
| A shape that does not exist | The tool probed for tokensUsed / tokenLimit / planType. The API reports a limits array of utilization percentages, so the tool's own description promised something nothing could supply
|
| Confident about the wrong account | A fetch for a background account republished the focused account's untouched entry, which rendered as "No limits reported for this account." The mirror is written only for the account it describes |
| Stale figures looked current | Staleness was a flag snapshotted at write time, and the poller stops when the window is minimised. It is derived from the age of the last fetch as well |
| 137% read as 100% | The printed percentage was clamped along with the bar, hiding exactly the case worth seeing |
🔑 The usage chip could go quiet for the rest of the session
UsageService caches a credential-store read so it does not reopen the store on every tick - on macOS each read can raise a Keychain dialog. The interval was Infinity, so one transient failure parked the account permanently: an expired token between two CLI rotations, a 401, a store that threw. No fetch was attempted again, and only restarting the app or clicking the chip escaped it (#213).
- The wait is now 5, 10, 20, 40, then 60 minutes. A usable token clears the ladder, an explicit refresh restarts it, an account switch resets it
- After eight consecutive failures the automatic retry stops rather than reopening a refused store every hour forever, which on macOS is a password prompt behind the window roughly two dozen times a day
- The tooltip names the next attempt, and says when there is not going to be one. "Waiting until 14:05" and "broken" were indistinguishable
Everything else
- Opus 5 moves to "More models", following the CLI, and stays selectable everywhere it already was - existing automations name it
- The Files viewer reads markdown three ways: rendered, source, and the session's diff when it touched the file. Plus a reload button, since the pane holds no cache and a repaint is a reload
- GPU terminal rendering is a setting, and the glyph atlas is re-cut when the font stack resolves after first paint or when the font size changes - both of those used to leave every cell drawn on the old advance widths
- "Open in editor" did nothing, everywhere in the app.
spawnraises a missing binary asynchronously, and the handler had already answered{ success: true }; the preload bridge wassend, which discarded the answer anyway. A macOS editor whose command-line shortcut was never installed - the default for VS Code - is now found through its bundle (#216) - "Reference in chat" needed a chat tab to already be focused, which it rarely is from the Files screen, and it attached to whatever tab was active regardless of which project you were browsing
- Rendered markdown in the Files pane used the browser's typography. The pane emitted a class no stylesheet defines
- An "Enhanced" prompt scrolled far enough back lost its original text for good. The badge bound its own listener, and a listener does not survive an entry being rebuilt from markup - the exact case the serialization allowlist exists to prevent
- A filtered table came back filtered but with an empty search box, because
outerHTMLkeeps attributes and drops properties, and the two halves of that feature sat on opposite sides of the line - A spinner stayed frozen after the conversation scrolled past it and back (#215)
- Changing the model twice in one turn reported a switch that never happened, and a failed switch returned to a model the session had never run
- A message queued behind a model change was handed to the CLI before the change reached it, so the next turn ran on the model you had just moved away from
- The notification toast was clipped, because the window was sized independently of the card it draws
- The release is created once, before anything builds. Each build job ran
electron-builder --publish always, and electron-builder creates the release itself when it finds none for the tag. Four jobs starting in the same second all found none and two created one: v1.3.3 produced two drafts with the assets split between them, so each updater manifest described half the build. Arelease-readyjob now fails the run if a second release appears or any expected asset is missing - The Agent SDK moves to 0.3.280, which is what makes Opus 5.5 reachable at all - the CLI's model list is compiled into the platform binary it ships
🙏 Thanks
| @bleleve | Four commits and the two largest pieces of this release: the transcript memory work, measured properly rather than guessed at, and the Opus 5.5 catalog plumbing. Plus both halves of the usage story - the tools that never reached the app, and the chip that could not recover from a single refused credential read |
📜 Full changelog, 17 commits
feat(models) add Opus 5.5, demote Opus 5, and push the catalog when it lands
perf(chat) hold the far side of the pruned transcript as markup
fix(chat) let a pushed catalog repaint a conversation, not redirect it
fix(chat) stop the flattened transcript from dropping live state
fix(chat) keep a parked model or effort pick in step with the session
fix(chat) unpause a spinner before forgetting it was detached
fix(terminal) re-cut the glyph atlas, and let the GPU renderer be turned off
fix(usage) let the titlebar chip recover from a refused credential store
fix(usage) give the token backoff a terminal state, and one retry story
fix(mcp) make the usage tools reach the app at all
fix(mcp) stop the usage tool stating things that are not true
fix(files) close the three gaps left in the editor and viewer fixes
fix(notifications) size the window to the card it renders
style(i18n) use a colon in the task-complete notification
ci(release) create the release once, before the builds race to it
docs correct the CI section, which described a matrix that is gone
chore(release) 1.3.4
Windows Claude-Terminal-Setup-1.3.4.exe · macOS .dmg (Apple silicon & Intel) · Linux .AppImage