mindfork mindfork

mindfork 0.9.7 — wherever your terminal is

mindfork 0.9.7 is out. It is a release about reach: running the app somewhere other than a terminal window of your own, and giving conversations an address so they can point at each other.

The terminal is not always yours

A terminal embedded in something else takes key combinations for itself before the app ever sees them. VS Code's integrated terminal claims Ctrl+P, Ctrl+E, Ctrl+F, Ctrl+K, F1, F3, F5, F10 and Ctrl+Q by default; a terminal in a browser tab claims Ctrl+N, Ctrl+T and Ctrl+W — the last of which closes the tab your session is running in. Measured against VS Code's defaults, six features of the app were simply unreachable there.

Nineteen new commands close that: /settings, /self, /chats, /help, /new, /rename, /clone, /copy, /regen, /takeback, /impersonate, /stop, /find, /search, /links, /thoughts, /toolcalls, /mouse and /emoji, plus /profile list|new|delete and /self clear for the two actions that lived inside other screens. Each one reaches the same handler its key does, confirmation prompts included — and, unlike a key, a command that cannot run right now says why and names something that will. The keys are unchanged; what the commands add is a second route.

Copying works over SSH

The clipboard an application writes belongs to the machine it runs on. Over SSH that is the server's clipboard, which does you no good — and on a headless server, where there is no clipboard at all, a copy simply failed.

A copy is now also handed to the clipboard of the machine your terminal runs on, through the terminal itself (OSC 52), automatically when the session looks remote. A new setting makes that always or off.

The protocol acknowledges nothing, so the app says the text was sent rather than promising it arrived — and not every terminal implements it: GNOME Terminal, Terminal.app and JupyterLab's terminal do not. A conversation too large for the sequence (about 75 KB) is reported as such instead of being quietly cut in half.

A conversation, saved to a file

/export writes the open chat next to wherever you started the app, named after the chat and the date; /export path/to/name.md puts it where you say. Markdown is byte-for-byte what F5 copies, and json is a document mindfork-rs import reads back onto the same conversation. An existing file is never overwritten.

This is also the one way out of a browser terminal such as JupyterLab's, where neither clipboard route can reach your machine at all.

Your other conversations

Two new tools, chat_search and chat_read, let the assistant find and read what your other conversations with the same companion said — for questions like "we worked this out in another chat". They are off by default and not even shown to the model until you turn them on per profile; the current chat, hidden chats and other profiles stay out of reach.

When the assistant mentions one of those conversations it now writes its address as chat://<id>, and the feed draws that as a link. Ctrl+L lists the conversations the open chat points at and opens the one you pick; with mouse capture on you can click the link — the first thing in the feed that is clickable at all. Esc takes you back where you came from, and keeps meaning that only while you are reading: start working in the chat you arrived at and Esc goes back to meaning "the chat list", so it can never teleport you out of a conversation you have settled into.

Only addresses that really lead somewhere are drawn as links, so following one is never a dead end.

Also in this release

  • New chats name themselves. After the first reply the model writes the conversation a short title — no more lists full of "New chat". On by default; a setting moves it to right after your first message, the way cloud chat UIs do it, or turns it off. A chat you renamed yourself is never touched.
  • An external server's API key can be entered in settings, stored encrypted and bound to this machine, instead of having to come from an environment variable — for a gateway such as LiteLLM or OpenRouter, or a llama-server started with --api-key. Each external tab keeps its own key, because those are four independent servers.
  • The model's name in the feed, optionally, next to each reply — taken from the message itself, so a conversation reopened after switching providers still says which model actually answered.
  • The F1 help window grows with the terminal, aligns its descriptions in a column and wraps the long ones instead of cutting them off mid-word.

The full list is in the changelog. Downloads — Windows installer and archive, Linux archive, .deb, .rpm and .pkg.tar.zst — are on the releases page.