'||
|| ''
||''|, || '||''|, '||''|, .|''|,
|| || || || || || || || ||
.|| || .||. ||..|' ||..|' `|..|'
|| ||
.|| .||
π¦ The memory graph for AI agents that improves whilst it sleeps.
Background passes infer links, resolve contradictions, and weight sources. Server, embedded, or browser via WASM.
Hippo extracts entities and relationships from natural language, stores them in a typed graph, and runs background passes that infer new edges, write supersession relationships when sources disagree, and update per-source accuracy.
Reads use an iterative loop: /ask requests additional context from the graph until it has enough to answer.
write something ββββββββββββββββ
β β Dreamer β
βΌ β (background)β
βββββββββββββββ β β
β /remember β β β’ Linker β
ββββββββ¬βββββββ β β’ Inferrer β
β β β’ Reconcilerβ
βΌ β β’ Consolid. β
βββββββββββββββ βββββββ reads ββββββββββ ββββββββ¬ββββββββ
β the graph β βββββββ writes ββββββββββββββββββ
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β /ask β ranking by salience + credibility,
β β filtered by supersession
βββββββββββββββ
The Dreamer is the background pass. It walks the graph and emits append-only actions: links between previously unconnected entities, edges inferred from existing structure, supersedes edges when two sources disagree, and consolidation of episodic facts into semantic patterns. See docs/DREAMS.md.
Writes are append-only. Contradictions produce a supersedes edge; the original is retained and filtered out at read time by default. retract and correct are available for explicit removal.
Sources carry an accuracy score updated as contradictions resolve. Edges carry a salience score incremented on each retrieval.
Backends: SQLite, Postgres, in-memory, FalkorDB, Qdrant. The same Rust core compiles to wasm32-unknown-unknown.
βββββββββββββββββββββββββββββββββββββββββββββ
β GraphBackend β
β (trait β implemented by 5 backends) β
βββββββββββββββββ¬ββββββββββββ¬ββββββββββββββββ€
β InMemory β SQLite β Postgres β
β (test, WASM) β (default) β (multi-node) β
βββββββββββββββββΌββββββββββββΌββββββββββββββββ€
β FalkorDB (Cypher) β Qdrant (vec) β
βββββββββββββββββββββββββββββ΄ββββββββββββββββ
β²
β
ββββββββββββββββββββββββΌβββββββββββββββββββββββ
β β β
pipeline:: pipeline:: pipeline::
remember ask dreamer
(write) (read) (background)
β β β
β βΌ βΌ
β iterative LLM loop WorkerPool drives
β over the subgraph Linker/Inferrer/
β Reconciler/Consolid.
βΌ
plan β enrich β execute
(LLM extracts ops; graph
enriches; ops applied)
# 1. Set credentials
export ANTHROPIC_OAUTH_TOKEN=... # or ANTHROPIC_API_KEY
# 2. Choose a backend (default: in-memory)
export GRAPH_BACKEND=sqlite
export SQLITE_PATH=./hippo.sqlite
# 3. Enable production safety
export HIPPO_AUTH=true
export HIPPO_RATE_LIMIT=true
# 4. Run
cargo run --release --bin hippoimport { HippoClient } from "@dcprevere/hippo-sdk";
const hippo = new HippoClient({
baseUrl: "http://localhost:21693",
apiKey: process.env.HIPPO_API_KEY,
});
// Write
await hippo.observe({ statement: "Alice works at Acme as a lawyer" });
// Read
const { answer } = await hippo.recall({ question: "Where does Alice work?" });
// Trigger one dream pass and inspect what changed
const report = await hippo.dream();
console.log(report); // { facts_visited, links_written, supersessions_written, ... }
// Explicitly correct an error
await hippo.correct({
edge_id: 42,
statement: "Alice works at Acme as a doctor",
reason: "extraction error β original transcript said doctor",
});import init, { Hippo } from "@dcprevere/hippo-wasm";
await init();
const hippo = new Hippo(JSON.stringify({
api_key: localStorage.getItem("openai_key"),
model: "gpt-5.4",
}));
await hippo.remember("I prefer cycling to driving");
const answer = await hippo.ask("How do I get around?");| Verb | HTTP | What it does |
|---|---|---|
observe / remember |
POST /remember |
Extract entities and facts from a natural-language statement; resolve against existing entities; write append-only edges. |
recall / ask |
POST /ask |
Iteratively gather context from the graph, return an LLM answer plus the supporting facts. |
context |
POST /context |
Raw subgraph for a query, no LLM synthesis. |
dream |
POST /maintain |
Trigger one dream pass; returns a DreamReport with counts. Runs continuously in the background by default. |
retract |
POST /retract |
Explicit user/agent destructive removal of an edge with audit reason. Distinct from autonomous supersession. |
correct |
POST /correct |
Convenience: retract + observe in one call. |
| Verb | HTTP | What it does |
|---|---|---|
| Provenance | GET /edges/:id/provenance |
Supersession chain for an edge β what it replaced, what replaced it. |
| Graph dump | GET /graph |
Full graph (entities + active edges + invalidated edges). |
| Events | GET /events |
Server-sent events stream of graph mutations. |
| Health | GET /health |
Liveness check. |
| Metrics | GET /metrics |
Prometheus exposition. |
Full schemas: see docs/openapi.yaml.
| Backend | Status | Best for | Dreamer support |
|---|---|---|---|
| SQLite | β Stable | Single-node, embedded, dev | Full (reference impl + parity tests) |
| Postgres | β Stable | Multi-node, managed cloud | Full (additive CREATE TABLE IF NOT EXISTS migrations) |
| In-memory | β Stable | Tests, WASM | Full |
| FalkorDB | Cypher graph queries | Implemented; parity tests not yet automated | |
| Qdrant | Vector-first deployments | Partial (revisit-window is a no-op) β not recommended for production Dreamer use |
See docs/CONFIG.md#backend-readiness-matrix for details.
| Hippo | Mem0 v3 | Zep / Graphiti | Supermemory | Letta | |
|---|---|---|---|---|---|
| Contradiction handling | Background supersedes |
None (ADD-only) | Write-time invalid_at |
Write-time isLatest |
App-defined |
| Background graph processing | β | β | Ingest-time community detection | Documented, not in OSS | β |
| Inference of new edges | β | β | β | Documented, not in OSS | β |
| Salience-on-use ranking | β | β | β | β | β |
| Append-only writes | β | n/a | β | β | β |
| Browser (WASM) | β | β | β | β | β |
| Iterative reads | β | β | β | β | Via agent loop |
Notes:
- Mem0 v3 (April 2026) removed the v2 graph backend in favour of a pure vector + entity-sidecar model.
- Supermemory's
DerivesandAutomatic Forgettingare documented but not present in any source available for inspection.
Environment variables and hippo.toml cover the same surface. See docs/CONFIG.md for the full matrix.
Quick prod template:
[graph]
backend = "postgres"
name = "hippo_prod"
[graph.postgres]
url = "postgres://hippo:secret@db.internal:5432/hippo"
[auth]
enabled = true
[rate_limit]
enabled = true
requests_per_minute = 60
[pipeline.tuning]
dreamer_worker_count = 2
dreamer_max_units = 200
dreamer_max_tokens = 100000- Backend is SQLite or Postgres (not Qdrant for Dreamer use).
-
HIPPO_AUTH=true;HIPPO_INSECUREandALLOW_ADMINare unset. -
HIPPO_RATE_LIMIT=truewith a sensibleHIPPO_RPM. - TLS terminated either by hippo (
HIPPO_TLS=true) or a fronting proxy. - Dreamer cost ceilings set in
hippo.toml. - LLM credentials set via
*_OAUTH_TOKENor*_API_KEY. - Container runs as non-root (the bundled Dockerfile already does this).
hippo/
βββ src/
β βββ backends/ # GraphBackend impls (in_memory, sqlite, postgres, qdrant, falkor)
β βββ pipeline/
β β βββ ask.rs # iterative read path
β β βββ remember.rs # plan β enrich β execute
β β βββ maintain.rs # housekeeping + drives the Dreamer
β β βββ dreamer/ # Dreamer trait, WorkerPool, Linker/Inferrer/Reconciler/Consolidator
β βββ llm/ # LlmClient + RetryingLlm decorator
β βββ http/ # axum router + handlers
β βββ ...
βββ hippo-api/ # shared request/response types (used by SDKs and server)
βββ hippo-wasm/ # wasm-bindgen wrapper for in-browser use
βββ sdks/typescript/ # @dcprevere/hippo-sdk
βββ docs/
β βββ DREAMS.md # the Dreamer architecture
β βββ CONFIG.md # full config reference + backend matrix
βββ tests/ # 450+ unit + contract + idempotency tests
# Native build + unit tests
cargo build --release
cargo test --tests # ~450 tests, no network needed
# WASM build
cargo check --target wasm32-unknown-unknown --manifest-path hippo-wasm/Cargo.toml
# Lints (CI runs these with -D warnings)
cargo clippy --all-targets -- -D warnings
cargo fmt --check
# Integration / eval tests (require LLM credentials, gated with #[ignore])
cargo test --tests -- --ignoredCI runs unit tests + clippy + fmt on every PR; the eval suite runs nightly via .github/workflows/eval.yml.
docs/DREAMS.mdβ the Dreamer architecture, design decisions, and shortlist of must-have features.docs/CONFIG.mdβ full env-var matrix, backend readiness, production checklist.docs/openapi.yamlβ HTTP API spec.
Hippo is not open source. The repository is published source-available so the implementation can be read, audited, and reasoned about, but there is no permissive licence β you may not redistribute, modify, or use the code in your own projects without an explicit written agreement.
If you'd like to use hippo in a product, get in touch.