mindfork 0.14.0 — a window of any size, and one reasoning effort for every model
mindfork 0.14.0 is out. Two pieces of work are in it, and neither adds a screen: the app in a small window, and the reasoning effort on models that each take a different part of the scale.
A small window
A terminal window can be dragged down to a few rows, and split panes get there without anyone meaning to. Until now the app drew what fitted and left the rest out: at 57×5 the input box lost its row of text and its prompt landed on the status bar; a tool confirmation's keys — the ones that answer it — were cut off at the corner, its legend being 69 columns wide in Russian.
Two rules replace that.
The chat gives up its chrome, one piece at a time. In a window of eleven
rows or more nothing changes. Below that the status bar keeps one row, then the
input box loses its border, then the feed does, then the status row goes — so a
window of five rows is four rows of the conversation over the ❯ prompt, and
three rows are still a chat. The key hints a border carried are on F1.
A window too small for what is in front says so. Below what a screen needs
— 20×3 for the chat, 46×12 for the settings — the app shows one line: Window
too small, the size the window is and the size it needs. While it is up the
keys do nothing but quit, so Enter cannot answer a question that is not on the
screen; Esc also works when what does not fit was opened over the chat — a
picker, the help, the settings — and closes it.
The same pass went over everything a narrow window used to cut:
- A screen's key legend takes a third of the window at most. In Russian the
chat list's legend wrapped to 13 rows of a 14-row window, leaving one chat
above it; past a third it now leaves hints out, keeping
F1andEscfirst. - The status bar shows every indicator whole that fits and leaves out the rest — it used to be cut mid-number, and what fell off during a turn was the token counter.
- A box's title drops whole hints rather than ending mid-word; two titles on one
border no longer run into each other; the help's tabs stay whole, with
…where others are hidden; and the chat's title is no longer squeezed out by the model's name. - No cursor blinks through a tool confirmation or through the help.
At 80×24 nothing looks different.
One reasoning effort, every model
The reasoning effort is one setting, and no two models take the same part of
its scale. Measured across ten OpenAI models, there are five different sets:
nine of the ten refuse minimal, five take max, and gpt-6.1-sol cannot
switch reasoning off where gpt-6-sol can. The provider's answer to a value a
model lacks is an error — so an effort chosen for one model made every message
to the next one fail.
A value the model does not have is now the nearest it has. The request goes out as chosen; if the model refuses it and says what it takes, the app asks once more with the closest value on the list — the lower one on a tie, never more reasoning than you asked for where less is as near — and remembers the answer for that model.
The scale has a new top: max, after xhigh — the tier the newest OpenAI
and Claude models have. On a model or a provider without it the nearest tier is
used: xhigh on Grok and on the older GPT models, high on Gemini. And
xhigh on Claude is now xhigh: it had been sent as high since before the
API had the tier, so a chat set to it on Opus 4.7 or newer reasons deeper than
it did, at that tier's price.
Grok's efforts are read from xAI's own list. A chat's title, the history
summary, a message written on your behalf and a page's retelling ask the model
not to reason. On Grok that request was dropped, and each of them reasoned at
the model's default depth. The app now reads what xAI says each model takes:
Grok 4.3 is switched off for those requests — measured, 0.7–0.8 seconds where
they took three or four — and the newer models, which cannot be switched off,
are asked for low instead of their default high. The thinking switch, which
did nothing on Grok, now works there.
Models that answer again
The same work turned up models on which the app's own defaults were an error on every message:
- Claude Haiku 4.5, Sonnet 4.5 and Opus 4.5. Thinking is on by default, and
those three have no "adaptive" thinking, the only form the app asked for.
They are now asked to think within a token budget taken from the effort —
1024 for
low, 8192 formediumor none, 24576 forhighand above, and never more than half the reply limit. grok-build-0.1and the twogrok-4.20models refuse the effort setting itself. With any effort chosen every message to them failed; they are now asked again without it.- Titles on
gpt-6.1-sol, Gemini 3.7 Flash and 3.8 Flash. These refuse the "do not reason" a title is asked with, so chats there stayed untitled — and the history summary and the other background requests failed with it. They are asked with the lowest effort the model offers — on Gemini, the next level up.youtube_watchwith one of those two Gemini models as the video model had the same failure. - A Grok model named by an alias, such as
grok-4.5-latest, has its context size.
Your data
settings.json and the chat files move from version 4 to 5. Nothing in them is
rewritten — the step stamps the version, because max is kept in the settings,
in a profile's defaults and in every chat, beside each reply made under it, and
a version that does not know a value cannot read the file that holds it. 0.13.0
would have refused such settings and, worse, left a chat that held the value
out of its list without a word; stamped, it refuses the data as a newer
version's and says so. As with every schema change, the data is backed up
before it is migrated — backups/pre-migrate-<date>.zip — and that backup is
the way back.
The full list is in the
changelog;
downloads are on the
releases page, and
cargo install mindfork builds the same version from
crates.io.