Give your agents a memory
that lasts.

Engraphy remembers what your AI learns — without duplicates, without forgetting, and without losing the connections between facts. You run it, on your own database.

Self-hosted · Postgres + pgvector · works with any MCP client

Get Engraphy

Add memory to your editor.

Install the extension for your editor, or self-host the server and connect any MCP client.

What it does

Everything an agent's memory needs, in one place.

Plain and simple: your agent writes what it learns, and Engraphy keeps it clean, findable, and connected over time.

Never stores the same thing twice

Write the same fact twice and Engraphy recognises it — no duplicate clutter building up over months.

Finds memories by meaning

Ask in your own words. It matches on meaning and on exact terms together, so the right memory surfaces.

Keeps related facts connected

Memories link into a graph, so an agent can follow from one fact to the people, events, and details around it.

Keeps each space private

Every user, project, or tenant is isolated — enforced by the database itself, not by hopeful application code.

Updates without losing history

When a fact changes, the old one isn't destroyed — it's superseded, leaving a trail you can walk back through.

Runs where you want

Self-hosted on Postgres + pgvector, local or in your cloud. Point it at a database URL and go.

Why it's different

Most "agent memory" is a pile of text with a search box.

Engraphy is built like a database, not a scratchpad. Four things set it apart.

Non-destructive dedup

Merge, but never lose

A restatement merges; a genuinely new but related fact is kept as its own searchable memory, linked to the original. Nothing is silently swallowed.

Universal searchability

Every fact is findable

A detail stored in a typed field — someone's role, a date, a place — is searchable, not just fetchable by id. If it's in memory, search can reach it.

Isolation in the database

Tenants can't leak

Separation between spaces is enforced by Postgres row-level security. An unreadable memory simply isn't there — an app-layer bug can't cross the line.

Supersede, not overwrite

History you can walk

Facts change over time. Engraphy records the new version and keeps the old one linked, so "what did we believe, and when" is always answerable.

Benchmark

Measured, and reported honestly.

We test on LoCoMo, a long-conversation memory benchmark, and we publish the number we can stand behind.

70%
of LoCoMo questions answered correctly
graded by a hardened best-of-3 judge
on multi-session conversations
Engraphy vs typical append-and-search memory
CapabilityAppend-onlyEngraphy
No duplicate build-uppartialyes
Facts in fields are searchablenoyes
Related facts stay linkednoyes
Nothing lost when memories mergenoyes
Per-tenant isolation in the DBnoyes
Clean updates with historynoyes

A note on leaderboards: published accuracy figures across memory vendors use different harnesses, judges, and question subsets, so a head-to-head "score table" would compare apples to oranges. We'd rather show you our real number and exactly what Engraphy does that a plain vector store doesn't.

Under the hood

For the technically curious.

Two paths do the work: writes are checked for duplicates before they land; reads fuse two kinds of search into one ranked result.

The write path

Writetitle · body · fields
Embed+ index
Decidemerge · pending · insert

Each write is compared to what's already there. Clear duplicate merges, clearly new inserts, and the uncertain middle is parked for a decision — never silently dropped.

The read path

Meaningvector
+
Keywordsfull-text
Fuse + graphranked result

Semantic and keyword search run together and are fused into one ranked list, de-duplicated, with the option to follow the graph out from any hit for related context.

Quickstart

Running in a few minutes.

A Postgres with pgvector (local or a provider like Supabase), then install and go.

1
Start Postgres + pgvector and migrate
# local database with pgvector built in
docker run -d --name engraphy-pg -e POSTGRES_PASSWORD=devpw \
  -e POSTGRES_DB=engram -p 127.0.0.1:5432:5432 pgvector/pgvector:pg16

pip install .
engram-admin migrate --dump-dir ./backups
2
Create a space, apply a pack, mint a token
engram-admin space create --id demo --principal you
engram-admin pack apply packs/starter/pack.yaml --space demo
engram-admin token create --space demo --principal you --role readwrite
3
Run the server, then write and recall
python -m engram.server.app   # serves MCP on :8000

// write once, find it later in your own words
write  { "title": "Coffee machine", "body": "Descale it monthly." }
search { "query": "how do I keep the espresso maker working" }
→ finds the note, ranked by a fused relevance score

Full walkthrough in the developer docs — setup, building a pack, the tool reference, and deployment.