Repository navigation
Releases: EngraphyLabs/engraphy
Release list
Engraphy v0.3.0
Engraphy 0.3.0 stores a memory that carries a partial or imprecise date, and it scores level with Mem0 on LoCoMo.
Memory writes
- A
dateattribute accepts a full ISO date (2026-01-15), a year and month (2026-01), or a year (2026). The engine stores the value exactly as written. - The engine refuses an out-of-range month or day, for example
2026-13or2026-02-30. A month must be zero-padded, so stored dates sort in chronological order. - When an attribute value does not fit its declared type, the engine stores the node and keeps the value under
attrs.droppedas{key: {value, error}}. The response names each such value indropped_attrs. - A required attribute stays satisfied by its entry in
attrs.dropped. The node keeps its title, its body and its other attributes. - The engine refuses a key that the node type does not declare, when the node type has a closed specification.
write,supersedeandupdateall use these rules. Import and inbox promotion use them throughwrite.
LoCoMo results
Strict grading: the reader can decline, and the judge requires every item of the gold answer. The interval in brackets is the 95% Wilson interval.
| Category | Engraphy 0.3.0 | Mem0 (published) |
|---|---|---|
| Excluding adversarial | 66.8% [62 to 71] (260/389) | 66.88% |
| Single-hop | 69.0% (129/187) | 67.13% |
| Multi-hop | 53.8% (43/80) | 51.15% |
| Temporal reasoning | 72.9% [63 to 81] (70/96) | 55.51% |
| Open-domain | 69.2% (18/26) | 72.93% |
| Adversarial | 89.2% [82 to 94] (99/111) | Not reported |
- Excluding adversarial questions, Engraphy is level with Mem0's published 66.88%.
- Temporal reasoning scores 72.9%. The highest published figure for this category is 58.13% (Mem0g).
- On adversarial questions, where the correct answer is to decline, Engraphy scores 89.2%. The published comparisons do not report this category.
Configuration and limits
- Engine. Commit
3df1a4d, which carries the write path in this release. - Retrieval. Each question requested 20 search results. A client sets this with the
limitargument ofsearch. The default is 10 and the maximum is 25. A run with 10 results, a single-line reader reply, and the skill without its subject-and-occasion section scored 65.0% excluding adversarial questions. - Reader. Claude Opus 4.8 loaded the answer-discipline skill in this release. The benchmark harness asked it to name the supporting memory on a line before its answer. That reply format is part of the harness, not the engine.
- Judge. Claude Sonnet 5, best of three passes.
- Sample. 3 of the 10 LoCoMo conversations (500 questions, 389 of them not adversarial), measured in one run. Two runs of one configuration can disagree on about one question in five.
- Comparison. The published figures cover all 10 conversations, average 10 runs, and use a GPT-4o-mini reader. These results therefore do not rank Engraphy above or below the published systems.
Security and administration
POST /inboxacceptsreadwritetokens only, and each capture counts against the token's write rate limit (rate.write_per_min). The request body limit is 64 KiB.- A principal with
archivedset receives 401 on every token it holds, from its next request.engraphy-admin principal archiveandengraphy-admin principal unarchiveset and clear the flag. A space_admin can do the same over MCP withadmin_member_archive. - The engine refuses to mint a token for an archived principal.
traversedoes not return archived nodes.updateandlinkrefuse them withENGRAPHY_VALIDATION.getreads them by id.- The admin image installs dbmate v2.35.0 and verifies its SHA-256 digest for amd64 and arm64 before the binary runs.
Agent skill
The answer-discipline skill tells an agent to check that a returned memory is about the subject and the occasion the question asks about, before it answers or declines. A memory that uses the same words about a different person or event does not answer the question.
Deployment
- The
microembedding profile (ENGRAPHY_EMBEDDING_PROFILE=micro) runs gte-small on ONNX Runtime. Its embedder holds 143 MB of steady resident memory. Everyv*tag publishes a-microimage beside the default one. - With the
microprofile andcompose.small.yaml, the whole stack uses 187 MB of resident memory on a 20,000-node store. - A Docker-free Windows distribution installs PostgreSQL 16.15 with pgvector 0.8.6, the server and the embedding model with one installer. Refer to
docs/windows-native.md. - The embedding runtime is pinned to onnxruntime 1.29.x, the release that the dedup thresholds are calibrated on.
- The VS Code extension is released separately, from
ide/vscode-engraphy, underide-v*tags.
Upgrade
- Check
principals.archivedin each space. A principal with the flag set cannot authenticate on 0.3.0. - Run
engraphy-admin migrate. It applies migrations 0026, 0027 and 0028. The server starts only when the schema is at 0028. - Start the 0.3.0 server.
Assets
engraphy-0.3.0-py3-none-any.whlandengraphy-0.3.0.tar.gz.- Container images
ghcr.io/devon-clarkk/engraphy:0.3.0,engraphy:0.3.0-micro,engraphy-admin:0.3.0andengraphy-admin:0.3.0-micro.
Engraphy v0.2.0
What's Changed
- Engraphy 0.2.0: the default embedder runs on ONNX Runtime by @devon-clarkk in #1
New Contributors
- @devon-clarkk made their first contribution in #1
Full Changelog: v0.1.0...v0.2.0
Engraphy v0.1.0
Engraphy is a self-hosted memory engine for AI agents. It stores what an
agent learns as a typed knowledge graph on Postgres + pgvector, and speaks the
Model Context Protocol, so any MCP client (a VS Code extension, a desktop app,
another agent) can use it over HTTP.
It exists to replace the reference MCP memory server's flat-JSON, single-user,
stdio model with something that survives concurrency, paraphrase, duplicates,
and years of accumulated memory.
What is in this release
- A typed memory graph. Memories are typed nodes (
fact,decision,
person,event) joined by typed edges (involves,references,
supersedes). The types, their attribute schemas, and the rules for which
edges may connect which types are declared per space in a pack and
enforced in Postgres. - Writes that deduplicate themselves. Every write is embedded and banded
against existing memory: a near-verbatim restatement auto-merges, a genuinely
new but related fact is kept and linked, and a borderline case parks as a
pending verdict for the caller to resolve. Nothing is silently absorbed. - Hybrid retrieval.
searchfuses a vector leg and a Postgres full-text leg
with Reciprocal Rank Fusion;traversewalks the edges. - Isolation the database enforces. Spaces and principals are separated by
Row-Level Security under aNOBYPASSRLSrole, not by application checks that
can be forgotten. - An operator CLI and an MCP tool surface, covering everything from
bootstrapping a space to minting tokens, applying packs, and verifying
restores.
Running it
Requires Docker with Compose. From a checkout of this tag:
cp deploy/.env.example .env # then edit, or generate the two passwords:
printf 'POSTGRES_PASSWORD=%s\nENGRAPHY_APP_ROLE_PASSWORD=%s\n' \
"$(openssl rand -hex 16)" "$(openssl rand -hex 16)" > .env
docker compose up -d # first boot downloads the ~523 MB embedding model
docker compose --profile admin run --rm admin \
engraphy-admin space create --id personal --display-name "My Memory" --principal me
docker compose --profile admin run --rm admin \
engraphy-admin pack apply packs/starter/pack.yaml --space personal
docker compose --profile admin run --rm admin \
engraphy-admin token create --space personal --principal me \
--client-name my-editor --role readwriteThe MCP endpoint is then http://127.0.0.1:8000/mcp/ (keep the trailing
slash). Put a TLS-terminating reverse proxy in front before exposing it. The
bearer token prints once.
Note:
up.sh/provision.shwrap this sequence and wait for/healthz.
They landed after this tag, so use them frommainrather than from the
v0.1.0 tarball.
Documentation
License
Source-available under the Business Source License 1.1. You may read,
modify, redistribute, self-host, and use Engraphy in production as the memory
layer for your own applications and agents. You may not offer Engraphy itself
to third parties as a hosted or managed service before the Change Date
(2030-08-22), when it converts to Apache-2.0. See
LICENSE.
Status
v0.1.0, one maintainer. The schema and enforcement kernel, the engine
behaviours (dedup, hybrid retrieval, traversal), the pack system, and the
operator CLI are all in the shipped engine.