01Gate di ammissione in scrittura
Ammette, declassa o rifiuta ogni scrittura per implicazione dalla fonte. Nessun competitor qui ne ha uno.
Il problema della memoria degli agenti
Verimem è un layer di memoria persistente il cui add() fa passare ogni scrittura attraverso un gate di ammissione anti-confabulazione — la fonte implica davvero il fatto? — e il cui search() restituisce la provenienza a ogni lettura. Un ippocampo con un notaio alla porta.
✓ Gratuito e open source al 100% — licenza MIT. Self-hosted, local-first: niente account, niente API key, niente costi.
Gli altri layer di memoria salvano tutto ciò che il loro estrattore produce. Verimem no.
In scrittura, un fatto candidato viene ammesso, declassato o rifiutato — a seconda che la fonte citata lo implichi davvero. Un filtro lessicale economico, senza LLM, declassa subito le affermazioni non supportate del tipo «funziona / verificato / fatto»; la modalità più forte aggiunge un controllo di implicazione fonte⊢fatto. Misurato su SNLI raggiunge AUROC 0.971, e quel numero è indipendente dal giudice.
Una rassegna strutturata di mem0, Zep, Letta, Cognee e MemOS ha rilevato che nessuno di loro ha un gate di ammissione in scrittura. Quel gate — più la provenienza che ogni lettura riporta indietro — è tutto il punto.
Illustrativo — il gate in tre verdetti
Le letture non restituiscono solo il testo — restituiscono per ogni fatto lo status e il grounding_score del momento di scrittura, così il tuo codice può condizionare sulla fiducia invece di fidarsi alla cieca. E update() non distrugge mai il vecchio fatto: lo soppianta, lasciando una traccia history() verificabile.
memory.py · la scrittura passa dal gate, la lettura restituisce la provenienza
from engram import Memory
mem = Memory() # local SQLite, offline
mem.add("The deployment uses PostgreSQL 16.") # write goes THROUGH the gate
for hit in mem.search("which database?"): # read returns provenance
print(hit["text"], hit["status"], hit["grounding_score"])
# -> The deployment uses PostgreSQL 16. ADMITTED 0.97 | Metrica | Risultato | Agli atti |
|---|---|---|
| Entailment del gate in scrittura | AUROC 0.971 | Fonte⊢fatto, indipendente dal giudice (SNLI). Il moat sul percorso di scrittura. |
| Allucinazione a valle | 95.9% → 12.2% | −83,7 pp; McNemar p≈6e-44, replicato su 2 seed. Funziona convertendo la confabulazione in astensione (omissione 3%→85%), non alzando la correttezza — e questo braccio è accoppiato al giudice. |
| Over-rejection di fatti puliti | 30–39% | Il costo onesto alla soglia stretta. Il gate locale distillato (v2) ammette lo 0,924 dei fatti puliti, chiudendo in gran parte il problema. |
| Retrieval recall@5 · LongMemEval-s | 0.8745 | 500 completo, senza giudice, stesso embedder e5, zero API esterne. Fusion ON vs 0.8525 OFF (+2,2 pp). Un precedente n=300 dava 0.909 — ottimistico; il numero su 500 completo è quello onesto. Questo è recall@k, non accuratezza QA end-to-end. |
| Retrieval in italiano | MRR +52% | 0.466 → 0.710 col passaggio all'embedder e5, a zero regressione sull'inglese. |
| Rilevamento contraddizioni · HaluMem | TPR 0.66 / FPR 0.0125 | Dopo la correzione della supersessione temporale. |
| Suite di test | 5.830 verdi | 764 file di test, ~84k righe. Auto-eseguiti, riproducibili dal repo. |
Ogni cifra qui è auto-eseguita e riproducibile dal repository — non è un piazzamento su una classifica di terzi. I numeri di retrieval sono recall@k, non l'accuratezza QA end-to-end che Mem0 e Zep mettono in prima pagina, quindi non sono direttamente confrontabili.
Ammette, declassa o rifiuta ogni scrittura per implicazione dalla fonte. Nessun competitor qui ne ha uno.
Ogni fatto restituisce status + grounding_score; update() soppianta, history() resta verificabile.
valid_until con scadenza netta — una memoria che sa quando un fatto ha smesso di essere vero.
Modalità MCP hosted: nessuna API key, nessun billing a token — l'LLM dell'host fa il lavoro.
Uno screen anti prompt-injection in scrittura — italiano incluso, non solo inglese.
228 strumenti di memoria all'avvio della sessione in Claude Code, Cursor, Cline, Continue, Zed.
| Sistema | Gate in scrittura | Provenienza in lettura | Approccio | Maturità |
|---|---|---|---|---|
| Mem0 | ✗ | ✗ | Vettore piatto + riassunto LLM | Consolidato, ampiamente adottato |
| Zep / Graphiti | ✗ | parziale (temporale) | Knowledge graph temporale | Commerciale, maturo |
| HippoRAG | ✗ | ✗ | OpenIE + PageRank | Ricerca |
| Verimem | ✓ | ✓ | Fusion recall + gate + consolidamento nel sonno | Nuovissimo · 0 adozione al momento |
I punteggi e l'adozione dei competitor variano per fonte e nel tempo; le due colonne su cui poggiamo — un gate in scrittura e la provenienza in lettura — vengono da una rassegna strutturata, non da una tabella di marketing.
Un rilascio pubblico nuovissimo. Nessuno ci dipende ancora — noi compresi, oltre al daily driver del maintainer.
Per ora si installa da sorgente / git. Un pacchetto engram-memory è un obiettivo post-v0.4.0.
Ogni numero è riproducibile dal repo, ma nessuno è auditato da terzi. Trattali come riproducibili, non certificati.
Single-user e locale. Lo scoping multi-tenant esiste sul piano dei fatti; uno store hosted / distribuito no.
Il motore entità+PageRank è vivo su dati reali ma l'estrattore è regex deterministico, eseguito come backfill — non ancora agganciato al percorso di scrittura live.
Una revisione avversariale ha trovato gonfiata la prima demo di condizionamento in risposta. Solo il moat sul percorso di scrittura regge sulle sue evidenze — quindi è tutto ciò che dichiariamo.
① Python — da sorgente
pip install "git+https://github.com/aureliocpr-ctrl/verimem.git" Fornisce il comando engram e l'SDK from engram import Memory. SQLite locale, offline, gate attivo di default.
github.com/aureliocpr-ctrl/verimem ↗ · MIT · README · BENCHMARKS.md
② Come server MCP — Claude Code, Cursor, Cline, Zed
{
"mcpServers": {
"engram": {
"command": "engram",
"args": ["mcp"],
"env": { "ENGRAM_HOSTED": "1" }
}
}
} Riavvia l'host; gli strumenti di memoria diventano chiamabili con zero API key. Il motore al momento si distribuisce come engram — il rename in Verimem è in corso.