Some UX stuff for ya
We're starting the week in good style by adding some nice additions and improvements.
Chat scrollbar
This is it, the chat just got a scrollbar! This should make your life easier on navigation long session. You can now see exactly where you are when scrolling.
It's possible to adjust the behavior with a setting: options.tui.scrollbar.
default(hides after 2 seconds)alwaysnever
Screen.Recording.2026-05-26.at.17.33.18.mov
Herdr Support
Have you been wanting to use herdr.dev for all your agent management needs? Well now its even better! @taciturnaxolotl merged support for agent status signaling so now herdr can pick up on the status of crush and send you notifications when it is blocked or finished!
Lower CPU usage
Crush could use too much CPU when streaming thinking traces and showing them for you. @taciturnaxolotl worked through an optimization and that's now fixed!
Fix possible deadlock on startup
If you happen to have a model ID in your config that does not exist anymore (was removed from the providers), Crush could lock when booting and not start at all. This bug was addressed.
Images and your session
This is another fix to prevent your session from breaking when you switch to a non-vision model but your session already has images. We're going to skip the images so your session keep working.
That's all!
Charm
Changelog
New!
- b39a85e: feat(herdr): add herdr socket integration (@taciturnaxolotl)
- b72f9aa: feat(ui): add scrollbar to chat view (#3018) (@andreynering)
- db8add7: feat(ui): allow expanding toolcall names (@taciturnaxolotl)
Fixed
- f75435a: fix(agent): fall back to first reasoning level when default is unset (#3218) (@syf2211)
- d3d6804: fix(agent): prevent session bricking when non-vision models receive tool result media (@taciturnaxolotl)
- a08e332: fix(bash): keep TruncateOutput from splitting UTF-8 characters (@feizhuzheng)
- 1535ebb: fix(config): prevent stale ReasoningEffort from leaking across providers (#3209) (@huaiyuWangh)
- d4dc84e: fix(config): prevent startup deadlock when configured model ID is invalid (@taciturnaxolotl)
- 188dea6: fix(fsext): DirTrim renders wrong character for non-ASCII directory names (#3214) (@feizhuzheng)
- a07d304: fix(hyper): refresh hyper oauth token before fetching credits (#3212) (@andreynering)
- a1b19eb: fix(prompts): unindent heredoc (@taciturnaxolotl)
- a9e3a57: fix(shell): skip persistence when session no longer exists (@syf2211)
- 3a99992: fix(ui): ansi.truncate instead of byte slicing in todos (@taciturnaxolotl)
- 9c61c7d: fix(ui): use ansi.truncate everywhere (@taciturnaxolotl)
- 3295a08: fix: cache streaming thinking renders to avoid CPU burn during long reasoning traces (@taciturnaxolotl)
Other stuff
- 5c934c3: chore: auto-update files (@charmcli)
- f645040: chore: auto-update files (@charmcli)
- fcccdfe: chore: auto-update files (@charmcli)
- 358d75d: chore: regen golden files (@taciturnaxolotl)
Verifying the artifacts
First, download the checksums.txt file and the checksums.txt.sigstore.json file files, for example, with wget:
wget 'https://github.com/charmbracelet/crush/releases/download/v0.81.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.81.0/checksums.txt.sigstore.json'Then, verify it using cosign:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--bundle 'checksums.txt.sigstore.json' \
./checksums.txtIf the output is Verified OK, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum:
sha256sum --ignore-missing -c checksums.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.

{ "options": { "tui": { "scrollbar": "default" // default, always, never } } }