{"id":1859,"date":"2026-10-15T08:43:43","date_gmt":"2026-10-15T11:43:43","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/?p=1859"},"modified":"2026-10-15T08:43:43","modified_gmt":"2026-10-15T11:43:43","slug":"deja-vu-memoria-dos-agentes-no-linux","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/10\/deja-vu-memoria-dos-agentes-no-linux\/","title":{"rendered":"Deja Vu: agents' memory on Linux"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/deja-vu-memoria-agentes-linux-v1.webp\" alt=\"Mascote LinuxPro recuperando cartuchos de mem\u00f3ria com o Deja Vu, acompanhado do c\u00e3o caramelo cyborg em uma oficina clara.\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Voc\u00ea resolveu um problema no Claude Code, continuou o projeto no Codex e, semanas depois, o Cursor tenta investigar tudo de novo. A solu\u00e7\u00e3o talvez ainda esteja no disco \u2014 enterrada nos hist\u00f3ricos de sess\u00e3o. O <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\">Deja Vu<\/a>, cujo comando \u00e9 <code>deja<\/code>, transforma esses registros em mem\u00f3ria pesquis\u00e1vel, acess\u00edvel pelo terminal e pelos pr\u00f3prios agentes. O projeto \u00e9 escrito em Go e distribu\u00eddo sob licen\u00e7a MIT.<\/p>\n<p>Este \u00e9 um complemento do nosso <a href=\"\/2026\/09\/alternativas-claude-mem-go-rust-c\/\">comparativo de alternativas ao Claude-Mem em Go, Rust e C<\/a>. Aqui vamos al\u00e9m do README: arquitetura, instala\u00e7\u00e3o r\u00e1pida, integra\u00e7\u00e3o seletiva, privacidade, limites e uma avalia\u00e7\u00e3o de maturidade baseada no c\u00f3digo e em testes locais.<\/p>\n<div style=\"background:#eff6ff;border-left:4px solid #2563eb;padding:.8em 1em;margin:1em 0\"><strong>Recorte da an\u00e1lise: 15 de outubro de 2026.<\/strong> A vers\u00e3o est\u00e1vel examinada \u00e9 a <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/releases\/tag\/v0.22.1\">0.22.1<\/a>, publicada em 12 de outubro, no commit <code>0fb72c044f9c75444d270275424de29dca62e536<\/code>. N\u00e3o confundimos funcionalidades da branch principal ou de builds nightly com o que est\u00e1 nessa release. Os testes usaram hist\u00f3ricos sint\u00e9ticos e diret\u00f3rios isolados, n\u00e3o conversas reais do usu\u00e1rio.<\/div>\n<h2>O que o Deja Vu faz de diferente<\/h2>\n<p>Muitas ferramentas de mem\u00f3ria come\u00e7am vazias. Voc\u00ea instala hooks, deixa o agente trabalhar e espera acumular observa\u00e7\u00f5es ou pede que ele grave decis\u00f5es. O Deja Vu pode come\u00e7ar pelo passado: l\u00ea os hist\u00f3ricos que os agentes j\u00e1 mant\u00eam localmente e os re\u00fane em um \u00edndice.<\/p>\n<ul>\n<li><strong>Busca retroativa:<\/strong> uma sess\u00e3o anterior \u00e0 instala\u00e7\u00e3o pode aparecer na primeira consulta, desde que o hist\u00f3rico ainda exista e seja suportado.<\/li>\n<li><strong>Continuidade entre agentes:<\/strong> uma decis\u00e3o registrada no Claude pode ser recuperada em uma sess\u00e3o do Codex, sem importar manualmente cada conversa.<\/li>\n<li><strong>Contexto do trabalho:<\/strong> al\u00e9m da conversa, pode recuperar arquivos mencionados, comandos, resultados e trechos substitu\u00eddos por ferramentas de edi\u00e7\u00e3o, conforme o formato do agente.<\/li>\n<li><strong>Utilidade sem integra\u00e7\u00e3o:<\/strong> a CLI e a interface de terminal j\u00e1 funcionam sem registrar um servidor MCP.<\/li>\n<li><strong>Busca b\u00e1sica sem modelo:<\/strong> o caminho padr\u00e3o n\u00e3o exige API key, download de LLM ou servi\u00e7o de embeddings.<\/li>\n<\/ul>\n<p>Isso n\u00e3o significa recuperar uma sess\u00e3o que nunca foi salva nem reconstruir integralmente qualquer conversa apagada. A qualidade depende do que cada agente registrou e do que o parser consegue interpretar. Para conhecer os formatos efetivamente lidos, consulte a <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/docs\/ARCHITECTURE.md#source-parsers\">tabela de fontes da vers\u00e3o analisada<\/a>.<\/p>\n<h2>Como funciona: hist\u00f3rico, \u00edndice e recupera\u00e7\u00e3o<\/h2>\n<p>O fluxo \u00e9 simples de entender: descobrir os arquivos ou bancos dos agentes, interpretar sess\u00f5es, sanitizar os textos, construir o \u00edndice e entregar trechos relevantes. Claude Code usa JSONL; Codex tem rollouts; outras ferramentas guardam sess\u00f5es em JSON, Markdown ou SQLite. N\u00e3o h\u00e1 um formato universal, por isso os parsers s\u00e3o parte central do projeto.<\/p>\n<figure><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/10\/deja-vu-local-memory-flow.webp\" alt=\"Fluxo do Deja Vu: hist\u00f3ricos locais dos agentes passam por leitura, sanitiza\u00e7\u00e3o e indexa\u00e7\u00e3o; CLI, TUI, MCP e hooks recuperam contexto. Embeddings s\u00e3o uma camada opcional.\" width=\"1200\" height=\"770\" loading=\"lazy\" \/><figcaption>O \u00edndice padr\u00e3o \u00e9 local. Integra\u00e7\u00f5es autom\u00e1ticas e embeddings s\u00e3o escolhas separadas.<\/figcaption><\/figure>\n<p><strong>Um detalhe f\u00e1cil de errar:<\/strong> <code>~\/.cache\/deja\/index.db<\/code> \u00e9 o nome de um <em>diret\u00f3rio<\/em>, n\u00e3o de um banco SQLite. Na 0.22.1, ele cont\u00e9m registros bin\u00e1rios, listas de ocorr\u00eancias dos termos e metadados. N\u00e3o tente abri-lo com <code>sqlite3<\/code>. O formato e o ranking lexical s\u00e3o explicados na <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/docs\/ARCHITECTURE.md#index-format\">documenta\u00e7\u00e3o de arquitetura<\/a>.<\/p>\n<p>A consulta lexical usa termos e ranking BM25; frases e filtros refinam a recupera\u00e7\u00e3o. Tamb\u00e9m existem mecanismos de aproxima\u00e7\u00e3o quando a consulta exata n\u00e3o basta. Isso \u00e9 diferente de afirmar que toda busca \u00e9 sem\u00e2ntica: a camada de embeddings \u00e9 opcional e precisa de configura\u00e7\u00e3o pr\u00f3pria.<\/p>\n<p>O servidor MCP roda sobre <code>stdio<\/code>: o cliente inicia <code>deja mcp<\/code> e conversa pela entrada e sa\u00edda padr\u00e3o. Voc\u00ea n\u00e3o precisa abrir uma porta HTTP nem manter um daemon central apenas para usar esse caminho.<\/p>\n<h2>Instala\u00e7\u00e3o r\u00e1pida no Linux<\/h2>\n<p>As releases fornecem bin\u00e1rios para Linux amd64 e arm64. Para come\u00e7ar pelo instalador oficial, sem compilar Go, baixe o script, leia-o e s\u00f3 ent\u00e3o execute. O exemplo fixa a revis\u00e3o do <em>script<\/em> analisada; o pr\u00f3prio script consulta a release est\u00e1vel mais recente, portanto <strong>n\u00e3o fixa a vers\u00e3o do bin\u00e1rio<\/strong>.<\/p>\n<pre><code class=\"language-bash\">mkdir -p \"$HOME\/.cache\/deja-installer\"\ncurl -fsSL \\\n  https:\/\/raw.githubusercontent.com\/vshulcz\/deja-vu\/v0.22.1\/install.sh \\\n  -o \"$HOME\/.cache\/deja-installer\/install.sh\"\n\nless \"$HOME\/.cache\/deja-installer\/install.sh\"\nsh \"$HOME\/.cache\/deja-installer\/install.sh\"\n\nexport PATH=\"$HOME\/.local\/bin:$PATH\"\ndeja version\ndeja index\ndeja search \"connection pool\"\ndeja doctor<\/code><\/pre>\n<p>Por padr\u00e3o, o destino \u00e9 <code>~\/.local\/bin<\/code>. N\u00e3o use <code>sudo<\/code> para instalar no diret\u00f3rio pessoal. Se o comando n\u00e3o aparecer em um terminal novo, inclua <code>~\/.local\/bin<\/code> no <code>PATH<\/code> do seu shell; o instalador tamb\u00e9m informa o caminho completo que pode ser usado imediatamente.<\/p>\n<p>O atalho divulgado pelo projeto \u00e9 baixar o script da branch principal e pass\u00e1-lo diretamente para <code>sh<\/code>, seguido de <code>deja install --auto<\/code>. \u00c9 r\u00e1pido, mas s\u00e3o duas decis\u00f5es distintas: executar c\u00f3digo rec\u00e9m-baixado e autorizar altera\u00e7\u00f5es nas configura\u00e7\u00f5es dos agentes. O procedimento acima permite inspecionar a primeira e adiar a segunda. Veja o <a href=\"https:\/\/vshulcz.github.io\/deja-vu\/guide\/getting-started.html\">guia oficial de instala\u00e7\u00e3o<\/a>.<\/p>\n<h3>Precisa instalar sqlite3?<\/h3>\n<p>Para hist\u00f3ricos em SQLite, sim: o Deja Vu chama o execut\u00e1vel local <code>sqlite3<\/code> para ler o banco de origem. Isso aparece, por exemplo, em integra\u00e7\u00f5es com Cursor IDE e opencode. O bin\u00e1rio Go n\u00e3o embute uma biblioteca SQLite via CGO.<\/p>\n<pre><code class=\"language-bash\"># Debian \/ Ubuntu: necess\u00e1rio para fontes que usam SQLite\nsudo apt update\nsudo apt install sqlite3\n\ndeja sources\ndeja doctor<\/code><\/pre>\n<p>Ter um bin\u00e1rio principal \u00fanico n\u00e3o significa que todos os formatos de todos os agentes funcionem sem utilit\u00e1rios auxiliares. Use o diagn\u00f3stico para descobrir depend\u00eancias ausentes na sua combina\u00e7\u00e3o de fontes, especialmente formatos comprimidos.<\/p>\n<h3>Alternativa com Go e vers\u00e3o fixa<\/h3>\n<p>O <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/go.mod\">go.mod da release<\/a> declara Go 1.25. Quem j\u00e1 tem um toolchain compat\u00edvel pode compilar a tag explicitamente:<\/p>\n<pre><code class=\"language-bash\">go install github.com\/vshulcz\/deja-vu\/cmd\/deja@v0.22.1\n\n# Sem GOBIN personalizado, o execut\u00e1vel fica no bin do GOPATH.\nexport PATH=\"$(go env GOPATH)\/bin:$PATH\"\ndeja version<\/code><\/pre>\n<p>Uma compila\u00e7\u00e3o via <code>go install<\/code> pode mostrar <code>dev<\/code> em <code>deja version<\/code>: a distribui\u00e7\u00e3o oficial injeta o n\u00famero da release no build. Isso n\u00e3o altera a tag solicitada no comando de instala\u00e7\u00e3o.<\/p>\n<p>O projeto tamb\u00e9m documenta Homebrew, npm e pacotes para Windows. Para Linux, o bin\u00e1rio de release evita instalar uma linguagem s\u00f3 para usar a ferramenta. Em ambientes controlados, prefira uma release fixa e valide sua assinatura, n\u00e3o apenas o checksum.<\/p>\n<h2>Integra\u00e7\u00e3o com Claude Code e Codex sem instalar tudo<\/h2>\n<p>Antes de modificar configura\u00e7\u00f5es, fa\u00e7a backup dos arquivos dos agentes que ser\u00e3o afetados. O instalador do Deja Vu tamb\u00e9m cria snapshots de configura\u00e7\u00e3o, mas isso n\u00e3o substitui seu pr\u00f3prio backup.<\/p>\n<pre><code class=\"language-bash\">backup=\"$HOME\/deja-config-backup-$(date +%Y%m%d-%H%M%S)\"\nmkdir -m 700 \"$backup\"\n\n# Caminhos padr\u00e3o; ajuste se voc\u00ea usa perfis ou diret\u00f3rios personalizados.\nfor file in \\\n  \"$HOME\/.claude.json\" \\\n  \"$HOME\/.claude\/settings.json\" \\\n  \"$HOME\/.claude\/CLAUDE.md\" \\\n  \"$HOME\/.codex\/config.toml\" \\\n  \"$HOME\/.codex\/AGENTS.md\"\ndo\n  if [ -f \"$file\" ]; then\n    cp --parents -- \"$file\" \"$backup\/\"\n  fi\ndone\n\n# Registra MCP e orienta\u00e7\u00e3o para os dois agentes, sem o modo autom\u00e1tico.\ndeja install claude-code codex\ndeja doctor<\/code><\/pre>\n<p>Reinicie as sess\u00f5es dos agentes para carregar a configura\u00e7\u00e3o. A distin\u00e7\u00e3o entre as op\u00e7\u00f5es importa:<\/p>\n<table>\n<thead>\n<tr>\n<th>Comando<\/th>\n<th>Efeito principal<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>deja install claude-code codex<\/code><\/td>\n<td>Integra apenas esses clientes, com MCP e orienta\u00e7\u00e3o aplic\u00e1vel, sem solicitar seus modos autom\u00e1ticos.<\/td>\n<\/tr>\n<tr>\n<td><code>deja install claude-auto codex-auto<\/code><\/td>\n<td>Ativa as integra\u00e7\u00f5es autom\u00e1ticas previstas para esses dois agentes.<\/td>\n<\/tr>\n<tr>\n<td><code>deja install --all<\/code><\/td>\n<td>Configura MCP nos agentes detectados sem habilitar novos modos autom\u00e1ticos; pode atualizar hooks autom\u00e1ticos j\u00e1 instalados.<\/td>\n<\/tr>\n<tr>\n<td><code>deja install --auto<\/code><\/td>\n<td>Configura os agentes detectados e acrescenta hooks ou plugins autom\u00e1ticos conforme o suporte de cada um.<\/td>\n<\/tr>\n<tr>\n<td><code>--no-guidance<\/code><\/td>\n<td>Evita a orienta\u00e7\u00e3o de uso que essa instala\u00e7\u00e3o normalmente acrescentaria.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Indexar um agente n\u00e3o \u00e9 a mesma coisa que instalar hooks nele.<\/strong> O hist\u00f3rico pode ser pesquis\u00e1vel mesmo sem integra\u00e7\u00e3o autom\u00e1tica. Os eventos dispon\u00edveis tamb\u00e9m variam: n\u00e3o presuma que todos os clientes ofere\u00e7am o mesmo ciclo do Claude Code. Consulte o <a href=\"https:\/\/vshulcz.github.io\/deja-vu\/guide\/agents.html\">guia de integra\u00e7\u00e3o por agente<\/a> e rode <code>deja help install<\/code> na vers\u00e3o instalada.<\/p>\n<h2>Busca e facilidades que fazem diferen\u00e7a no dia a dia<\/h2>\n<p>A pergunta \u00fatil n\u00e3o \u00e9 \u201cquantas ferramentas existem?\u201d, mas \u201cquanto trabalho repetido consigo evitar?\u201d. Comece com mensagens de erro, nomes de arquivos e termos que realmente apareceram na conversa.<\/p>\n<pre><code class=\"language-bash\"># Busca nos hist\u00f3ricos indexados\ndeja search \"connection pool exhausted\"\n\n# Restringe ao agente e a uma janela de tempo\ndeja search --harness codex --since 30d \"refresh token\"\n\n# Consulta uma express\u00e3o que come\u00e7a com h\u00edfen\ndeja search -- \"--force-with-lease\"\n\n# Resultado estruturado para automa\u00e7\u00e3o\ndeja search --json \"refresh token\"\n\n# Consulta a sintaxe e os filtros dispon\u00edveis\ndeja help search<\/code><\/pre>\n<p>Em um terminal interativo, <code>deja<\/code> sem argumentos abre a TUI. Ela permite pesquisar, ler uma sess\u00e3o e navegar pelos resultados. Para sa\u00edda textual, use <code>deja brief<\/code>. Filtros por agente, projeto e per\u00edodo ajudam a n\u00e3o confundir a decis\u00e3o do aplicativo A com uma experi\u00eancia feita no aplicativo B.<\/p>\n<table>\n<thead>\n<tr>\n<th>Necessidade<\/th>\n<th>Comando<\/th>\n<th>Cuidado<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Preparar contexto para outro agente<\/td>\n<td><code>deja ctx \"refresh token\"<\/code><\/td>\n<td>Revise o digest antes de envi\u00e1-lo a um servi\u00e7o externo.<\/td>\n<\/tr>\n<tr>\n<td>Entender a sess\u00e3o anterior do projeto<\/td>\n<td><code>deja wip<\/code><\/td>\n<td>O resultado deriva do transcript, n\u00e3o de uma confirma\u00e7\u00e3o humana.<\/td>\n<\/tr>\n<tr>\n<td>Descobrir quem discutiu um arquivo<\/td>\n<td><code>deja blame src\/auth.go<\/code><\/td>\n<td>Discuss\u00e3o de arquivo n\u00e3o equivale, sozinha, \u00e0 autoria de uma linha.<\/td>\n<\/tr>\n<tr>\n<td>Consultar o hist\u00f3rico de uma linha<\/td>\n<td><code>deja blame src\/auth.go:42<\/code><\/td>\n<td>A atribui\u00e7\u00e3o depende da evid\u00eancia registrada e do Git.<\/td>\n<\/tr>\n<tr>\n<td>Rever como uma ferramenta foi executada<\/td>\n<td><code>deja how \"go test\"<\/code><\/td>\n<td>Um comando antigo pode ter deixado de ser adequado.<\/td>\n<\/tr>\n<tr>\n<td>Consultar tentativas ap\u00f3s um erro<\/td>\n<td><code>deja fix \"connection pool exhausted\"<\/code><\/td>\n<td>N\u00e3o \u00e9 prova de causalidade nem autoriza\u00e7\u00e3o para executar a sugest\u00e3o.<\/td>\n<\/tr>\n<tr>\n<td>Preparar passagem de bast\u00e3o<\/td>\n<td><code>deja handoff --to codex<\/code><\/td>\n<td>Sem <code>--exec<\/code>, prepara o conte\u00fado sem abrir automaticamente o destino.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A 0.22.1 tamb\u00e9m amplia a leitura do c\u00f3digo alterado na sess\u00e3o, quando os transcripts cont\u00eam as chamadas de edi\u00e7\u00e3o. \u00c9 valioso para recuperar o racioc\u00ednio junto com o patch, mas n\u00e3o substitui um commit, um teste atual ou a revis\u00e3o do diff.<\/p>\n<h2>MCP, hooks e mem\u00f3ria curada<\/h2>\n<p>Na vers\u00e3o analisada, <code>tools\/list<\/code> anuncia uma ferramenta principal chamada <code>deja<\/code>, com modos de opera\u00e7\u00e3o. O agente pode consultar mem\u00f3ria, contexto, arquivos e outros recortes sem carregar uma defini\u00e7\u00e3o separada para cada comando da CLI. Confirmamos esse contrato em um teste JSON-RPC local.<\/p>\n<p>MCP \u00e9 o canal de consulta; hooks s\u00e3o os pontos de ativa\u00e7\u00e3o autom\u00e1tica. Sem hook, o agente precisa decidir chamar a ferramenta. Com integra\u00e7\u00e3o autom\u00e1tica, uma parte do contexto pode chegar na abertura ou em outros eventos suportados pelo cliente. Isso aumenta a conveni\u00eancia, mas tamb\u00e9m merece aten\u00e7\u00e3o ao or\u00e7amento de contexto e ao escopo das informa\u00e7\u00f5es recuperadas.<\/p>\n<p>O Deja Vu n\u00e3o fica restrito \u00e0 busca de conversa bruta. <code>deja remember<\/code> registra uma nota e <code>deja promote<\/code> transforma uma sess\u00e3o em informa\u00e7\u00e3o curada com proveni\u00eancia e estado de ciclo de vida. Isso ajuda a distinguir \u201ctentamos essa abordagem\u201d de \u201cessa \u00e9 a decis\u00e3o vigente\u201d. Ainda assim, cabe \u00e0 equipe validar decis\u00f5es e retirar as que ficaram obsoletas.<\/p>\n<p>Se voc\u00ea j\u00e1 usa <a href=\"\/2026\/09\/ai-memory-instalar-configurar-agentes-linux\/\">ai-memory<\/a> ou <a href=\"\/2026\/09\/engram-memoria-persistente-para-agentes-no-linux\/\">Engram<\/a>, uma estrat\u00e9gia conservadora \u00e9 testar o Deja Vu primeiro como CLI de investiga\u00e7\u00e3o. Evite ativar dois sistemas de auto-recall ao mesmo tempo sem medir a duplica\u00e7\u00e3o de contexto e definir quem guarda a mem\u00f3ria dur\u00e1vel.<\/p>\n<h2>Maturidade do c\u00f3digo: os sinais positivos<\/h2>\n<p>O reposit\u00f3rio foi criado em <strong>14 de julho de 2026<\/strong>, segundo os <a href=\"https:\/\/api.github.com\/repos\/vshulcz\/deja-vu\">metadados p\u00fablicos do GitHub<\/a>. Portanto, \u00e9 um projeto jovem na data desta an\u00e1lise. A conclus\u00e3o \u201cainda jovem\u201d n\u00e3o depende do n\u00famero de estrelas: depende de tempo de opera\u00e7\u00e3o, estabilidade dos contratos e evid\u00eancia de testes.<\/p>\n<ul>\n<li><strong>Separa\u00e7\u00e3o de responsabilidades:<\/strong> a \u00e1rvore distingue fontes, indexa\u00e7\u00e3o, consulta, ranking, sanitiza\u00e7\u00e3o, pol\u00edtica de recupera\u00e7\u00e3o, digest e interface de terminal.<\/li>\n<li><strong>Escopo Go enxuto nas depend\u00eancias:<\/strong> o <code>go.mod<\/code> dessa tag cont\u00e9m a declara\u00e7\u00e3o do m\u00f3dulo e da vers\u00e3o de Go, sem uma lista de depend\u00eancias externas. Isso simplifica parte da cadeia de build, embora aumente a responsabilidade sobre implementa\u00e7\u00f5es pr\u00f3prias.<\/li>\n<li><strong>Testes al\u00e9m do caminho feliz:<\/strong> h\u00e1 cen\u00e1rios de \u00edndice corrompido, interrup\u00e7\u00e3o de escrita, concorr\u00eancia, reconstru\u00e7\u00e3o, segredos, remo\u00e7\u00e3o e formatos de diferentes agentes. A tag tem <strong>2.572 arquivos <code>*_test.go<\/code><\/strong>; esse \u00e9 um n\u00famero de arquivos, n\u00e3o uma medi\u00e7\u00e3o de cobertura nem de qualidade.<\/li>\n<li><strong>CI com barreiras concretas:<\/strong> o workflow inclui <code>go vet<\/code>, testes com detector de corrida em Linux\/macOS, verifica\u00e7\u00e3o de vulnerabilidades e pisos de cobertura. A configura\u00e7\u00e3o define piso total de <strong>87,5%<\/strong> para o c\u00f3digo distribu\u00eddo; isso n\u00e3o \u00e9 uma cobertura total medida por n\u00f3s.<\/li>\n<li><strong>Distribui\u00e7\u00e3o cuidada:<\/strong> releases t\u00eam checksums, assinatura do arquivo de checksums e SBOM. O build de distribui\u00e7\u00e3o desabilita CGO.<\/li>\n<li><strong>Limites documentados:<\/strong> o modelo de seguran\u00e7a explica exporta\u00e7\u00e3o, pol\u00edticas, sanitiza\u00e7\u00e3o e aus\u00eancia de criptografia em repouso, em vez de prometer privacidade absoluta.<\/li>\n<\/ul>\n<p><strong>Checksum n\u00e3o \u00e9 assinatura:<\/strong> o instalador e o atualizador comparam o SHA-256 do arquivo, mas n\u00e3o verificam automaticamente a assinatura. Isso detecta corrup\u00e7\u00e3o do download, n\u00e3o uma release adulterada junto com seu arquivo de checksums. A verifica\u00e7\u00e3o criptogr\u00e1fica \u00e9 um passo adicional documentado pelo projeto.<\/p>\n<p>Esses sinais podem ser conferidos no <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/.github\/workflows\/ci.yml\">workflow de CI<\/a>, na <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/.goreleaser.yaml\">configura\u00e7\u00e3o de release<\/a> e no <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/SECURITY.md\">documento de seguran\u00e7a<\/a>. Eles mostram disciplina de engenharia; n\u00e3o s\u00e3o certifica\u00e7\u00e3o de seguran\u00e7a nem garantia de que todos os agentes estejam igualmente bem cobertos.<\/p>\n<h2>O que testamos \u2014 e o problema de fuso hor\u00e1rio encontrado<\/h2>\n<p>Para n\u00e3o transformar o texto em reprodu\u00e7\u00e3o de marketing, compilamos a tag, instalamos o bin\u00e1rio est\u00e1vel em um diret\u00f3rio de laborat\u00f3rio e criamos sess\u00f5es sint\u00e9ticas de Claude Code e Codex. Nenhuma configura\u00e7\u00e3o real dos agentes foi modificada.<\/p>\n<table>\n<thead>\n<tr>\n<th>Verifica\u00e7\u00e3o local<\/th>\n<th>Resultado<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Compila\u00e7\u00e3o da tag e <code>go vet .\/...<\/code><\/td>\n<td>Conclu\u00eddos sem erro.<\/td>\n<\/tr>\n<tr>\n<td>Instalador analisado e bin\u00e1rio de release<\/td>\n<td>Instala\u00e7\u00e3o isolada conclu\u00edda; o bin\u00e1rio informou <code>0.22.1<\/code>.<\/td>\n<\/tr>\n<tr>\n<td>Hist\u00f3ricos sint\u00e9ticos de dois agentes<\/td>\n<td>Ambos apareceram na busca; tamb\u00e9m exercitamos contexto e handoff.<\/td>\n<\/tr>\n<tr>\n<td>Sanitiza\u00e7\u00e3o de uma senha fict\u00edcia<\/td>\n<td>O valor de teste n\u00e3o apareceu na resposta da busca nem no recall MCP.<\/td>\n<\/tr>\n<tr>\n<td>Instala\u00e7\u00e3o e remo\u00e7\u00e3o de MCP<\/td>\n<td>Executadas em um HOME de laborat\u00f3rio para Claude Code e Codex.<\/td>\n<\/tr>\n<tr>\n<td>MCP por stdio<\/td>\n<td>Inicializa\u00e7\u00e3o, listagem da ferramenta <code>deja<\/code> e consulta de recall funcionaram.<\/td>\n<\/tr>\n<tr>\n<td>Pacotes <code>redact<\/code>, <code>query<\/code>, <code>search<\/code>, <code>policy<\/code> e <code>index<\/code><\/td>\n<td>Testes passaram com <code>-race<\/code>.<\/td>\n<\/tr>\n<tr>\n<td>Pacote <code>sources<\/code><\/td>\n<td>Passou com <code>TZ=UTC<\/code>; houve falha reproduz\u00edvel em um teste de notas com <code>TZ=America\/Sao_Paulo<\/code>.<\/td>\n<\/tr>\n<tr>\n<td>Quatro testes selecionados de configura\u00e7\u00e3o e hooks<\/td>\n<td>Passaram com <code>-race<\/code>, incluindo instala\u00e7\u00e3o\/remo\u00e7\u00e3o para Claude e Codex.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A falha foi <code>TestNotesPathAndAppendParse<\/code>, em <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/internal\/sources\/notes_test.go\">notes_test.go<\/a>. O teste espera que duas notas fiquem no mesmo grupo di\u00e1rio. Por\u00e9m, seus hor\u00e1rios caem em dias diferentes no fuso de S\u00e3o Paulo, e o <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/internal\/sources\/notes.go\">parser agrupa pelo dia local<\/a>. O resultado s\u00e3o tr\u00eas grupos onde o teste espera dois. Repetimos o caso em UTC e em S\u00e3o Paulo para confirmar a diferen\u00e7a.<\/p>\n<p><strong>Interpreta\u00e7\u00e3o:<\/strong> encontramos uma suposi\u00e7\u00e3o de fuso no teste, n\u00e3o evid\u00eancia de perda de notas ou de falha geral na indexa\u00e7\u00e3o. \u00c9 um exemplo concreto de portabilidade ainda a melhorar. Tamb\u00e9m seria errado dizer que \u201ca su\u00edte inteira passou\u201d: n\u00e3o executamos todos os testes de todos os pacotes e clientes, nem uma auditoria completa de seguran\u00e7a ou benchmarks de escala.<\/p>\n<p><strong>Veredito:<\/strong> h\u00e1 engenharia suficiente para um piloto s\u00e9rio no desktop, sobretudo como busca local sob demanda. Ainda n\u00e3o classificaria como infraestrutura cr\u00edtica sem ressalvas: a linha \u00e9 0.x, o projeto \u00e9 recente, os formatos dos agentes mudam e o formato de \u00edndice pr\u00f3prio precisa acompanhar essas mudan\u00e7as. Adote com vers\u00e3o controlada, backups e valida\u00e7\u00e3o do seu pr\u00f3prio fluxo.<\/p>\n<h2>Benchmarks: \u00fateis, mas n\u00e3o um ranking universal<\/h2>\n<p>O projeto publica medi\u00e7\u00f5es de recupera\u00e7\u00e3o, indexa\u00e7\u00e3o e custo de contexto, al\u00e9m de c\u00f3digo para reprodu\u00e7\u00e3o. Isso \u00e9 melhor do que uma promessa sem m\u00e9todo. Ainda assim, os ensaios s\u00e3o produzidos pelo pr\u00f3prio mantenedor; n\u00e3o os tratamos como valida\u00e7\u00e3o independente nem repetimos seus percentuais como resultado do LinuxPro.<\/p>\n<p>No teste de utilidade \u201cno primeiro dia\u201d, a hip\u00f3tese favorece justamente o diferencial do Deja Vu: j\u00e1 existe um grande hist\u00f3rico no disco. Uma ferramenta que depende de notas gravadas depois da instala\u00e7\u00e3o resolve outro est\u00e1gio do problema. Compare corpus, m\u00e1quina, prepara\u00e7\u00e3o dos concorrentes, vers\u00e3o e crit\u00e9rio de sucesso antes de declarar um vencedor.<\/p>\n<p>A pergunta pr\u00e1tica \u00e9: \u201cele encontra a solu\u00e7\u00e3o antiga do <em>meu<\/em> projeto com poucos falsos positivos?\u201d. Separe consultas conhecidas, registre se o trecho certo aparece e me\u00e7a lat\u00eancia e volume de contexto. O <a href=\"https:\/\/vshulcz.github.io\/deja-vu\/guide\/day-zero.html\">ensaio day zero<\/a> e o <a href=\"https:\/\/vshulcz.github.io\/deja-vu\/guide\/benchmarks.html\">cat\u00e1logo de benchmarks<\/a> s\u00e3o pontos de partida, n\u00e3o substitutos dessa avalia\u00e7\u00e3o.<\/p>\n<h2>Privacidade: local n\u00e3o significa imune a vazamentos<\/h2>\n<p>O mecanismo de sanitiza\u00e7\u00e3o remove padr\u00f5es reconhecidos de credenciais antes da grava\u00e7\u00e3o no \u00edndice. A implementa\u00e7\u00e3o examinada sanitiza o texto antes de aplicar seu limite de tamanho, evitando que um corte no meio de um segredo atrapalhe uma regra de detec\u00e7\u00e3o. \u00c9 uma defesa concreta, n\u00e3o uma garantia universal.<\/p>\n<ul>\n<li><strong>Transcripts originais:<\/strong> podem continuar contendo a credencial. Construir o \u00edndice n\u00e3o apaga o hist\u00f3rico de origem.<\/li>\n<li><strong>Dados pessoais e c\u00f3digo propriet\u00e1rio:<\/strong> n\u00e3o viram conte\u00fado p\u00fablico s\u00f3 porque um token foi mascarado. Trate o \u00edndice como sens\u00edvel.<\/li>\n<li><strong>Disco:<\/strong> o Deja Vu n\u00e3o fornece criptografia em repouso nem \u00e9 um sistema de controle de acesso. Proteja usu\u00e1rio, permiss\u00f5es, backups e volume.<\/li>\n<li><strong>Agente remoto:<\/strong> se um agente que usa um modelo em nuvem consultar o MCP, o trecho recuperado pode entrar no contexto enviado \u00e0quele provedor. Busca local n\u00e3o torna o restante da cadeia local.<\/li>\n<li><strong>Exporta\u00e7\u00e3o e sincroniza\u00e7\u00e3o:<\/strong> revise o destino e o material compartilhado. Uma c\u00f3pia importada por outra m\u00e1quina n\u00e3o \u00e9 revogada automaticamente quando voc\u00ea a remove aqui.<\/li>\n<\/ul>\n<p>Consulte o <a href=\"https:\/\/github.com\/vshulcz\/deja-vu\/blob\/v0.22.1\/docs\/SECURITY-MODEL.md\">modelo de seguran\u00e7a<\/a> antes de indexar hist\u00f3ricos de clientes ou ambientes regulados.<\/p>\n<h3>Excluir projetos e reduzir rede<\/h3>\n<pre><code class=\"language-bash\">mkdir -p \"$HOME\/.config\/deja\"\n\n# Edite ANTES da primeira indexa\u00e7\u00e3o: um projeto\/padr\u00e3o por linha.\n# Tamb\u00e9m aceita nomes de fontes, por exemplo: harness:opencode\n${EDITOR:-vi} \"$HOME\/.config\/deja\/exclude\"\n\n# Se mudou exclus\u00f5es depois de indexar, reconstrua o \u00edndice.\ndeja index --rebuild\n\n# Desliga verifica\u00e7\u00f5es autom\u00e1ticas de vers\u00e3o; n\u00e3o \u00e9 firewall.\nexport DEJA_OFFLINE=1\n\n# Relat\u00f3rio de credenciais reconhecidas nos hist\u00f3ricos, sem seus valores.\ndeja secrets<\/code><\/pre>\n<p>Na configura\u00e7\u00e3o padr\u00e3o, adicionar uma exclus\u00e3o n\u00e3o elimina imediatamente todo conte\u00fado que j\u00e1 estava indexado: a reconstru\u00e7\u00e3o \u00e9 importante. <code>deja forget<\/code> remove sess\u00f5es e mant\u00e9m tombstones para evitar reingest\u00e3o. Veja <code>deja help forget<\/code> antes de us\u00e1-lo.<\/p>\n<p>N\u00e3o execute <code>deja secrets --scrub<\/code> como rotina de diagn\u00f3stico: esse modo modifica os transcripts suportados e guarda uma c\u00f3pia original, que tamb\u00e9m pode conter segredos. \u00c9 uma opera\u00e7\u00e3o de escrita a avaliar separadamente. Nunca desabilite sanitiza\u00e7\u00e3o em hist\u00f3ricos sens\u00edveis.<\/p>\n<h3>Mem\u00f3ria recuperada n\u00e3o \u00e9 instru\u00e7\u00e3o<\/h3>\n<p>Um transcript pode conter comandos errados, decis\u00f5es rejeitadas ou uma instru\u00e7\u00e3o maliciosa copiada de uma p\u00e1gina. O projeto enquadra parte do recall voltado a agentes como hist\u00f3rico n\u00e3o confi\u00e1vel, mas o enquadramento n\u00e3o elimina prompt injection. N\u00e3o execute um comando s\u00f3 porque apareceu na mem\u00f3ria; confira o estado atual do reposit\u00f3rio e a autoriza\u00e7\u00e3o do usu\u00e1rio.<\/p>\n<h2>Embeddings, sincroniza\u00e7\u00e3o e recupera\u00e7\u00e3o de sess\u00f5es<\/h2>\n<p>O caminho lexical padr\u00e3o n\u00e3o precisa de modelo. <code>deja embed<\/code> acrescenta um \u00edndice sem\u00e2ntico auxiliar usando o endpoint de embeddings que voc\u00ea configurar. Com Ollama local, o processamento pode continuar na m\u00e1quina; com endpoint externo, textos e consultas podem sair dela. Leia <code>deja help embed<\/code> antes de ativar. Para entender a base local, veja nosso <a href=\"\/2026\/09\/rodando-ia-local-no-linux-com-ollama\/\">guia do Ollama no Linux<\/a>.<\/p>\n<p><code>deja sync<\/code> oferece exporta\u00e7\u00e3o, importa\u00e7\u00e3o e sincroniza\u00e7\u00e3o por SSH. \u00c9 diferente de colocar arquivos de um \u00edndice em uso dentro de uma pasta sincronizada e esperar consist\u00eancia. Siga o protocolo da ferramenta e proteja o host de destino; comece com <code>deja help sync<\/code>.<\/p>\n<p>O \u00edndice pode manter sess\u00f5es que o agente apagou depois. Isso \u00e9 \u00fatil na recupera\u00e7\u00e3o, mas muda a expectativa de reten\u00e7\u00e3o: apagar uma conversa no aplicativo n\u00e3o implica apag\u00e1-la do Deja Vu. A TUI tem uma \u00e1rea de sess\u00f5es removidas pelo agente, e <code>deja resume<\/code> oferece caminhos de retomada conforme o cliente. J\u00e1 <code>deja restore<\/code> recupera trechos substitu\u00eddos sem sobrescrever automaticamente o arquivo original.<\/p>\n<p><strong>Backup continua indispens\u00e1vel:<\/strong> preserve hist\u00f3ricos de origem quando necess\u00e1rio, notas, exclus\u00f5es, pol\u00edticas e configura\u00e7\u00f5es. N\u00e3o confunda \u201c\u00edndice reconstru\u00edvel\u201d com \u201cnenhuma perda poss\u00edvel\u201d: um registro retido cuja origem j\u00e1 desapareceu n\u00e3o ser\u00e1 recuperado novamente do nada.<\/p>\n<h2>Deja Vu, Engram, ai-memory ou grafo de c\u00f3digo?<\/h2>\n<table>\n<thead>\n<tr>\n<th>Pergunta principal<\/th>\n<th>Ferramenta a avaliar<\/th>\n<th>Por qu\u00ea<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Onde est\u00e1 a solu\u00e7\u00e3o discutida em uma sess\u00e3o antiga?<\/td>\n<td><strong>Deja Vu<\/strong><\/td>\n<td>Parte dos transcripts j\u00e1 existentes e facilita investiga\u00e7\u00e3o retroativa entre agentes.<\/td>\n<\/tr>\n<tr>\n<td>Como compartilhar decis\u00f5es gravadas explicitamente pelos agentes?<\/td>\n<td><a href=\"\/2026\/09\/engram-memoria-persistente-para-agentes-no-linux\/\">Engram<\/a><\/td>\n<td>Fluxo de mem\u00f3ria persistente com SQLite, ferramentas de grava\u00e7\u00e3o\/consulta e inspe\u00e7\u00e3o no terminal.<\/td>\n<\/tr>\n<tr>\n<td>Como manter uma wiki e organizar continuidade de sess\u00f5es?<\/td>\n<td><a href=\"\/2026\/09\/ai-memory-instalar-configurar-agentes-linux\/\">ai-memory<\/a><\/td>\n<td>Wiki Markdown versionada, observa\u00e7\u00f5es e handoffs em uma arquitetura de servi\u00e7o.<\/td>\n<\/tr>\n<tr>\n<td>Quem chama esta fun\u00e7\u00e3o e quais depend\u00eancias ser\u00e3o afetadas?<\/td>\n<td><a href=\"https:\/\/github.com\/DeusData\/codebase-memory-mcp\">codebase-memory-mcp<\/a><\/td>\n<td>O objeto \u00e9 a estrutura do c\u00f3digo, n\u00e3o a hist\u00f3ria da conversa.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>N\u00e3o s\u00e3o categorias perfeitamente exclusivas: o Deja Vu tamb\u00e9m tem notas e handoff; outros projetos tamb\u00e9m podem importar informa\u00e7\u00f5es. A diferen\u00e7a \u00e9 o ponto de partida e a opera\u00e7\u00e3o cotidiana. Consulte o <a href=\"\/2026\/09\/alternativas-claude-mem-go-rust-c\/\">comparativo completo<\/a> para outras op\u00e7\u00f5es e a <a href=\"\/2026\/10\/ai-memory-a-evolucao-da-2-4-a-2-6-3\/\">evolu\u00e7\u00e3o do ai-memory<\/a> para o fluxo de wiki.<\/p>\n<h2>Problemas comuns e como desfazer a integra\u00e7\u00e3o<\/h2>\n<ul>\n<li><strong><code>deja: command not found<\/code>:<\/strong> confira <code>~\/.local\/bin<\/code>, <code>GOBIN<\/code> e o <code>PATH<\/code>. Instalar e configurar os agentes s\u00e3o passos separados.<\/li>\n<li><strong>Uma fonte ficou vazia:<\/strong> rode <code>deja sources<\/code> e <code>deja doctor<\/code>; confira perfil, diret\u00f3rio do agente, exclus\u00f5es e utilit\u00e1rios ausentes.<\/li>\n<li><strong>Busca n\u00e3o encontra o que voc\u00ea lembra:<\/strong> use um termo literal do erro, amplie o per\u00edodo e confira o projeto. O hist\u00f3rico pode ter sido apagado antes da primeira indexa\u00e7\u00e3o.<\/li>\n<li><strong>MCP configurado, mas agente n\u00e3o lembra sozinho:<\/strong> carregar a ferramenta n\u00e3o implica auto-recall. Reinicie a sess\u00e3o e confira o modo de instala\u00e7\u00e3o.<\/li>\n<li><strong>Primeira execu\u00e7\u00e3o ap\u00f3s upgrade demora:<\/strong> mudan\u00e7as de formato podem exigir reconstru\u00e7\u00e3o. A release 0.22.1 avisa explicitamente sobre isso.<\/li>\n<li><strong>Testes de notas falham no seu fuso:<\/strong> reproduza o caso isolado; UTC \u00e9 uma compara\u00e7\u00e3o diagn\u00f3stica, n\u00e3o motivo para ocultar a falha original.<\/li>\n<\/ul>\n<pre><code class=\"language-bash\"># Diagn\u00f3stico mais detalhado\ndeja doctor --deep\n\n# Remove a integra\u00e7\u00e3o de todos os alvos instalados pelo Deja Vu.\ndeja uninstall --all<\/code><\/pre>\n<p>Desinstalar a integra\u00e7\u00e3o n\u00e3o \u00e9 sin\u00f4nimo de apagar notas, \u00edndice e todos os backups. Decida a reten\u00e7\u00e3o desses dados separadamente e consulte a ajuda da vers\u00e3o instalada. N\u00e3o remova <code>~\/.claude<\/code> ou <code>~\/.codex<\/code> para \u201climpar o Deja Vu\u201d: esses diret\u00f3rios pertencem aos pr\u00f3prios agentes.<\/p>\n<h2>Vale a pena?<\/h2>\n<p><strong>Sim, para quem alterna agentes e j\u00e1 acumulou hist\u00f3rico local.<\/strong> A facilidade mais convincente \u00e9 come\u00e7ar encontrando trabalho antigo, n\u00e3o esperar a pr\u00f3xima semana para a mem\u00f3ria ficar \u00fatil. CLI, TUI e integra\u00e7\u00e3o seletiva permitem experimentar sem transformar a m\u00e1quina inteira de uma vez.<\/p>\n<p>O c\u00f3digo mostra testes, organiza\u00e7\u00e3o e preocupa\u00e7\u00e3o real com integridade e segredos, mas a ferramenta ainda \u00e9 jovem. Nosso piloto funcionou e tamb\u00e9m revelou uma suposi\u00e7\u00e3o de fuso em um teste. A recomenda\u00e7\u00e3o \u00e9 come\u00e7ar sob demanda, medir o ganho no pr\u00f3prio projeto e s\u00f3 depois habilitar automa\u00e7\u00e3o. Mem\u00f3ria boa reduz investiga\u00e7\u00e3o repetida; n\u00e3o substitui Git, documenta\u00e7\u00e3o e revis\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Install Deja Vu on Linux, search Claude Code and Codex histories and understand code maturity, MCP, privacy, and 0.22.1 version limits.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,115,2],"tags":[394,135,392,544,31,311,427],"class_list":["post-1859","post","type-post","status-publish","format-standard","hentry","category-desenv","category-ia","category-linux","tag-agentes","tag-claude-code","tag-codex","tag-deja-vu","tag-golang","tag-mcp","tag-memoria-persistente"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=1859"}],"version-history":[{"count":3,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1859\/revisions"}],"predecessor-version":[{"id":1864,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1859\/revisions\/1864"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=1859"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=1859"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=1859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}