Haki

Never serve a stale fact.

Works with your stack
PythonPythonTypeScriptTypeScriptn8nn8nCursorCursorMCPMCPOpenAIPostgreSQLPostgreSQL

Haki is the memory layer for AI agents where every fact carries a date, a source and a status — so your agent uses what's true today, and can prove it.

No credit card • running in 2 minutes
the problem

A memory that gets it wrong costs more than no memory at all.

Your agent recalls a preference stated three months ago. It changed since. The agent applies it anyway, confidently, and nobody notices.

That's how today's memory layers fail: they know how to add, not how to correct. Contradictory facts pile up, semantic search picks one at random — and when someone asks "why did the agent say that?", nobody can answer.

Haki is built around the opposite question: what is true right now, and how do we prove it?

the proof in 4 seconds

Don't take our word for it.
Run the command.

One command stores a preference, captures the change of mind that replaces it, opens a brand-new conversation — and checks that the agent serves the current value, keeps the old one marked superseded, and ties the whole thing to a trace.

This is the test we're asking you to run before you take our word for it.

> haki verify
 capture      "invoices in French"
 capture      "actually, in English"  same thread
 consolidate  1 supersession
 context      NEW thread               0.04 s
  recalled  invoice_language = "en"
  hidden    invoice_language = "fr"   superseded
  trace     7c99a8de…
OK — remembered across conversations.
01Memory

Memory that behaves like a teammate

Capture, consolidation, context, trace, forget. Five explicit steps — and with every answer, proof of what was used.

Memory that lasts, not a transcript

Haki extracts structured facts — preferences, constraints, decisions — each linked to its evidence. Three lines around your LLM call.

Python and TypeScript SDKs, full parity.

127.0.0.1:8100
packet = client.context(subject_id="usr_42",
                        query=user_msg)
prompt = build_prompt_context(packet) + system
answer = my_llm(prompt, user_msg)
capture_turn(client, "usr_42", "prj", …)
“Actually, send my invoices in French”
Got it. The previous preference is marked superseded.
invoice_language = "en" · superseded
invoice_language = "fr" · active

Today's truth

Every fact is dated and versioned. A change of mind supersedes the old one — never deleted, never served as current.

Unresolvable contradiction: both versions are withheld.

trace 0587fc4f42 ms
included3 facts · sources
excludedbudget_tokens
blockedopen_conflict

Proof, with every answer

Every context ships with its sources, its dates and a trace: what was kept, dropped or blocked — and why.

“Why did the agent say that?” answered in a minute.

SDK + CLICursor / MCPn8nGateway

Four ways to plug in

Coded agent, Cursor, n8n, or a one-line base_url swap. You keep your stack.

factsp50p95
1,000126.3144.9
10,000203.0248.5

249 ms p95 across 10,000 facts

Embeddings computed locally: no network call on the critical path. Measured, reproducible — scripts/benchmark_context.py.

under the hood

A memory that understands links, not just words

Two details that change everything in practice — and a full explanation of every context decision.

Multi-hop, not just keyword match

When a fact mentions another person, Haki widens the search to their facts too — two hops max, no extra LLM call.

$query: "Melanie"
found directly3 facts
found by expansion2 facts

Multilingual, natively

A fact captured in French answers a question asked in English. Local multilingual embeddings, tested FR / EN / ES in real conditions.

"What language should I use for invoices?"
invoice_language = "fr" ("finalement, mes factures en français")

No network call for the embedding — so no data leak to a third party.

Every fact kept or dropped has a reason, not a black box

The context budget is limited. What doesn't fit is never silent: every fact carries an explicit status in the trace.

IncludedExcludedBlocked
comparison

Verified, not just claimed

Based on recent public research (sites, docs, accessible source code) — not on figures we can't source. Where we couldn't verify something, we say so.

HakiSupermemoryZepMem0
Strict bitemporality (no silent deletion)~
Full self-hosting, one command~
Coded reason per fact (kept / excluded / blocked)
Database-enforced isolation (RLS)~~?
Forget propagated to derived data, with a receipt~~?
Automatic OpenAI-compatible memory injection
Ecosystem, integrations, community~
Published benchmark results

✓ confirmed · ✗ confirmed absent · ~ partial / different mechanism · ? not publicly verified · ⏳ coming

Every sourced symbol links to its public source (hover or click). Research done 10 Aug 2026 — spot an error? Tell us, we'll correct it and flag it.

How it works

four explicit steps — observable, replayable, not a black box.

quickstart.py
# 1. install the SDK
pip install gethaki
# 2. capture a turn
capture_turn(client, "usr_42", msg)
01 / plug in

Capture

Every conversation turn is captured with its source, without blocking your agent.

invoice_language = "en"· v1
invoice_language = "fr" · v2 · active
+ 3,412 facts
02 / consolidate

Consolidation

An async job extracts facts, dates them, versions them and detects contradictions.

context_packet42 ms
facts: 3 · profile: usr_42
budget: 1,200 tokens
03 / context

Context

On every request, Haki assembles the relevant context packet — p95 measured at 249 ms across 10,000 facts.

trace 0587fc4freplay
included3 · sources
blockedopen_conflict
04 / trace

Trace

Every answer returns a trace: what was kept, dropped, blocked — and why.

05 / real-time

249 ms p95 per context packet, on every request.

