Releases: nworks3d/THOR-memory-bible-for-AI
Release list
v2.3.0
Built by CI from this tag on clean runners. Verify with the .sha256 next to each asset.
What's new in 2.3.0
-
The hint telling you to run
serve whyused to stop right there, with nothing after it - not a real flag, and not the file or command that actually triggered the block. Guessing the rest was a coin flip: one session guessed--path, but the flag has always been--file. The hint now spells out the whole command, flag and value included, andserve whyalso accepts a bare path with no flag at all - the shortest thing to type when you do not remember the flag's name. -
doctorused to leave two of its most useful checks silently unmeasured unless you passed--checkoutsyourself, with no hint that the flag even existed. It now looks at the repo you ran it from and guesses the right folder on its own, and always prints which folder it used - the one you gave it, its own guess, or, if it could not find either, a plain line saying so and how to fix it. -
A fact pinned to fire at every session start used to be permanently excluded from review, on the reasoning that pinning it was itself a decision. Measured on a real store: 48 pinned facts, 44 of them never looked at by anything, for as long as the store existed. A pinned fact now gets asked about once, the same as any other fact, and is then left alone unless it fires forty more times before its next review.
-
A check that looks for text present, absent, or absent everywhere can now point at a whole folder instead of one file, and it covers every file sitting directly inside it - not files in folders further inside, and not a backup copy of one of those files kept somewhere else. Handy when the same fact has to hold across more than one file in the same place, like a setting that must match between two config files. Pointing one at a system-wide folder like
/tmporC:\is refused, since that is too broad to mean anything as a single fact. -
The answer guard's length rule used to block a long reply even when you had explicitly asked for a list or overview and the reply actually was one. It now stands aside in exactly that case - not merely because your prompt happened to contain a word like "list", but only when the reply itself reads like one too. Separately, its evidence rule could be tricked into blocking an answer that already named a real commit or a real file-and-line, because it only recognised evidence written in one of a handful of fixed formats. A commit hash or a
file:linecitation in any shape is now recognised as well, on top of that original list. -
The example answer-guard rulebook shipped with this project only showed three simple rules. It now also includes a working example of the length rule and the evidence rule described above, so copying the example file gives you both from the start instead of writing them yourself from scratch.
If you keep an MCP session running across the upgrade, it keeps using the binary it started with until you restart it. Hooks run fresh each time, so they pick up the new one immediately.
Which download
| asset | meaning search | for |
|---|---|---|
thor2-windows-x86_64.zip |
yes | Windows, the machine your assistant runs on |
thor2-linux-x86_64.tar.gz |
yes | Linux, same |
thor2-linux-x86_64-plain.tar.gz |
no | servers, a NAS, a container |
Each one is a bundle, not a single program. Version 2 is several small
programs that work together: install sets everything up, doctor tells you
whether it is healthy, and the rest run in the background once installed.
What is NOT in the box
- No language model of any kind. Nothing calls out to an API, nothing needs
a key. Meaning search needs a local model file (about 235 MB) that you supply;
nothing downloads itself. Without it, search falls back to matching words and
keeps working - it does not break. - Windows: you need the Microsoft Visual C++ Redistributable
(MSVCP140.dll,VCRUNTIME140.dll) andDirectML.dll, which is already on
Windows 10 1903 and later. If a program refuses to start, install the VC++
redistributable first.
Install
Unpack everything into a folder where it can stay - the setup writes down where
it put things, so moving the folder afterwards breaks it. Then run install,
pointing it at your assistant's settings file. It backs that file up first and
only ever adds its own entries. Restart your assistant afterwards: it reads its
settings once, at startup, so until you restart nothing you installed is
running. Then run doctor to see whether it is actually healthy.
New here? The README walks through it step by step. Coming from version 1?
Your old notes are not lost - see the README's own note on that; version 1
itself is retired, and its source and docs stay reachable at the v1.0.0 tag.
What has actually been run
Every asset is built and tested by CI on a clean runner: the whole test suite,
plus a separate run with meaning search compiled in, plus the plain server
shape. The same two test runs, plus a release build with meaning search
compiled into both the server and client shapes, were also run before this tag
to confirm everything still compiles clean end to end. The packaged assets
themselves were not started by hand before publishing. If one does not start
for you, say so - that is the report worth having.
Full Changelog: v2.2.1...v2.3.0
v2.2.1
Built by CI from this tag on clean runners. Verify with the .sha256 next to each asset.
What's new in 2.2.1
- A place that is already full now refuses a new fact, instead of only warning about it. Until now, a fact stored onto a spot that was already at capacity slipped in quietly and could push a weaker one out of sight without telling you. The write is now refused until you fold, move or archive one of the sitting facts first, and a heavier fact that would silently displace a lighter one is refused the same way. This only applies where the count is reliable - a fact tied to one file, one folder or one command; a fact that reaches a place through a broader trigger still gets the warning it always got. A brand new install gets this immediately.
Which download
| asset | meaning search | for |
|---|---|---|
thor2-windows-x86_64.zip |
yes | Windows, the machine your assistant runs on |
thor2-linux-x86_64.tar.gz |
yes | Linux, same |
thor2-linux-x86_64-plain.tar.gz |
no | servers, a NAS, a container |
Each one is a bundle, not a single program. Version 2 is several small
programs that work together: install sets everything up, doctor tells you
whether it is healthy, and the rest run in the background once installed.
What is NOT in the box
- No language model of any kind. Nothing calls out to an API, nothing needs
a key. Meaning search needs a local model file (about 235 MB) that you supply;
nothing downloads itself. Without it, search falls back to matching words and
keeps working - it does not break. - Windows: you need the Microsoft Visual C++ Redistributable
(MSVCP140.dll,VCRUNTIME140.dll) andDirectML.dll, which is already on
Windows 10 1903 and later. If a program refuses to start, install the VC++
redistributable first.
Install
Unpack everything into a folder where it can stay - the setup writes down where
it put things, so moving the folder afterwards breaks it. Then run install,
pointing it at your assistant's settings file. It backs that file up first and
only ever adds its own entries. Restart your assistant afterwards: it reads its
settings once, at startup, so until you restart nothing you installed is
running. Then run doctor to see whether it is actually healthy.
New here? The README walks through it step by step. Coming from version 1?
Your old notes are not lost - see the README's own note on that; version 1
itself is retired, and its source and docs stay reachable at the v1.0.0 tag.
What has actually been run
Every asset is built and tested by CI on a clean runner: the whole test suite,
plus a separate run with meaning search compiled in, plus the plain server
shape. The same two test runs, plus a release build with meaning search
compiled into both the server and client shapes, were also run before this tag
to confirm everything still compiles clean end to end. The packaged assets
themselves were not started by hand before publishing. If one does not start
for you, say so - that is the report worth having.
Full Changelog: v2.2.0...v2.2.1
v2.2.0
Built by CI from this tag on clean runners. Verify with the .sha256 next to each asset.
What's new in 2.2.0
-
The store's own repair could lock it for everyone, and its log could grow without bound. Opening the store used to repair its search index by deleting the whole thing and rebuilding it one row at a time, inside a single held write lock - on a machine running more than one session at once, a second open could re-trigger the same rebuild before the first one finished. Separately, nothing capped the size of the write-ahead log file that sits beside your store: one was measured at 3.4 GB next to a 75 MB store. Both are fixed. The repair is now one transaction that touches only the rows actually missing (falling back to a full rebuild only when the index is genuinely wrong, not merely behind), and every time the store opens it caps that log file at 64 MB and gives it a chance to checkpoint back down.
-
A new check catches a forgotten step, not just a wrong one. Every check before this could only catch text that was written somewhere - a forbidden word, a missing line. None of them could catch something left OUT, because forgetting leaves no fragment to look for. The new
requirescheck kind carries a trigger (the exact command or tool it watches, which has to be one of the things the rule is already bound to) plus a set of acceptable answers; a call that reaches the trigger without giving any of the answers is refused. It can never bind to "always", because "always" names no specific command or tool for the trigger to compare against. -
Deleting or overwriting a protected file from a shell command used to slip straight through. A rule guarding a file only ever caught a direct edit made through your assistant's own edit tool. Doing the same damage from a shell command -
rm,git rm,truncate,sed -i,tee, a redirect (>or>>), or amv/cplanding on that file - was never even looked at. All of those now count as a write to the file, exactly like an edit does, so the same rule refuses them too. -
A rule bound to a tool's own name is now actually watched when that tool is called. A rule bound to, say,
Agent,Artifact, orSendUserFileused to be seen only along one narrow internal path, so it stayed effectively invisible unless it was also pinned to fire "always" as a workaround. It is now served the same way any other rule is, the moment that tool is called. -
Two binding targets that nothing ever fires are now refused on new rules.
answerandclaim_donelooked like valid triggers to bind a rule to, but nothing in the system has ever actually produced either one - so a rule bound only to one of them stored cleanly and then sat silently doing nothing, forever, with no warning. Binding a brand new rule only to one of those two is now refused at write time;doctoralso lists any rule already stuck in that state, so you know what to look at and re-bind. -
doctorhas a new line watching its own log file, silent for the ordinary case and only speaking up once that write-ahead log has grown past both 64 MB and the size of the store itself - measured beforedoctoropens its own connection to the store, so its own act of checking never throws off what it reports. Also fixed: the--checkoutsand--model-dircommand-line options had swapped help text. -
verifycan now actually repair what it finds broken. It already checked the event log's own hash chain; it now also checks the derived heads projection and the search index, and two flags its own documentation had long promised,--rebuild-ftsand--rebuild-heads, now exist. Both are safe to run regardless of what caused the drift, because each rebuilds a projection the append-only log can always reproduce losslessly, and neither touches anything unless its matching check actually failed. -
A new example,
teeth_census, lists which of your heaviest rules still cannot refuse anything.doctorhas always reported a single count of how many rules marked costly or irreversible can actually prove themselves; a count alone never told you WHICH ones still can't.teeth_censuswalks the same live store and prints one line per heavy rule, so you get an actual worklist instead of just a number. -
revisecan now clear an item's tags on purpose. Giving it an explicit empty tag list used to be refused outright, on the assumption an empty list must be a mistake, so there was no way to deliberately remove every tag from an item. An explicit empty list is now accepted as exactly that: a deliberate clear, the same convention every other field onrevisealready follows. -
The README and setup guide now describe all of the above in plain language, and the tool counts they quote (sixteen tools, ten notes seeded into a brand new store) are counted directly against the code rather than assumed.
If you keep an MCP session running across the upgrade, it keeps using the binary it started with until you restart it. Hooks run fresh each time, so they pick up the new one immediately.
Which download
| asset | meaning search | for |
|---|---|---|
thor2-windows-x86_64.zip |
yes | Windows, the machine your assistant runs on |
thor2-linux-x86_64.tar.gz |
yes | Linux, same |
thor2-linux-x86_64-plain.tar.gz |
no | servers, a NAS, a container |
Each one is a bundle, not a single program. Version 2 is several small
programs that work together: install sets everything up, doctor tells you
whether it is healthy, and the rest run in the background once installed.
What is NOT in the box
- No language model of any kind. Nothing calls out to an API, nothing needs
a key. Meaning search needs a local model file (about 235 MB) that you supply;
nothing downloads itself. Without it, search falls back to matching words and
keeps working - it does not break. - Windows: you need the Microsoft Visual C++ Redistributable
(MSVCP140.dll,VCRUNTIME140.dll) andDirectML.dll, which is already on
Windows 10 1903 and later. If a program refuses to start, install the VC++
redistributable first.
Install
Unpack everything into a folder where it can stay - the setup writes down where
it put things, so moving the folder afterwards breaks it. Then run install,
pointing it at your assistant's settings file. It backs that file up first and
only ever adds its own entries. Restart your assistant afterwards: it reads its
settings once, at startup, so until you restart nothing you installed is
running. Then run doctor to see whether it is actually healthy.
New here? The README walks through it step by step. Coming from version 1?
Your old notes are not lost - see the README's own note on that; version 1
itself is retired, and its source and docs stay reachable at the v1.0.0 tag.
What has actually been run
Every asset is built and tested by CI on a clean runner: the whole test suite,
plus a separate run with meaning search compiled in, plus the plain server
shape. The same code, built from this tree, ran the maintainer's own store
for hours before this tag: the repaired index heal, the shell-write guard and
the new check kind were all probed against it with the forbidden text in the
probe. The packaged assets themselves were not started by hand before
publishing. If one does not start for you, say so - that is the report worth
having.
Full Changelog: v2.1.1...v2.2.0
v2.1.1
Built by CI from this tag on clean runners. Verify with the .sha256 next to each asset.
Which download
| asset | meaning search | for |
|---|---|---|
thor2-windows-x86_64.zip |
yes | Windows, the machine your assistant runs on |
thor2-linux-x86_64.tar.gz |
yes | Linux, same |
thor2-linux-x86_64-plain.tar.gz |
no | servers, a NAS, a container |
Each one is a bundle, not a single program. Version 2 is several small
programs that work together: install sets everything up, doctor tells you
whether it is healthy, and the rest run in the background once installed.
What is NOT in the box
- No language model of any kind. Nothing calls out to an API, nothing needs
a key. Meaning search needs a local model file (about 235 MB) that you supply;
nothing downloads itself. Without it, search falls back to matching words and
keeps working - it does not break. - Windows: you need the Microsoft Visual C++ Redistributable
(MSVCP140.dll,VCRUNTIME140.dll) andDirectML.dll, which is already on
Windows 10 1903 and later. If a program refuses to start, install the VC++
redistributable first.
Install
Unpack everything into a folder where it can stay - the setup writes down where
it put things, so moving the folder afterwards breaks it. Then run install,
pointing it at your assistant's settings file. It backs that file up first and
only ever adds its own entries. Restart your assistant afterwards: it reads its
settings once, at startup, so until you restart nothing you installed is
running. Then run doctor to see whether it is actually healthy.
New here? The README walks through it step by step. Coming from version 1?
Your old notes are not lost - see the README's own note on that; version 1
itself is retired, and its source and docs stay reachable at the v1.0.0 tag.
What has actually been run
Every asset is built and tested by CI on a clean runner: the whole test suite,
plus a separate run with meaning search compiled in, plus the plain server
shape. Beyond that, the maintainer starts the Windows build by hand before
publishing; the Linux ones are CI-built only. If one does not start for you,
say so - that is the report worth having.
Full Changelog: v2.1.0...v2.1.1
v2.1.0 - a second memory, for everything that is not code
What 2.1 adds: a second memory, for everything that is not code
Why this exists at all. The memory THOR already had is built for work. It
has a gate that turns bad notes away, notes that speak up on their own at the
moment they apply, and a hard cap on how much ever reaches your conversation.
Every one of those is right for a rule about your code, and every one of them is
wrong for a recipe.
Put everyday things into that same memory and three things go wrong, all of them
quietly. A list of the books you have read competes for space with a rule whose
job is to stop you dropping a database, and the cap decides between them. An
answer comes back looking complete when most of it was left out. And asking in
your own words returns nothing at all: search matches whole words, so "ribbetjes"
finds none of the three notes that say "ribben".
Why a separate memory and not a new category. A category inside the same
memory was the obvious fix, and it does not work: the two still share one list,
one ranking and one cap, so they still compete - just with extra bookkeeping. So
2.1 adds a genuinely separate memory, with its own file and its own two
commands. It cannot reach the first one at all; that is enforced by how the
program is put together, not by being careful. Nothing you file there can
interrupt you, crowd out a rule, or take up room in a block. You only ever see
it because you asked for it.
How it works. Like a shelf - and each rule below comes from watching the
first memory go wrong in exactly that way.
- Everything lives on a shelf, and shelves do not nest. Books, recipes, a
training log, what you spent. Filing something without naming a shelf is
refused, and the refusal lists the shelves you have, so your assistant picks a
real one instead of inventing a name. - Only you create a shelf. If nothing fits, your assistant has to ask you
what the new one should be called. This is the rule that stops a tidy list of
eight becoming a sprawl of sixty, and it is there because the first memory
sprawled exactly that way. - A shelf that grows gets labels, never a split. Two hundred recipes on one
shelf, filtered by "bbq" or "dessert", is still one shelf. The content grows;
the list of shelves does not. - You get an index, not a wall of text. Open a shelf and you see one line per
entry. Ask for one by number to read it whole. - The same thing twice is refused, pointing at the entry you already have.
- Nothing is ever deleted. Retiring an entry takes it out of the listing and
leaves it readable. - A search never answers "nothing". If your words miss - and they will, since
the words you ask with are rarely the words you wrote - it hands you the shelf
to read instead. That is the whole answer to the "ribbetjes" problem: not
cleverer matching, but a short list you can read.
Also in 2.1, on the code side
- A note for the archive has to say where it belongs. The field was optional,
and an optional field nobody fills stays empty: two thirds of one real memory
had no home, findable only by guessing the right words. It is now required,
and the refusal lists the homes that already exist so being refused costs one
more call rather than three. - You can open one of those homes and read what is in it, one line per note -
and its count now matches what it actually holds, instead of quietly leaving
out the notes that can fire. - Writes from a phone or a second machine no longer fork the log. Four of the
eight writing commands were skipping the queue and writing into the local copy
directly. Judging a note was the worst of them, because that is the write such
a session makes most often. All eight now queue, and a test fails if a new one
ever forgets. - A queue that cannot be fully replayed is now refused instead of dropped.
If the machine draining it runs an older build, it says so and keeps the
writes, rather than clearing the queue and reporting them lost.
Built by CI from this tag on clean runners. Verify with the .sha256 next to each asset.
Which download
| asset | meaning search | for |
|---|---|---|
thor2-windows-x86_64.zip |
yes | Windows, the machine your assistant runs on |
thor2-linux-x86_64.tar.gz |
yes | Linux, same |
thor2-linux-x86_64-plain.tar.gz |
no | servers, a NAS, a container |
Each one is a bundle, not a single program. Version 2 is several small
programs that work together: install sets everything up, doctor tells you
whether it is healthy, and the rest run in the background once installed.
What is NOT in the box
- No language model of any kind. Nothing calls out to an API, nothing needs
a key. Meaning search needs a local model file (about 235 MB) that you supply;
nothing downloads itself. Without it, search falls back to matching words and
keeps working - it does not break. - Windows: you need the Microsoft Visual C++ Redistributable
(MSVCP140.dll,VCRUNTIME140.dll) andDirectML.dll, which is already on
Windows 10 1903 and later. If a program refuses to start, install the VC++
redistributable first.
Install
Unpack everything into a folder where it can stay - the setup writes down where
it put things, so moving the folder afterwards breaks it. Then run install,
pointing it at your assistant's settings file. It backs that file up first and
only ever adds its own entries. Restart your assistant afterwards: it reads its
settings once, at startup, so until you restart nothing you installed is
running. Then run doctor to see whether it is actually healthy.
New here? The README walks through it step by step. Coming from version 1?
Your old notes are not lost - see the README's own note on that; version 1
itself is retired, and its source and docs stay reachable at the v1.0.0 tag.
What has actually been run
Every asset is built and tested by CI on a clean runner: the whole test suite,
plus a separate run with meaning search compiled in, plus the plain server
shape. Beyond that, the maintainer starts the Windows build by hand before
publishing; the Linux ones are CI-built only. If one does not start for you,
say so - that is the report worth having.
Full Changelog: v2.0.0...v2.1.0
v2.0.0
Built by CI from this tag on clean runners. Verify with the .sha256 next to each asset.
Which download
| asset | meaning search | for |
|---|---|---|
thor2-windows-x86_64.zip |
yes | Windows, the machine your assistant runs on |
thor2-linux-x86_64.tar.gz |
yes | Linux, same |
thor2-linux-x86_64-plain.tar.gz |
no | servers, a NAS, a container |
Each one is a bundle, not a single program. Version 2 is several small
programs that work together: install sets everything up, doctor tells you
whether it is healthy, and the rest run in the background once installed.
What is NOT in the box
- No language model of any kind. Nothing calls out to an API, nothing needs
a key. Meaning search needs a local model file (about 235 MB) that you supply;
nothing downloads itself. Without it, search falls back to matching words and
keeps working - it does not break. - Windows: you need the Microsoft Visual C++ Redistributable
(MSVCP140.dll,VCRUNTIME140.dll) andDirectML.dll, which is already on
Windows 10 1903 and later. If a program refuses to start, install the VC++
redistributable first.
Install
Unpack everything into a folder where it can stay - the setup writes down where
it put things, so moving the folder afterwards breaks it. Then run install,
pointing it at your assistant's settings file. It backs that file up first and
only ever adds its own entries. Restart your assistant afterwards: it reads its
settings once, at startup, so until you restart nothing you installed is
running. Then run doctor to see whether it is actually healthy.
New here? The README walks through it step by step. Coming from version 1?
Your old notes are not lost - see the README's own note on that; and version 1's
documentation is still in docs/1.0/.
What has actually been run
Every asset is built and tested by CI on a clean runner: the whole test suite,
plus a separate run with meaning search compiled in, plus the plain server
shape. Beyond that, the maintainer starts the Windows build by hand before
publishing; the Linux ones are CI-built only. If one does not start for you,
say so - that is the report worth having.
Full Changelog: v1.0.0...v2.0.0
v1.0.0
Built by CI from this tag on clean runners. Verify with the .sha256 next to each asset.
Which asset
| asset | recall | for |
|---|---|---|
thor-windows-x86_64.zip |
semantic + bm25 | Windows client (the agent machine) |
thor-linux-x86_64.tar.gz |
semantic + bm25 | Linux client |
thor-linux-x86_64-bm25.tar.gz |
bm25 only | servers / NAS / containers - no ONNX |
What is NOT in the box
- No embedding model. Semantic recall needs a local ONNX sentence-embedding
model (~235 MB) that you supply; nothing auto-downloads. Without it THOR runs
pure bm25 and degrades cleanly - it does not break. See README ("Semantic mode"). - Windows: needs the Microsoft Visual C++ Redistributable (
MSVCP140.dll,
VCRUNTIME140.dll) andDirectML.dll(present on Windows 10 1903+). If the
binary refuses to start, install the VC++ redistributable first.
Install
Unpack, put the binary where it will stay, then thor install --with-courier to
wire the hooks into your agent (it backs up settings.json first and only adds
THOR's own entries; it writes the binary's current path, so move it before you
install). Run thor doctor if anything looks off - it reports the store, model,
sidecars and daemon, which is what recall behaviour depends on.
New here? docs/FEATURES.md explains in plain words what each part does and whether it
is worth turning on. Full walkthrough: docs/SETUP.md. Exact costs and undo steps for
every optional piece: docs/OPTIONAL-FEATURES.md.
What has actually been run
Every asset is built and tested by CI on a clean runner - build plus the full
library suite, on both shapes THOR ships in. Beyond that, the platform the
maintainer uses is started by hand before publishing; the others are CI-built.
If one does not start for you, say so - that is the report worth having.
Full Changelog: https://github.com/nworks3d/THOR-memory-bible-for-AI/commits/v1.0.0