Skip to content

Releases: EngraphyLabs/engraphy

Engraphy v0.3.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 02:08
ee999a8

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 date attribute 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-13 or 2026-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.dropped as {key: {value, error}}. The response names each such value in dropped_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, supersede and update all use these rules. Import and inbox promotion use them through write.

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 limit argument of search. 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 /inbox accepts readwrite tokens 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 archived set receives 401 on every token it holds, from its next request. engraphy-admin principal archive and engraphy-admin principal unarchive set and clear the flag. A space_admin can do the same over MCP with admin_member_archive.
  • The engine refuses to mint a token for an archived principal.
  • traverse does not return archived nodes. update and link refuse them with ENGRAPHY_VALIDATION. get reads 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 micro embedding profile (ENGRAPHY_EMBEDDING_PROFILE=micro) runs gte-small on ONNX Runtime. Its embedder holds 143 MB of steady resident memory. Every v* tag publishes a -micro image beside the default one.
  • With the micro profile and compose.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, under ide-v* tags.

Upgrade

  1. Check principals.archived in each space. A principal with the flag set cannot authenticate on 0.3.0.
  2. Run engraphy-admin migrate. It applies migrations 0026, 0027 and 0028. The server starts only when the schema is at 0028.
  3. Start the 0.3.0 server.

Assets

  • engraphy-0.3.0-py3-none-any.whl and engraphy-0.3.0.tar.gz.
  • Container images ghcr.io/devon-clarkk/engraphy:0.3.0, engraphy:0.3.0-micro, engraphy-admin:0.3.0 and engraphy-admin:0.3.0-micro.

Engraphy v0.2.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 03:29
4b40eef

What's Changed

  • Engraphy 0.2.0: the default embedder runs on ONNX Runtime by @devon-clarkk in #1

New Contributors

Full Changelog: v0.1.0...v0.2.0

Engraphy v0.1.0

Choose a tag to compare

@devon-clarkk devon-clarkk released this 22 Aug 14:29

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. search fuses a vector leg and a Postgres full-text leg
    with Reciprocal Rank Fusion; traverse walks the edges.
  • Isolation the database enforces. Spaces and principals are separated by
    Row-Level Security under a NOBYPASSRLS role, 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 readwrite

The 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.sh wrap this sequence and wait for /healthz.
They landed after this tag, so use them from main rather 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.