v0.43.1

charmbracelet/crushv0.43.1Feb 18, 2026by github-actions[bot]

AI Summary

This release focuses on performance improvements and bug fixes for Crush. Key changes include removing a mutex that was causing high CPU usage when waiting for LSP servers, improving scrolling performance through caching, adding infinite loop detection to halt runaway LLM agents, and enabling image pasting support on RISC-V architecture.

Key Highlights

  • Removed mutex from LSP manager that was causing excessive CPU usage
  • Improved scrolling performance with caching for assistant messages
  • Added infinite loop detection to stop runaway LLM agents, especially common with local models
  • Enabled image pasting on RISC-V architecture
  • Fixed pills UI to follow scroll behavior

New Features

  • Infinite loop detection for LLM tool call agents
  • Image pasting support on RISC-V (Ctrl+V with clipboard image)
  • Cached blurred and focused renderings separately for assistant messages
  • Early exit optimization in AtBottom() for better performance
  • Toggle pills to follow scroll behavior

Full Release Notes

# Who loves perf?

Perhaps the more apt question, is, “Who _doesn’t_ love perf?” Presumably no one. Anyway, this release juices performance and fixes some regressions. Read on for more.

## Semaphores galores

A few releases ago, we added a mutex so Crush can wait for LSP servers to complete their diagnoses. That was cool, except it ate CPU like @caarlos0 in a steak house. In this release that doesn't happen anymore.

## Scrolling

The valiant @aymanbagabas worked in some caching to noticeably improve scrolling performance, specially on large sessions. Enjoy!

## Infinite loops now finite

The great thing about open source is that you can take matters into your own hands. That's exactly what contributor @huaiyuWangh did when he noticed LLMs going crazy and getting stuck in agent loops. Thanks to him, Crush will gently halt models spinning out of control. This was particularly common with local models and models with small context windows.

## RISC-V Bonus

We know you all secretly love RISC-V. Contributor @wallacegibbon has enabled image pasting on RISC-V, which honestly rocks. If you haven't used image pasting in Crush yet, pick a model with image support (like Kimi K2.5), copy an image to the clipboard and <kbd>ctrl+v</kbd>.

See you in the next release,
Charm 🍔

## Changelog
### Fixed
* 7ac4061b6c8af87e05edbf6bfaa94ded48315545: fix(lsp): properly remove clients from map on stop/kill (@andreynering)
* 2656a188bca1a241911b9145a75290d735b82b48: fix(ui): cache blurred and focused renderings separately for assistant messages (#2252) (@aymanbagabas)
* e471e75e7d732e2d88088f60d1abbe81aa0c897c: fix(ui): early exit AtBottom() when totalHeight exceeds viewport height (@aymanbagabas)
* 540deef219de0646cf531fd4874d09f7c01cffa1: fix(ui): toggle pills to follow scroll (#2218) (@aymanbagabas)
* af86738e0d6edfeb0ae7fb239b8bdabd4c162fca: fix: detect and stop tool call infinite loops (#2130) (#2214) (@huaiyuWangh)
* 7fe592d73c354ef85fe2a071998c40217b888760: fix: make reasoning effort dialog smaller (#2247) (@andreynering)
### Deps
* 44c7535a5ebf75fa57107c7b25348e1fda69b9d9: fix(deps): update `go-nativeclipboard` version to compile to RISC-V. (#2216) (@wallacegibbon)
### Other stuff
* ddf2fadb23b8e2d42a3f40c4eeb479b5cb6de651: chore: update fantasy with fix for json schema in openai (#2221) (@andreynering)
* df0dfbed15c573f69603262282901db8743c9142: ci(labeler): add minimax label (@andreynering)
* eecb1bfe22c36451003f65d1b30dac81e2e2ccaf: perf: remove mutex from lsp manager (@caarlos0)
* 699c8d79c3ac44fa676c00c674e5ed8787a0bfeb: refactor: simplify some code by using `cmp.Or` (#2253) (@andreynering)

---

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

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

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