v0.54.0

charmbracelet/crushv0.54.0Mar 31, 2026by github-actions[bot]

AI Summary

Various improvements including better init prompt, git ignore support, skills in session commands, and UI fixes.

Key Highlights

  • Better init prompt for AGENTS.md generation
  • Custom Git ignore file support (core.excludesfile)
  • Skills shown in crush session commands
  • Fixed LSP auto-start setting
  • UI fix for non-image models (hide image keybindings)

New Features

  • Git excludesfile support
  • Skills display in session commands

Full Release Notes

# Small feats + more

We have a good number of fixes and enhacements in this release. Note how many contributors helped with this release! It's exciting to see the Crush community grow. :rocket:

## Better init prompt

@Amolith made some nice improvements on the prompt to generate a `AGENTS.md` file for new projects.

## Custom Git ignore file support

If you happen to have a custom global ignore file for Git (`core.excludesfile`), Crush will now respect that when listing files. Thanks @mavaa for implementing this!

## Skills on `crush session`

`crush session show` and `crush session last` commands will now show a header with the all skills used by the session.

<details><summary>Screenshot</summary>

<img width="710" height="317" alt="skills" src="https://github.com/user-attachments/assets/1be7d299-fc22-4241-b47b-09530e73eaa9" />

</details>

## LSP Auto-Start setting

Setting `options.auto_lsp` to `false` on your config was supposed to prevent LSP servers from booting automatically, unless you had manually configured them. There was a bug with this setting, but @BrunoKrugel helped us by fixing it.

## UI fix for non-image models

@huaiyuWangh contributed with this fix. If the model you're using doesn't support images, Crush will now hide the help items in the bottom with the keybinding to attach images.

## No more `.crush/.gitignore` on your `git diff`

We recently changed the content of this file to not ignore `.crush/skills/*` by default, but a small annoying side-effect made that file itself visible by Git. We're now _also_ ignoring the `.crush/.gitignore` file itself again.

Keep crushing!
Charm :cupid:


## Changelog
### New!
* bf21a59b9d559f19b720d8325edad73cbeca8d40: feat(init): elicit control/data flow, arch descs (#1790) (@Amolith)
### Fixed
* cda2719416c1bad7291017db3c5f5e1b93795c2c: fix(commands): add timeout context for MCP prompt retrieval (#2517) (@iceymoss)
* 664aae78f8d04e594d4e846f26f143da46e2d0e8: fix(csync): use pointer receiver for JSONSchemaAlias (#2521) (@huaiyuWangh)
* 8e743cbfeb8e0dbb2b3a605a93c2acc754024d27: fix(event): prevent panic on non-string telemetry keys (#2502) (@iceymoss)
* 3412194cc489ff259ee2e46059930830f5c54857: fix(ls): respect git's `core.excludesfile` config if set (#2314) (@mavaa)
* 0e640a1f32215bd9cac244ca8722febf20591709: fix(lsp): respect lsp auto start config (#2487) (@BrunoKrugel)
* 5cf6e5ab3c1214d9d0549a418e10bc4ad091f8ca: fix(taskfile): fix syntax error on task `run:onboarding` (@andreynering)
* f416931307d5b446dfe1e376d9c0ade4a28b6406: fix: conditionally show image keybindings based on model support (#2522) (@huaiyuWangh)
* 42c8bcc60cd81fb9d3bc5f5a5545abb3369ca18c: fix: do not commit `.crush/.gitignore` (#2531) (@andreynering)
* 73c2a9dd82591875b4b9f2ce85310b33d5ef834d: fix: skip non-existent command dirs instead of creating them (#2534) (@majiayu000)
### Other stuff
* 2bcc97bd4b3fa951b87cbf256a043b6cf8dc2cb0: chore(lint): fix some small lint warnings (#2488) (@BrunoKrugel)
* 8b30fad1066b01df0e9bfbf26ae8a1643be3d656: chore: auto-update files (@charmcli)
* b68823b0aef7e7b913b461529096d17ad4d36599: feat(cli/session): show skill metadata (#2541) (@meowgorithm)
* d161cbcf5d5500286b3526951e72fcfeeefeb6d5: feat(init-cmd): mention progressive disclosure (#1786) (@Amolith)
* 97c9f4b0f555af501fd56f87f5710dbad72cff71: refactor(ui): replace hardcoded cursor offset with style-based calculation (#2530) (@huaiyuWangh)

---

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

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

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