Agent Memory
Get started

Get started

One container, one MCP entry, a first memory.

The published image carries the TessariDB node and the memory service together, so a machine with Docker and nothing else gets a working memory. Agent Memory is alpha (0.4.1-alpha on TessariDB 0.33.1-beta): the contract may change in any 0.x release.

1 · Run it

Choose the first owner's passphrase, then start the container.

The passphrase is what you type in the browser when an agent asks to be authorized. The first owner is created once, on an empty store, from TESSARI_AM_OWNER and TESSARI_AM_OWNER_IDENTITY; later starts leave the owner alone, so the passphrase file can be removed after the first start.

  • the store is never open: the image always declares a database account, with a password drawn on the first start and kept in the volume
  • only the memory service is published; the database binds to the container's own loopback
  • --stop-timeout 30 lets docker stop end the store cleanly
  • read -rs "p?…" is zsh; in bash it is read -rsp "…" p
shellsh
mkdir -m 700 -p ~/.tessaridb
read -rs "p?Passphrase for the first owner: " && printf '%s\n' "$p" > ~/.tessaridb/owner-passphrase; unset p
chmod 644 ~/.tessaridb/owner-passphrase
docker run -d --name agent-memory --restart unless-stopped --stop-timeout 30 \
  -p 127.0.0.1:39142:39142 \
  -v tessaridb-agent-memory:/var/lib/tessaridb \
  -v ~/.tessaridb/owner-passphrase:/run/secrets/owner-passphrase:ro \
  -e TESSARI_AM_OWNER=ada -e TESSARI_AM_OWNER_IDENTITY=acme \
  -e TESSARI_AM_OWNER_PASSPHRASE_FILE=/run/secrets/owner-passphrase \
  tessaridb/agent-memory:0.4.1-alpha

2 · Connect an agent

Add it by its address, like any other remote MCP server.

Claude Code and Codex need no registration: both clients are known to the service, and every redirect back carries iss. In Claude Code, /mcp → tessaridb-am → Authenticate opens the browser; in Codex, the login does. Sign in with the owner's name and passphrase and approve. Every agent on the machine shares that sign-in and renews it without asking again.

shellsh
# Claude Code
claude mcp add --transport http -s user --client-id claude-code --callback-port 39143 \
  tessaridb-am http://127.0.0.1:39142/mcp

# Codex
codex mcp add tessaridb-am --url http://127.0.0.1:39142/mcp --oauth-client-id codex
codex mcp login tessaridb-am

3 · Declare the folder

A project is its folder.

An agent sends path, the absolute folder it works in, with session_start. The first time a folder is seen the start is refused with what to do: the agent looks for project markers in the subfolders, asks you whether the folder is a group of projects or one project, and starts again with declare. From then on every agent that starts inside it is placed by the nearest declared folder, with no question asked.

session_startjson
{ "agent": "claude", "path": "/work/acme/api",
  "declare": { "kind": "group", "path": "/work/acme",
               "subprojects": ["api", "web"] } }

4 · Remember and recall

Write something down, then find it again.

From the command line the same verbs are available as from MCP. remember writes your own memory — no schema, no evidence, allowed to be wrong. recall returns one order across text, filters and links, and status says where you are.

shellsh
tessari-am session.start --agent alice --scope.identity acme --scope.group notes --scope.project first
tessari-am remember --body "The quickstart starts a node and creates an owner." --kind semantic
tessari-am recall --text quickstart
tessari-am status --width me

5 · Add somebody else

Creating a user is not granting one.

Administration lives behind tessari-am admin and is never one of the agent verbs. A new user can authenticate and is refused everything until a grant gives them a role at an identity. The token is shown once; nothing stores it, only a digest of it.

shellsh
tessari-am admin user.add --name bruno --at acme
tessari-am admin grant.add --user u-f62fa622… --role writer --at acme

Status

Alpha, and saying so.

Agent Memory is at 0.4.1-alpha, on TessariDB 0.33.1-beta. Twenty-two of the contract's twenty-five verbs are carried; changes.since, export and import are withheld and refused by name, so data written to the store cannot yet be exported. Nobody can change their own passphrase yet: setting one is an administrative act.

It is source-available under the Business Source License 1.1 and free for any use, including production and commercial use, except providing it to third parties as an agent memory service.