---
title: "2026.09.06"
date: 2026-09-06
extra:
  version: "2026.09.06"
  build: 16
  change_id: xlwvxxwtlrxy
  highlights:
    - text: "There is a Linux download now: an AppImage from the website"
    - text: "Pick an embedded model, its projector and draft head from the model list"
      path: "/settings/providers"
    - text: "Settings → Diagnostics sends an error report, after you have read it"
      path: "/settings/diagnostics"
    - text: "Speculation is set per device; a model's tuning still syncs"
    - text: "Menus, lists and search stop flickering and re-reading"
---

This 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.
