Thanks to visit codestin.com
Credit goes to www.echo-mem.com

Graph memory · causal-typed · auditable

Nothing is deleted.
Everything explains itself.

Echo Memory is a temporal, self-consolidating memory graph for AI agents — built to keep working after months of accumulated history, not just on day one.

15mswrite, median
8msquery, median
1msdigest
0LLM calls per write
Why a graph

Vector search degrades with history. Structure doesn't.

Most memory tools solve short-term recall with flat vector rows: more history means more candidates, more noise, slower retrieval. Echo Memory is built around the read/write algorithm and data structure that keeps working at long horizons.

Self-consolidating

Bounded retrieval cost

Facts are edges between entities, not flat rows. Old, rarely-accessed memory consolidates into higher-level summaries over time — never deleted, always traceable — so retrieval stays bounded by what's currently relevant.

Multi-hop

Real graph structure

Queries like "how did we end up here?" are answerable because facts are connected, not just individually embedded. Personalized PageRank adds associative retrieval across hops in v1b.

Zero-cost writes

No LLM calls to record

Extraction happens in the calling agent, never on the server. Recording a memory costs nothing to run — the tradeoff is that the agent arrives with entities and facts already extracted.

The graph

Memory is a graph, not a list of notes.

Entities are nodes; a fact is an edge between two of them. That's the whole data model — everything below follows from it. These are real captures from echo-memory dashboard --serve, run against a synthetic seed.

Echo Memory dashboard: 57 entities and 115 facts across six services, drawn as six colour-coded clusters joined by the handful of concepts that appear in more than one
01 — clusters come from structure

Three projects, never told about each other

Six services recorded in separate sessions by four different agents. The picture already separates them, because separation is a property of the edges, not a label anyone applied — and the few nodes sitting between clusters are the concepts more than one service turned out to care about.

The idempotency keys node selected, showing the seventeen facts that resolved onto it and which agent wrote each
02 — click a node

Everything it takes part in

idempotency keys is the largest node here, and nobody made it large: seventeen facts from several services resolved onto one entity by name. The panel lists every one, with which agent wrote it and when.

A fact edge selected in a dense graph: backfill runbook supersedes timezone bug, with who wrote it, in which project, when, and how its entities resolved
03 — click a link

Why memory believes it

This is what a knowledge graph gives you that a code map can't. The panel is not a tooltip: it is who wrote the fact, in which project, when, and how each of its entities resolved. A superseded fact is never deleted — it stops being drawn and stays reachable with its full history. echo-memory why <fact_id> prints the same trail in a terminal.

Ambient signal

Move your cursor through it — every drifting point is a fact waiting for its edges.

Try it — causal typing

Click a node. Click a link.

A small illustrative patch bay, shaped like the real dashboard above. Relation types are set by the agent's read of the conversation, not inferred statistically — honest about what's tractable today.

checkout-apiretriespayment gatewayidempotency keysmobile-appoffline queuepush notificationsdata-pipelinekafka consumerschema registry
caused_byled_toblocked_bycontradicts
10 nodes · 9 facts · 3 projects.

Click a jack to see what it connects to, or a cable to see its full provenance — the same trail echo-memory why <fact_id> prints in a terminal.
Architecture

One storage engine, every scale.

Postgres, from a single local agent up to an org-wide shared graph. The novel work is the memory structure and read/write algorithm running on top of it — not a new database engine.

storage

PostgreSQL + pgvector + Apache AGE

Vector similarity and graph traversal in the same database. No forced migration later as the graph grows from one agent to an organization.

retrieval

Hybrid, then multi-hop

Vector + full-text search ships in v1a. Personalized PageRank via networkx lands in v1b for associative, multi-hop retrieval.

interface

Model Context Protocol

Any MCP-compatible agent reads and writes the same graph — a coding assistant, a chatbot, an ops agent, or something built in-house.

write_episodequery_memoryget_audit_log
Measured

Numbers, and how they were taken.

Every figure comes from the repository or a live store, on a date. The corpus is small and the noise floor is stated, because a difference nobody sized is not a result.

4 shapes
every retrieval change is A/B tested

768 cases across three one-hop query shapes and 187 multi-hop ones, each configuration scored against the same cases and compared on a seeded paired bootstrap. It has overruled three of its author's own bets, one already shipped. What it cannot do is measure quality — every query is derived from its own answer, and the harness says so in its own output.

1 of 8
capture prompts that produced a fact

The strongest mechanism here refuses to let a session end and hands back the unwritten list. It fired eight times and produced one fact; one session it held open had made 118 edits. Structural triggering is reliable. Structural capture is not, because the last step still hands a model a choice.

