Il registro ufficiale della memoria degli agenti v0.3.0 · pre-release · MIT

Il problema della memoria degli agenti

La memoria degli agenti salva tutto. Vero o no.

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.

Ammessogrounding 0.97
Scrittura candidata
«Il deploy usa PostgreSQL 16.»
fonte ⊢ fatto — la release note citata implica l'affermazione.
stato AMMESSO · salvato con provenienza.
§01 Il gate di ammissione

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

Ammesso0.97
Scrittura · implicata
«Il deploy usa PostgreSQL 16.»
AMMESSO · salvato con provenienza
Declassato0.41
Scrittura · non supportata
«La migrazione è fatta e funziona tutto.»
DECLASSATO · tenuto, segnalato a bassa fiducia
Rifiutato0.08
Scrittura · contraddetta
«Il rate limit dell'API è 10.000 req/s.»
RIFIUTATO · la fonte dice 1.000 — non salvato

Provenienza a ogni lettura

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
§02 Evidenze — misurate, non dichiarate
MetricaRisultatoAgli 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.

§03 La differenza — una combinazione onesta

01Gate di ammissione in scrittura

Ammette, declassa o rifiuta ogni scrittura per implicazione dalla fonte. Nessun competitor qui ne ha uno.

02Provenienza in lettura

Ogni fatto restituisce status + grounding_score; update() soppianta, history() resta verificabile.

03Valid-time bitemporale

valid_until con scadenza netta — una memoria che sa quando un fatto ha smesso di essere vero.

04Gira sul tuo abbonamento

Modalità MCP hosted: nessuna API key, nessun billing a token — l'LLM dell'host fa il lavoro.

05Screen anti-injection multilingua

Uno screen anti prompt-injection in scrittura — italiano incluso, non solo inglese.

06MCP-native

228 strumenti di memoria all'avvio della sessione in Claude Code, Cursor, Cline, Continue, Zed.

SistemaGate in scritturaProvenienza in letturaApproccioMaturità
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.

§04 Cosa Verimem NON è
agli atti
  • 0 adozione.

    Un rilascio pubblico nuovissimo. Nessuno ci dipende ancora — noi compresi, oltre al daily driver del maintainer.

  • Non su PyPI.

    Per ora si installa da sorgente / git. Un pacchetto engram-memory è un obiettivo post-v0.4.0.

  • Benchmark auto-eseguiti.

    Ogni numero è riproducibile dal repo, ma nessuno è auditato da terzi. Trattali come riproducibili, non certificati.

  • SQLite single-node.

    Single-user e locale. Lo scoping multi-tenant esiste sul piano dei fatti; uno store hosted / distribuito no.

  • Grafo entità regex-tier.

    Il motore entità+PageRank è vivo su dati reali ma l'estrattore è regex deterministico, eseguito come backfill — non ancora agganciato al percorso di scrittura live.

  • Answer-path non provato.

    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.

§05 Installa in 2 minuti

① 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.