01Gate de admissão na escrita
Admite, rebaixa ou recusa cada escrita por entailment da fonte. Nenhum concorrente aqui entrega um — e desde julho é multilíngue: o mesmo screen semântico em 10 idiomas, calibrado a 0 falsos positivos.
O problema da memória dos agentes
A Verimem é uma camada de memória persistente cujo add() faz cada escrita passar por um portão de admissão anti-confabulação — a fonte realmente implica o fato? — e cujo search() devolve proveniência em cada leitura. Um hipocampo com um tabelião à porta.
✓ 100% gratuito e open source — licença AGPL-3.0. Auto-hospedado, local-first: sem conta, sem API key, sem cobrança.
As outras camadas de memória guardam o que quer que o extrator produza. A Verimem não.
Na escrita, um fato candidato é admitido, rebaixado ou recusado — conforme a fonte citada realmente o implique. Um filtro léxico barato, sem LLM, rebaixa primeiro as afirmações sem respaldo do tipo «funciona / verificado / feito»; depois, ativada por padrão desde a v0.5.0, uma verificação de implicação fonte⊢fato recusa qualquer afirmação que a fonte citada não sustente de fato. Medido em SNLI atinge AUROC 0.971, e esse número é independente do juiz.
Uma revisão estruturada de mem0, Zep, Letta, Cognee e MemOS constatou que nenhum deles traz um portão de admissão na escrita. Esse portão — mais a proveniência que cada leitura traz de volta — é o ponto todo. — e uma pesquisa independente de 2026 sobre agentes always-on (arXiv 2606.30306) observa que o campo se concentra muito mais em acumular e recuperar o estado do agente do que em governá-lo — exatamente a lacuna do write-admission.
Ilustrativo — o portão em três veredictos
As leituras não devolvem só texto — devolvem de cada fato o seu status e o grounding_score do momento da escrita, para o seu código condicionar por confiança em vez de confiar às cegas. E update() nunca destrói o fato antigo: ele o substitui, deixando um rastro history() auditável. explain() devolve um TrustReport completo — proveniência, verificações e qualquer conflito, declarado ou com abstenção motivada.
memory.py · a escrita passa pelo portão, a leitura devolve a proveniência
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 constar |
|---|---|---|
| Entailment do portão de escrita | AUROC 0.971 | Fonte⊢fato, independente do juiz (SNLI). O moat do caminho de escrita. |
| QA end-to-end · HaluMem, pipeline completa | 0.66–0.68 | Nossa extração → store com gate → resposta: sete execuções completas consecutivas se agrupam em 0.66–0.68 (média 0.667, n=3 limpas) contra o 0.672 auto-reportado do MemOS — paridade, não vitória, e é assim que dizemos. O juiz é Claude, não GPT-4; arquivos raw no repo. |
| Generalização cross-user | 0.716 | A mesma receita com um usuário nunca visto (n=169): 0.716. A receita não está ajustada aos dados de um único usuário. |
| Abstenção memory-boundary | 1.000 × 7 runs | Recusa-se a inventar quando o store não sustenta uma resposta — 1.000 em sete execuções end-to-end consecutivas. O eixo que os concorrentes não medem. |
| Buraco multilíngue do gate — fechado | 8/10 → 0/10 | Reproduzido de testes ao vivo: a mesma alegação hype sem respaldo passava limpa em 8 de 10 idiomas (o screen léxico era só EN/IT). Corrigido com um dual-check semântico que usa o próprio embedder multilíngue como detector, depois endurecido por uma review adversarial que falsificou o primeiro claim de "0 FP" em frases held-out: perguntas, negações e discurso reportado agora são excluídos por guardas determinísticas, by design. Pós-fix no write path real: hype sinalizado em 10/10 idiomas, falsos positivos held-out 0/14 — script de calibração, achados da review e arquivos raw no repo. |
| Resolução de conflitos de memória | 0.15 → 0.82 | Uma atualização contraditória vence 5,5× mais vezes após o fix; retiradas erradas reduzidas 99 → 7 com o floor de precisão (0 cross-atributo). Veredicto do critic adversarial: claim_holds. |
| Taxa de alucinação (um dial) | 0.233 → 0.111 | −52% como interruptor (ENGRAM_GROUNDING_GATE), mantendo as respostas corretas. Você escolhe recall-first ou trust-first — em QA e no caminho de escrita. |
| Retrieval recall@5 · LongMemEval-s | 0.8745 | 500 completo, sem juiz, mesmo embedder e5, zero APIs externas. Fusion ON vs 0.8525 OFF (+2,2 pp). Isto é recall@k, não exatidão QA de ponta a ponta. |
| Latência · concorrência | 38ms / 166–237ms | Escrita 38ms p50 com o portão completo; leitura 166–237ms com história + TrustReport a 5k fatos. 500 processos concorrentes sobre um único store SQLite, 0 erros (workers leves). |
| Suíte de testes | 7.761 no verde | Auto-executados, reproduzíveis a partir do repo. Sem ranking de terceiros. Um teste smoke ao vivo contra o provedor LLM depende do ambiente (requer provedor hosted) e fica fora da contagem. |
| TrustMem-Bench · eixos de trust | Verimem 60/60 | Nosso benchmark de trust determinístico — sem LLM, sem rede: seis eixos, um comando. Verimem passa 60/60; mem0 OSS cobre 40/60 (0/10 em ausência, esquecimento, procedência). Uma baseline raw-store de propósito — convidamos os concorrentes a executá-lo. |
| VeriBench · o padrão de confiança | determinístico · self-run | O benchmark aberto para memória confiável — mede o que recall@k não vê, porque uma pontuação simétrica não distingue uma resposta errada e confiante de um honesto "não sei". No eixo causal, um store só-trust que corroborou uma correlação espúria fica negativo até em λ=1 (proveniência ≠ causalidade). No eixo adversarial — conluio mais um sleeper confiável — só uma política de dois canais (corroboração independente e resultado) permanece positiva; cada canal sozinho cai diante de um ataque. Sem modelos, um comando, spec no repo — concorrentes convidados a executá-lo. Resultados completos, protocolo e head-to-head → |
| Source trust em corpus REAL | cartel 0.90 → 0.20 · 3/3 seeds | HaluEval held-out, critérios pré-registrados antes da primeira execução: um cartel de 4 identidades que se auto-confirma a 0.90 na contagem naive de ≥2 fontes é demolido para 0.20 por independência + deconfounding na auditoria; fontes honestas sobem a 0.95, as respostas alucinadas do cartel somem do recall (→ 0.0). Curva de robustez (18 pontos): respostas erradas escritas por enganadores = 0/18 em todo nível de ruído; o resíduo são erros honestos — doença per-claim, declarada, não escondida. |
| Botão SLA · opera no risco declarado | TCE ≤ 0.011 · risco 1,1% @ 73% coverage | Um AUROC forte diz que as pontuações discriminam; não diz que o botão λ opera no risco declarado (Oxford 2603.21172). Medido held-out com calibração ajustada só em dev: pontuações raw ordenam quase-oráculo (E-AURC 0.0008) mas prometem um risco diferente do entregue; após uma calibração isotônica pura cada alvo λ declarado é cumprido — TCE ≤ 0.011 em λ ∈ {0.5–9}, risco observado 1,1% com 73% de coverage. Trade-off declarado: a calibração achata o ranking fino — raw para ordenar, calibrado para operar. |
Cada número aqui é auto-executado e reproduzível a partir do repositório — não é uma colocação em ranking de terceiros. Os números de retrieval são recall@k, não a exatidão QA de ponta a ponta que Mem0 e Zep destacam, então não são diretamente comparáveis.
Admite, rebaixa ou recusa cada escrita por entailment da fonte. Nenhum concorrente aqui entrega um — e desde julho é multilíngue: o mesmo screen semântico em 10 idiomas, calibrado a 0 falsos positivos.
Cada fato retorna status + grounding_score; update() substitui, history() permanece auditável; explain() entrega o dossiê completo de "como você sabe?".
Dois relógios (quando aprendido vs quando verdadeiro), resposta-com-histórico ("mudou de X para Y em Z"), time-travel as_of e recall profundo de fatos dormentes — não só valid_until.
verimem gateway serve: API HTTP multi-tenant na sua própria máquina — chaves hasheadas, stores isolados por tenant, rate limiting, backups a quente, provisioning remoto. Seus dados nunca saem da sua infraestrutura.
Contadores persistentes do que o gate realmente FEZ — escritas admitidas, em quarentena, recusadas, abstenções honestas — por store e por tenant, com uma página /dashboard sem dependências. Ações observáveis, não claims de marketing.
Indexa PDF / DOCX / HTML / EPUB; os trechos voltam com arquivo, versão e offsets de caracteres, e podem ser promovidos a memória através do gate.
Comece do seu export do ChatGPT / Claude: as conversas são listadas primeiro, filtráveis por título, data ou projeto — nada é ingerido sem uma seleção explícita.
delete(purge_history=True) colapsa a cadeia inteira — dados apagados não ressurgem de history, as_of ou do recall profundo.
Ferramentas de memória no início da sessão em Claude Code, Cursor, Cline, Zed — mais um cliente TypeScript tipado e sem dependências para o gateway, contract-tested contra o servidor vivo.
Modo MCP hosted: sem API key, sem billing por token — o LLM do host faz o trabalho. Roda air-gapped (verimem airgap verifica zero egress).
O anel de composição deriva fatos NOVOS dos verificados e os passa pelo MESMO gate de admissão de qualquer escritor — sobreviventes entram assinados (escritas do motor nunca testemunham por si), rastreados (retratáveis se um pai cair) e rotulados com o check exato aprovado: proven / unbeaten(bound) / refuted(contraexemplo). "Aguentou até 10^6" e "provado" nunca se confundem.
Uma leitura não apenas se abstém — quando o store guarda uma verdade melhor garantida sobre o mesmo sujeito, CORRIGE, citando os dois fatos (um fato refutado nunca é servido). E o store sonda A SI MESMO: constrói a query que refutaria um fato — contraevidência independente propõe o rótulo refuted, sobreviver faz crescer seu bound unbeaten. Falsificação que você não precisa esperar.
Um HMAC infalsificável de QUEM fala viaja dentro do ref de proveniência de cada escrita, complementando o gate de entailment sobre O QUE merece admissão. Autenticidade do conteúdo e autenticidade do canal — as duas metades que nenhum filtro de conteúdo determinístico sozinho pode certificar contra um adversário adaptativo. Opt-in; a auditoria reporta cobertura e nomeia os infratores.
| Sistema | Portão de escrita | Proveniência na leitura | Abordagem | Maturidade |
|---|---|---|---|---|
| Mem0 | ✗ | ✗ | Vetor plano + resumo LLM | Consolidado, amplamente adotado |
| Zep / Graphiti | ✗ | parcial (temporal) | Grafo de conhecimento temporal | Comercial, maduro |
| HippoRAG | ✗ | ✗ | OpenIE + PageRank | Pesquisa |
| Verimem | ✓ | ✓ | Fusion recall + portão + consolidação no sono | Novíssimo · 0 adoção ainda |
Os placares e a adoção dos concorrentes variam por fonte e ao longo do tempo; as duas colunas em que nos apoiamos — um portão de escrita e proveniência na leitura — vêm de uma revisão estruturada, não de uma tabela de marketing.
Um lançamento novíssimo. Ninguém depende dele ainda — nós inclusive, além do uso diário do maintainer.
pip install verimem — v0.7.0 no PyPI (AGPL-3.0); o repo público está no GitHub, com a primeira CI verde. Ainda assim, novíssimo.
A independência de proveniência e o deconfounding na auditoria agora se sustentam em um corpus real held-out (HaluEval, critérios pré-registrados, 3/3 seeds): um cartel de consenso fabricado que se auto-confirma a 0.90 na contagem naive é demolido para 0.20, fontes honestas sobem a 0.95, e suas respostas alucinadas somem do recall. Limite honesto, medido: sob ruído honesto pesado (fontes confiáveis errando ~15%+) a separação degrada — o resíduo é 100% erros honestos, doença per-claim, não um ataque. As flags seguem default OFF: a evidência informa a virada, a virada é decisão de produto.
Cada TrustReport agora o declara — Verimem certifica quem afirmou um fato, quão independentemente foi corroborado e quão fresco é, não que seja causalmente verdadeiro. Uma pergunta do(X) exige um fato intervencional; um observacional corroborado não pode respondê-la.
Cada número é reproduzível a partir do repo, mas nenhum é auditado por terceiros. O número QA vs MemOS usa um juiz Claude (não GPT-4) sobre n=2 usuários. Trate-os como reproduzíveis, não certificados.
A pipeline completa (nossa extração → QA) se agrupa em 0.66–0.68 ao longo de sete execuções consecutivas (média 0.667 em n=3 stores limpos) contra o 0.672 do MemOS, e mantém 0.716 com um usuário nunca visto. O caveat permanece: o juiz é Claude, não GPT-4, sem auditoria de terceiros. Dizemos paridade, não "vence".
O gateway multi-tenant (stores isolados por tenant, chaves hasheadas, backups, metering) é real e testado — na sua infraestrutura. Um serviço cloud gerenciado ainda não existe.
A extração de entidades conversacionais (tier tipado) está shipped mas desligada por padrão; o raciocínio multi-hop sobre o grafo é o eixo medido mais fraco (0.39–0.44) e a frente de trabalho atual.
① Python — a partir da fonte
pip install verimem Fornece o comando verimem e o SDK from verimem import Memory — add() / search() / history() / explain(). SQLite local, offline, portão ativo por padrão.
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" }
}
}
} Reinicie o seu host; as ferramentas de memória ficam chamáveis com zero API key — o LLM do host faz o trabalho.
③ Gateway self-host para equipes
verimem gateway keys create --tenant acme
verimem gateway serve # 127.0.0.1:8377 · /ui verimem gateway keys create --tenant acme e depois verimem gateway serve — API HTTP multi-tenant com stores isolados por tenant, rate limiting e backups a quente. Abra /ui para o odômetro de confiança; há um cliente TypeScript tipado no repo.
④ Vê-la a trabalhar — a consola de confiança
verimem console # your store · odometer · graph · live verimem console abre o seu repositório local no navegador — odómetro de confiança, grafo de conhecimento em que cada conclusão carrega a sua cadeia de custódia, registo de afirmações bloqueadas, ao vivo via SSE. O gateway de equipa serve a mesma consola em /ui; os agentes leem o estado completo em /v1/snapshot.