v0.46.1

charmbracelet/crushv0.46.1Feb 27, 2026by github-actions[bot]

AI Summary

This release fixes performance issues with file tools (view and edit) that were slow due to LSP server notifications. A 300ms timeout was added so operations proceed even if LSP servers are slow, and the find_references functionality was also fixed.

Key Highlights

  • Fixed slow file tool performance - view and edit were slow because they waited for LSP responses
  • Added 300ms timeout for LSP diagnostics so operations proceed even if LSP is slow
  • Fixed find_references functionality to properly query LSPs for references
  • Performance optimizations: avoid file watching when reading, shared timeout for parallel diagnostics, avoid scanning entire file to count lines
  • Fixed view tool paging and UTF-8 validity check edge cases

New Features

  • 300ms timeout for LSP diagnostics to prevent slow operations
  • find_references now properly queries LSPs for type/function references

Full Release Notes

# File tools performance fixed ✅ 

A few of you told us that some tools call like `view` and `edit` were sometimes taking a few seconds to complete, making your sessions slow to proceed. Well, that happened because Crush notifies LSP servers about the files you're viewing or touching, and waits for a response. Some LSPs are slow, and it things took some time to happen.

In this release we not only made a good number of fixes to file tools + LSPs, but we also added a 300ms timeout so if something got stuck Crush will proceed anyway.

The `find_references` also got fixes. It allows the model to query for your LSPs to find refences for a given type/function/etc.

Special thanks to our favorite contributors @huaiyuWangh and @taigrr to helping and testing these improvements! ✨ 

Enjoy your weekend!
Charm ™️ 

## Changelog
### Fixed
* 02ec5db4742886c1e81339c6fc18fa234a49c7c8: bugfix: find references, double timeout (@taigrr)
* 41a931ebc9b3a4a96f7ec799142569fc1022f47d: fix(mcp): restore handling for unsupported resources/list method (@meowgorithm)
* 6e5bbef78da317dcde97bec412542fcb5a37891e: fix: use typed context keys in tests to satisfy staticcheck (@huaiyuWangh)
### Other stuff
* ded666aa641e7b9cabb750fcb68441b9edff6a45: chore(lint): don't shadow err vars (@meowgorithm)
* 058322169d3c1b3e1ffad43da8bb7c00c94e706d: fix(tools/view): fix view paging, test for edge cases (@meowgorithm)
* 773efbf84f5bc426633cf7221621ce7af2120f3b: fix(tools/view): perform UTF-8 validity check only if read succeeds (@meowgorithm)
* 6604dd0e38440369e98c7462e977bc2e015f292a: perf(lsp): don't watch for changes when simply reading files (@meowgorithm)
* d98c854a148e5dce070c9d1d0a9b07749fbebaf5: perf(lsp): use shared timeout for parallel diagnostics collection (@meowgorithm)
* 12f0d9f512e01bde5d08d2c88e60fd0eb38eb891: perf(tools/view): avoid scanning entire file to count lines (@meowgorithm)
* 3c5fcff3855762e6d24cf19fd45d8d69253ee594: perf(tools/view): pause briefly for LSP diagnostics when viewing a file (@meowgorithm)
* e0d545486846749445745269aabb30c73bba628f: refactor: extract common sub-agent execution logic (@huaiyuWangh)
* 07d065d780610a4a37e516733da951888293bf4b: refactor: simplify context value retrieval using generics (@huaiyuWangh)
* 42aee6d2bde0d48d0d752629f5c3e9791c2f2a7c: refactor: use params struct for runSubAgent and add unit tests (@huaiyuWangh)
* d3682ac4719bd5892ceb21c15c66009c1e0b9b54: use new wg pattern (@taigrr)

---

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

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

```bash
wget 'https://github.com/charmbracelet/crush/releases/download/v0.46.1/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.46.1/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).