github charmbracelet/crush v0.67.0

4 hours ago

Busy Monday

We had a busy Monday mergin' all kind of nice additions and small fixes.

Thanks for using Crush and contributing!

Hooks now use the built-in shell interpreter

We've been following with some improvements to the support for hooks.

Hooks will now use the built-in shell interpreter instead of the one from the system. This improves support for Windows, where bash is not always available.

If the script has a shebang, we'll still respect that and run on the specified tool.

Want to read more about hook support in Crush? We have some docs here.

Tip

The shell interpreter for Go that Crush uses is mvdan/sh from @mvdan. Really cool if you want to check it out.

Bring back shell expansion in config values

We fixed a regression and shell expansion should now always work again in certain values in your crush.json config.

This means you can do things like $(vault kv get my/secret/token) for API key fields, etc.

We also made it better than before, and it uses the very same shell interpreter mentioned above.

Fix for reading and updating big files

Crush has a size limit to certain operations to avoid filling the whole model context window and making the session useless.

For reading and updating files the limit is 200KB, but it wasn't working as intended. It was preventing the model to read any files bigger than that, while it should still allow to read parts of the file.

This was also affecting editing these files because the model needs to read before writting.

All fixed, and if your project is a single huge index.php file Crush should work again for you.

Kudos to @taoeffect for working on this.

Changed Assisted-by format to align with convention

The AI community is still figuring it out certain patterns and conventions, and we're adjust as things go.

We adjusted the Assisted-by trailer on Git commit messages to follow the convention that has been more widely adopted.

Format changed from:

Assisted-by: {modelName} via Crush <crush@charm.land>

to

Assisted-by: Crush:{modelID}

The actual standard we're now following is the one from the Linux kernel.

Smaller things

  • Fixed expanding/collapsing thinking blocks with the keyboard.
  • More reliable detection of image files attachment. Misrenamed your .png as .jpg? No problem, Crush will now look for the content instead of the extension.
  • We adopted the write tool to allow the model to create empty files (thanks @vorticalbox).
  • LSPs should now work better on Windows (thanks @sven2718).

Have a great Crushin' week!
The Charm ™️ team

Changelog

New!

Fixed

Docs

Other stuff


Verifying the artifacts

First, download the checksums.txt file and the checksums.txt.sigstore.json file files, for example, with wget:

wget 'https://github.com/charmbracelet/crush/releases/download/v0.67.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.67.0/checksums.txt.sigstore.json'

Then, verify it using cosign:

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:

sha256sum --ignore-missing -c checksums.txt

Done! You artifacts are now verified!

The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.

Don't miss a new crush release

NewReleases is sending notifications on new releases.