If you have questions, we have answers
This release brings us a question tool (at last!) plus a bunch of bugfixes and niceties. Let's go!
The Question Tool
So! Crush now ships with a first class question tool, useful for when LLMs wanna grill you. The question tool comes in many forms, like single choice, multiple choice, free form text, and yes/no. Questions can be ganged together to build a form, too.
Whatβs that you say? βDoes it have mouse support?β Why, yes it does.
What is this sorcery? Only @taciturnaxolotl knows. He soloβd this whole feature exclusively with open source models on Hyper.
Hurry up and wait
Ever put an LLM to work, only to forget about it and come back and wonder how long it's been cranking? @andrinoff sure did. Wonder no more.
And so much more
Like Prince in the 80s, @taciturnaxolotl continued his tour of awesomeness alongside @andreynering to make Crush better under the hood too:
- Fixed:
crush authnow works outside of client/server mode - New: Crush now auto retries auth under the hood when it fails
- Improved: dialogues now render great on tiny screens
- Perf: scrollbar optimizations for faster rendering
- Perf: memoized markdown renderer for faster rendering
- Perf: short circuit
jqbuiltin operations if the turn was canceled before it started - Yay! OpenAI merged our PR upstream so we're back off our fork
Buckle up, we have a bunch more coming.
xoxo,
Charm π
Changelog
New!
- 686a3f4: feat(dialog): hide list info column when it would crowd item names (@taciturnaxolotl)
- 75e7195: feat(question): add client server integration (@taciturnaxolotl)
- 6f33b66: feat(question): add mouse scrolling (@taciturnaxolotl)
- 321c661: feat(question): add mouse support (@taciturnaxolotl)
- 1b5994c: feat(question): add paste support in text areas (@taciturnaxolotl)
- c2a6f76: feat(question): add question tool with structured UI (@taciturnaxolotl)
- 9f4f145: feat(question): adjust question prompts and error messages (@taciturnaxolotl)
- 5e611a7: feat(question): allow newlines and make free text like pop (@taciturnaxolotl)
- f69a91e: feat(question): extend length limits on question tool (@taciturnaxolotl)
- 3bf4035: feat(question): make escape cancel the question instead of submitting empty answers (@taciturnaxolotl)
- 81a8ee4: feat(question): redo tab resizing and mouse -> keyboard transition (@taciturnaxolotl)
- a5a5c6c: feat(question): tweak the confirmation tab (@taciturnaxolotl)
- 29f5691: feat(question): tweak yes/no to add shortcuts (@taciturnaxolotl)
- dc16099: feat: elapsed seconds timer (#3223) (@andrinoff)
- 64bbbeb: feat: integrate fantasy OnAuthRefresh for transparent auth retry (@taciturnaxolotl)
- d1489a6: feat: wire LM Studio vision capabilities to SupportsImages (#3280) (@josh-socium)
Fixed
- f3592bd: fix(dialog): account for the input prompt width so long values don't wrap (@taciturnaxolotl)
- 2c6424c: fix(dialog): center permission buttons in fullscreen (@taciturnaxolotl)
- bbf654f: fix(dialog): centralize keybind hint rendering and stop overflow (@taciturnaxolotl)
- d6c63d3: fix(dialog): clamp DrawCenter and DrawOnboarding content to screen bounds (@taciturnaxolotl)
- f6528f7: fix(dialog): constrain Quit dialog padding on narrow screens (@taciturnaxolotl)
- 31550cb: fix(dialog): fix OAuth content wrapping and full-width layout (@taciturnaxolotl)
- 352e265: fix(dialog): fix model provider label truncation at low widths (@taciturnaxolotl)
- a69ace5: fix(dialog): keep dialogs stable on small screens (@taciturnaxolotl)
- 151b38d: fix(dialog): make APIKeyInput width responsive to terminal size (@taciturnaxolotl)
- 3e2bd1c: fix(dialog): make OAuth dialog width responsive to terminal size (@taciturnaxolotl)
- aaf92f8: fix(dialog): mute command list shortcut hints (@taciturnaxolotl)
- 605dfc9: fix(dialog): remove dead space beside the list scrollbar (@taciturnaxolotl)
- 6407b85: fix(dialog): scale FilePicker down on small screens (@taciturnaxolotl)
- 0c61aee: fix(dialog): stop list item names from wrapping past the list width (@taciturnaxolotl)
- e271cec: fix(dialog): subtract border size in Reasoning and Notifications width (@taciturnaxolotl)
- e8c2772: fix(dialog): truncate TitleInfo when it exceeds dialog width (@taciturnaxolotl)
- 2b4a01a: fix(dialog): truncate dialog titles instead of wrapping on small screens (@taciturnaxolotl)
- b5cd46c: fix(errors): properly supress context cancelation error (@taciturnaxolotl)
- e34e707: fix(events): restore file picker event (#3314) (@taciturnaxolotl)
- b75d6bc: fix(oauth): fix the ui freeze on loading model endpoints (@taciturnaxolotl)
- 82e8898: fix(question): address PR review feedback (@taciturnaxolotl)
- ca5a19d: fix(question): fix a bug with the hover state coming deselected (@taciturnaxolotl)
- cbb9d4f: fix(question): fix scrollbar disappearing in single-select (@taciturnaxolotl)
- 9e6175a: fix(question): make scroll containers consistent (@taciturnaxolotl)
- 70c64b5: fix(question): route scrolling properly depending on which area is (@taciturnaxolotl)
- 5e6890d: fix(tests): bail on precancelled ctx in handleJQ (#3058) (@taciturnaxolotl)
- 1937ac5: fix: match question tool cursor color to main editor (@meowgorithm)
- ee00ec7: fix: respect client-server mode during login (#3315) (@andreynering)
Other stuff
- 3c51a9f: bug(client/server): fix non interactive init (@taciturnaxolotl)
- 2b969b2: chore: auto-update files (@charmcli)
- 4721e53: chore: auto-update files (@charmcli)
- 14483ca: chore: switch back to upstream openai sdk (#3308) (@andreynering)
- 4d901d1: perf(ui): keep chat resize smooth on large conversations (@taciturnaxolotl)
- d29fc2c: perf(ui): memoize chroma lexer lookups by filename (@taciturnaxolotl)
- 1bfc53f: perf(ui): memoize the chroma syntax-highlight style (@taciturnaxolotl)
- e456a90: refactor(dialog): dedupe scrollbar joins and tame the permission Draw (@taciturnaxolotl)
- 492460a: refactor: make the coordinator use a struct (@taciturnaxolotl)
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.85.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.85.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.



