Why another memory
What agent memory gets wrong today.
Memory for agents is now a layer of its own, and the same problems stay open in most of it. Each is a kind of question a long personal history asks, and a place where TerraWeaver was built to be different.
Personal means yours
It is about you, so it stays with you.
A memory of a life is the most private thing an agent can hold. It is built to be read, checked and owned by the person it is about.
Your words
The journal is plain Markdown you can open and read. What the memory keeps is what you said, rewritten only so that it stands alone, with your original beside it.
On your machine
Run it yourself and the journal never leaves your machine. Only the model calls go out (reading, rewriting, deciding), and secrets are withheld before any of them.
Secrets withheld
Passwords and keys are held back before any model sees them. A web query never carries a person's name or a private detail.
Nothing decided for you
It gives the agent facts and the words they stand on. Choosing stays with you and your agent. It can take an entry out once you confirm which.
Active, not a store
It does the remembering, so you don't have to dictate.
A passive memory depends on the agent remembering to write and to read. This one acts by itself.
Hears
Claude Code hooks pass every message, yours and the agent's. The agent passes nothing.
Keeps
Only what is personal. "Up to 400" becomes "my budget for the vacuum is up to 400".
Reads in the quiet
Entries become people, things, values and links, each with the day it happened.
Hands over facts
When the agent asks, or a new message goes on with an old matter, it finds the entries by words, meaning and the graph, and hands over their texts.
Real runs, replayed
Watch the memory work.
Left: an ordinary chat with an agent. Right: the memory, every step as the run took it. The people in these runs are invented.
Press H inside the player to hide its bar.
What it answers
Long histories, exact answers.
Where a whole life no longer fits in a prompt, and the answer needs every fact that bears on it.
Measured
43 of 45, and the two misses.
Five short personal histories (family, books, running, home, trips): a dozen talks over two months among thirty of everyday talk, each told to a fresh memory and checked by words. The first run of the day gave 39 of 45; 43 of 45 came after the fixes the misses pointed at. The histories were seen during development, so the second number is tuned on them.
| Class of task | Passed |
|---|---|
| Latest value: what holds now | 11 / 11 |
| Time: days, order, how long ago | 8 / 8 |
| Count: events spread over talks | 7 / 7 |
| Who is who | 4 / 4 |
| Recall, nobody asks | 7 / 8 |
| Never said, so "I don't know" | 6 / 7 |
The misses are real: a car-alarm question that did not bring up the user's Skoda Octavia, and a sale of a Golf that was never told, which the memory answered instead of declining. LongMemEval_S has not been run in full. One run measures little here: the spread between runs is as large as the differences.
Connect
Two ways in. Only one is for your life.
The memory is an MCP server: any agent can use say and ask. With the Claude Code plugin the hooks call say by themselves.
Your own memory
Runs on your machine and listens on it only: no key needed to reach it. This is the real thing.
- Needs Python 3.12+, Claude Code, and your own keys for Nebius Token Factory and Tavily (for the models and the web, not for the memory).
- Clone, install and start the memory:
git clone https://github.com/mihail-gribov/terraweaver cd terraweaver python3 -m venv .venv && .venv/bin/pip install -r requirements.txt .venv/bin/python -m memory.server
- In another terminal, Claude Code with the plugin:
adapters/claude_code/claude-personal
- Talk about your life in passing. What it keeps is in
var/memory/main/facts.md.
The hosted demo
For evaluation, by key. Not a place for your life.
- You need Claude Code or another MCP client, and a key: sign in with Google (a Google account is the only requirement) to get one (
tw_…, shown once). No Google account? A reviewer token works the same way; it is given with the submission. - Point your agent at it:
export PERSONAL_MEMORY_URL=https://terraweaver.life export PERSONAL_MEMORY_TOKEN=tw_... adapters/claude_code/claude-personal
Any other MCP client:https://terraweaver.life/mcp, headerAuthorization: Bearer tw_....
One shared memory, for evaluation only. Do not enter personal data: everything typed goes into a shared journal that anyone with a key can see, and it may be erased. Use an invented person.
Under the hood
NVIDIA Nemotron on Nebius Token Factory.
Each model sits where it pays. Closed questions are answered from the first token's logprobs: one token, a probability instead of a guess.
| Role | Model |
|---|---|
| Rewrite, read, decide | Nemotron 3 Super 120B-A12B |
| Judge: hundreds of small closed questions | Nemotron 3 Nano 30B-A3B |
| Search by meaning: embeddings (on the demo, through OpenRouter) | NVIDIA Nemotron embed 1B |
Contact
Questions, ideas, or a memory you want to try.
TerraWeaver is built by Mihail Gribov. The code, the issues and the details are open.