v0.85.0
jianchang512/clone-voicev0.85.0Jul 16, 2026by github-actions[bot]
AI Summary
This release features a new interactive question tool, an elapsed seconds timer to track processing time, and a series of UI/UX improvements and performance optimizations.
Key Highlights
- New structured question tool supporting various input types
- Elapsed seconds timer to monitor LLM processing duration
- Auto-retry mechanism for authentication failures
- Responsive dialog improvements for small screens
- Performance optimizations for rendering and markdown
New Features
- Question tool with structured UI (mouse and keyboard support)
- Elapsed seconds timer
- Transparent auth retry
- Integration of fantasy OnAuthRefresh
- LM Studio vision capabilities integration
Full Release Notes
# 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. <p><img width="600" src="https://github.com/user-attachments/assets/81097b9b-6819-4e7d-9944-6ae771f6dab5" /></p> What’s that you say? “Does it have mouse support?” Why, yes it does. <p><img width="600" src="https://github.com/user-attachments/assets/75911693-49c9-4475-b812-935221337f5b" /></p> What is this sorcery? Only @taciturnaxolotl knows. He solo’d this whole feature exclusively with open source models on [Hyper](https://hyper.charm.land). ## 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. <p><img width="411" alt="output" src="https://github.com/user-attachments/assets/a2e35914-d89f-4a77-97d6-3283f1de06a3" /></p> ## 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 auth` now 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 `jq` builtin 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! * 686a3f46e1876e9025a29bf846f11fac91bbb3f3: feat(dialog): hide list info column when it would crowd item names (@taciturnaxolotl) * 75e7195fbd713d7f13dd242b8f994f11e070fe6b: feat(question): add client server integration (@taciturnaxolotl) * 6f33b6668505ce0e30ef7e83fa642c9bf8c23c95: feat(question): add mouse scrolling (@taciturnaxolotl) * 321c661e88079a6af12cec7a4606a389a5627a73: feat(question): add mouse support (@taciturnaxolotl) * 1b5994c04f5a3e1c0d94cb05c80ccd07a187ebf1: feat(question): add paste support in text areas (@taciturnaxolotl) * c2a6f76565600492aa2769d66ccd5ef7c00ea6a0: feat(question): add question tool with structured UI (@taciturnaxolotl) * 9f4f145ad7c63bf6526d4517b88e8a98aa5bda96: feat(question): adjust question prompts and error messages (@taciturnaxolotl) * 5e611a70a6e48ccb7dbb3ff020ee1efa5d37772d: feat(question): allow newlines and make free text like pop (@taciturnaxolotl) * f69a91e5ab058a78c581af68c4e6bdde569bad44: feat(question): extend length limits on question tool (@taciturnaxolotl) * 3bf40358a06e43863dc9689ea2bd286937063ca6: feat(question): make escape cancel the question instead of submitting empty answers (@taciturnaxolotl) * 81a8ee4b54a980e4f4d08d1f7edfcbdd7a24b810: feat(question): redo tab resizing and mouse -> keyboard transition (@taciturnaxolotl) * a5a5c6c54b40620ec2fdc20ccdf4b3224961a654: feat(question): tweak the confirmation tab (@taciturnaxolotl) * 29f5691db4a9646910397bf7437e91f30c5d4fa3: feat(question): tweak yes/no to add shortcuts (@taciturnaxolotl) * dc1609977e53f62843f6a9df78ba4283da62793c: feat: elapsed seconds timer (#3223) (@andrinoff) * 64bbbebc430dd5031b92d62f179cbd6a22c09069: feat: integrate fantasy OnAuthRefresh for transparent auth retry (@taciturnaxolotl) * d1489a603d357ab3e07dda66079130d4d5cdccb9: feat: wire LM Studio vision capabilities to SupportsImages (#3280) (@josh-socium) ### Fixed * f3592bd8c501732e56128be07ce5fa694b008318: fix(dialog): account for the input prompt width so long values don't wrap (@taciturnaxolotl) * 2c6424c179ee6ef21d2190744410ca289a9ad9da: fix(dialog): center permission buttons in fullscreen (@taciturnaxolotl) * bbf654fb92f578bf5a1e4956b0d38b9297768fef: fix(dialog): centralize keybind hint rendering and stop overflow (@taciturnaxolotl) * d6c63d31e255841038270d4b88ef347986e8da63: fix(dialog): clamp DrawCenter and DrawOnboarding content to screen bounds (@taciturnaxolotl) * f6528f72ff5057fbb40d8e9b4f2ebf67b3fc119f: fix(dialog): constrain Quit dialog padding on narrow screens (@taciturnaxolotl) * 31550cb4f9c04d9fc1d5e552be7745d2333cfee6: fix(dialog): fix OAuth content wrapping and full-width layout (@taciturnaxolotl) * 352e26515901b9fd563fcbe7b8d945da678135d6: fix(dialog): fix model provider label truncation at low widths (@taciturnaxolotl) * a69ace5e0bb4e0461c230498c29805446b137083: fix(dialog): keep dialogs stable on small screens (@taciturnaxolotl) * 151b38d424fe561bc19669b10d7ee3aa66a4b19c: fix(dialog): make APIKeyInput width responsive to terminal size (@taciturnaxolotl) * 3e2bd1cc4535eb5988c6990224f778256fcfb457: fix(dialog): make OAuth dialog width responsive to terminal size (@taciturnaxolotl) * aaf92f866282d0eccacfa5a21025bcd25a504afc: fix(dialog): mute command list shortcut hints (@taciturnaxolotl) * 605dfc9e3d3cc497f7594ced3820312cc32ddc3f: fix(dialog): remove dead space beside the list scrollbar (@taciturnaxolotl) * 6407b8529ed394e6fef49c08fac3cdab165b8013: fix(dialog): scale FilePicker down on small screens (@taciturnaxolotl) * 0c61aeee761afa9c967e9c6990e003bc4f5e6de7: fix(dialog): stop list item names from wrapping past the list width (@taciturnaxolotl) * e271cecb3617626d8cf98fe94672c050d1eff2fd: fix(dialog): subtract border size in Reasoning and Notifications width (@taciturnaxolotl) * e8c2772d272f179a9073b7214e236a2159429058: fix(dialog): truncate TitleInfo when it exceeds dialog width (@taciturnaxolotl) * 2b4a01ae994cce7c2c9b5c08bb9d2aafad5dd15a: fix(dialog): truncate dialog titles instead of wrapping on small screens (@taciturnaxolotl) * b5cd46c2381afda7adee567f7abadc101ef4dc2c: fix(errors): properly supress context cancelation error (@taciturnaxolotl) * e34e707c175abd1a46f0135a2657d308129adb41: fix(events): restore file picker event (#3314) (@taciturnaxolotl) * b75d6bc27b33bffb59b8ea9f304999515db74ff3: fix(oauth): fix the ui freeze on loading model endpoints (@taciturnaxolotl) * 82e889858c654896b73bcd3e80616b5adc62fe11: fix(question): address PR review feedback (@taciturnaxolotl) * ca5a19d7432a50eee59539b7568ce825a0bca2ce: fix(question): fix a bug with the hover state coming deselected (@taciturnaxolotl) * cbb9d4f2614ad87d0d2feaf7b348189fa464e25f: fix(question): fix scrollbar disappearing in single-select (@taciturnaxolotl) * 9e6175a2ea839a8a875f59e7ca05aa05e8780fde: fix(question): make scroll containers consistent (@taciturnaxolotl) * 70c64b5794ec77cac6735007d68e20ae4e2fddd9: fix(question): route scrolling properly depending on which area is (@taciturnaxolotl) * 5e6890de82a029bbb83b5e8205e483ec44e57207: fix(tests): bail on precancelled ctx in handleJQ (#3058) (@taciturnaxolotl) * 1937ac54c597bb04553e8242e79314b5b1c0a9b7: fix: match question tool cursor color to main editor (@meowgorithm) * ee00ec7bb6d0b698bad0bcda2cbf9e23ef307582: fix: respect client-server mode during login (#3315) (@andreynering) ### Other stuff * 3c51a9f2f03e3f2e9de59a84d7a75e999c5ebe52: bug(client/server): fix non interactive init (@taciturnaxolotl) * 2b969b2a862c250cbb8c529fe7148574a060f793: chore: auto-update files (@charmcli) * 4721e53c30a0c51a718b84ff54f42cdee4e63ae0: chore: auto-update files (@charmcli) * 14483caceb20c1d2283ffc69da1db7d42fb58540: chore: switch back to upstream openai sdk (#3308) (@andreynering) * 4d901d1be4d4aec2dd1098b7e39c28e19c505b84: perf(ui): keep chat resize smooth on large conversations (@taciturnaxolotl) * d29fc2ca6c84404ae40ff7dd72c76a079ed3a1bf: perf(ui): memoize chroma lexer lookups by filename (@taciturnaxolotl) * 1bfc53f66fb92d9491b00b8602b7dff805bccca4: perf(ui): memoize the chroma syntax-highlight style (@taciturnaxolotl) * e456a902c30e24fe5f4e7e8aa9060294079ed1a3: refactor(dialog): dedupe scrollbar joins and tame the permission Draw (@taciturnaxolotl) * 492460a854cd890ac362390580b56f38ee2dd359: refactor: make the coordinator use a struct (@taciturnaxolotl) --- <details> <summary>Verifying the artifacts</summary> First, download the [`checksums.txt` file](https://github.com/charmbracelet/crush/releases/download/v0.85.0/checksums.txt) and the [`checksums.txt.sigstore.json` file](https://github.com/charmbracelet/crush/releases/download/v0.85.0/checksums.txt.sigstore.json) files, for example, with `wget`: ```bash 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`](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).