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

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 AGPL-3.0. 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»; poi, attivo di default da v0.5.0, un controllo di implicazione fonte⊢fatto rifiuta ogni affermazione che la fonte citata non supporta davvero. 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 — e una survey indipendente 2026 sugli agenti always-on (arXiv 2606.30306) rileva che il campo si concentra molto più sull'accumulare e recuperare lo stato dell'agente che sul governarlo — esattamente il buco del write-admission. 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. explain() restituisce un TrustReport completo — provenienza, controlli ed eventuali conflitti, dichiarati o con astensione motivata.

memory.py · la scrittura passa dal gate, la lettura restituisce la provenienza

from verimem 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.
QA end-to-end · HaluMem, pipeline completa 0.66–0.68 La nostra extraction → store col gate → risposta: sette run completi consecutivi si raggruppano a 0.66–0.68 (media 0.667, n=3 puliti) contro lo 0.672 auto-dichiarato di MemOS — parità, non vittoria, e lo diciamo così. Giudice Claude, non GPT-4; file raw nel repo.
Generalizzazione cross-user 0.716 La stessa ricetta su un utente mai visto (n=169): 0.716. La ricetta non è tarata sui dati di un solo utente.
Astensione memory-boundary 1.000 × 7 run Si rifiuta di inventare quando lo store non supporta una risposta — 1.000 su sette run end-to-end consecutivi. L'asse che i competitor non misurano.
Buco multilingua del gate — chiuso 8/10 → 0/10 Riprodotto dal test dal vivo: la stessa claim hype non supportata passava pulita in 8 lingue su 10 (lo screen lessicale era solo EN/IT). Fix con un dual-check semantico che usa l'embedder multilingue stesso come detector, poi temprato da una review avversariale che ha falsificato il primo claim "0 FP" su frasi held-out: domande, negazioni e discorso riportato ora sono esclusi da guardie deterministiche, by design. Post-fix sul write path reale: hype flaggato 10/10 lingue, falsi positivi held-out 0/14 — script di calibrazione, finding della review e file raw nel repo.
Risoluzione conflitti di memoria 0.15 → 0.82 Un aggiornamento contraddittorio vince 5.5× più spesso dopo il fix; ritiri sbagliati ridotti 99 → 7 col floor di precisione (0 cross-attributo). Verdetto del critic avversariale: claim_holds.
Tasso di allucinazione (un dial) 0.233 → 0.111 −52% come interruttore (ENGRAM_GROUNDING_GATE), mantenendo le risposte corrette. Scegli tu recall-first o trust-first — su QA e sul percorso di scrittura.
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). Questo è recall@k, non accuratezza QA end-to-end.
Latenza · concorrenza 38ms / 166–237ms Scrittura 38ms p50 col gate completo; lettura 166–237ms con storia + TrustReport a 5k fatti. 500 processi concorrenti su un solo store SQLite, 0 errori (worker leggeri).
Suite di test 7.761 verdi Auto-eseguiti, riproducibili dal repo. Nessuna classifica di terzi. Un test smoke live verso il provider LLM è legato all'ambiente (serve un provider hosted) ed è escluso dal conteggio.
TrustMem-Bench · assi di trust Verimem 60/60 Il nostro benchmark di trust deterministico — niente LLM, niente rete: sei assi, un comando. Verimem supera 60/60; mem0 OSS copre 40/60 (0/10 su assenza, dimenticanza, provenienza). Una baseline raw-store per scelta — i competitor sono invitati a eseguirlo.
VeriBench · lo standard del trust deterministico · self-run Il benchmark aperto per la memoria fidata — misura ciò che recall@k non vede, perché un punteggio simmetrico non distingue una risposta sbagliata e sicura da un onesto "non lo so". Sull'asse causale, uno store solo-trust che ha corroborato una correlazione spuria va in negativo perfino a λ=1 (provenienza ≠ causalità). Sull'asse avversariale — collusione più sleeper fidato — solo una policy a due canali (corroborazione indipendente e esito) resta in positivo; ogni canale singolo cede a un attacco. Senza modelli, un comando, spec nel repo — i competitor sono invitati a eseguirlo. Risultati completi, protocollo e head-to-head →
Source trust su un corpus REALE cartello 0.90 → 0.20 · 3/3 seed HaluEval held-out, criteri pre-registrati prima della prima run: un cartello di 4 identità che si auto-conferma a 0.90 col conteggio naive ≥2 fonti viene demolito a 0.20 da indipendenza + deconfounding sull'audit; le fonti oneste risalgono a 0.95, le risposte allucinate del cartello spariscono dal recall (→ 0.0). Curva di robustezza (18 punti): risposte sbagliate scritte da ingannatori = 0/18 a ogni livello di rumore; il residuo sono errori onesti — malattia per-claim, dichiarata, non nascosta.
Manopola SLA · opera al rischio dichiarato TCE ≤ 0.011 · rischio 1,1% @ 73% coverage Un AUROC forte dice che i punteggi discriminano; non dice che la manopola λ opera al rischio dichiarato (Oxford 2603.21172). Misurato held-out con calibrazione fittata solo su dev: i punteggi raw ordinano quasi-oracolo (E-AURC 0.0008) ma promettono un rischio diverso da quello consegnato; dopo una calibrazione isotonica pura ogni target λ dichiarato è rispettato — TCE ≤ 0.011 su λ ∈ {0.5–9}, rischio osservato 1,1% al 73% di coverage. Trade-off dichiarato: la calibrazione appiattisce il ranking fine — raw per ordinare, calibrato per operare.

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

