LSP tools, scrollable sidebar, removable attachments + more
Hey all. We're starting the week in style by shipping some LSP stuff and more goodies.
Brand new LSP tools
These new LSP tools will allow the model to more accurately do some refactors:
lsp_rename- Rename a symbol and all its references in the projectlsp_replace_symbol- Replace, insert before/after, or delete an entire function/method/class by name
If something doesn't work as expected by the LSP, don't worry. We'll report an error to the model so it can fallback to using the edit tool.
Scrollable sidebar
This one is pretty cool. Got out-of-space in your sidebar? Don't worry, you can scroll its content now!
Keyboard:
- When focused on the chat view: l or right arrow focuses on the sidebar
- j/k or up/down arrow scrolls up and down
- g scrolls to top shift+g scrolls to the bottom
- h or left arrow focuses back on the chat view
- tab always returns focus to the editor
Removable attachments
It's now possible to remove attachments with your mouse! Just click on the X button:
Better Hyper OAuth
When authentication on Charm Hyper ™️ or GitHub Copilot you can now press u to copy the URL. This is needed for certain scenarios, like when using Crush over SSH, where it might not be possible to open the browser automatically.
Quit dialog hint
When rendering the quit dialog, we're now showing an hint that it's possible to skip the confirmation completely by simple pressing ctrl+c twice.
Agent fixes
- Reasoning effort level
noneis now working for Baseten models - Thinking blocks are now rendering for MiniMax M3 via OpenCode (thanks @marifcelik)
That's all for today. Keep crushing!
Charm
Changelog
New!
- cd8c06c: feat(lsp): add 4 new lsp tools (@taciturnaxolotl)
- 17ad5c7: feat(lsp): add LSP superpowers tools (@taciturnaxolotl)
- 7eca7a0: feat(lsp): fancy diff view renders (@taciturnaxolotl)
- 8ad59d2: feat(lsp): update system prompt to recommend lsp tools (@taciturnaxolotl)
- f8d855d: feat(ui): add scrollable sidebar with focus-based navigation (@meowgorithm)
- f413c9a: feat(ui): auto expand reasoning dialog based on count (#3332) (@taciturnaxolotl)
- f604d98: feat(ui): clickable ✕ remove button on attachment chips (@joestump)
- 4244f52: feat(ui): scroll sidebar with mouse wheel when focused (@meowgorithm)
- 0479987: feat(ui): scroll sidebar with mouse wheel when focused (@meowgorithm)
- 79eedf7: feat(ui): show g/G shortcuts in sidebar full help (@meowgorithm)
- d500764: feat(ui): widen sidebar to 32 cells and reserve scrollbar column (@meowgorithm)
- 3446255: feat: add --all and --crawl-dir modes to stats subcommand (#2811) (@taciturnaxolotl)
- 12e9677: feat: add keybinding and logic to copy verification URL in OAuth dialog #3323 (#3324) (@biisal)
- a02a980: feat: on quit dialog, add hint on how to skip confirmation (#3356) (@andreynering)
- 8db5733: feat: recover cleanly from mid-stream provider connection resets (@taciturnaxolotl)
Fixed
- 1be8408: Review fixes: attachment remove button (hidden clicks, mouse button, chip spacing) (#158) (@meowgorithm)
- 001a2f8: fix(agent): preserve attachment chips in user messages after sending (@joestump)
- aca4087: fix(baseten): fix "none" reasoning level (#3386) (@andreynering)
- 461976d: fix(commands): scope logout command to oauth providers (@taciturnaxolotl)
- 55b2f0d: fix(config): prevent data race when reading config during reload (#3362) (@taciturnaxolotl)
- b9a1182: fix(lsp): add word boundaries to symbol grep and validate against LSP (@taciturnaxolotl)
- 07044a9: fix(lsp): fix TrackConfigured startup race and relative path resolution (@taciturnaxolotl)
- 70cd684: fix(lsp): lsp restart failing (@taciturnaxolotl)
- 132a8c8: fix(mcp): clear tools and close the session on MCP error; reap stdio process groups (@claude)
- 009ce62: fix(mcp): serialize renewals, restore all registries, arm init gate (@meowgorithm)
- 8246dff: fix(mcp): wait for MCP init before building the tool list (@claude)
- 1ef42ef: fix(queue): fix pill border on queued messages (#3333) (@taciturnaxolotl)
- 4f4b846: fix(refactor): refactor the edit tool to not duplicate find and replace (@taciturnaxolotl)
- 18c2799: fix(tools): report every matching line per file in internal grep (#2994) (@officialasishkumar)
- d162615: fix(tui): prevent stale background refreshes from overwriting UI state (#169) (@meowgorithm)
- 5b7d7f7: fix(ui): align the compact sidebar logo (@meowgorithm)
- 4413344: fix(ui): keep chips in place when toggling attachment delete-mode (@joestump-agent)
- 885fe4d: fix(ui): keep sidebar layout while scrolling full content (@meowgorithm)
- c5bf189: fix(ui): leave an empty column between sidebar content and scrollbar (@meowgorithm)
- 4b729a9: fix(ui): only allow sidebar focus when content overflows (@meowgorithm)
- 5d9d37b: fix(ui): prevent sidebar text clipping and restore sidebar focus (@meowgorithm)
- 74e725b: fix(ui): resolve timer display conflicts in thinking animation and tool spinners (#3353) (@taciturnaxolotl)
- 15e7396: fix(ui): restore right padding on the attachment remove button (@joestump-agent)
- c3b3203: fix(ui): scroll sidebar details below the logo (@meowgorithm)
- c880f92: fix(ui): use fgmostsubtle for canceled text (#3360) (@taciturnaxolotl)
- a882695: fix: enable thinking blocks for minimax m3 on opencode providers (#3335) (@marifcelik)
- 6d27201: fix: keep chat pinned to bottom after a resize (#3336) (@taciturnaxolotl)
- 0d4c2bb: fix: keep the spinner animating when a response restarts (@taciturnaxolotl)
- a283fbd: fix: prevent new sessions from hanging in client-server mode (@meowgorithm)
Other stuff
- e6756c9: chore(ui): remove dead Editor.AddFile keybinding (@joestump)
- d6543ba: chore: auto-update files (@charmcli)
- 8198d8e: chore: auto-update files (@charmcli)
- c95cdae: chore: bump modernc.org/sqlite (#3334) (@taciturnaxolotl)
- 57c63b9: chore: generate golden files (@taciturnaxolotl)
- 3b9f019: fix(lsp/ui): fix stale sidebar state on render (@taciturnaxolotl)
- bd232ea: perf(tui): keep synchronous workspace probes off the per-message Update path (@joestump-agent)
- efbe308: refactor(ui): move sidebar scroll state mutation out of draw function (@meowgorithm)
- 6b6fab5: refactor: simplify edit tools and enforce Sourcegraph result limits (@meowgorithm)
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.86.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.86.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.
