01Gate de admisión en escritura
Admite, degrada o rechaza cada escritura por entailment de la fuente. Ningún competidor aquí lo trae — y desde julio es multilingüe: el mismo screen semántico en 10 idiomas, calibrado a 0 falsos positivos.
El problema de la memoria de los agentes
Verimem es una capa de memoria persistente cuyo add() hace pasar cada escritura por un gate de admisión anti-confabulación — ¿la fuente realmente implica el hecho? — y cuyo search() devuelve la procedencia en cada lectura. Un hipocampo con un notario en la puerta.
✓ 100% gratis y de código abierto — licencia AGPL-3.0. Self-hosted, local-first: sin cuenta, sin API key, sin facturación.
Las demás capas de memoria guardan lo que produce su extractor. Verimem no.
Al escribir, un hecho candidato se admite, degrada o rechaza — según si la fuente citada realmente lo implica. Un filtro léxico barato, sin LLM, degrada de inmediato las afirmaciones no respaldadas del tipo «funciona / verificado / hecho»; luego, activada por defecto desde v0.5.0, una comprobación de implicación fuente⊢hecho rechaza toda afirmación que la fuente citada no respalde realmente. Medido en SNLI alcanza AUROC 0.971, y ese número es independiente del juez.
Una revisión estructurada de mem0, Zep, Letta, Cognee y MemOS halló que ninguno incorpora un gate de admisión en escritura. Ese gate — más la procedencia que cada lectura devuelve — es toda la cuestión. — y una survey independiente de 2026 sobre agentes always-on (arXiv 2606.30306) observa que el campo se concentra mucho más en acumular y recuperar el estado del agente que en gobernarlo — justo el hueco del write-admission.
Ilustrativo — el gate en tres veredictos
Las lecturas no solo devuelven texto — devuelven para cada hecho su status y su grounding_score del momento de escritura, para que tu código pueda condicionar por confianza en vez de fiarse a ciegas. Y update() nunca destruye el hecho antiguo: lo sustituye, dejando un rastro history() auditable. explain() devuelve un TrustReport completo — procedencia, comprobaciones y cualquier conflicto, declarado o con abstención motivada.
memory.py · la escritura pasa por el gate, la lectura devuelve la procedencia
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 | Métrica | Resultado | Para el registro |
|---|---|---|
| Entailment del gate en escritura | AUROC 0.971 | Fuente⊢hecho, independiente del juez (SNLI). El moat del camino de escritura. |
| QA end-to-end · HaluMem, pipeline completa | 0.66–0.68 | Nuestra extracción → store con gate → respuesta: siete ejecuciones completas consecutivas se agrupan en 0.66–0.68 (media 0.667, n=3 limpias) frente al 0.672 auto-reportado de MemOS — paridad, no victoria, y así lo decimos. El juez es Claude, no GPT-4; archivos raw en el repo. |
| Generalización cross-user | 0.716 | La misma receta con un usuario nunca visto (n=169): 0.716. La receta no está ajustada a los datos de un solo usuario. |
| Abstención memory-boundary | 1.000 × 7 runs | Se niega a inventar cuando el store no puede sostener una respuesta — 1.000 en siete ejecuciones end-to-end consecutivas. El eje que los competidores no miden. |
| Agujero multilingüe del gate — cerrado | 8/10 → 0/10 | Reproducido desde pruebas en vivo: la misma afirmación hype sin respaldo pasaba limpia en 8 de 10 idiomas (el screen léxico era solo EN/IT). Corregido con un dual-check semántico que usa el propio embedder multilingüe como detector, luego endurecido por una review adversarial que falsificó el primer claim de "0 FP" en frases held-out: preguntas, negaciones y discurso reportado quedan ahora excluidos por guardias deterministas, by design. Tras el fix en el write path real: hype marcado en 10/10 idiomas, falsos positivos held-out 0/14 — script de calibración, hallazgos de la review y archivos raw en el repo. |
| Resolución de conflictos de memoria | 0.15 → 0.82 | Una actualización contradictoria gana 5.5× más a menudo tras el fix; retiradas erróneas reducidas 99 → 7 con el floor de precisión (0 cross-atributo). Veredicto del critic adversarial: claim_holds. |
| Tasa de alucinación (un dial) | 0.233 → 0.111 | −52% como interruptor (ENGRAM_GROUNDING_GATE), manteniendo las respuestas correctas. Eliges recall-first o trust-first — en QA y en el camino de escritura. |
| Retrieval recall@5 · LongMemEval-s | 0.8745 | 500 completo, sin juez, mismo embedder e5, cero API externas. Fusion ON vs 0.8525 OFF (+2.2 pp). Esto es recall@k, no precisión QA end-to-end. |
| Latencia · concurrencia | 38ms / 166–237ms | Escritura 38ms p50 con el gate completo; lectura 166–237ms con historia + TrustReport a 5k hechos. 500 procesos concurrentes sobre un solo store SQLite, 0 errores (workers ligeros). |
| Suite de tests | 7.761 en verde | Auto-ejecutados, reproducibles desde el repo. Sin clasificación de terceros. Una prueba smoke en vivo hacia el proveedor LLM depende del entorno (requiere un proveedor hosted) y queda fuera del conteo. |
| TrustMem-Bench · ejes de trust | Verimem 60/60 | Nuestro benchmark de trust determinista — sin LLM, sin red: seis ejes, un comando. Verimem supera 60/60; mem0 OSS cubre 40/60 (0/10 en ausencia, olvido, procedencia). Una baseline raw-store a propósito — invitamos a los competidores a ejecutarlo. |
| VeriBench · el estándar de confianza | determinista · self-run | El benchmark abierto para memoria fiable — puntúa lo que recall@k no ve, porque una puntuación simétrica no distingue una respuesta errónea y segura de un honesto "no lo sé". En el eje causal, un store solo-trust que corroboró una correlación espuria queda en negativo incluso a λ=1 (procedencia ≠ causalidad). En el eje adversarial — colusión más un sleeper de confianza — solo una política de dos canales (corroboración independiente y resultado) sigue en positivo; cada canal por sí solo cae ante un ataque. Sin modelos, un comando, spec en el repo — los competidores están invitados a ejecutarlo. Resultados completos, protocolo y head-to-head → |
| Source trust en un corpus REAL | cártel 0.90 → 0.20 · 3/3 seeds | HaluEval held-out, criterios pre-registrados antes de la primera ejecución: un cártel de 4 identidades que se auto-confirma a 0.90 con el conteo naive de ≥2 fuentes queda demolido a 0.20 por independencia + deconfounding sobre la auditoría; las fuentes honestas suben a 0.95 y las respuestas alucinadas del cártel desaparecen del recall (→ 0.0). Curva de robustez (18 puntos): respuestas erróneas escritas por engañadores = 0/18 a todo nivel de ruido; el residuo son errores honestos — enfermedad per-claim, declarada, no escondida. |
| Perilla SLA · opera al riesgo declarado | TCE ≤ 0.011 · riesgo 1,1% @ 73% coverage | Un AUROC fuerte dice que las puntuaciones discriminan; no dice que la perilla λ opere al riesgo declarado (Oxford 2603.21172). Medido held-out con calibración ajustada solo en dev: las puntuaciones raw ordenan casi-oráculo (E-AURC 0.0008) pero prometen un riesgo distinto del entregado; tras una calibración isotónica pura cada objetivo λ declarado se cumple — TCE ≤ 0.011 en λ ∈ {0.5–9}, riesgo observado 1,1% con 73% de coverage. Trade-off declarado: la calibración aplana el ranking fino — raw para ordenar, calibrado para operar. |
Cada cifra aquí es auto-ejecutada y reproducible desde el repositorio — no es una posición en un ranking de terceros. Los números de retrieval son recall@k, no la precisión QA end-to-end que Mem0 y Zep destacan, así que no son directamente comparables.
Admite, degrada o rechaza cada escritura por entailment de la fuente. Ningún competidor aquí lo trae — y desde julio es multilingüe: el mismo screen semántico en 10 idiomas, calibrado a 0 falsos positivos.
Cada hecho devuelve status + grounding_score; update() sustituye, history() sigue auditable; explain() da el dossier completo de "¿cómo lo sabes?".
Dos relojes (cuándo se aprendió vs cuándo era cierto), respuesta-con-historia ("cambió de X a Y el Z"), time-travel as_of y recall profundo de hechos dormidos — no solo valid_until.
verimem gateway serve: API HTTP multi-tenant en tu propia máquina — claves hasheadas, stores aislados por tenant, rate limiting, backups en caliente, provisioning remoto. Tus datos nunca salen de tu infraestructura.
Contadores persistentes de lo que el gate HIZO de verdad — escrituras admitidas, en cuarentena, rechazadas, abstenciones honestas — por store y por tenant, con una página /dashboard sin dependencias. Acciones observables, no claims de marketing.
Indexa PDF / DOCX / HTML / EPUB; los pasajes vuelven con archivo, versión y offsets de caracteres, y pueden promoverse a memoria a través del gate.
Arranca desde tu export de ChatGPT / Claude: las conversaciones se listan primero, filtrables por título, fecha o proyecto — nada se ingiere sin una selección explícita.
delete(purge_history=True) colapsa la cadena entera — los datos borrados no resurgen desde history, as_of ni el recall profundo.
Herramientas de memoria al iniciar sesión en Claude Code, Cursor, Cline, Zed — más un cliente TypeScript tipado y sin dependencias para el gateway, contract-tested contra el servidor vivo.
Modo MCP hosted: sin API key, sin billing por token — trabaja el LLM del host. Corre air-gapped (verimem airgap verifica cero egress).
El anillo de composición deriva hechos NUEVOS de los verificados y los pasa por el MISMO gate de admisión que cualquier escritor — los supervivientes entran firmados (las escrituras del motor nunca testifican por sí mismas), trazados (retractables si cae un padre) y etiquetados con el check exacto superado: proven / unbeaten(bound) / refuted(contraejemplo). "Aguantó hasta 10^6" y "demostrado" nunca se confunden.
Una lectura no solo se abstiene — cuando el store tiene una verdad mejor garantizada sobre el mismo sujeto, CORRIGE, citando ambos hechos (un hecho refutado nunca se sirve). Y el store se sondea a SÍ MISMO: construye la consulta que refutaría un hecho — contraevidencia independiente propone la etiqueta refuted, sobrevivir hace crecer su bound unbeaten. Falsación que no tienes que esperar.
Un HMAC infalsificable de QUIÉN habla viaja dentro del ref de procedencia de cada escritura, complementando el gate de entailment sobre QUÉ merece admisión. Autenticidad del contenido y autenticidad del canal — las dos mitades que ningún filtro de contenido determinista por sí solo puede certificar frente a un adversario adaptativo. Opt-in; la auditoría reporta cobertura y nombra a los infractores.
| Sistema | Gate de escritura | Procedencia en lectura | Enfoque | Madurez |
|---|---|---|---|---|
| Mem0 | ✗ | ✗ | Vector plano + resumen LLM | Consolidado, ampliamente adoptado |
| Zep / Graphiti | ✗ | parcial (temporal) | Knowledge graph temporal | Comercial, maduro |
| HippoRAG | ✗ | ✗ | OpenIE + PageRank | Investigación |
| Verimem | ✓ | ✓ | Fusion recall + gate + consolidación en el sueño | Nuevísimo · 0 adopción por ahora |
Las puntuaciones y la adopción de los competidores varían por fuente y con el tiempo; las dos columnas sobre las que nos apoyamos — un gate en escritura y procedencia en lectura — vienen de una revisión estructurada, no de una tabla de marketing.
Un lanzamiento nuevísimo. Nadie depende de él aún — nosotros incluidos, más allá del daily driver del maintainer.
pip install verimem — v0.7.0 en PyPI (AGPL-3.0); el repo público está en GitHub, con la primera CI en verde. Aun así, nuevísimo.
La independencia de procedencia y el deconfounding sobre la auditoría ahora se sostienen en un corpus real held-out (HaluEval, criterios pre-registrados, 3/3 seeds): un cártel de consenso fabricado que se auto-confirma a 0.90 con conteo naive queda demolido a 0.20, las fuentes honestas suben a 0.95 y sus respuestas alucinadas desaparecen del recall. Límite honesto, medido: bajo ruido honesto fuerte (fuentes fiables que fallan ~15%+) la separación se degrada — el residuo es 100% errores honestos, enfermedad per-claim, no un ataque. Los flags siguen default OFF: la evidencia informa el cambio, el cambio es una decisión de producto.
Cada TrustReport ahora lo declara — Verimem certifica quién afirmó un hecho, cuán independientemente está corroborado y cuán fresco es, no que sea causalmente verdadero. Una pregunta do(X) necesita un hecho intervencional; uno observacional corroborado no puede responderla.
Cada número es reproducible desde el repo, pero ninguno está auditado por terceros. La cifra QA vs MemOS usa un juez Claude (no GPT-4) sobre n=2 usuarios. Trátalos como reproducibles, no certificados.
La pipeline completa (nuestra extracción → QA) se agrupa en 0.66–0.68 a lo largo de siete ejecuciones consecutivas (media 0.667 en n=3 stores limpios) frente al 0.672 de MemOS, y mantiene 0.716 con un usuario nunca visto. El caveat sigue: el juez es Claude, no GPT-4, sin auditoría de terceros. Decimos paridad, no "supera".
El gateway multi-tenant (stores aislados por tenant, claves hasheadas, backups, metering) es real y está probado — en tu infraestructura. Un servicio cloud gestionado no existe todavía.
La extracción de entidades conversacionales (tier tipado) está shipped pero apagada por defecto; el razonamiento multi-hop sobre el grafo es el eje medido más débil (0.39–0.44) y el frente de trabajo actual.
① Python — desde fuente
pip install verimem Proporciona el comando verimem y el SDK from verimem import Memory — add() / search() / history() / explain(). SQLite local, offline, gate activo por defecto.
github.com/aureliocpr-ctrl/verimem ↗ · AGPL-3.0 · README · BENCHMARKS.md
② Como servidor MCP — Claude Code, Cursor, Cline, Zed
{
"mcpServers": {
"verimem": {
"command": "verimem",
"args": ["mcp"],
"env": { "ENGRAM_HOSTED": "1" }
}
}
} Reinicia tu host; las herramientas de memoria pasan a ser invocables con cero API key — el LLM del host hace el trabajo.
③ Gateway self-host para equipos
verimem gateway keys create --tenant acme
verimem gateway serve # 127.0.0.1:8377 · /ui verimem gateway keys create --tenant acme y luego verimem gateway serve — API HTTP multi-tenant con stores aislados por tenant, rate limiting y backups en caliente. Abre /ui para el odómetro de confianza; en el repo hay un cliente TypeScript tipado.
④ Verla trabajar — la consola de confianza
verimem console # your store · odometer · graph · live verimem console abre tu almacén local en el navegador — odómetro de confianza, grafo de conocimiento donde cada conclusión lleva su cadena de custodia, registro de afirmaciones bloqueadas, en vivo por SSE. El gateway de equipo sirve la misma consola en /ui; los agentes leen todo el estado desde /v1/snapshot.