Releases: charmbracelet/crush
nightly
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//checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download//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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.67.0
Busy Monday
We had a busy Monday mergin' all sorts of additions and small fixes. Thanks for using Crush, thanks for your contributions, and read on for all the details.
Hooks now use the built-in shell interpreter
By default, Hooks will now use the built-in shell interpreter instead of the one from the system. This particularly improves support for Windows, where bash isn't always available. It's also great for general portability as you can ensure that Bash behaves the same across systems, including environments where Bash isn't available. Of course, if the script has a shebang, we'll still respect that and run on the specified tool.
Curious about Hooks in Crush? Check out the docs.
Bring back shell expansion in config values
Speaking of shell, we fixed a regression with shell expansion in config values. So now you can do things like:
"api_key": "$(vault kv get my/secret/token)"The bonus here is that we're also using the embedded shell interpreter, so all the Bash-like things you expect to work here will.
Note
If you're wondering how are we do all this awesome Bash stuff, it's with mvdan/sh from @mvdan. It's an absolutely solid project.
Fixed: big file reads and updates
Crush has a size limit on certain operations to avoid the whole context window getting filled up rendering a session useless. There were some bugs around this which we fixed, tool-to-tool. So now, if your project is a single huge index.php, file Crush should be able to work it out just fine.
Special thanks to @taoeffect for working on this.
Assisted-by, now in the style of the Linux Kernel
The AI community is still figuring it out patterns and conventions, and we're adjusting as things go. We adjusted the Assisted-by trailer on Git commit messages to follow the current convention of the Linux kernel which seems to be where people are settling at the moment.
For those following along, it was:
Assisted-by: {modelName} via Crush <[email protected]>
And now it’s:
Assisted-by: Crush:{modelID}
Smaller things
- Fixed expanding/collapsing thinking blocks with the keyboard.
- More reliable detection of image files attachment. Misrenamed your
.pngas.jpg? No problem, Crush will now look for the content instead of the extension. - We adopted the
writetool to allow the model to create empty files (thanks @vorticalbox). - LSPs should now work better on Windows (thanks @sven2718).
Hope you crush your week!
The Charm™ team
Changelog
New!
- dbd40d8: feat(config): resolve MCP args and thread resolver through env/headers/args (@meowgorithm)
- f716457: feat(config): resolve MCP url through shell expansion (@meowgorithm)
- 3b3f992: feat(hooks): propagate CRUSH/AGENT env vars to builtin shell (@meowgorithm)
- 22d6f44: feat(hooks): run via shell.Run instead of sh -c (@meowgorithm)
- 711d3a3: feat(shell): add ExpandValue for config value shell expansion (@meowgorithm)
- 2e8e536: feat(shell): shebang/binary/in-process dispatch handler (@meowgorithm)
- 010ca2f: feat: add touch tool for empty files (@vorticalbox)
Fixed
- 9d34668: fix(agent): release activeRequests before publishing TypeAgentFinished (@sven2718)
- 61a9fce: fix(config): individual errors on json parse (@taciturnaxolotl)
- 78088cd: fix(lsp): update powernap with fix for lsps windows (#2862) (@andreynering)
- da262be: fix(schema): fix schema descriptions being cut off (@taciturnaxolotl)
- c9fd6be: fix(shell): convert path to posix path in tests (@taciturnaxolotl)
- af002dc: fix(shell): ctx-aware jq builtin (@meowgorithm)
- 32410e2: fix(shell): fix build error post-refactor (@meowgorithm)
- 2235a49: fix: limit view size checks to returned content (#2785) (@taoeffect)
- 24da509: fix: properly follow the
Assisted-byheader spec (#2871) (@andreynering)
Docs
- d745ff5: docs(README): add note about shell expansion in MCP config (@meowgorithm)
- 1d42341: docs(hooks): clarify relative paths (@taciturnaxolotl)
- 5dacf9e: docs(hooks): document new embedded shell model (@meowgorithm)
- 06f4350: docs(skill): document shell expansion in crush-config skill (@meowgorithm)
- bcce662: docs: document lenient shell expansion and security model (@meowgorithm)
- 45f7484: docs: update resolver godoc to match lenient default (@meowgorithm)
Other stuff
- 3b0d5de: chore: auto-update files (@charmcli)
- b7607a0: chore: auto-update files (@charmcli)
- 302f4ec: chore: modernize errors.As to errors.AsType (@meowgorithm)
- f23e998: config: fail provider header expansion loudly and drop empty values (@meowgorithm)
- f913477: config: remove unused environment variable resolver (@meowgorithm)
- 0da13d7: fix(tools/touch): gate outside-workingDir paths via permission prompt (@vorticalbox)
- ac79e5b: fix(tools/view): detect image mime type; don't rely on extension (#2757) (@meowgorithm)
- d7d25cf: fix(ui/chat): make keyboard expand work for assistant thinking blocks (#2791) (@meowgorithm)
- 1f83559: lsp: expand shell variables in args and env (@meowgorithm)
- 9af81e3: merge: resolve conflicts with main (@taciturnaxolotl)
- c135266: refactor(config): make Resolved{Env,Headers} pure and error-returning (@meowgorithm)
- 5dc30cf: refactor(config): resolve shell vars via shell.ExpandValue (@meowgorithm)
- f6ef43e: refactor(shell): extract stateless run entrypoint (@meowgorithm)
- 7da38da: refactor(tools): remove touch tool; allow empty write content (@vorticalbox)
- abacef9: shell: switch config value expansion to lenient by default (@meowgorithm)
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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.66.1
Small things + killin' bugs
Hey all. This release includes some small goodies and fixes. Let's take a look.
Exited is alised to Quit
When filtering for commands in the command dialog, "exit" will be properly return the "quit" command.
New flat_rate provider config
If you want to skip cost calculation for a given provider, you can now set it as a flat rate provider on your crush.json. This is useful when using subscription, where the cost is theorically zero as you're not really paying per token.
This is nicely done by @huaiyuWangh.
{
"providers": {
"my-favorite-provider": {
"flat_rate": true
}
}
}Show error if project initialization fails
Another one from @huaiyuWangh. If the project initialization fails, Crush will now properly show in the staatus bar that it failed.
Fixed model stopping after Glob
In certain scenarios, the model could stop working when no files were returned in a glob tool call. We now fixed it, so the model will keep working.
Fixed context window issue with background jobs
When the model inspected the output of a background job, it would fill the context window if the output is too large. We're doing the same as regular Bash command: truncating large output to something reasonable.
Fixed behavior on invalid tool call
When the model called a tool with invalid parameters, it could hang the session. @mkaaad worked on a fix to ensure the error is reported to the model so it can continue to work.
There are a few more fixes, but those make a good highlight.
Enjoy your weekend and keep Crushing!
Charm ™️
Changelog
Fixed
- 5816fad: fix(agent): support flat_rate cost handling (#2116) (@huaiyuWangh)
- 8bc4a75: fix(config): atomically update multiple fields during oauth (@taciturnaxolotl)
- 11eabdf: fix(errors): surface errors in subagents (@taciturnaxolotl)
- ae1c95a: fix(posthog): do not discard custom properties of an error (#2829) (@andreynering)
- abeaff0: fix(pubsub): respect channelBufferSize parameter in Subsribe (@yeonuk-hwang)
- 89181a6: fix(tools): don't return a go error on glob tool failure (@taciturnaxolotl)
- 5aad790: fix(tools): fix a potential nill crash in cached glob results (@taciturnaxolotl)
- 44ece2c: fix(tools): truncate long running background commands to 30k chars (@taciturnaxolotl)
- a924ca1: fix(tui): show initialization mark errors in status footer (#2825) (@huaiyuWangh)
- 95e93e9: fix(ui): add exit alias to the quit command (@taciturnaxolotl)
- b90bcc3: fix(ui): allow oauth modals to consume enter (@taciturnaxolotl)
- 086cfda: fix: update fantasy with tool call fixes (#2839) (@andreynering)
Docs
- 3b9b361: docs(readme): document
HYPER_API_KEY(@andreynering) - d5b4765: docs(readme): fixed typo in hooks (#2801) (@ardevd)
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.66.1/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.66.1/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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.66.0
Wednesday patch
Hey you, how's your week going?
We're shipping a few bug fixes and enhancements today. Let's take a look.
Summarization fixes
@taciturnaxolotl made some nice fixes to summarization. Summarization happens when the model's context window is filled, and Crush generates a summary of the session so you can continue using it.
- After summarization, Crush will not automatically send any messages waiting in the queue.
- For OAuth integrations (Hyper and Copilot), refresh token if needed before summarizing.
- If summarization errors for any reason, show an error in the screen. Before, you'd only see the spinner.
Small YOLO render fix
Another one from @taciturnaxolotl. The prompt will now properly render in YOLO mode when you start Crush as crush --yolo. Before, this render mode was only working when you activated YOLO via ctrl+p.
No more duplicate skills in the UI
A small bug allows skills to be rendered twice in the sidebar list, but @ilgax fixed it!
Fixed image error when switching models
This one was reported by @LarsArtmann. When you were in a session with images attached, and then switched to a model that doesn't support images, new prompts would error. We're now ignore attachments for these models so you can continue to use the session.
That's all for today!
See you on the internet.
Charm
Changelog
New!
- 452cd75: feat: add Nix flake for development environment (#2512) (@taciturnaxolotl)
Fixed
- 61f49b2: fix(agent): drain queued messages after manual session summarize (@taciturnaxolotl)
- a4020df: fix(summarize): reauthenticate oauth tokens when used to summarize (@taciturnaxolotl)
- 6bdd233: fix(ui): display error on summarization instead of leaving spinning (@taciturnaxolotl)
- 0e039d0: fix(ui): prevent duplicate custom skills from rendering (@ilgax)
- 6d95ecc: fix: skip image attachments in history when model doesn't support them (#2818) (@andreynering)
Other stuff
- 3d95ca9: bug: yollo mode via flag doesn't activate prompt (@taciturnaxolotl)
- 8cd4786: refactor(coordinator): extract token refresh helpers to reduce duplication (@andreynering)
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.66.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.66.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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.65.3
Small fixes
Hey all. This is just some small fixes to start the week.
Fixed multi-session token refresh
Crush currently support two OAuth-based providers: Hyper and Copilot. For these integrations we need to refresh tokens once they expire.
We fixed an issue affecting users that have multiple Crush instances running at the same time. Before attempting to refresh a tokens, Crush will now look on the disk if it was already refreshed by another instance.
Tip
Didn't know about Hyper yet? Check out our announcement on the past release!
Rendering performance
We did improvements on some internal caching to boost rendering performance on big sessions.
SQLite enhancements
@taoeffect helped with enhancements on how our SQLite driver configuration. This will mitigate some edge cases we've seen where Crush databases could be corrupted.
See ya!
Charm
Changelog
Fixed
- 99bc5ce: fix(config): check config file for newer token before OAuth refresh (@andreynering)
- 4010841: fix(db): prevent SQLITE_NOTADB corruption under concurrent sub-agents (#2690) (@taoeffect)
- 19197e3: fix(ui): cache glamour renderers (@meowgorithm)
Other stuff
- ecebe91: chore: auto-update files (@charmcli)
- 1ed6f52: refactor(ui): pair markdown cache invalidation with the styles mutation (@meowgorithm)
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.65.3/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.65.3/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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.65.2
It’s Hypercrush Time
Hi! Today's release adds first class support for Hyper, our inference service for coding focused on price, performance, and privacy.
Hyper's currently in private beta. To sign up, choose a Hyper model in Crush, or visit hyper.charm.land. Beta users get 100 free monthly Hypercredits, our mystical monetary unit. If you’re approved you’ll get an email.
In addition to Crush, you can also use Hyper with any tool you’d like.
Let us know what you think, and thanks for your support! 💖
Changelog
New!
- feat(hyper): show remaining hypercredits in the sidebar by @andreynering in #2766
- feat: launch hyper beta by @andreynering in #2768
Fixed
- fix: fix thinking on/off toggle for certain openai-compat providers by @andreynering in #2755
Other Stuff
- chore(ui): change wording: rewrote input to rewrote output by @meowgorithm in #2742
- chore(tools/view): update
viewtool limit to 200KB by @andreynering in #2767 - chore(ui): hypercrush small type treatment by @meowgorithm in #2774
Full Changelog: v0.64.0...v0.65.2
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.64.0
Patch Day
It's patch Wednesday, coming in hot with improved stability and fixed bugs.
Fixed: Hook Matcher
Did you see that we released an initial hook in the past release? If not, go check it out.
Anyway, there, was a bug in which hooks would run for every tool call and totally ignore matcher rules (e.g. ^bash$). Oof. Fixed.
Anthropic Fix
Kudos to @ljuti who fixed a bug in Fantasy that could cause errors on certain sessions when using Anthropic or Anthropic-compatible providers. Thanks, @ljuti!
Background Jobs, Fixed
The job_kill tool had some prompt changes that caused a regression. We've roll that back and job killin’ should be easer than ever.
Style Council
We also made a bunch more changes under the hood to prep for theming. The design goal is to be able to make themes quickly by setting only a few variables, but also keep the door open for very specific, targeted styling.
High Status
Sometimes the status bar wasn't rendering messages properly. Now, thanks to some good logic, it should be solid as a rock.
That's all for today.
And stay tuned: we have exciting stuff coming soon.
Charm ✨
Changelog
New!
- a4488ca: feat(ui): switch to hyper theme when provider hyper is chosen (@meowgorithm)
Fixed
- 4d16e96: fix(app): replace single events channel with pubsub.Broker for fan-out (#2663) (@taigrr)
- 38a846d: fix(hooks): recompile matchers after config reload (@meowgorithm)
- 2be2024: fix(hyper): re-auth at selection time to ensure provider availability (@meowgorithm)
- cfcffd2: fix(styles): fix some regressions where colors were incorrect (@meowgorithm)
- 09a1120: fix(ui): notification width and text truncation (@meowgorithm)
- 64c47cb: fix(ui): restore 'update available' notification (@meowgorithm)
- 066fb5a: fix: remove unused build (#2734) (@BrunoKrugel)
Other stuff
- 81fbaca: chore(hyper): update endpoint to new one (@andreynering)
- 8ebab21: chore(styles): clean up theme definitions (@meowgorithm)
- 9d4653e: chore(styles): use hypercrush theme when hyper is selected (@meowgorithm)
- 9c4a316: chore(ui,styles): color edits and copyedits for the oAuth view (@meowgorithm)
- b07664e: chore: auto-update files (@charmcli)
- 86bb805: fix(tools/job_kill): use longer job_kill desc to improve reliability (#2747) (@meowgorithm)
- c84ca2d: refactor(hooks): move matcher compilation into the runner (@meowgorithm)
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.64.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.64.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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.63.0
Baby’s First Hook
At last, Crush is getting support for hooks. We spent a lot of time on the design to make sure it's future proof and can support a wide variety of use cases.
We're starting with just one hook, PreToolUse, which runs before a tool call. You can use it to deny tool calls, halt turns, rewrite rewrite bash commands, and perform any number of silent side effects. One popular use of PreToolUse to use rtk to reduce the number of tokens used by many common Bash commands. Here’s a hook you can use to get started with rtk.
Let us know what other hooks you'd like to see next in the discussions.
There's an also a builtin crush-hook skill which you can use to build, manage, and configure hooks. It's very easy to have Crush help you get the most out of hooks.
Note that Crush is also compatible with Claude Code hooks. That said, the Crush-specific API will typically produce simpler hooks and less code.
For the full run-down on hooks see the official hooks docs.
Enjoy!
Charm 💘
Changelog
New!
- dc003bf: feat: PreToolUse hook (#2598) (@meowgorithm)
Fixed
- 7a6149d: fix(ui): don't show disabled skills (@BrunoKrugel)
- 3cda50f: fix(ui): fix dialog box shift when session rename is active (@meowgorithm)
Docs
- e5611c3: docs(hooks): improve hook documentation (@meowgorithm)
Other stuff
- b9fdf72: chore(hooks,skills): update crush-hooks skill per recent changes (@meowgorithm)
- a7546ad: chore(tests): regression test for (lack of) disabled skills in the ui (@meowgorithm)
- 755f6fa: chore(ui): theme prep (@meowgorithm)
- f686999: chore: auto-update files (@charmcli)
- 1948ca7: fix(ui/hooks): restore hook styling (@meowgorithm)
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.63.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.63.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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.62.1
Stability release
Open Source ™️ is all about community, and this release got some nice contributions from our loved users!
MiniMax fix
Crush wasn't allowing users to some MiniMax API keys, but now all keys should work.
For context, MiniMax does not have an endpoint to validate API keys. We were checking they at least start with sk-, but not all keys from MiniMax have this prefix.
Kudos to @flynn-eye for the help with this one!
Fantasy fix
@carsonfarmer made a contribution to Fantasy to fix some scenario where the request could fail.
This should fix some 400 Bad Request errors for some providers.
Tiny fixes
@iceymoss, which has been doing some good patches, got two more merged into this release.
- LSP servers startup should now be a bit more reliable (#2498)
- Better logs when Crush is retrying a request that failed (#2700)
Have a great weekend ✨
Charm
Changelog
Fixed
- 549f717: fix(agent): implement OnRetry logging with structured retry fields (#2700) (@iceymoss)
- e5d95aa: fix(hyper): fix re-authorization flow not triggering on certain conditions (#2703) (@andreynering)
- f669bd3: fix(lsp): replace sticky unavailable cache with retry backoff (#2498) (@iceymoss)
- 81daa26: fix(styles): use semantic names in styles + drop deadcode (@meowgorithm)
- 511916a: fix(ui): logo and grad arguments from earlier refactor (@meowgorithm)
- cce8edf: fix: remove minimax api key validate (#2688) (@flynn-eye)
Docs
- 28ab548: docs(readme): tiny updates (@andreynering)
Other stuff
- 15f20e6: chore(ui): add new letterforms: h, y, p, e, with alts (@meowgorithm)
- 4f3a308: chore(ui): formal hypercrush type treatment (@meowgorithm)
- 7cbb1db: chore(ui): use Lip Gloss for color blends (@meowgorithm)
- 31025a1: chore: auto-update files (@charmcli)
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.62.1/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.62.1/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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.62.0
Crushing the system prompt…and more!
Hi! The big star of this release is a massively reduced system prompt. Read on for more!
Tool descriptions, now with 98% fewer tokens
You read that right. We made changes to our system prompt to vastly reduce how many tokens they use by default. On average, this should save around 120k tokens per session. This was announced on v0.57.0 as a preview feature, and now we're making it the default.
Crush originally shipped with pretty hefty tool instructions, but since then models have gotten a lot better (local models included) and vastly shorter instructions work just fine. This is not only a win on cost due to using fewer tokens. It also means small models (specially tiny, local models) should behave better given their small context windows.
For now, you can still opt to the old behavior with export CRUSH_SHORT_TOOL_DESCRIPTIONS=0 for now, but. Keep in mind we might remove that support soon. If this is something you find valuable, let us know.
Not so fast, fetch
The fetch tool reads web pages and API endpoints right into the context. We significantly reduced the max size for this tool to prevent it from eating the context window. The limit used to be 5MB, which was sort of crazy. Now, if the content is larger than 100KB, it'll be truncated (for big stuff, the download tool is available). This change is particularly important for small models.
If it looks like a diff and smells like a diff, it's probably a diff
Crush’s edit tool has always had great diff rendering, however sometimes other tools, such as the GitHub MCP server, print diffs as well. Crush will now automatically detect that looks like a diff and render it accordingly.
Before:
After:
Less noise in the logs
This is a small one, but if you noticed a lot of warnings about Crush poking around and finding skills in the logs (crush logs -f) ya won't see those anymore. They were a bit annoying, eh?
Thanks for using Crush , and stay tuned: we have some good stuff coming.
Charm ✨
Changelog
New!
- f7beb12: feat: generally render output that looks like a diff as a diff (#2607) (@meowgorithm)
Fixed
- d3f6d98: fix(lsp): mitigate stale diagnostics (@meowgorithm)
- 9d555a7: fix: reduce
fetchandviewtools truncation size to 100KB (@andreynering) - da33883: fix: reduce token usage, use short tool descriptions by default (#2679) (@andreynering)
- 7437d2b: fix: silence unless warning about non-existent skill paths (@andreynering)
Other stuff
- bbab2bc: chore: auto-update files (@charmcli)
- b0b5c14: chore: remove CODEOWNERS (@andreynering)
- 7cc020b: chore: update catwalk to new domain (#2680) (@andreynering)
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.62.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.62.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.txtIf 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.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.





