A personal memory for any agent

Your life, remembered in your own words.

You mention a birthday, an allergy, a repair, in passing, between work questions. A month later your agent has forgotten, or kept it in words that are not yours. TerraWeaver listens by itself, keeps what is yours on your machine, and gives the agent facts, never decisions.

The hosted demo is for evaluation only: one shared memory, do not enter personal data. For real use, run it on your own machine.

A week later, a new sessioninvented example

I want a soundbar for the living-room TV.
The memory puts beside it, in your words We took the LG C4 for the living room in the end · the Samsung was the first choice, overridden after the blinds went up
For the LG C4 on your wall, a compact soundbar with HDMI eARC will do. Want me to compare three?

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.

Counting: all of them"How many pieces of jewellery did I get in the last two months?" Similarity search returns the dozen entries most alike to the question, not every event. Here: each event is kept with its day and read into a graph; the answer gets every fact of the matter.
Time and the latest value"What happened two weeks ago?" "Which TV did we take in the end?" Here: new lies over old, each layer dated; the old choice stays, marked as overridden.
Where we left offNobody asks the memory, yet the new message goes on with an old matter. Here: the matter is put beside it, so a soundbar question comes with the TV that is on the wall.
It waits to be toldThe agent has to remember to write and to read, and mostly doesn't. Here: hooks hear every message of both sides; the agent passes nothing.
Facts in the agent's words"Up to 400", "she": a fact with no idea what or who. Here: each message is rewritten to stand alone from the agent's message just before it, and kept in your words in a plain Markdown journal you can read.
Decisions made for youMemory that picks and hides on its own authority. Here: facts and the words they stand on, never decisions; secrets are withheld before any model sees them.

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.

M

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.

1

Hears

Claude Code hooks pass every message, yours and the agent's. The agent passes nothing.

2

Keeps

Only what is personal. "Up to 400" becomes "my budget for the vacuum is up to 400".

3

Reads in the quiet

Entries become people, things, values and links, each with the day it happened.

4

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.

What happened, and when"What did I do in the garden two weeks ago?"
How many, all of them"How many pieces of jewellery did I get in the last two months?"
How it stands now"Which TV did we take in the end?" New lies over old, each layer dated.
Where we left off"I want a soundbar for the living-room TV." Nobody asks the memory; it is there.

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 taskPassed
Latest value: what holds now11 / 11
Time: days, order, how long ago8 / 8
Count: events spread over talks7 / 7
Who is who4 / 4
Recall, nobody asks7 / 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.

  1. 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).
  2. 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
  3. In another terminal, Claude Code with the plugin:
    adapters/claude_code/claude-personal
  4. 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.

  1. 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.
  2. 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, header Authorization: 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.

RoleModel
Rewrite, read, decideNemotron 3 Super 120B-A12B
Judge: hundreds of small closed questionsNemotron 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.