One vault of markdown on your own disk. Claude Code writes to it, Cursor reads from it, Codex picks up where both stopped. Every tool is a client of the same record — and none of them owns it, including this one.
$ npx -y @noeton/logos setup
Finds the agents already installed, shows you what it would write to each, and
writes nothing until you say yes. --dry-run prints the plan and exits.
grep them. Commit them. Delete the index and it rebuilds from
the files — delete the files and there was nothing else.
Everything below is output from brain demo, copied out of a real
run against a scratch vault. Nothing here is a mockup, and you can produce the
same six panes on your own machine in about four seconds.
A fact arrives, and the tool says so out loud. Silent background work reads to a user as a product that is not running.
> "staging runs on port 8080" ✓ Logos · stored in brain — memory #1
No shared process, no shared context window. Only the vault is in common.
> "we moved staging to port 9090" ✓ Logos · stored in brain — memory #2
Two values for one thing, both retrievable, nothing saying which is true. Whichever embeds closer to the question wins — and that is not the same as being right.
#1 Staging runs on port 8080. ← still returned #2 Staging runs on port 9090. ← also returned
Not a re-rank. The old value is withheld, and the reason it was withheld goes on the record.
✓ Logos · 1 memory superseded — the old value is now history
One answer comes back. The superseded one is not ranked lower; it is not there.
> context("deploy to staging") - fact: Staging runs on port 9090. (demo, 2 Sep 2026, confidence 0.90)
Append-only. You can ask any memory when it was learned, what corroborated it, and what replaced it.
created #1 Staging runs on port 8080. created #2 Staging runs on port 9090. superseded #1 Staging runs on port 8080. → #2
Run it yourself against a scratch vault — nothing of yours is touched:
npx -y @noeton/logos demo
A checkpoint is a markdown file with front matter, written by whichever agent was working. A resume is what a different agent, on a different day, in a different product, reads back. Both panes below are real files from this project’s own vault.
--- type: checkpoint project: logos agent: claude branch: feat/bench-temporal commit: a5e72a2 uncommitted: 2 checkpointed: 2026-09-01T08:57:24-07:00 --- ## Didn't work - publishing under the unscoped name 'logos' — taken on npm at 1.0.4 - claiming the @logos scope — the org already exists, not ours to take
# Context for: resume work on logos Last checkpoint by claude, 1d ago. Repository was: feat/bench-temporal a5e72a2 · 2 files uncommitted Already tried, didn't work: - publishing under the unscoped name 'logos' — taken on npm at 1.0.4 - claiming the @logos scope — the org already exists, not ours to take _Context budget: ~284 of 4000 tokens._
The dead ends travel. An agent that has never seen your project does not get to spend an hour rediscovering what last week’s agent already paid for.
Point it at a repository you have never used it on. It reads the git history and
proposes what it can defend, each with the command that produced it — then
writes nothing until you drop --dry-run.
From the git history of ~/code/logos, scoped to project "brain": 1. Coder8124 writes most of this codebase — 145 of the last 145 commits. git shortlog -sn: Coder8124 145/145 · confidence 0.80 2. Change concentrates in cmd/brain/ (145), (root) (93) and internal/memory/ (72) — file-touch counts over the last 145 commits. git log --name-only: 977 paths across 69 areas · confidence 0.80 3. Commit subjects here are capitalised sentences with no trailing period — 124 of the last 145. git log --format=%s: 124/145 · confidence 0.65 4. This project runs at roughly 12 commits a month; the most recent is dated 2026-09-02. 145 commits over 12 months · confidence 0.80 4 memories would be written. Nothing was.
Every line carries the command behind it, so you can check any claim rather than
take it. Changed your mind after writing them? brain memory forget --source bootstrap
removes exactly what the machine added and nothing you did.
The failure mode this project exists to avoid is memory that lives inside one product. If your record is a table in somebody’s app, switching agents means starting over, and the vendor decides how long you get to keep it. So the rule here is enforced at every layer, not just advertised at the top one:
.brain/index.db is SQLite and is a cache. Delete it; it rebuilds from the files. Nothing is only in the database.import "github.com/Coder8124/brain" and embed the engine directly if you are building your own agent.If this project stops being maintained tomorrow, you still have a directory of markdown. That is the test of ownership, and it is the only one that matters.
| Host | Wired by setup | Verified |
|---|---|---|
| Claude Code | yes — plus hooks, /handoff, a skill | handshake + round trip |
| Codex | yes — codex mcp add | handshake + round trip |
| Cursor | yes — merges ~/.cursor/mcp.json | handshake + round trip |
| Claude Desktop | yes — merges the desktop config | handshake + round trip |
| Zed · Cline · Windsurf · Continue · Gemini CLI | manual JSON, below | help wanted |
“Verified” means a real handshake and a real store-then-recall against that host, not that the config file looks right. The unverified rows say so on purpose — if you use one, a report closes the gap.
Existing memory benchmarks score retrieval: given a long history, can the system find the fact. That is not the setting these tools are deployed in. We built a handoff suite instead — 32 hand-authored scenarios, nine systems, the same embedding model throughout — where a scenario passes only if the successor gets the current fact, without the stale one beside it, inside a token budget it did not choose.
| System | Pass rate | Pass | Carry | Leak | Signal |
|---|---|---|---|---|---|
| Logos | 84.4% | 89.1% | 16.7% | 88.9% | |
| mempalace | 46.9% | 82.8% | 58.3% | 22.2% | |
| recency-window | 46.9% | 84.4% | 83.3% | 22.2% | |
| full-dump | 46.9% | 84.4% | 83.3% | 22.2% | |
| letta | 43.8% | 82.8% | 83.3% | 22.2% | |
| mem0 | 43.8% | 82.8% | 83.3% | 22.2% | |
| vector-rag | 43.8% | 82.8% | 83.3% | 22.2% | |
| static-file | 6.2% | 22.7% | 0.0% | 0.0% | |
| no memory | 0.0% | 6.2% | 0.0% | 0.0% |
Carry is required facts retrieved. Leak is superseded facts returned anyway — lower is better. Signal is telling the successor that something was already tried or has since changed.
Read the row order carefully, because it is the finding: retrieval is not the differentiator. Every real system carries 82–89% of the required facts. The entire spread comes from leakage and signal — from whether the agent that resumes gets one answer or gets the right one sitting next to the wrong one it replaced.
On the durability family — write, delete every rebuildable artifact, read again — Logos scores 100% and every other system scores 0%.
It loses too, and the numbers stay in: arithmetic, recency-conflict and multi-hop are all 0%. The suite, the scenarios and the runner are in the repository, so you can reproduce the wins and the losses alike — the write-up is here.
A continuity layer nobody notices restoring anything is a continuity layer nobody believes in. So every operation that changes what the assistant knows says so, in one line, in the host you are already looking at.
✓ Logos · stored in brain — memory #41 (fact, kestrel) ✓ Logos · already knew that — reinforced memory #12 (fact, kestrel) ✓ Logos · checkpoint saved to brain — 20260902-171104-claude.md ✓ Logos · recalled 1 checkpoint, 3 notes, 2 open questions
Too chatty after the first week? LOGOS_ANNOUNCE=quiet shortens them and
off removes the marker entirely. What never changes with the setting is
the information — turning receipts down tells you less loudly, not less.
And a separate, host-level record that does not depend on a model choosing to write
it: brain activity replays every prompt, tool call and turn the agent
actually took, captured by hooks rather than volunteered.
The version to prefer, because it is more than the MCP server: it also installs a SessionStart hook that puts the last handoff in front of the model before it does anything — the difference between continuity that works and continuity that works when the model remembers to ask for it.
/ plugin marketplace add Coder8124/logos
/ plugin install logos@logos
The marketplace is the repository; the plugin inside it is named logos.
Deep links that hand the host a finished config. Nothing else to edit.
No install at all — npx resolves the binary on demand, so this config is portable between machines in a way an absolute path is not.
{
"mcpServers": {
"logos": {
"command": "npx",
"args": ["-y", "@noeton/logos", "mcp", "serve"]
}
}
}
Add "env": { "BRAIN_VAULT": "/path/to/vault" } to keep the vault somewhere other than ~/brain.
One static executable, pure Go with CGO_ENABLED=0 — so a single Linux build covers glibc and musl alike. Checksums travel with the release.
| Platform | Archive | Download | Unpacked |
|---|---|---|---|
| macOS · Apple silicon | brain_v0.3.5_darwin_arm64.tar.gz | 4.9 MB | 11.5 MB |
| macOS · Intel | brain_v0.3.5_darwin_amd64.tar.gz | 5.1 MB | 12.2 MB |
| Linux · x86-64 | brain_v0.3.5_linux_amd64.tar.gz | 5.1 MB | 12.0 MB |
| Linux · arm64 | brain_v0.3.5_linux_arm64.tar.gz | 4.7 MB | 11.3 MB |
| Windows · x86-64 | brain_v0.3.5_windows_amd64.zip | 5.2 MB | 12.3 MB |
Verify against SHA256SUMS
· the executable inside keeps the development name, brain.
With Go on the machine: go install github.com/Coder8124/brain/cmd/brain@latest.
Every host points at the same vault — that is what makes continuity work across tools. Facts are still kept apart: the project comes from the directory the agent is working in, so two repositories open in two windows do not write into each other’s memory.
~/code/kestrel → project "kestrel" ~/code/acme-api → project "acme-api" # cannot see kestrel's decisions
Nothing to configure, and the agent never has to remember which project it is on — a rule a model can forget is not isolation.
~/brain unless you say otherwise. Open them, grep them, commit them, delete them.--dry-run prints the plan without touching anything.brain review accepts or rejects it, and it carries which agent proposed it.postinstall script. The binary ships as real package contents, so --ignore-scripts and offline installs both work..brain/index.db is a cache; delete it and it rebuilds from the files.| You code with | Extra download | You get |
|---|---|---|
| Claude Code, Cursor, Codex | 0 MB | Continuity plus lexical search |
| …and want paraphrase-tolerant recall | 274 MB | Adds semantic retrieval |
Ollama, LM Studio, Jan and Msty are auto-discovered if present. Nothing an MCP host calls ever needs a chat model.