Benchmarks · measured, not claimed
CLS++ by the Numbers
By Rajamohan Jabbala · August 1, 2026
Every memory layer for LLMs claims it "remembers everything." Claims are cheap. Here is what CLS++ actually measures, on real runs, against its own nightly gate suite and a public leaderboard — including the numbers that aren't green yet.
The nightly scoreboard
Every night, 28 metrics run against the real engine (last run: 3,161.7 seconds of wall clock). Current state: 19 green, 8 yellow, 1 red. We publish all three colors.
Retrieval accuracy
| Metric | Score | Gate |
|---|---|---|
| Exact recall ACC@1 | 100% | 99% |
| Paraphrase ACC@1 | 80% | 95% |
| Paraphrase top-10 hit rate | 95% | — |
| Multivalued completeness | 100% | 98% |
| Self-retrieval completeness | 100% | 100% |
Ask a fact back in the exact words you stored it: 100% at rank 1. Ask it in completely different words ("what do people call my pet?" for a stored dog's name): 80% at rank 1, 95% somewhere in the top 10. That 80% is our one red metric, and it's the current focus.
Truth maintenance
| Metric | Score | Gate |
|---|---|---|
| Contradiction-detect precision | 100% | 98% |
| Contradiction-detect recall | 100% | 98% |
| Stale value returned as top answer (WAR) | 0% | 0% |
| Superseded facts suppressed (top-10) | 90% | 100% |
| Latest-wins@1 | 90% | 100% |
| Override detection | 100% | 98% |
| Negation handling | 100% | 100% |
| Poisoning resistance | 100% | 100% |
| Dedup merge correctness | 100% | 100% |
When you say "I moved to Mumbai," the Bangalore fact gets archived with lineage — not deleted, not returned as the answer. Zero stale-answer wins across the suite, with 100% precision and recall on contradiction detection.
Speed
| Metric | Score | Gate |
|---|---|---|
| Engine read p95 | 1.18 ms | 10 ms |
| Engine write p95 | 1.48 ms | 50 ms |
| Worst single read (recompute spike) | 1.36 ms | 10 ms |
Reads and writes are both under 1.5 ms at p95 — 6–33× inside their gates. No LLM call sits on the write path (more on why that matters below).
Durability and retention
| Metric | Score | Gate |
|---|---|---|
| Retention floor (default fact) | 100% | 99.9% |
| Retention at wall-age 1y / 3y / 7y | 100% | 99.9% |
| Survival ratio @ 100,000 writes | 86.5% | 99.9% |
| Extraneous-write rate | 25% | 50% |
A fact stored today is still retrievable at simulated ages of one, three, and seven years. Under a 100,000-write flood, 86.5% of memories survive in hot+dormant tiers — yellow, honestly reported, being worked. The extraneous-write rate (junk that shouldn't have been stored) dropped from an 87.5% baseline to 25%.
Under the hood, every write is acked only after an fsync to a write-ahead log with CRC32-framed records — Redis and Postgres replicate off the hot path. Both replicas can be down and nothing is lost.
Head-to-head: the Memory Integrity Benchmark
Ten contradiction/supersession scenarios, same runner for every system, reproducible from the repo:
| System | Truth retention ↑ | Contradiction rate ↓ | Audit trail ↑ | Tokens/correct answer ↓ | LLM calls/scenario ↓ |
|---|---|---|---|---|---|
| CLS++ | 80% | 20% | 100% | 19 | 0 |
| OSS mem0 (gpt-4o-mini) | 10% | 90% | 0% | 261 | 2.1 |
| naive-recall | 10% | 90% | 0% | 185 | 0 |
| BM25 | 10% | 90% | 0% | 185 | 0 |
The structural difference: OSS mem0 keeps both the old and the new fact and defers resolution to your downstream LLM — that's a 90% contradiction rate and 261 tokens per correct answer at 2.1 LLM calls per scenario. CLS++ resolves supersession in the memory layer, deterministically, with zero LLM calls and 19 tokens per correct answer — a 13.7× token reduction — while keeping the superseded fact recoverable (100% preservation for both systems).
Latency compounds this: OSS mem0 spends ~2.6 seconds per write on LLM fact-extraction. CLS++ writes are embedding-only and sub-second (1.48 ms p95 at the engine).
The scenario we lose: "vegetarian" → "eats chicken" (embedding cosine 0.35) needs world knowledge, not geometry. That's the 1-of-10 miss at τ=0.40, and the motivation for optional LLM adjudication — one call per detected conflict, not per write.
Failure injection: the silent-loss test
Reproducing Mem0 issue #5245 (silent memory loss when the embedder fails): we write 12 facts through the engine while the embedding backend fails on 100% of calls, then query every fact back with re-worded questions.
Result: 0.0% loss.Dense embeddings are a re-ranking signal in CLS++, not a storage dependency — retrieval falls back to the engine's own token index.
External data, not just our own
Our own scenarios are a fair thing to be skeptical of, so the same runner targets LongMemEval (ICLR 2025), specifically its knowledge-update category: 70 of 78 items converted cleanly (the 8 exclusions are printed, not silently dropped). On that third-party data, every toy heuristic — naive recall, BM25, even last-write-wins — collapses to 27% truth retention, because real people state updates indirectly. That's the bar the real engine has to clear.
The stack, in numbers
- ~75,600 lines of Python in the engine
- 3,832 test functions across the test suite
- 4 memory tiers — L0 working buffer → L1 index → L2 schema graph → L3 deep recess — plus a new L4 derivation tier that combines two stored facts into a new one
- 11 MCP tools — plug into Claude Code, Cursor, Windsurf, VS Code
- 4 framework adapters: CrewAI, LangGraph, LlamaIndex, AutoGen
- 2 SDKs, PyPI and npm, both named
clsplusplus, method-for-method mirrors
The honest summary
Three numbers to remember: 0% stale answers, 0 LLM calls per write, 1.5 ms p95 writes. And two we're still earning: paraphrase recall at 80% against a 95% gate, and survival at 86.5% under a 100k-write flood. The scoreboard runs every night; the reds are published next to the greens.
Run the benchmarks yourself — no signup.
The nightly suite, the leaderboard runner, and the silent-loss repro all ship in the repo.