Ammetti, declassa o rifiuta ogni scrittura per entailment della fonte. Nessun competitor qui ne ha uno — e da luglio è multilingue: lo stesso screen semantico in 10 lingue, calibrato a 0 falsi positivi.

02Provenienza + TrustReport

Ogni fatto ritorna status + grounding_score; update() sostituisce, history() resta auditabile; explain() dà un dossier completo "come lo sai?".

03Bi-temporale + time-travel

Due orologi (quando appreso vs quando vero), risposta-con-storia ("cambiato da X a Y il Z"), time-travel as_of e recall profondo dei fatti dormienti — non solo valid_until.

04Gateway self-host per team

verimem gateway serve: API HTTP multi-tenant sulla tua macchina — chiavi hashate, store isolati per tenant, rate limiting, backup a caldo, provisioning remoto. I tuoi dati non lasciano la tua infrastruttura.

05Odometro della fiducia + dashboard

Contatori persistenti di ciò che il gate ha FATTO davvero — scritture ammesse, quarantenate, rifiutate, astensioni oneste — per store e per tenant, con una pagina /dashboard senza dipendenze. Azioni osservabili, non claim di marketing.

06Memoria documentale con citazioni esatte

Indicizza PDF / DOCX / HTML / EPUB; i passaggi tornano con file, versione e offset dei caratteri, e possono essere promossi a memoria attraverso il gate.

07Import consent-first

Parti dal tuo export ChatGPT / Claude: le conversazioni vengono prima elencate, filtrabili per titolo, data o progetto — niente viene ingerito senza una selezione esplicita.

08Oblio GDPR che tiene

delete(purge_history=True) collassa l'intera catena — i dati cancellati non riaffiorano da history, as_of o recall profondo.

09MCP-nativo + SDK TypeScript

Strumenti di memoria all'avvio sessione in Claude Code, Cursor, Cline, Zed — più un client TypeScript tipizzato e senza dipendenze per il gateway, contract-tested contro il server vivo.

10Gira sul tuo abbonamento

Modalità MCP hosted: niente API key, niente billing per token — lavora l'LLM dell'host. Gira air-gapped (verimem airgap verifica zero egress).

11Conoscenza derivata, col gate

L'anello di composizione deriva fatti NUOVI da quelli verificati e li fa passare dallo STESSO gate di ammissione di ogni scrittore — i sopravvissuti entrano firmati (le scritture del motore non testimoniano mai per se stesse), tracciati (ritrattabili se cade un genitore) ed etichettati col check esatto superato: proven / unbeaten(bound) / refuted(controesempio). "Retto fino a 10^6" e "dimostrato" non si confondono mai.

12Guardiano in lettura + probe attive

Una lettura non si limita ad astenersi — quando lo store contiene una verità meglio garantita sullo stesso soggetto, CORREGGE, citando entrambi i fatti (un fatto confutato non viene mai servito). E lo store sonda SE STESSO: costruisce la query che falsificherebbe un fatto — controprova indipendente propone l'etichetta refuted, la sopravvivenza fa crescere il bound unbeaten. Falsificazione che non devi aspettare.

13Firma di provenienza

