v0.86.0

bradtraversy/design-resources-for-developersv0.86.0Jul 20, 2026by github-actions[bot]

AI Summary

This release introduces new Language Server Protocol (LSP) tools for advanced refactoring, adds a scrollable sidebar with focus-based navigation, enables removing attachments via mouse, and improves Hyper OAuth workflows with URL copying shortcuts.

Key Highlights

  • New LSP tools (`lsp_rename`, `lsp_replace_symbol`) for accurate refactoring.
  • Scrollable sidebar with keyboard navigation shortcuts (l, j/k, g, h, tab).
  • Removable attachments via a mouse click on the X button.
  • Better Hyper OAuth with a 'u' shortcut to copy URLs.

New Features

  • lsp_rename tool
  • lsp_replace_symbol tool
  • Scrollable sidebar with focus-based navigation
  • Mouse-based removal of attachment chips
  • URL copying shortcut in OAuth dialogs
  • Hint to skip quit confirmation

Full Release Notes

# 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 project
* `lsp_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!

<p><img width="600" src="https://github.com/user-attachments/assets/dfceb292-45e5-4946-8f75-fc6659b75c46" /></p>

Keyboard:

* When focused on the chat view: <kbd>l</kbd> or <kbd>right arrow</kbd> focuses on the sidebar
* <kbd>j/k</kbd> or <kbd>up/down arrow</kbd> scrolls up and down
* <kbd>g</kbd> scrolls to top <kbd>shift+g</kbd> scrolls to the bottom
* <kbd>h</kbd> or <kbd>left arrow</kbd> focuses back on the chat view
* <kbd>tab</kbd> always returns focus to the editor

## Removable attachments

It's now possible to remove attachments with your mouse! Just click on the `X` button:

<img width="618" height="174" alt="Screenshot 2026-07-20 at 17 26 51" src="https://github.com/user-attachments/assets/d2dc816e-e273-4252-8efc-48543b06466b" />

## Better Hyper OAuth

When authentication on [Charm Hyper ™️](https://hyper.charm.land/) or GitHub Copilot you can now press <kbd>u</kbd> 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.

<img width="574" height="413" alt="Screenshot 2026-07-20 at 17 33 21" src="https://github.com/user-attachments/assets/56ef14e5-276d-4106-b375-907bbaa5e534" />

## 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 <kbd>ctrl+c</kbd> twice.

<img width="339" height="207" alt="Screenshot 2026-07-17 at 17 20 12" src="https://github.com/user-attachments/assets/886f1f59-3d00-42de-82d3-28ae44096d5f" />

## Agent fixes

* Reasoning effort level `none` is 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!
* cd8c06ceb10f6cc90cc7989575e49d0c4c27b476: feat(lsp): add 4 new lsp tools (@taciturnaxolotl)
* 17ad5c7ffb7fa3021681528e68180d708d3b42e5: feat(lsp): add LSP superpowers tools (@taciturnaxolotl)
* 7eca7a04b1a7165b7088642612edf4ddc1cba171: feat(lsp): fancy diff view renders (@taciturnaxolotl)
* 8ad59d226c3e10eaa6c4c527a273d29b09ef92f9: feat(lsp): update system prompt to recommend lsp tools (@taciturnaxolotl)
* f8d855d5fe0808d83684611a820704e2789b654b: feat(ui): add scrollable sidebar with focus-based navigation (@meowgorithm)
* f413c9a9b24650e0c72fc4b77df219f3f8436045: feat(ui): auto expand reasoning dialog based on count (#3332) (@taciturnaxolotl)
* f604d989311458ab8063a5aa916588f1d84c8bc0: feat(ui): clickable ✕ remove button on attachment chips (@joestump)
* 4244f520330ce338045425899a2598cdf8858972: feat(ui): scroll sidebar with mouse wheel when focused (@meowgorithm)
* 047998766524393119b534b4ae5996a91ad93cd4: feat(ui): scroll sidebar with mouse wheel when focused (@meowgorithm)
* 79eedf79f9c12d23e3580339b7520e8f1384f286: feat(ui): show g/G shortcuts in sidebar full help (@meowgorithm)
* d50076469d7509345936d54853e98cd9a041a3d4: feat(ui): widen sidebar to 32 cells and reserve scrollbar column (@meowgorithm)
* 3446255daa028ba22505539dee6f6544f0faecbb: feat: add --all and --crawl-dir modes to stats subcommand (#2811) (@taciturnaxolotl)
* 12e96776a4a5d47146981f18c4fec3383128d151: feat: add keybinding and logic to copy verification URL in OAuth dialog #3323 (#3324) (@biisal)
* a02a9809a1420843ad14c6bc72f6523cf002013a: feat: on quit dialog, add hint on how to skip confirmation (#3356) (@andreynering)
* 8db57337ad5f0353154f0d61747b3624a84da290: feat: recover cleanly from mid-stream provider connection resets (@taciturnaxolotl)
### Fixed
* 1be8408601d4da2d61469ff96217d98e714ab6bc: Review fixes: attachment remove button (hidden clicks, mouse button, chip spacing) (#158) (@meowgorithm)
* 001a2f8542ebcbf56c2dfc95848b45f2ea378f97: fix(agent): preserve attachment chips in user messages after sending (@joestump)
* aca40878e2bb13d63ca8d89ce3b09993347090bd: fix(baseten): fix "none" reasoning level (#3386) (@andreynering)
* 461976d035ef984ce00145fed83f4454fb533228: fix(commands): scope logout command to oauth providers (@taciturnaxolotl)
* 55b2f0d1afbbf698fecef488e36baab080522e4f: fix(config): prevent data race when reading config during reload (#3362) (@taciturnaxolotl)
* b9a1182b8b4345150463be258297d9209108eccc: fix(lsp): add word boundaries to symbol grep and validate against LSP (@taciturnaxolotl)
* 07044a9b6a21d6e85bb5a38aa0c35d3a41a81956: fix(lsp): fix TrackConfigured startup race and relative path resolution (@taciturnaxolotl)
* 70cd684a71df6c571c1fb4b09b9a178aa1d1be9c: fix(lsp): lsp restart failing (@taciturnaxolotl)
* 132a8c89d84726c3e8e60ec9e104d684f3a7df85: fix(mcp): clear tools and close the session on MCP error; reap stdio process groups (@claude)
* 009ce621814d35d726f3f1c52d40e2d84dba92d6: fix(mcp): serialize renewals, restore all registries, arm init gate (@meowgorithm)
* 8246dff514e91e8a0a564b8bb467b7f799715e93: fix(mcp): wait for MCP init before building the tool list (@claude)
* 1ef42ef8688a325f955af89f4a119a6680ccff4c: fix(queue): fix pill border on queued messages (#3333) (@taciturnaxolotl)
* 4f4b84695dbb3b232a2df582383bdf62ab6c2d14: fix(refactor): refactor the edit tool to not duplicate find and replace (@taciturnaxolotl)
* 18c27999e3a8dce5555609bb399466515c927fe1: fix(tools): report every matching line per file in internal grep (#2994) (@officialasishkumar)
* d1626158d058f96b91aaf9ffce7cdf48a94579db: fix(tui): prevent stale background refreshes from overwriting UI state (#169) (@meowgorithm)
* 5b7d7f714d4371d3ecd5906c8191f2ecf5f009bd: fix(ui): align the compact sidebar logo (@meowgorithm)
* 4413344cfc85518689aaff70840bd044150a4bdf: fix(ui): keep chips in place when toggling attachment delete-mode (@joestump-agent)
* 885fe4d38f0d37f0e0f4354f3912c032adc75990: fix(ui): keep sidebar layout while scrolling full content (@meowgorithm)
* c5bf189cff3dade660822be11209a39652efeb6c: fix(ui): leave an empty column between sidebar content and scrollbar (@meowgorithm)
* 4b729a9351c7e0eb538609d20e058c05a2021984: fix(ui): only allow sidebar focus when content overflows (@meowgorithm)
* 5d9d37bcf55172d874a2993b7e38516ed37bbedc: fix(ui): prevent sidebar text clipping and restore sidebar focus (@meowgorithm)
* 74e725b393ecc45146fa8084cf934915790527e9: fix(ui): resolve timer display conflicts in thinking animation and tool spinners (#3353) (@taciturnaxolotl)
* 15e73964347903c0207b3e022c28c465d129884b: fix(ui): restore right padding on the attachment remove button (@joestump-agent)
* c3b320344e23b9fff0d3e5a28de33ed7c0566404: fix(ui): scroll sidebar details below the logo (@meowgorithm)
* c880f929c3732c5412fe9fae16efad0406461c25: fix(ui): use fgmostsubtle for canceled text (#3360) (@taciturnaxolotl)
* a882695e6053be206a48fea19d401c08d7575fd6: fix: enable thinking blocks for minimax m3 on opencode providers (#3335) (@marifcelik)
* 6d272018e5a9c2facfd074d310194a58fbb5feff: fix: keep chat pinned to bottom after a resize (#3336) (@taciturnaxolotl)
* 0d4c2bbc8ddeb8edebc5fa15075f21d2e99c5256: fix: keep the spinner animating when a response restarts (@taciturnaxolotl)
* a283fbd9fd696d3ff034b9ac6c78aaf006e497f3: fix: prevent new sessions from hanging in client-server mode (@meowgorithm)
### Other stuff
* e6756c9a9d181c69a8a5471c882efe7088b2faf6: chore(ui): remove dead Editor.AddFile keybinding (@joestump)
* d6543ba0fc5be2f4d80eb54196e8146c2c1ea696: chore: auto-update files (@charmcli)
* 8198d8eec7b11f74f8337087c67a4b7b31b063c7: chore: auto-update files (@charmcli)
* c95cdae6b20c9a30fb4446ef04a43a28f71cdeac: chore: bump modernc.org/sqlite (#3334) (@taciturnaxolotl)
* 57c63b99d280b9a6e0cbe54794b6303ecba31da5: chore: generate golden files (@taciturnaxolotl)
* 3b9f01937b71c273ab3dbc2e756c6930f257c363: fix(lsp/ui): fix stale sidebar state on render (@taciturnaxolotl)
* bd232eabf151e1d081b2d4f5b955c9c683a63489: perf(tui): keep synchronous workspace probes off the per-message Update path (@joestump-agent)
* efbe30833ddecc86c4bd0d7eb0b4947b931b5e15: refactor(ui): move sidebar scroll state mutation out of draw function (@meowgorithm)
* 6b6fab5e06a585f3ababd9c73ac8e3bd7fdb4c98: refactor: simplify edit tools and enforce Sourcegraph result limits (@meowgorithm)

---

<details>
<summary>Verifying the artifacts</summary>

First, download the [`checksums.txt` file](https://github.com/charmbracelet/crush/releases/download/v0.86.0/checksums.txt) and the [`checksums.txt.sigstore.json` file](https://github.com/charmbracelet/crush/releases/download/v0.86.0/checksums.txt.sigstore.json) files, for example, with `wget`:

```bash
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`](https://github.com/sigstore/cosign):

```bash
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.txt
```

If the output is `Verified OK`, you can safely use it to verify the checksums of other artifacts you downloaded from the release using `sha256sum`:

```bash
sha256sum --ignore-missing -c checksums.txt
```

Done! You artifacts are now verified!

</details>

<a href="https://charm.land/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-banner-next.jpg" width="400"></a>

Thoughts? Questions? We love hearing from you. Feel free to reach out on [X](https://x.com/charmcli), [Discord](https://charm.land/discord), [Slack](https://charm.land/slack), [The Fediverse](https://mastodon.social/@charmcli), [Bluesky](https://bsky.app/profile/charm.land).