Bring Your LM 2026.09.06
View as MarkdownThis is the first release with a Linux download. Inside the app, the embedded provider got simpler: its models are picked from the model list like any other provider's, and a projector or draft head is chosen right there instead of on a settings screen of its own. There is also a Diagnostics screen for sending an error report, and a pass over the parts of the app that flickered, re-counted, or reported an error that was not one.
Linux and Android downloads
The Linux desktop build is on the website as an AppImage: one plain, and one carrying the ROCm backend for AMD cards. It is a single file; make it executable and run it, nothing to install.
The Android APK is on the website too, for installing without a Google account. It is signed with our own key rather than Play's, so it cannot be installed over a copy from the Play Store.
Embedded models are picked in one place
Running a local model with a vision projector or a draft head used to take a detour: open the provider's settings, find the assembled-models section, build the combination from file pickers, save it, and only then choose it for an agent. That step is gone. The embedded provider's model list now shows the model files in your directory, and the projector or draft head is chosen on the model itself: open its row, pick from the dropdowns, choose the model. It is the same list every other provider uses, so it has search, filters, capability icons and favourites.
Around that:
- A model you keep in several quantizations is one entry, with a Weights choice inside it naming each file.
- Which projector and draft head fit a model is read from the GGUF header's own pairing signals rather than guessed from the architecture name. A projector that only agrees on one width is no longer offered as a fit, and a mismatch names both models.
- The image icon appears only when a projector in your directory really matches.
- An open model row, and the agent form's model field, say what this device would load the model with: context size, cache types, draft head, including where a value would be overridden on the way in.
- A model whose weights or projector are not on this device is marked wherever it is named, with the reason, instead of failing when you send.
- What is left to set on a model, its name, how far the draft head speculates and this device's load overrides, is reached from a tune button beside the model wherever it is picked, and from the turn that ran it.
- The provider page names the backend Auto resolves to on this device, and says so when a pinned backend is not available, instead of waiting for a load to fail. A finished turn reports whether it ran with flash attention.
- Settings → About names the llama.cpp release the engine is built from, with a copy button, so an upstream issue search has a version to look for.
Models assembled before this release keep their names, their tuning and the agents bound to them.
The engine moved forward about two hundred upstream commits, bringing llama.cpp's newer model architectures and backend fixes. Its Vulkan backend now ships without the shaders for the extreme low-bit quantizations; a model quantized to iq1, iq2, iq3 or tq2_0 still runs, with those matmuls on the CPU rather than the GPU.
Speculative decoding is set per device
A draft head that helps on a desktop and hurts tenfold on a phone no longer has to be part of what identifies the model, so one agent can run well on both. Speculation is turned on from a model's settings, on the device you turn it on for. A model's context size and cache types still follow you between devices. Models you had paired, starred, tuned or pointed an agent at keep working.
Diagnostics
The app has no backend of ours, so a failure only reaches the developer when you send it. Settings → Diagnostics builds an error report from this session's warnings and errors and shows the whole of it before anything leaves the device. You can add a note about what you were doing, untick anything you would rather keep, or leave the warnings out altogether. Send report opens your mail client with the report in it, Copy puts it on the clipboard, and Save writes it to a file through the system save dialog on desktop or the document picker on Android, so no storage permission is asked for.
Each report carries a short id in its subject and its body, so a reply can say which one it answers. A session that hits three serious failures offers, once, to open the screen, and the Settings entry in the navigation menu shows the error count in the meantime. A screen that fails to load has a Report button beside Back, with the warnings that led up to it already in the report.
Two things that should never have reached a report no longer can. An API key placed in a provider URL or a fetch tool template is no longer written to logs or into the text of a network error. And a release build no longer writes system prompts, entity names or request URLs to the device log at all.
Several questions in one turn
A tool round can raise several questions at once, and the conversation used to show only the newest, leaving the turn waiting on prompts nobody had seen. Every pending question is now shown, one at a time with a counter to step between them, so the composer stays where it is. Answering one leaves the rest in place, and the turn continues once the last of them is answered, including after a restart. Dismissing a question marks its tool call as not run, with the reason, instead of leaving a tile spinning.
Fetch tools name their destination
A fetch tool sends its URL, headers and body, including values the agent fills in from your conversation, to whoever runs that host. Creating one now requires accepting that, the way the provider form already did. When an agent builds the endpoint, the destination host is shown for approval before it is saved, and again if a later edit points it somewhere else.
Speed and steadiness
- The navigation sidebar and its badges stay mounted as you move between screens, so the menu no longer flickers or re-counts, and the unread numbers on the menu and in the workspace switcher always agree.
- Model names, the model picker, the agent list and the conversation are filled in from what a provider last returned, so they are readable the moment the app opens instead of seconds later.
- Forms stop re-running their storage queries on every keystroke; the agents list paints as soon as its agents and providers load; the providers and tools lists no longer flash "No API key" on every row while they load.
- Conversation search returns several times faster. It no longer searches tool output, which was most of the text in a real history, so a match points at something you wrote or read, and text that only ever came back from a tool is no longer findable.
- Sync stops retrying while your phone is asleep, and the sync icon stays calm through a reconnect after a wake. Red now means sync has genuinely been unable to reach your server, not that you just unlocked your phone.
- A provider whose address cannot be resolved reports that in about ten seconds instead of a minute.
- Picking a destination closes the navigation menu. On Android 15 and newer, back on a top-level screen opens the menu again rather than closing the app, and back while rows are ticked cancels the selection.
Elsewhere
- Settings → About carries the app and engine versions with their build dates and commits, the project website, and the contact address, each copyable in one tap. What's new and Open source moved onto it.
- An OpenRouter model chosen with :exacto, :nitro, :floor or :online shows those tags wherever the model is named, and no longer reads as a model the provider does not offer.
- The summarizer's instruction is editable wherever compaction is configured, inherited and resettable like the fields around it.
- A provider must have a name, and one no other provider already has.
- An unset provider, model or generation parameter reads "Not set" rather than claiming to have inherited a default that does not exist.
- Release notes render as paragraphs on a phone instead of breaking at the source file's line wraps.
- The app installs on Android devices with no camera, and links, the website and the contact address open properly on Android 11 and newer.