Un HMAC infalsificabile di CHI parla viaggia dentro il ref di provenienza di ogni scrittura, a complemento del gate di entailment su COSA merita l'ammissione. Autenticità del contenuto e autenticità del canale — le due metà che nessun filtro di contenuto deterministico da solo può certificare contro un avversario adattivo. Opt-in; l'audit riporta la copertura e nomina i trasgressori.

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 nuovissimo. Nessuno ci dipende ancora — noi compresi, oltre al daily driver del maintainer.

  • Su PyPI · repo pubblico.

    pip install verimem — v0.7.0 online su PyPI (AGPL-3.0); il repo pubblico è su GitHub, con CI verde. Comunque nuovissimo.

  • Guardie source-trust — riprodotte su corpus reale, ancora opt-in.

    L'indipendenza di provenienza e il deconfounding sull'audit ora reggono su un corpus reale held-out (HaluEval, criteri pre-registrati, 3/3 seed): un cartello da consenso fabbricato che si auto-conferma a 0.90 col conteggio naive viene demolito a 0.20, le fonti oneste risalgono a 0.95, e le sue risposte allucinate spariscono dal recall. Limite onesto, misurato: sotto rumore onesto pesante (fonti fidate che sbagliano ~15%+) la separazione degrada — il residuo è 100% errori onesti, malattia per-claim, non un attacco. I flag restano default OFF: l'evidenza informa il flip, il flip è una decisione di prodotto.

  • Scope: provenienza, non causalità.

    Ogni TrustReport ora lo dichiara — Verimem certifica chi ha asserito un fatto, quanto indipendentemente è corroborato e quanto è fresco, non che sia causalmente vero. Una domanda do(X) richiede un fatto interventistico; uno osservazionale corroborato non può risponderle.

  • Benchmark auto-eseguiti.

    Ogni numero è riproducibile dal repo, ma nessuno è auditato da terzi. La cifra QA vs MemOS usa un giudice Claude (non GPT-4) su n=2 utenti. Trattali come riproducibili, non certificati.

  • Parità end-to-end — auto-giudicata.

    La pipeline completa (nostra extraction → QA) si raggruppa a 0.66–0.68 su sette run consecutivi (media 0.667 su n=3 store puliti) contro lo 0.672 di MemOS, e tiene 0.716 su un utente mai visto. Il caveat resta: giudice Claude non GPT-4, nessun audit di terzi. Diciamo parità, non "batte".

  • Self-host sì — cloud gestito no.

    Il gateway multi-tenant (store isolati per tenant, chiavi hashate, backup, metering) è reale e testato — sulla tua infrastruttura. Un servizio cloud gestito non esiste ancora.

  • Grafo di entità: tipizzato, opt-in, giovane.

    L'estrazione di entità conversazionali (tier tipizzato) è shipped ma off di default; il ragionamento multi-hop sul grafo è l'asse misurato più debole (0.39–0.44) ed è il cantiere corrente.

§05 Installa

① Python — da sorgente

pip install verimem

Fornisce il comando verimem e l'SDK from verimem import Memoryadd() / search() / history() / explain(). SQLite locale, offline, gate attivo di default.

github.com/aureliocpr-ctrl/verimem ↗ · AGPL-3.0 · README · BENCHMARKS.md

② Come server MCP — Claude Code, Cursor, Cline, Zed

{
  "mcpServers": {
    "verimem": {
      "command": "verimem",
      "args": ["mcp"],
      "env": { "ENGRAM_HOSTED": "1" }
    }
  }
}

Riavvia l'host; gli strumenti di memoria diventano chiamabili con zero API key — l'LLM dell'host fa il lavoro.

③ Gateway self-host per team

verimem gateway keys create --tenant acme
verimem gateway serve   # 127.0.0.1:8377 · /ui

verimem gateway keys create --tenant acme poi verimem gateway serve — API HTTP multi-tenant con store isolati per tenant, rate limiting e backup a caldo. Apri /ui per l'odometro della fiducia; nel repo c'è un client TypeScript tipizzato.

④ Vederla lavorare — la trust console

verimem console   # your store · odometer · graph · live

verimem console apre il tuo store locale nel browser — odometro della fiducia, grafo di conoscenza dove ogni conclusione porta la sua catena di custodia, registro dei claim bloccati, in diretta via SSE. Il gateway di team serve la stessa console su /ui; gli agenti leggono l'intero stato da /v1/snapshot.