Steps 01–04 build the memory. Here's the payoff: your agent draws on it at request time, with no network call on the critical path.

the contract

Eight guarantees. Eight tests. Nothing you can't verify.

Most memory layers describe a behaviour in their docs. We describe ours with the name of the test that proves it, against a real PostgreSQL database — never mocks.

See the tests on GitHub

A guarantee that isn't tested isn't a guarantee. Found one that doesn't hold? Open an issue — we'll publish it.

› benchmarks

No benchmark of our own yet. A public methodology instead.

The field's evaluation ground truth is broken — an independent audit found 6.4% of answer-key errors in LoCoMo, the most cited benchmark in the space. Rather than a number you can't verify, we'd rather publish what we can prove today.

see the guarantees contract
reliable recall, like a teammate.

Current is told from stale; a contradiction is flagged, never guessed.

0 ms / context packet

p95 measured across 10,000 active facts, locally — reproducible via scripts/benchmark_context.py.

04Security

Airtight boundaries, enforced by the database

Organisation → project → subject: nothing crosses over. Scopes come from your backend, never from the model. And forgetting really propagates, with a timestamped receipt.

Per-project API keys

A key is bound to one project. Requesting another returns 403 forbidden_scope — without ever revealing that it exists.

PostgreSQL Row-Level Security

Isolation is enforced by the database itself: even if the code forgot a filter, a query cannot cross project boundaries.

Propagated forget, with a receipt

POST /v1/forget erases derived facts, embeddings, events and traces, and writes a timestamped receipt.

Self-host, if you want to

docker compose up -d. The full server, Apache 2.0, no amputated edition. Zep deprecated its self-hosted Community Edition in April 2025.

Haki

Integrates with your favorite tools

SDK, MCP server, n8n template or gateway: plug Haki into your stack in minutes.

Memory is coming to your stack…Join the beta
Pricing[05/06]

Simple pricing, transparent

The same product at every tier — no feature is locked behind a paywall. Only the monthly credit volume changes.

Free

Try Haki in the cloud, no commitment.

0 FCFA/ month
cloudCreate an account

Or self-host for free, no credit limit — source below. GitHub →

1,000 credits included every month
Memory Ledger, conflict handling, multi-hop retrieval — all included
OpenAI-compatible gateway + web console
No credit card required
StarterMost popular

For a first agent in production.

10 000 FCFA/ month
cloudSubscribe
20,000 credits included every month
No feature locked — same product as Scale
Reads (context, inspection) are never billed
Top up anytime — 650 XOF per 1,000 credits
Growth

For several agents or a team.

25 000 FCFA/ month
cloudSubscribe
50,000 credits included every month
Priority email support
No feature locked
Top up anytime — 650 XOF per 1,000 credits
Scale

For serious, growing volume.

75 000 FCFA/ month
cloudSubscribe
150,000 credits included every month
Priority email support
For several agents or a high-volume team
Top up anytime — 650 XOF per 1,000 credits
Enterprise

Multiple boundaries, dedicated deployment, compliance review.

Custom
on-premise / VPCTalk to the team
Unlimited credits
On-premise or VPC
Custom RLS and audit
Contractual retention
Guided integration
Dedicated engineer

Private beta • self-hosted free and open source • no commitment

Open sourceNo data resoldCancel anytime
06Support

Questions? We answer them.

The Haki team replies directly — no bot, no lost ticket.

Email us
Does Haki replace my vector database?

No — Haki already ships its own vector index (pgvector, hnsw) and full-text index. A single docker compose up is enough.

What happens when a user changes their mind?

The old fact becomes “superseded”: it stays in history but is never served as current again. On a real contradiction, Haki withholds both versions and flags it rather than guessing.

Does Haki slow my agent down?

No. Embeddings are computed locally, with no network call on the critical path: p95 measured at 249 ms across 10,000 facts (public, reproducible benchmark script). LLM extraction is asynchronous.

Do I have to change my LLM or framework?

No. Three lines around your call with the SDK, or a single base_url swap with the OpenAI-compatible gateway. Cursor and n8n have their own integrations.

How do I prove what the agent used?

Every context returns a trace_id. Inspecting it shows each memory kept, dropped or blocked, with its reason code and source.

What about the right to be forgotten (GDPR)?

POST /v1/forget propagates deletion to derived facts, embeddings, events and traces, and writes a timestamped receipt in forget_receipts.

Why not just put everything in the context?

Because precision degrades with length: when the right answer moves from position 1 to position 10 in a 20-document context, accuracy drops by about 30% — measured across GPT-4.1, Claude Opus 4 and Gemini 2.5. Serving 1,500 relevant tokens instead of 115,000 attacks this problem directly. And a full context can't supersede, trace, or forget.

What do your benchmarks say?

We don't publish any yet. The field's evaluation ground truth is broken: a public April 2026 audit found 6.4% of LoCoMo's answer key is wrong — the real ceiling is 93.6% — and the standard judge accepts up to 63% of deliberately wrong answers. We'll publish our numbers with a frozen configuration, dataset checksums, three runs, and the categories where we lose. Not before.

What happens if Haki goes down?

Your agent keeps going. The gateway switches to X-Haki-Memory: degraded and forwards the request. We never block your critical path — and we never fail silently: a degradation is always visible in the response.