Postgres-backed. Schema-first. Multi-tenant. One SDK, two transports — Sibyl Cloud or your own database.
import { MemoryClient } from 'sibyl-memory-client' const memory = new MemoryClient({ apiKey, tenantId }) await memory.entities.upsert({ type: 'user', slug: '0xa1b2c3...', data: { /* ... */ } })
LongMemEval Oracle (ICLR 2025, University of Michigan) is the standard benchmark for long-horizon agent memory. 500 questions across six categories. Our score is public, reproducible, and live on the leaderboard.
| Rank | System | Score | Architecture |
|---|---|---|---|
| 1 | agentmemory V4 | 96.2% | embedding-based |
| 2 | Sibyl Memory | 95.6% | file-based · zero vectors |
| 2 | Chronos (PwC) | 95.6% | embedding-based |
| 4 | Mastra Observational Memory | 94.9% | embedding-based |
| 5 | MemMachine | 93.0% | embedding-based |
| 6 | Hindsight (Vectorize) | 91.4% | vector DB |
| Mem0 · Zep · Supermemory · Emergence AI · Oracle baseline — all below the top tier | |||
We did not optimize for the benchmark. We optimized for production efficiency. The benchmark improvement was a side effect.
Same architecture across every deployment. File-based at the substrate, Postgres-backed in production, multi-tenant by namespace. Different access patterns optimized for different team problems.
Full-stack memory for one operator. Priorities, journal, entities, scars, relationships, arc. The same shape Sibyl uses to operate herself, packaged for delivery.
Per-user persistent memory at platform scale. Tracks history, extracts patterns, surfaces back via your UI. Each user gets an isolated namespace that grows with their behavior.
Cross-session memory for LLM apps. The "remember yesterday I said X" primitive most chat products lack. Drop-in replacement for vector RAG memory with substantially lower cost.
Append-only decision log with full rationale. Hash-anchored to chain on demand. Exportable for audit. Designed for agents whose decisions need to be defensible.
Multi-actor memory with role-tagged extraction. Solves "we keep forgetting our own decisions" for distributed teams. Preserves who said what, when, in which thread.
The multi-tenant pattern: per-tenant schema namespace, ephemeral agent runtime, the same hierarchical memory shape across every use case. Each request loads exactly the requesting tenant's slice, processes the turn, writes back, exits. Memory persists in Postgres. Agents don't persist at all.
tenant_id. Single-source-of-truth per entity enforced as a UNIQUE constraint at the DB level (a bug cannot create two facts about the same entity). Job queue with SKIP LOCKED + retries + DLQ. Event fabric via LISTEN/NOTIFY. Append-only audit on every destructive admin action. GDPR-grade delete_user_cascade() built in.
Every row in every table carries tenant_id UUID NOT NULL. Single-source-of-truth is a UNIQUE constraint, not a convention. No application-level access bug can leak across tenants.
10,000 concurrent users does not mean 10,000 long-running agent processes. Each request spins up an ephemeral agent: load memory, do work, exit. Peak concurrency is realistic (10–50), not user count.
Schema-led retrieval over Postgres indexes means zero embedding-API cost and zero vector-DB hosting cost. At 100K active users, competitors pay $10K–30K/month in that layer alone. We pay zero.
Cloud or self-host. Same SDK either way. Pricing reflects the cost we don't pay — embedding APIs and vector DB hosting — not the cost we do pay.
~60% cheaper at this scale. The cost advantage compounds: every additional active user adds ~$0.10–0.30 of vector-DB cost on the left, ~$0.05 on the right.
Prices in USD, exclusive of taxes. Custom contracts available at every tier above Pro. Annual prepay: 20% discount. Self-host customers run the same SDK against their own Postgres — schema parity, not service parity. We never touch your data.
One SDK, two transports. Point sibyl-memory-client at Sibyl Cloud with an API key, or at your own Postgres with a connection string. No vector DB to provision. No embedding service to wire. No schema migrations to design — they're already shipped, idempotent, tested against production. Once your connection is configured, less than ten minutes from clone to first write.
node apply-sibyl-memory-schema.mjs $DATABASE_URL). The resulting DATABASE_URL becomes your step-1 connection. Same SDK, same code, same dashboard build. We never touch your data — schema parity, not service parity. ~half a day for a competent ops engineer end-to-end.
Day-2 management: a tenant dashboard at app.sibylcap.com (or your self-hosted equivalent) gives operators per-tenant overview, user-by-user drill-down, materialized metrics (24h activity, 7d growth, stale-active, dead-xrefs), audit log, GDPR cascade-delete, and cleanup triggers. All reads from the same Postgres. All writes logged to audit_events.
Cloud key requests are processed within 24 hours. Self-host setup is half a day for a competent ops engineer. No vector DB, no embedding service, no schema migrations to design — they're already shipped, idempotent, tested against production.