Every fact
knows who wrote it — and who read it

Three coding agents share one graph here. A cross-tool recall reads the writer off the fact's own edge and the reader off the presented key, so the agent being graded cannot type its own evidence — and since 2026-09-13 the server refuses a fact no read ever returned.

0
server-side LLM calls per write

Extraction happens in the calling agent, so storing a memory invokes no model here. The cost moved rather than vanished: this measures a server receiving facts somebody else already extracted.

And the ones that went the other way

Entity resolution leans on similarity between entity names. Calibrated against 155 pairs a human confirmed distinct and 11 confirmed identical, that similarity scores AUC 0.666, 95% CI [0.421, 0.881] — an interval that includes chance. So the unattended merge was switched off: at the automatic bar, precision was 50% over two reviewed pairs, and the audit log showed that path had fired once in the system's entire history. A near-match is now offered for confirmation instead.

echo-memory calibrate recomputes it on your own store.

Who this is for

Built for one pain, aimed at a wider one.

Individual

A developer running local agents who wants Claude Code, Cursor, or anything else to stop losing context between sessions and tools.

Organization

A team running agentic systems in production — support bots, DevOps agents, internal tooling — that needs one shared memory layer instead of N disconnected ones, scoped correctly per agent, per team, or org-wide.

Status

Early and staged, on purpose.

The validated wedge driving v1a is cross-tool coding agent memory — the founder's own daily pain, real and tested. Everything else is the target this architecture is built toward.

v1a — built

Basic recall

Six MCP tools and thirty echo-memory commands, on PyPI and in the official MCP registry. Writing, recall, the audit trail, the ingestion queue, and record_recall_save — which now refuses a fact no read ever returned.

v1b — gated

Causal typing + multi-hop

Retrieval that walks the graph rather than only ranking facts in it. Not shipped, but no longer unmeasured: 187 questions that no single fact answers now score MRR 0.212, and a one-hop expansion improves what is reachable while costing what is read first. The number it has to beat exists before the feature does.

v1.1 — planned

Org-wide tenancy

The scoping model the broader vision depends on: per-agent, per-team, or organization-wide graphs.

Pricing

Open at the core. Paid to run it.

The self-hosted edition is not a trial and will never be crippled to sell the paid one. Everything a single developer needs stays open, permanently.

Self-hosted
FreeApache 2.0, forever

Everything a developer running local agents needs. Your database, your machine, your data.

  • Unlimited facts, episodes, and projects
  • MCP server, CLI, dashboard, session hooks
  • Cross-tool recall — Claude Code, Cursor, any MCP client
  • The full graph, clustering, and audit log
Cloud
$99per month

The same memory, without the Postgres. We run the database and the extensions; you point an agent at a URL.

  • 250,000 units a month — a unit is one fact written or one fact returned
  • Managed Postgres with pgvector and Apache AGE
  • Hosted MCP endpoint — no local install
  • One memory across every machine you work on
  • Dashboard at a URL, with backups
Enterprise
Let's talkCloud or self-hosted

Anything past the Cloud plan: a higher ceiling or none at all, more than one person on one memory, and the questions that come with both — who can see what, and what should never have been written down.

  • Volume above 250,000 units a month, or uncapped and invoiced
  • Org, team, and per-agent scoping
  • SSO and SCIM, role-based access per scope
  • Secret and PII redaction before write
  • Audit-log export and retention policy
Cloud waitlist

Skip the Postgres.

One email when hosted Echo Memory opens, and one when Team does. No newsletter, no drip sequence.

Email to join ↗

Getting started

Two commands. Either door.

Echo Memory is a Python package and a Postgres database. Install it once per machine and every agent you wire up writes to the same graph.

# run it yourself — nothing leaves your machine
pipx install echo-mem
echo-memory quickstart

# starts the database, applies the schema, prints the line that registers it
# Docker is the only prerequisite — the Postgres image is published, nothing compiles

# or use the hosted service and run no database at all
echo-memory connect <key>          # a key from api.echo-mem.com

# then, once per machine, so agents know when to record and recall
echo-memory install --global

# restart your client afterwards: an MCP server holds the code it started with
PyPIecho-mem 0.3.0the implementation
MCP registryio.github.ayushcodes10/echo-memboth doors: the package and the hosted endpoint
npmecho-memname held for a future JS client

Not `echo-memory`. That name belongs to an unrelated hosted product on PyPI, published March 2026. pip install echo-memory installs theirs, not this. The import package here is still echo_memory; only the distribution name differs.

Check it worked

echo-memory status reports what each scope holds and which agents have written to it. If only one agent is listed, memory is not yet shared and it will tell you so.