deja-vu
Uma memória compartilhada por Claude Code, Codex, Cursor, Copilot CLI, OpenClaw e mais 28 agentes de codificação, construída a partir do histórico de sessões já existente no disco. Uma correção encontrada em um agente retorna em qualquer um deles, incluindo meses de sessões anteriores à instalação. Sem LLM, sem embeddings, um único binário Go local.
Documentação
A única memória que seus agentes de codificação compartilham, construída a partir do histórico que já está no seu disco.
Seu agente está prestes a depurar novamente algo que você corrigiu em março — em um agente diferente. deja indexa as sessões que Claude Code, Codex, Cursor e todos os outros agentes nesta máquina já gravaram no disco, e entrega a sessão certa para qualquer agente que a solicitar.

Ninguém pesquisou nada — o agente chamou o deja por conta própria. Cada linha é citada de duas sessões reais.
Toda ferramenta de memória começa vazia e registra daqui para frente. deja começa cheia.
E ninguém precisa pedir: a recuperação chega no início da sessão, a cada prompt, antes de um arquivo ser editado ou um comando ser executado, e depois que um falha. Chaves e tokens são removidos conforme o índice é construído, então o que chega ao modelo é seguro para enviar.
85,3% hit@1 no LongMemEval-S · 69,7% hit@1 de recuperação no LoCoMo · consultas em milissegundos sobre gigabytes de histórico
Ambos os harnesses estão neste repositório e rodam nos datasets públicos em minutos ·
confira os números você mesmo
English | 中文
Docs · Benchmarks · Como ele se compara · Integrando à sua ferramenta
Achou útil? Dê uma estrela no deja-vu no GitHub para que outros desenvolvedores possam encontrá-lo.
Instalação
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto

