v0.68.0

charmbracelet/crushv0.68.0May 14, 2026by github-actions[bot]

AI Summary

Stability release with extensive fixes including server-client architecture improvements, system prompt enhancements mentioning gh and ripgrep, thinking/reasoning fixes, and various bug fixes.

Key Highlights

  • Removed old system prompt option (CRUSH_SHORT_TOOL_DESCRIPTIONS=0)
  • gh and ripgrep mentioned in system prompt when available
  • Thinking/reasoning toggle fixes for various providers
  • Fixed Android DNS resolution in tmux
  • Fixed .crush directory location in edge cases
  • OAuth logout command added
  • MCP tools allow list feature

Breaking Changes

  • Removed CRUSH_SHORT_TOOL_DESCRIPTIONS=0 option - old system prompt no longer available

New Features

  • OAuth logout command
  • MCP tools allow list
  • gh and ripgrep hints in system prompt

Full Release Notes

# Stability release

Another release, another list of fixes to make Crush better for you.

## Advancements on the server-client arch

The experimental refactor into a server-client architecture got many fixes.

This is not ready for daily use, but if you're feeling adventurous it can be enabled with `CRUSH_CLIENT_SERVER=1`.

## Mention `gh` and `rg` in system prompt if available

If `gh` or `rg` (ripgrep) are available in your system, they will be mentioned in the system prompt now. This will hint the model to use them for a better experience.

Thanks to @taigrr for contributing with this one!

## Old system prompt removed

In past releases, we talked about how we shrinked the system prompt to save your tokens and make smaller models behave better.

You could still opt-in for the old prompt with `CRUSH_SHORT_TOOL_DESCRIPTIONS=0`, but that is now removed.

## Thinking and reasoning level fixes

We fixed the thinking on/off toggle for some providers. In some case it wasn't being respected properly.

This should make all GitHub Copilot models work now. A few of them were erroring due to thinking or reasoning misconfiguration.

Also, thanks @johnjansen for fixing the reasoning effort level setting for Anthropic via AWS Bedrock!

## Crushing on Android :robot:

We fixed a potential bug on Android where Crush could not always resolve DNS.

By the way, it's awesome to see that people love Crushing on the go!

## Small sidebar render bug

Sometime files in the list could break into the next line. This is now fixed.

<details><summary>Before</summary>
<p>

<img width="236" height="137" src="https://github.com/user-attachments/assets/abcf96da-c491-4347-9db1-f8290e203981" />

</p>
</details> 

<details><summary>After</summary>
<p>

<img width="240" height="128" src="https://github.com/user-attachments/assets/568c7518-bae8-4f16-8547-96cbc8859d56" />

</p>
</details> 

## Fixed `.crush` dir location

In some edge-cases, Crush could create its `.crush` data directory in the wrong place, but that is now fixed.

This bug could affect, for example, Git worktrees.

---

That was a lot, but we're happy to be shipping!

See you in the next release.
Charm ✨

