v0.86.0
jianchang512/clone-voicev0.86.0Jul 20, 2026by github-actions[bot]
AI Summary
This release introduces new Language Server Protocol (LSP) tools for code refactoring, enhances the user interface with a scrollable sidebar and removable attachments, and improves authentication workflows.
Key Highlights
- New LSP tools for code refactoring (rename and replace symbol)
- Scrollable sidebar with keyboard navigation shortcuts
- Mouse support for removing attachments
- Enhanced Hyper OAuth with URL copy shortcut
New Features
- LSP tools (lsp_rename, lsp_replace_symbol)
- Scrollable sidebar with focus-based navigation
- Clickable remove button on attachment chips
- Shortcut to copy OAuth URLs
- Hint to skip quit confirmation
- Auto-expand reasoning dialog based on count
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).