Dez segundos para instalar, cerca de dez para indexar, e já é útil. O segundo comando conecta a recuperação MCP a todos os agentes que encontrar, ativa a recuperação no início da sessão onde o agente suporta, e constrói o primeiro índice para que a próxima sessão não pague por isso.
Inicie uma nova sessão de agente e pergunte algo em que você trabalhou há meses:
já lidamos com rotação de refresh JWT antes? verifique sua memória
Também não precisa ser perguntado — com a recuperação automática, o agente já sabe o que você resolveu naquele projeto quando a sessão abre.
Outras formas de instalar, e o que fazer se você quiser menos do que tudo
brew install deja-vu, go install github.com/vshulcz/deja-vu/cmd/deja@latest,
ou npx @vshulcz/deja-vu "query" para testar sem instalar nada. Aplicativos de desktop que
aceitam servidores MCP como pacotes podem abrir o .mcpb do
último release; ele carrega o binário.
Claude Code, Codex, Cursor, Qwen, OpenClaw e Copilot podem receber o mesmo pacote de plugin de seus próprios marketplaces:
claude plugin marketplace add vshulcz/deja-vu && claude plugin install deja-vu@deja-vu
No Windows, o script de instalação sai com unsupported OS — é um script de shell. Use
Scoop em vez disso, do bucket principal que toda instalação do Scoop já tem:
scoop install deja-vu
Ou pegue o deja-vu_<version>_windows_amd64.zip do
último release e coloque o deja.exe no
seu PATH, por exemplo, em %USERPROFILE%\.local\bin.
O binário sozinho é uma instalação completa para busca: indexar, pesquisar, show, ctx, blame,
--json e redação não precisam de mais nada. deja install é o que conecta o MCP aos seus agentes
e ativa a recuperação no início da sessão — vale a pena ter, e é opcional. Em uma configuração somente binário,
deja doctor reporta cada alvo MCP como not-wired, o que é essa configuração funcionando como
pretendido. deja warmup também deixa uma skill em ~/.agents/skills/deja-search/SKILL.md
que ensina ao agente o contrato da CLI — deja search --json, ctx, blame, como ler
tier e total — para que ele saiba que o histórico é pesquisável sem MCP. A cópia no repositório é
skills/deja-search/SKILL.md.
deja install --all é --auto sem a recuperação no início da sessão: os agentes respondem da memória
quando decidem chamá-lo, em vez de começar cada sessão com ele. O
guia de configuração de agentes cobre o que cada
harness suporta, o arquivo de contexto somente leitura do aider e o wrapper cmd /c deja mcp para Windows.
O que é gravado no arquivo de orientação de cada agente
A instalação também grava orientação em nível de usuário para os harnesses que detecta: Claude Code, Codex, opencode, Gemini CLI, Antigravity, Qwen, Kimi Code, pi, Senpi, Copilot, VS Code Copilot Chat, Cursor, Goose, OpenClaw, Hermes, Roo Code, omp, Amp, prime-agent, DeepSeek Harness, Continue, Crush e Zed — cada um recebe em seu próprio arquivo de orientação (ou sob o XDG_CONFIG_HOME configurado). Re-executar reescreve a skill ou o bloco marcado do deja sem alterar o conteúdo de usuário ao redor. Use deja install --all --no-guidance para optar por não participar; Grok Build recebe a skill compartilhada em ~/.agents/skills, que é o que ele lê; o ~/.grok/GROK.md gravado ao lado é para a CLI comunitária não relacionada que compartilha esse diretório. Cursor não tem arquivo de instruções em nível de usuário, então recebe a skill compartilhada em ~/.agents/skills — um dos quatro lugares de onde o Cursor lê skills — lida apenas quando algo parece relevante, em vez de a cada sessão.
O que você obtém
Resolva no Codex. Claude lembra. Trinta e quatro agentes de codificação gravam cada conversa em arquivos locais, e o deja transforma esses arquivos em uma camada de memória que todos eles leem.
| Busca retroativa | deja "connection pool exhausted" sobre gigabytes, incluindo tudo de antes de você instalar o deja. Perguntas em linguagem natural caem em um nível de relevância. Tempo é uma dica, não um filtro. |
| Recuperação entre agentes | A ferramenta MCP recall responde "consertamos isso há três semanas" em qualquer agente que perguntar, independentemente de quem resolveu originalmente. |
| Sobrevive à compactação | Medido em 43 compactações: o resumo mantém 77% das decisões e 0,2% dos comandos que você executou. O deja devolve os outros 99,8% — e no Claude Code e no Codex ele captura a tarefa, os arquivos e os comandos quando a compactação começa, e os retorna uma vez na próxima sessão. |
| Recuperação no ponto de ação | Antes de um agente editar um arquivo ou executar um comando, o deja nomeia a decisão anterior daquele arquivo, a invocação funcional daquele comando, ou o programa que esta máquina não tem. Quando um comando falha, um hook PostToolUse responde com o que seguiu o mesmo erro aqui antes — o par que um agente nunca pensa em pedir. |
| Indexa o trabalho, não só a conversa | Os arquivos que cada turno abriu, os comandos que rodaram com seu status de saída, e os trechos exatos que uma edição substituiu. Essa é a parte que todo resumo descarta. |
Mais quatro: decisões rejeitadas, desatualização, sincronização e handoff, redação
| Sabe o que se manteve | deja promote <id> --state rejected --note "why" marca uma decisão que você reverteu. Cada hit posterior daquela sessão mostra que foi tentado e rejeitado, com o motivo. Nada é deletado, e --state accepted remove a marca. |
| Diz quando o chão se moveu | Um hit reporta 4 arquivos que esta sessão tocou mudaram desde então, e não diz nada quando não consegue saber. Nunca afirma que algo está inalterado. |
| Sincronização e handoff | deja sync ssh laptop move memória entre máquinas, somente anexação, sem nuvem no meio. deja handoff --to codex empacota o contexto vivo para você continuar em outro agente. |
| Redação | Chaves, tokens, JWTs e blocos de chave privada são removidos no momento da indexação, então o cache é seguro de manter. |
Seu próprio trabalho, embrulhado
deja stats --card desenha no terminal; dê um nome de arquivo e ele escreve um
SVG para um README de perfil. Para publicar em qualquer outro lugar, transforme em
PNG — essa página converte no seu próprio
navegador.
A referência completa de recursos está nos docs.
Privacidade
Indexação e busca são locais. A rede é usada apenas por deja update, deja sync ssh,
e a verificação de versão em deja doctor.
Credenciais são redigidas no momento da indexação: chaves AWS, atribuições de api_key= e token=,
bearer tokens e JWTs brutos, blocos de chave privada PEM, tokens de provedores, URLs de scheme://user:pass@host,
valores de alta entropia para formas que nenhum padrão conhece, e uma senha declarada em prosa —
"a senha do admin é …", onde não há delimitador para as outras regras encontrarem. O
valor vira [redacted:<kind>] e o texto ao redor permanece pesquisável. deja share e
deja sync export reaplicam a redação na saída.
deja forget remove sessões de um índice reconstruído e grava tombstones, para que um deja index
posterior não possa restaurá-las do histórico de origem. --unforget levanta um tombstone.
Exclusões de projeto são um padrão por linha em ~/.config/deja/exclude; uma linha prefixada com
harness: nomeia um store em vez disso — harness:opencode — e o deja nem o percorre nem pede
a ferramenta que o leria.
O modelo de segurança documenta fluxos de dados, limites de redação, premissas de confiança e verificação de release.
CLI
$ deja "jwt refresh token"
[claude] api · Jul 8 · 8f31c0a9 — 2 matches
login started failing after refresh token rotation; jwt kid mismatch in tests
fixed by reloading jwks cache after rotateKey and adding a clock-skew test
[codex] web · Jul 1 · b77d91e2 — 1 match
refresh token cookie needed SameSite=Lax in local callback flow
Pergunte ao seu histórico
| Comando | O que faz |
|---|---|
deja <query> | Pesquisa todo o histórico. Multi-palavra é E e frases entre aspas exigem texto contíguo; uma consulta sem correspondência exata então tenta formas de palavras e grafias próximas, que é onde uma substring alcança sua palavra (code encontra opencode). |
deja | Com um índice e um terminal: sessões de hoje, recuperações servidas, uma pergunta que você fez em mais de uma sessão, e um obstáculo que seus agentes continuam encontrando. |
deja wip | O que a última sessão neste diretório estava fazendo: a tarefa, o que resolveu, os arquivos em andamento, o último comando e se falhou — derivado da transcrição, não de uma nota que alguém lembrou de escrever. |
deja blame <path>[:line] | Quais sessões discutiram um arquivo, o que foi decidido e por quê. Com uma linha: o commit que a alterou por último, e a sessão que escreveu aquela linha ou o texto que o commit substituiu. --attribution imprime a resposta da linha sozinha, como JSON com --json, e --git-note a registra em refs/notes/deja. |
deja files <topic> | A direção oposta: quais arquivos o trabalho em um assunto realmente tocou. |
deja how <tool> | Como esta máquina realmente executa algo, com as flags reais, a partir do que os agentes executaram antes. |
deja fix <error> | O que esta máquina executou após o mesmo erro antes, quando o erro não voltou. |
deja friction | Erros que atingiram três ou mais sessões separadas, com os harnesses nomeados. |
Usando o que encontra, e movendo entre máquinas
Use o que encontra
| Comando | O que faz |
|---|---|
deja ctx <query> | Resumo Markdown da melhor correspondência, pronto para ser usado em um prompt. |
deja resume <id> | Reabre uma sessão encontrada em seu ambiente nativo. |
deja restore <path> | Devolve um trecho que um agente substituiu, a partir do old_string que sua edição registrou. Nunca sobrescreve o original. |
deja promote <id> | Destila uma sessão em uma nota curada com proveniência, tags e um estado de ciclo de vida. Notas têm prioridade sobre transcrições brutas. |
deja share <id> | Um resumo sanitizado de sessão para um colega, com segredos já removidos. |
Mova e verifique
| Comando | O que faz |
|---|---|
deja sync export/import/ssh | Move memória entre máquinas. Com marca d'água, somente anexação, idempotente. |
deja view | Toda a sua memória em um único arquivo HTML local. Sem servidor, nada sai da máquina. |
deja stats | Seu trabalho de agente, empacotado. --card desenha no terminal, --card <file>.svg escreve um para um perfil, --html uma linha do tempo navegável. |
deja doctor [--deep] | Autodiagnóstico e, com --deep, prova do índice contra as fontes. |
deja mcp | O servidor MCP stdio, que é o que deja install conecta. |
Referência completa: comandos e saída JSON.
Ferramentas MCP
O servidor expõe uma ferramenta, deja, com um mode. deja install a conecta, então
isso só é necessário para configurar um agente manualmente. Os seis nomes de ferramentas mais antigos
(recall, recall_context, blame, fix, how, remember) ainda respondem por
qualquer coisa já conectada a eles.
Argumentos e formatos de retorno
| Ferramenta | Argumentos | Retornos |
|---|---|---|
deja | mode, além de query, path, error, what, text, tags?, harness?, project?, since?, limit?, offset?, all? | Depende do modo, abaixo. |
| Modo | Argumentos que lê | Retornos |
|---|---|---|
recall | query, harness?, limit?, offset? | Trechos de correspondência densos, limitados a 4KB. |
context | query, harness? | Resumo Markdown da sessão com melhor correspondência. |
blame | path, harness?, project?, since?, limit?, all? | Sessões que discutiram um arquivo. |
fix | error, project?, limit? | O que esta máquina executou, ou alterou, após o mesmo erro anterior. |
how | what, project?, limit? | A invocação real, a partir do que os agentes executaram aqui. |
remember | text, project?, tags? | Armazena uma decisão durável para recuperação posterior. |
Ambientes suportados
Com a recuperação automática instalada, Claude Code e Codex entregam ao deja a transcrição quando
uma compactação começa, e ele mantém o que o resumo está prestes a descartar: a tarefa, as
conclusões, os arquivos, os comandos com o que cada um fez, e o que ficou
em aberto. O próximo hook para a mesma sessão e espaço de trabalho devolve isso uma vez, dentro
de um orçamento de 4 KB, com uma linha indicando se o repositório mudou desde então. deja stats
conta as chamadas de ferramenta antes da primeira edição após uma compactação, que é o
número contra o qual isso é medido. Veja recuperação automática de
compactação para saber o que é lido, o que é armazenado e onde estão os
limites.
aider · Amp · Antigravity · Claude Code · Cline · Codex CLI · Copilot CLI · VS Code Copilot Chat · Cursor · DeepSeek Harness · Gemini CLI · Goose · Grok Build · Hermes · Kimi Code · omp (Oh My Pi) · OpenClaw · opencode · Continue · Crush · pi · prime-agent (PrimeIntellect) · Qwen Code · Cherry Studio · Senpi · gajae-code · Kimchi Coding · Command Code · ZCode · Kiro · Kilo Code · Roo Code · Zed · CodeWhale.
O que cada um suporta
| Ambiente | Recuperação MCP | Recuperação automática | Habilidade | Comando | Retomar | Transferência | Necessidades |
|---|---|---|---|---|---|---|---|
| aider | ⚠ | ✅ | ✕ | ⚠ | ✕ | ✅ | deja aider |
| Amp | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Antigravity | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Claude Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Cline | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Codex CLI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Copilot CLI | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | — |
| VS Code Copilot Chat | ✅ | ✕ | ✅ | ✅ | ✕ | colar | — |
| Cursor | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 (chats IDE) |
| DeepSeek Harness | ✅ | ✅ | ✅ | ✅ | ✕ | colar | zstd |
| Gemini CLI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Goose | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | deja goose |
| Grok Build | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 (armazenamento grok-dev) |
| Hermes | ✅ | ✅ | ✅ | ✅ | ✅ | colar | sqlite3 |
| Kimi Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| omp (Oh My Pi) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| OpenClaw | ✅ | ✅ | ✅ | ✅ | ✅ | colar | — |
| opencode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 |
| Continue | ✅ | ⚠ | ✅ | ✅ | ✅ | colar | — |
| Crush | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 |
| pi | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| prime-agent (PrimeIntellect) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Qwen Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Cherry Studio | ✅ | ✕ | ✅ | ✕ | ✕ | colar | importe o servidor uma vez em Configurações -> MCP; habilite a habilidade para o agente |
| Senpi | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | nenhuma |
| gajae-code | ✅ | — | ✅ | ✅ | ✅ | colar | nenhuma |
| Kimchi Coding | ✅ | ⚠ | ⚠ | ⚠ | ✅ | colar | nenhuma |
| Command Code | ✅ | ✅ | ✅ | ✅ | ? | colar | nenhuma |
| ZCode | ✅ | ✅ | ? | ? | ? | colar | sqlite3 para o banco de dados CLI |
| Kiro | ✅ | — | ✕ | ? | ✅ | colar | nenhuma |
| Kilo Code | ✅ | ⚠ | ✅ | ✅ | ✅ | colar | sqlite3 para o armazenamento CLI |
| Roo Code | ✅ | ⚠ | ✅ | ✅ | ✅ | colar | roo CLI (tarefas do editor reabrem no editor) |
| Zed | ✅ | ✕ | ✅ | ✅ | ✕ | colar | sqlite3 + zstd |
| CodeWhale | — | — | ? | ? | ✅ | colar | nenhuma |
✅ funciona · — possível, ainda não construído · ✕ o ambiente não tem tal mecanismo · ⚠ bloqueado por um bug upstream · ? não investigado
Locais de armazenamento personalizados passam por variáveis DEJA_*_ROOT, e a variável de realocação de cada agente
também é respeitada. O
registro de formato de sessão documenta
os caminhos observados, esquemas de registro e mapeamento de papéis por ambiente, com fixtures sintéticas
mantendo essas descrições verificadas contra os parsers.
Ambientes com um pacote próprio
deja install --auto conecta todos esses seis como qualquer outro ambiente, e
isso continua sendo o caminho mais curto. Eles também têm um pacote em seu próprio ecossistema,
para pessoas que instalam extensões lá em vez de por um CLI:
| Ambiente | Pacote | Instalação |
|---|---|---|
| opencode | npm opencode-deja | opencode plugin opencode-deja |
| DeepSeek Harness | npm dsh-deja | dsh plugin --profile web add dsh-deja |
| Zed | deja-context-server | Zed → Extensões → deja |
| Kimi Code | plugin deja | /plugins install https://github.com/vshulcz/deja-vu |
| Codex CLI | plugin deja-vu | codex plugin marketplace add https://github.com/vshulcz/deja-vu e depois codex plugin add deja-vu@deja-vu |
| Grok Build | plugin deja | grok plugin marketplace add xai-org/plugin-marketplace e depois grok plugin install deja |
Qualquer um dos caminhos é suficiente por si só, e ter ambos não é um problema: os
pacotes opencode, dsh, Kimi, Grok e Codex leem o que deja install escreveu e
contribuem apenas com o que está faltando, e no Zed ambas as metades usam um único ID de servidor, então
não há nada para ter duas vezes, independentemente da ordem de instalação.
Cada um usa o deja que você já tem; a cópia que ele inclui é apenas o fallback.
A mesma busca também é uma habilidade, para qualquer agente que carregue um SKILL.md:
npx skills add https://github.com/vshulcz/deja-vu --skill deja-search # skills CLI: Claude Code, Cursor, Goose, Copilot…
openclaw skills install @vshulcz/deja-search # ClawHub
hermes skills install vshulcz/deja-vu/skills/deja-search # Hermes
A habilidade aciona o binário deja da etapa de instalação acima; ela não inclui um.
Recuperação semântica (opcional)
Aponte deja embed para um endpoint local Ollama, LM Studio ou compatível com OpenAI com
DEJA_EMBED_URL e consultas reformuladas ainda funcionam. Sem um runtime acessível, a busca
lexical e a recuperação MCP continuam inalteradas. OpenAI Platform funciona com sua chave padrão:
export OPENAI_API_KEY='sk-...'
export DEJA_EMBED_URL='https://api.openai.com/v1/embeddings'
export DEJA_EMBED_MODEL='text-embedding-3-small'
deja embed
Sem DEJA_EMBED_URL definido, o deja testa localhost:11434 e localhost:1234,
então uma máquina já executando Ollama ou LM Studio é detectada sem ser perguntada.
DEJA_EMBED_OFF=1, ou DEJA_EMBED_URL=off, desativa esse teste — qualquer outro
DEJA_EMBED_URL configurado ainda vence.
Para outro endpoint autenticado compatível com OpenAI, defina DEJA_EMBED_KEY explicitamente:
export DEJA_EMBED_URL='https://example.com/v1/embeddings'
export DEJA_EMBED_MODEL='embedding-model'
export DEJA_EMBED_KEY='...'
deja embed
DEJA_EMBED_KEY tem precedência. OPENAI_API_KEY é usado automaticamente apenas para uma
URL api.openai.com HTTPS; nunca é enviado implicitamente para endpoints locais ou de terceiros.
Onde os vetores vivem e quanto custam
O sidecar fica ao lado do índice como .vectors.bin, não dentro de index.db. Vetores Float32
custam aproximadamente 4 MB por 1k mensagens para um modelo de 1.024 dimensões. Um endpoint remoto recebe
o texto indexado com dados removidos, truncado para cerca de 2k caracteres, mas nunca arquivos de origem brutos.
Com Ollama ou LM Studio, a incorporação permanece local e não precisa de chave.
Prova
deja bench recall # ranking floor: 100 queries, half Russian, CI fails if recall drops
deja bench context # 30 seeded task chains plus five negative controls
deja bench block # does the answer survive into what deja hands over
deja bench prompt # what the per-prompt hook fires on, and what it fires on wrongly
deja bench ingest # what an update costs: unchanged, a turn, a new transcript, a rename, a rewrite
deja bench read # what it costs to read a database-backed store, and what one long value does to it
bench block faz a pergunta que os outros três não conseguem: com a sessão certa em
mãos, o bloco carrega o que essa sessão resolveu. Oito sessões discutem cada
assunto e uma delas o resolve, no meio de sua própria transcrição em vez
de no final — então o braço de linha de base, as voltas mais recentes do melhor resultado, pontua
zero e um braço acima de zero teve que escolher.
| Braço | Carrega a resposta | Tokens medianos |
|---|---|---|
deja-block (bloco de início de sessão) | 1.00 | 665 |
deja-digest (resumo de contexto) | 1.00 | 1656 |
newest-turn (linha de base) | 0.00 | 289 |
cold | 0.00 | 0 |
O experimento de contexto compara a recuperação deja contra histórico completo, grep ingênuo e contexto frio. Com a semente padrão:
| Braço | Tokens medianos | Cobertura mediana | Tokens de controle negativo |
|---|---|---|---|
| recuperação deja | 1.096 | 1.00 | 0 |
| histórico completo | 80.547 | 1.00 | 78.145 |
| grep ingênuo | 273.238 | 1.00 | 0 |
| frio | 0 | 0.00 | 0 |
Mesma cobertura de fatos que fazer grep nos logs brutos por cerca de 250x menos tokens, e cerca de 70x menos do que reproduzir as sessões correspondentes por completo, sem injetar nada nas cadeias onde nenhum fato anterior é relevante. O gerador de corpus e os rótulos de relevância são Go comum revisado. Audite o que "relevante" significa antes de confiar em qualquer número, incluindo os nossos.
Medido em um armazenamento real de 2.419 sessões e 179k mensagens, 1,9 GB de transcrições:
| Medição | Resultado |
|---|---|
| Consulta, em processo | ~0,7 ms mediano (deja bench recall, 100 consultas, metade em russo), ~19 ms nos haystacks LongMemEval-S |
deja <query>, ponta a ponta | ~0,2 s mediano nesse armazenamento: início do processo, verificação de frescor em cada armazenamento, classificação, impressão |
| Verificação de frescor sozinha | ~50 ms quando nada mudou |
| Tamanho do índice | 200 MB, ~10% do corpus |
O índice é incremental. Quando um arquivo de sessão cresce, apenas esse arquivo é relido.
Como funciona
Índice invertido local em ~/.cache/deja: analise os armazenamentos JSONL e SQLite, remova
credenciais, escreva records.bin além de buckets de tokens, e rastreie o estado por arquivo em
manifest.gob para que execuções repetidas apenas ingiram o que mudou. O servidor MCP, estatísticas, compartilhamento e
sincronização leem esse único índice. Detalhes em docs/ARCHITECTURE.md.
FAQ
Algo sai da minha máquina? Não, a menos que você peça. Veja os
fluxos de dados.
E quanto aos segredos que já estão nos meus logs? Eles permanecem nos arquivos originais do harness, que são dados do seu agente. Formatos conhecidos — chaves AWS, atribuições de api_key=/token=, tokens bearer e JWTs simples, blocos PEM, tokens de provedores, valores de alta entropia — são removidos conforme o índice é construído, então não chegam a digests, compartilhamentos ou exportações de sincronização. Correspondência de padrões não é detecção de segredos: um formato que ela não conhece pode passar. Veja o modelo de segurança.
Isso vai deixar meu agente mais lento? Uma recuperação é uma busca lexical em um índice local: ~0,7 ms de mediana, e nada espera por um modelo. Um hook adiciona o início do processo e uma verificação de atualização sobre seus armazenamentos além disso — dezenas de milissegundos em um armazenamento de alguns gigabytes.
Preciso mudar a forma como trabalho? Não. O agente chama a recuperação por conta própria, e com a recuperação automática ele já conhece as decisões anteriores do projeto quando a sessão abre.
Como isso é diferente das outras ferramentas de memória?
| deja | Plataformas de memória (Mem0, Letta, memU) | Busca de sessão (cass) | |
|---|---|---|---|
| Conhece o trabalho de antes de você instalá-lo | sim | não | sim |
| Etapa de captura | nenhuma, as transcrições são a memória | o agente ou seu código escreve fatos | nenhuma |
| Precisa de LLM ou chave de embedding | não | sim | opcional |
| Recupera sem ser solicitado | no início da sessão e antes de uma ferramenta rodar | não | não |
engram é o mais forte das ferramentas de registro e vale seu tempo se esse modelo se adequar a você; ele ainda começa vazio e conhece apenas o que um agente escolheu salvar. A comparação completa cobre onze delas.
Onde o histórico de sessões do Claude Code é armazenado, e posso pesquisá-lo? Em ~/.claude/projects, um arquivo JSONL por sessão; o Codex mantém ~/.codex/sessions, o Cursor um SQLite state.vscdb. deja search lê todos no local, deja last lista as sessões recentes de cada agente, e deja view abre todo o histórico como uma única página local. Caminhos para cada agente: onde as sessões são armazenadas.
Meu histórico de sessões do Claude Code desapareceu. Ele se foi? O Claude Code exclui transcrições com mais de 30 dias (cleanupPeriodDays em ~/.claude/settings.json), e claude --resume lista apenas o que resta. Uma sessão que o deja indexou antes da limpeza permanece pesquisável depois que o arquivo se foi. Detalhes: arquivos de sessão no disco.
E o Windows? Existem builds e o CI executa a suíte lá. macOS e Linux são os caminhos testados em batalha. Relatos de campo são bem-vindos em #9.
Como apago tudo?
deja uninstall --all
rm -rf ~/.cache/deja
Guias
Escritos para a situação, em vez do recurso:
- Seu agente lembra de conversas anteriores? — o que cada agente mantém entre sessões, e o que ele descarta
- Arquivos de sessão no disco — o tamanho que
~/.claude/projectsatinge, e o que custa excluí-lo - O agente perdeu o contexto que você tinha — após uma falha, uma limpeza ou uma sessão que voltou vazia
- A janela de contexto está cheia — o que a compactação mantém, medido, e o que fazer em vez disso
- Retomando a sessão de ontem — encontre-a em todos os agentes, reabra-a naquele que a possui
- O agente repete um erro que você já corrigiu
- Encontrando a sessão onde você resolveu isso
- Por que agentes esquecem entre sessões · Onde cada agente mantém seu histórico
- O que a compactação descarta · Trocando de agentes · Auditando um agente · Exportando uma conversa · Entre máquinas · O que a memória custa
Por harness: opencode · DeepSeek Harness · Kimi Code · Zed · Grok Build · Gemini CLI · Qwen Code · OpenClaw · Goose · Cline · pi e omp · Hermes
Experimente com seu próprio histórico
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
Dez segundos para instalar, cerca de dez para indexar. Na próxima sessão que seu agente abrir, ele já saberá o que você resolveu naquele projeto — incluindo tudo de antes de você instalar isso.
Contribuindo
make build test lint, depois CONTRIBUTING.md. Adicionar um harness começa no registro de parsers. Prioridades e não-objetivos estão em ROADMAP.md. Boas primeiras issues estão rotuladas.
Suporte
Bugs e perguntas vão para issues. Qualquer coisa que você ache explorável passa pelo link de advisory privado em SECURITY.md em vez disso. O que o deja lê, o que ele nunca envia para qualquer lugar, e como excluir um projeto ou esquecer uma sessão está em Privacidade.
Licença
MIT © Vladislav Shulcz