## Changelog
### New!
* 79b2d6197e51d4c02de41e8d0e6f1caf589d0974: feat(fsext): stop upward lookup at a boundary directory (@meowgorithm)
* b223e24ed8f65117f02bb2fafd1cf3184b731b21: feat(logs): add a log line for dropped events (@taciturnaxolotl)
* 303b153b975786ac1cd156203cc622bd96f27ed5: feat(oauth): add logout command (#2838) (@taciturnaxolotl)
* 0c1014e5f7465e09483716b4c3732d1e8af76c84: feat(prompts): extend templating system to more prompts (@taciturnaxolotl)
* efb3b03390d40c41cf54a009230b8db3eac7072c: feat(prompts): remove long prompt option (@taciturnaxolotl)
* 5ad8beee37a55c4d3b9e0137c3ed9960aad42063: feat(prompts): template prompts and add github and ripgrep info (@taciturnaxolotl)
* f6dc495d97b10bdc8d0dcd0be6503285a54ba7f6: feat(responses): opt in specific copilot models to responses (@taciturnaxolotl)
* 959bf7e289622a0870ae6894a9e9d07d7b9d64d7: feat(tools): create an allow list for MCP tools (#2800) (@BrunoKrugel)
### Fixed
* c8379c306f3c13b14225106d70c87a8b89ce16ec: fix(auth): add better atomic refresh for hyper (@taciturnaxolotl)
* 0490a8a6b48f7bd956a9a017f87549a0540c68a3: fix(bedrock): honor reasoning_effort for Anthropic-on-Bedrock models (#2887) (@johnjansen)
* c853a939ef079d5e8b662df41f61fe7932d61628: fix(config): always resolve the data directory to an absolute path (#2883) (@meowgorithm)
* e2e0bc093145650a45a1e663bc9674ea3542bea1: fix(config): scope .crush discovery to the current repo (@meowgorithm)
* e1123687f01a02482d1d2e5e4c9b98ee5eab2074: fix(config): scope crush.json discovery to the current repo (@meowgorithm)
* cc7d651a9e9304d13c581511038b889b61588b38: fix(config): use large model for small if not configured (#2873) (@taciturnaxolotl)
* 61ee2d2e0e6fca03f13ef3b0c3bdce00ff67e205: fix(db): use connection pool to avoid corrupted writes (@taciturnaxolotl)
* a19dd58171f507dee35b861220839c4b8e3bf319: fix(dns): fix tmux dns resolver (@taciturnaxolotl)
* 5569be61a74dfe2c9d16805a133b84b8b1505ca7: fix(lint): require `exec.CommanadContext` over `exec.Command` (@meowgorithm)
* bf5dd26e59741737bd359739249a67a304e4f1ef: fix(paste): normalize windows newlines (@taciturnaxolotl)
* 02b783a380c074c934f1534226c989d03e1642a8: fix(permission): fix publish-before-lock race and use O(1) session permission lookups (@taciturnaxolotl)
* 9b8b888efe7c237ad0f1248d317af30f18561c75: fix(prompts): don't include ripgrep and gh prompts in testing (@taciturnaxolotl)
* 0585f498ba16b43902708aec87914fbd63c68e8d: fix(pubsub): raise default per-subscriber buffer (64 -> 4096) (@sven2718)
* 08c5c7d8affa520f3508bb6e247f46c4e5140d36: fix(reasoning): enforce can reason from catwalk before sending reasoning_effor (@taciturnaxolotl)
* 8021114b23ab5149fdb623bb44f61749ca7882bc: fix(server): keep the spawned server alive after the parent exits (@meowgorithm)
* 9b366c36c3759181f58cde42d57845e2c99908d7: fix(server): probe readiness over HTTP instead of statting the socket (@meowgorithm)
* d41c118511926aad5a5d78db7f86833e7964e59a: fix(server): serialize concurrent server spawns with a per-host lock (@meowgorithm)
* d17d61ce2dc90fad83a99952f43a2e1d8f40a8ae: fix(server): spawn after stale shutdown + handle socket errors (@meowgorithm)
* 6f91b0ca22110e4055b0818dae58027d55934c0b: fix(tools): switch bufio scanner for reader (#2884) (@taciturnaxolotl)
* 295a62dc389c6a0fd7a9150a140a56b97b70f40f: fix(ui): calculation bug that would cause modified files to wrap (@meowgorithm)
* ed91948fe4e0a12ddac53b77e02e2471e23d1afb: fix(ui): regression in tool output in client/server mode (#2878) (@meowgorithm)
* 8e7451fc1e2c44523b5a52a288738839507fb9e4: fix(ui): show custom skills reliably on startup (@ilgax)
* 0a2de47f0ed37a66ee2398ea2371dc9eb2ff6939: fix: address thinking on/off toggle for provider (#2916) (@andreynering)
* 9e126c27dac80e0d754680eb6e1a24e9ba1ef38e: fix: detect stale server during development with BuildID (@taigrr)
* ea847f28903fdfccec844f4be0522d7f9bffffd3: fix: make thinking on/off toggle work for deepseek provider (@andreynering)
* 3625ade17104b8f07145229a3144bf2ba7912033: fix: render permission dialog content in client/server mode (#2877) (@meowgorithm)
### Other stuff
* 651abb48aecf6a46e0557dd69d0ad1f399b2de9e: chore(golden): rerecord vhs (@taciturnaxolotl)
* 0485adc4776f82c2b44a6fae30187e871ad487b8: chore(tests): update golden files (@taciturnaxolotl)
* 3413970fee2b99ae6915c20f26fe50de72484b47: chore: auto-update files (@charmcli)
* 7b34700a8fddcbe0fa28dae999bf04fe55d26443: chore: auto-update files (@charmcli)
* 4373f63e2effda45468cde5a85b12ce9efb2627d: chore: fetch updated info from hyper (@andreynering)
* eb03b3bb9396a5f0d92ebd5bf170adbb94e1bfb0: fix(test,race): probe server health during the run, not after (@meowgorithm)
* dd1be0e0c12b39f774eae783ce0ca35cfd4d5917: refactor(server): derive per-host cache dir from parsed host URL (@meowgorithm)
* b8989b964abf98e0e09b4c4c2f2af49ccc608f80: refactor(skills): make coordinator the sole skill discovery publisher (@taciturnaxolotl)

---

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

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

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