mindfork mindfork

mindfork 0.10.2 — which copy of your data is the newest

mindfork 0.10.2 is out. It is a small release with one subject: data that lives on more than one computer.

mindfork keeps everything in a folder next to itself, with no account and no sync. That is a promise, and it has a price: the day there is a desktop, a laptop and a backup archive, "which of these do I keep?" is a question only you can answer — and until now the way to answer it was to open each copy and look.

Which copy is the newest

mindfork stats                  # the data on this computer
mindfork stats copy.zip         # a backup archive, without restoring it

It prints when the last message was written and when anything last changed, how many profiles, chats and messages there are — and how many of them are deleted — and the attached and stored files, images, projects, notes and the knowledge base. Messages are counted the way the chat list counts them, and times are in UTC, so the output of two computers can be read side by side, line by line.

The command only reads. Nothing is created, migrated or unpacked, so it is safe to run while the app is open, and an archive stays a closed archive: an encrypted one is read in memory and never written out decrypted. The password is found the way restore finds it — --password, else the one saved in the settings, else you are asked.

The summary ends its first block with a fingerprint. Two computers that print the same one hold identical chats, notes, knowledge base and self-models, and there is nothing more to check.

What each copy holds that the other lacks

The newest copy is not always the most complete one. A chat continued on the laptop after the desktop's backup was taken exists only on the laptop — and the desktop may still be the copy written last.

mindfork stats --json > laptop.json     # on the other computer
mindfork stats --compare laptop.json    # here

The snapshot is a small file — ids, titles and checksums, no message text — so it can travel by whatever is at hand. --compare takes a backup archive of the other copy just as well. It prints a verdict first: the copies are identical; this copy holds everything the other has, or the reverse; or each copy holds something the other lacks. Then the lists behind the verdict — chats only here, only there, continued here or there, and diverged: one chat continued on both computers, each side holding messages the other does not.

Chats are compared by the ids of their messages, not by counts or dates. That is the whole point: a chat continued on two machines has more messages on each side than the other knows about, and a comparison by dates would report it as merely "newer there" — and keeping that side would lose the other's half in silence.

mindfork does not merge copies. When each side holds something, keep both until you have decided what to do with what is listed. The install guide has the full description, next to backup and restore.

One frame, not two

Picking a chat in the chat list used to show the conversation you were leaving for a fraction of a second before the one you asked for. The list now stays on screen until the chat is ready, so the switch is a single step — and the same goes for a new chat, a clone, a search hit and a run opened from the tasks screen. A clone that is refused now says so in the list, instead of in the chat behind it.

Also in this release

  • restore asks for the password on stderr, so redirecting a command's output no longer hides the question. And when the password that fails is the one saved in the settings, the message says that and points at --password, instead of "wrong backup password" for a password you never typed.

Nothing about the stored data changes in this release: no migration runs, and 0.10.1 and 0.10.2 open the same files.

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, and cargo install mindfork builds the same version from crates.io.