
Resolviste un problema en Claude Code, continuaste el proyecto en Codex y, semanas después, Cursor intenta investigarlo todo de nuevo. La solución puede que aún esté en el disco: enterrada en los historiales de sesión. El Deja Vu, cuyo comando es deja, convierte esos registros en memoria consultable, accesible desde la terminal y por los propios agentes. El proyecto está escrito en Go y se distribuye bajo licencia MIT.
Este es un complemento de nuestro comparativa de alternativas a Claude-Mem en Go, Rust y C. Aquí vamos más allá del README: arquitectura, instalación rápida, integración selectiva, privacidad, límites y una evaluación de madurez basada en el código y en pruebas locales.
0fb72c044f9c75444d270275424de29dca62e536. No confundimos funcionalidades de la rama principal o de builds nightly con lo que hay en esa release. Las pruebas usaron historiales sintéticos y directorios aislados, no conversaciones reales del usuario.Qué hace diferente a Deja Vu
Muchas herramientas de memoria comienzan vacías. Instalas hooks, dejas que el agente trabaje y esperas a que se acumulen observaciones o le pides que guarde decisiones. El Deja Vu puede comenzar por el pasado: lee los historiales que los agentes ya mantienen localmente y los reúne en un índice.
- Búsqueda retroactiva: una sesión anterior a la instalación puede aparecer en la primera consulta, siempre que el historial aún exista y sea compatible.
- Continuidad entre agentes: una decisión registrada en Claude puede recuperarse en una sesión de Codex, sin importar manualmente cada conversación.
- Contexto del trabajo: además de la conversación, puede recuperar archivos mencionados, comandos, resultados y fragmentos sustituidos por herramientas de edición, según el formato del agente.
- Utilidad sin integración: la CLI y la interfaz de terminal ya funcionan sin registrar un servidor MCP.
- Búsqueda básica sin modelo: la ruta por defecto no requiere API key, descarga de LLM ni servicio de embeddings.
Esto no significa recuperar una sesión que nunca se guardó ni reconstruir íntegramente cualquier conversación borrada. La calidad depende de lo que cada agente haya registrado y de lo que el parser consiga interpretar. Para conocer los formatos efectivamente leídos, consulte la tabla de fuentes de la versión analizada.
Cómo funciona: historial, índice y recuperación
El flujo es sencillo de entender: descubrir los archivos o bases de datos de los agentes, interpretar sesiones, sanear los textos, construir el índice y entregar fragmentos relevantes. Claude Code usa JSONL; Codex tiene rollouts; otras herramientas guardan sesiones en JSON, Markdown o SQLite. No existe un formato universal, por eso los parsers son parte central del proyecto.

Un detalle fácil de equivocar: ~/.cache/deja/index.db es el nombre de un directorio, no de una base de datos SQLite. En la 0.22.1, contiene registros binarios, listas de apariciones de los términos y metadatos. No intente abrirlo con sqlite3. El formato y el ranking léxico se explican en la documentación de arquitectura.
La consulta léxica utiliza términos y ranking BM25; las frases y los filtros refinan la recuperación. También existen mecanismos de aproximación cuando la consulta exacta no basta. Esto es distinto de afirmar que toda búsqueda es semántica: la capa de embeddings es opcional y requiere su propia configuración.
El servidor MCP se ejecuta sobre stdio: el cliente inicia deja mcp y conversa por la entrada y salida estándar. No es necesario abrir un puerto HTTP ni mantener un demonio central solo para usar esta vía.
Instalación rápida en Linux
Las releases proporcionan binarios para Linux amd64 y arm64. Para empezar con el instalador oficial, sin compilar Go, descarga el script, léelo y solo entonces ejecútalo. El ejemplo fija la revisión de script analizada; el propio script consulta la release estable más reciente, por lo que no fija la versión del binario.
mkdir -p "$HOME/.cache/deja-installer"
curl -fsSL \
https://raw.githubusercontent.com/vshulcz/deja-vu/v0.22.1/install.sh \
-o "$HOME/.cache/deja-installer/install.sh"
less "$HOME/.cache/deja-installer/install.sh"
sh "$HOME/.cache/deja-installer/install.sh"
export PATH="$HOME/.local/bin:$PATH"
deja version
deja index
deja search "connection pool"
deja doctor
Por defecto, el destino es ~/.local/bin. No use sudo para instalar en el directorio personal. Si el comando no aparece en un terminal nuevo, incluye ~/.local/bin no PATH de tu shell; el instalador también informa de la ruta completa que puede usarse de inmediato.
El atajo difundido por el proyecto es descargar el script de la rama principal y pasarlo directamente a sh, seguido de deja install --auto. Es rápido, pero son dos decisiones distintas: ejecutar código recién descargado y autorizar cambios en la configuración de los agentes. El procedimiento anterior permite inspeccionar la primera y posponer la segunda. Consulta la guía oficial de instalación.
¿Necesita instalar sqlite3?
Para historiales en SQLite, sí: Deja Vu invoca el ejecutable local sqlite3 para leer la base de datos de origen. Esto aparece, por ejemplo, en integraciones con Cursor IDE y opencode. El binario Go no embebe una biblioteca SQLite mediante CGO.
# Debian / Ubuntu: necessário para fontes que usam SQLite
sudo apt update
sudo apt install sqlite3
deja sources
deja doctor
Tener un único binario principal no significa que todos los formatos de todos los agentes funcionen sin utilidades auxiliares. Utiliza el diagnóstico para descubrir dependencias ausentes en tu combinación de fuentes, especialmente formatos comprimidos.
Alternativa con Go y versión fija
O go.mod de la release declara Go 1.25. Quien ya tenga un toolchain compatible puede compilar la etiqueta explícitamente:
go install github.com/vshulcz/deja-vu/cmd/deja@v0.22.1
# Sem GOBIN personalizado, o executável fica no bin do GOPATH.
export PATH="$(go env GOPATH)/bin:$PATH"
deja version
Una compilación mediante go install puede mostrar dev en deja version: la distribución oficial inyecta el número de la release en el build. Esto no altera la etiqueta solicitada en el comando de instalación.
El proyecto también documenta Homebrew, npm y paquetes para Windows. Para Linux, el binario de release evita instalar un lenguaje solo para usar la herramienta. En entornos controlados, prefiere una release fija y valida su firma, no solo el checksum.
Integración con Claude Code y Codex sin instalar todo
Antes de modificar configuraciones, haz una copia de seguridad de los archivos de los agentes que se verán afectados. El instalador de Deja Vu también crea instantáneas de configuración, pero eso no sustituye a tu propia copia de seguridad.
backup="$HOME/deja-config-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -m 700 "$backup"
# Caminhos padrão; ajuste se você usa perfis ou diretórios personalizados.
for file in \
"$HOME/.claude.json" \
"$HOME/.claude/settings.json" \
"$HOME/.claude/CLAUDE.md" \
"$HOME/.codex/config.toml" \
"$HOME/.codex/AGENTS.md"
do
if [ -f "$file" ]; then
cp --parents -- "$file" "$backup/"
fi
done
# Registra MCP e orientação para os dois agentes, sem o modo automático.
deja install claude-code codex
deja doctor
Reinicia las sesiones de los agentes para cargar la configuración. La distinción entre las opciones importa:
| Comando | Efecto principal |
|---|---|
deja install claude-code codex |
Integra solo esos clientes, con MCP y orientación aplicables, sin solicitar sus modos automáticos. |
deja install claude-auto codex-auto |
Activa las integraciones automáticas previstas para esos dos agentes. |
deja install --all |
Configura MCP en los agentes detectados sin habilitar nuevos modos automáticos; puede actualizar hooks automáticos ya instalados. |
deja install --auto |
Configura los agentes detectados y añade hooks o plugins automáticos según el soporte de cada uno. |
--no-guidance |
Evita la orientación de uso que esa instalación normalmente añadiría. |
Indexar un agente no es lo mismo que instalar hooks en él. El historial puede ser buscable incluso sin integración automática. Los eventos disponibles también varían: no asumas que todos los clientes ofrezcan el mismo ciclo de Claude Code. Consulta la guía de integración por agente y ejecuta deja help install en la versión instalada.
Búsqueda y facilidades que marcan la diferencia en el día a día
La pregunta útil no es “¿cuántas herramientas existen?”, sino “¿cuánto trabajo repetido puedo evitar?”. Empieza con mensajes de error, nombres de archivos y términos que realmente aparecieron en la conversación.
# Busca nos históricos indexados
deja search "connection pool exhausted"
# Restringe ao agente e a uma janela de tempo
deja search --harness codex --since 30d "refresh token"
# Consulta uma expressão que começa com hífen
deja search -- "--force-with-lease"
# Resultado estruturado para automação
deja search --json "refresh token"
# Consulta a sintaxe e os filtros disponíveis
deja help search
En una terminal interactiva, deja sin argumentos abre la TUI. Permite buscar, leer una sesión y navegar por los resultados. Para salida textual, utiliza deja brief. Filtros por agente, proyecto y periodo ayudan a no confundir la decisión de la aplicación A con una experiencia realizada en la aplicación B.
| Necesidad | Comando | Cuidado |
|---|---|---|
| Preparar contexto para otro agente | deja ctx "refresh token" |
Revisa el resumen antes de enviarlo a un servicio externo. |
| Entender la sesión anterior del proyecto | deja wip |
El resultado se deriva del transcript, no de una confirmación humana. |
| Descubrir quién discutió un archivo | deja blame src/auth.go |
La discusión de un archivo no equivale, por sí sola, a la autoría de una línea. |
| Consultar el historial de una línea | deja blame src/auth.go:42 |
La atribución depende de la evidencia registrada y de Git. |
| Revisar cómo se ejecutó una herramienta | deja how "go test" |
Un comando antiguo puede haber dejado de ser adecuado. |
| Consultar intentos tras un error | deja fix "connection pool exhausted" |
No es prueba de causalidad ni autorización para ejecutar la sugerencia. |
| Preparar el relevo | deja handoff --to codex |
Sin --exec, prepara el contenido sin abrir automáticamente el destino. |
El 0.22.1 también amplía la lectura del código modificado en la sesión, cuando los transcripts contienen las llamadas de edición. Es valioso para recuperar el razonamiento junto con el parche, pero no sustituye a un commit, una prueba actual o la revisión del diff.
MCP, hooks y memoria curada
En la versión analizada, tools/list anuncia una herramienta principal llamada deja, con modos de operación. El agente puede consultar memoria, contexto, archivos y otros recortes sin cargar una definición separada para cada comando de la CLI. Confirmamos ese contrato en una prueba JSON-RPC local.
MCP es el canal de consulta; los hooks son los puntos de activación automática. Sin hook, el agente necesita decidir llamar a la herramienta. Con integración automática, una parte del contexto puede llegar al abrirse o en otros eventos soportados por el cliente. Esto aumenta la conveniencia, pero también merece atención al presupuesto de contexto y al alcance de la información recuperada.
Deja Vu no se queda restringido a la búsqueda de conversación en bruto. deja remember registra una nota y deja promote convierte una sesión en información curada con procedencia y estado de ciclo de vida. Esto ayuda a distinguir “probamos ese enfoque” de “esta es la decisión vigente”. Aun así, le corresponde al equipo validar las decisiones y retirar las que quedaron obsoletas.
Si ya usas ai-memory o Engram, una estrategia conservadora es probar primero Deja Vu como CLI de investigación. Evita activar dos sistemas de auto-recuerdo al mismo tiempo sin medir la duplicación de contexto y definir quién guarda la memoria duradera.
Madurez del código: las señales positivas
El repositorio fue creado el 14 de julio de 2026, según los metadatos públicos de GitHub. Por lo tanto, es un proyecto joven en la fecha de este análisis. La conclusión “aún joven” no depende del número de estrellas: depende del tiempo de operación, la estabilidad de los contratos y la evidencia de pruebas.
- Separación de responsabilidades: el árbol distingue fuentes, indexación, consulta, ranking, saneado, política de recuperación, digest e interfaz de terminal.
- Alcance Go enxuto nas dependencias: o
go.modesa etiqueta contiene a declaración do módulo e da versión de Go, sen unha lista de dependencias externas. Isto simplifica parte da cadea de construción, aínda que aumenta a responsabilidade sobre implementacións propias. - Probando máis aló do camiño feliz: hai escenarios de índice corrompido, interrupción de escritura, concorrencia, reconstrución, segredos, eliminación e formatos de diferentes axentes. A etiqueta ten 2.572 arquivos
*_test.go; ese é un número de arquivos, non unha medición de cobertura nin de calidade. - CI con barreiras concretas: o workflow inclúe
go vet, probando cun detector de carreiras en Linux/macOS, verificación de vulnerabilidades e chans de cobertura. A configuración define un chan total de 87,5% para o código distribuído; isto non é unha cobertura total medida por nós. - Distribución coidada: as versións teñen checksums, sinatura do ficheiro de checksums e SBOM. A construción de distribución desactiva CGO.
- Límites documentados: el modelo de seguridad explica exportación, políticas, sanitización y ausencia de cifrado en reposo, en lugar de prometer privacidad absoluta.
Checksum no es firma: el instalador y el actualizador comparan el SHA-256 del archivo, pero no verifican automáticamente la firma. Esto detecta corrupción de la descarga, no una release manipulada junto con su archivo de checksums. La verificación criptográfica es un paso adicional documentado por el proyecto.
Estas señales se pueden consultar en el flujo de CI de trabajo, en la configuración de release y en documento de seguridad. Muestran disciplina de ingeniería; no son certificación de seguridad ni garantía de que todos los agentes estén igualmente bien cubiertos.
Qué probamos — y el problema de zona horaria encontrado
Para no convertir el texto en reproducción de marketing, compilamos la tag, instalamos el binario estable en un directorio de laboratorio y creamos sesiones sintéticas de Claude Code y Codex. Ninguna configuración real de los agentes fue modificada.
| Verificación local | Resultado |
|---|---|
Compilación de la etiqueta e go vet ./... |
Completados sin error. |
| Instalador analizado y binario de release | Instalación aislada completada; el binario informó 0.22.1. |
| Históricos sintéticos de dos agentes | Ambos aparecieron en la búsqueda; también ejercitamos contexto y traspaso. |
| Sanitización de una contraseña ficticia | El valor de prueba no apareció en la respuesta de la búsqueda ni en el recall MCP. |
| Instalación y eliminación de MCP | Ejecutadas en un HOME de laboratorio para Claude Code y Codex. |
| MCP por stdio | Inicialización, listado de herramientas deja y consulta de recall funcionaron. |
Paquetes redact, query, search, policy e index |
Las pruebas pasaron con -race. |
Paquete sources |
Pasó con TZ=UTC; hubo un fallo reproducible en una prueba de notas con TZ=America/Sao_Paulo. |
| Cuatro pruebas seleccionadas de configuración y hooks | Pasaron con -race, incluyendo instalación/remoción para Claude y Codex. |
El fallo fue TestNotesPathAndAppendParse, en notes_test.go. La prueba espera que dos notas queden en el mismo grupo diario. Sin embargo, sus horarios caen en días diferentes en la zona horaria de São Paulo, y el parser agrupa por el día local. El resultado son tres grupos donde la prueba espera dos. Repetimos el caso en UTC y en São Paulo para confirmar la diferencia.
Interpretación: encontramos una suposición de zona horaria en la prueba, no evidencia de pérdida de notas ni de fallo general en la indexación. Es un ejemplo concreto de portabilidad todavía por mejorar. También sería incorrecto decir que “toda la suite pasó”: no ejecutamos todas las pruebas de todos los paquetes y clientes, ni una auditoría completa de seguridad o benchmarks de escala.
Veredicto: hay ingeniería suficiente para un piloto serio en el escritorio, sobre todo como búsqueda local bajo demanda. Aún no lo clasificaría como infraestructura crítica sin reservas: la línea es 0.x, el proyecto es reciente, los formatos de los agentes cambian y el formato de índice propio tiene que acompañar esos cambios. Adóptelo con versión controlada, copias de seguridad y validación de su propio flujo.
Benchmarks: útiles, pero no una clasificación universal
El proyecto publica mediciones de recuperación, indexación y coste de contexto, además de código para reproducción. Esto es mejor que una promesa sin método. Aun así, los ensayos los produce el propio mantenedor; no los tratamos como validación independiente ni repetimos sus porcentajes como resultado de LinuxPro.
En la prueba de utilidad “en el primer día”, la hipótesis favorece precisamente la diferencial de Deja Vu: ya existe un gran historial en disco. Una herramienta que depende de notas grabadas después de la instalación resuelve otra etapa del problema. Compare corpus, máquina, preparación de los concorrentes, versión y criterio de éxito antes de declarar un ganador.
La pregunta práctica es: “¿encuentra la solución antigua de mi proyecto con pocos falsos positivos?”. Separe consultas conocidas, registre si el fragmento correcto aparece y mida la latencia y el volumen de contexto. El ensayo day zero y el catálogo de benchmarks son puntos de partida, no sustitutos de esa evaluación.
Privacidad: local no significa inmune a filtraciones
El mecanismo de sanitización elimina patrones reconocidos de credenciales antes de la grabación en el índice. La implementación examinada sanitiza el texto antes de aplicar su límite de tamaño, evitando que un corte en medio de un secreto entorpezca una regla de detección. Es una defensa concreta, no una garantía universal.
- Transcripciones originales: pueden seguir conteniendo la credencial. Construir el índice no borra el historial de origen.
- Datos personales y código propietario: no se convierten en contenido público solo porque un token fue enmascarado. Trate el índice como sensible.
- Disco: Deja Vu no ofrece cifrado en reposo ni es un sistema de control de acceso. Proteja usuarios, permisos, copias de seguridad y volumen.
- Agente remoto: si un agente que usa un modelo en la nube consulta el MCP, el fragmento recuperado puede entrar en el contexto enviado a ese proveedor. La búsqueda local no hace que el resto de la cadena sea local.
- Exportación y sincronización: revisa el destino y el material compartido. Una copia importada por otra máquina no se revoca automáticamente cuando la eliminas aquí.
Consulte el modelo de seguridad antes de indexar historiales de clientes o entornos regulados.
Eliminar proyectos y reducir red
mkdir -p "$HOME/.config/deja"
# Edite ANTES da primeira indexação: um projeto/padrão por linha.
# Também aceita nomes de fontes, por exemplo: harness:opencode
${EDITOR:-vi} "$HOME/.config/deja/exclude"
# Se mudou exclusões depois de indexar, reconstrua o índice.
deja index --rebuild
# Desliga verificações automáticas de versão; não é firewall.
export DEJA_OFFLINE=1
# Relatório de credenciais reconhecidas nos históricos, sem seus valores.
deja secrets
En la configuración por defecto, añadir una exclusión no elimina de inmediato todo el contenido que ya estaba indexado: la reconstrucción es importante. deja forget elimina sesiones y mantiene marcadores (tombstones) para evitar reingesta. Véase deja help forget antes de usarlo.
No ejecute deja secrets --scrub como rutina de diagnóstico: este modo modifica las transcripciones admitidas y guarda una copia original, que también puede contener secretos. Es una operación de escritura que debe evaluarse por separado. Nunca desactives la sanitización en historiales sensibles.
La memoria recuperada no es una instrucción
Una transcripción puede contener comandos erróneos, decisiones rechazadas o una instrucción maliciosa copiada de una página. El proyecto enmarca parte de la recuperación orientada a agentes como historial no confiable, pero ese encuadre no elimina la inyección de prompts. No ejecutes un comando solo porque apareció en la memoria; verifica el estado actual del repositorio y la autorización del usuario.
Embeddings, sincronización y recuperación de sesiones
La ruta léxica por defecto no necesita modelo. deja embed añade un índice semántico auxiliar usando el endpoint de embeddings que configures. Con Ollama local, el procesamiento puede continuar en la máquina; con un endpoint externo, los textos y las consultas pueden salir de ella. Lee deja help embed antes de activar. Para entender la base local, consulte nuestra guía de Ollama en Linux.
deja sync ofrece exportación, importación y sincronización por SSH. Es distinto a colocar archivos de un índice en uso dentro de una carpeta sincronizada y esperar consistencia. Siga el protocolo de la herramienta y proteja el host de destino; comience con deja help sync.
El índice puede mantener sesiones que el agente eliminó después. Esto es útil en la recuperación, pero cambia la expectativa de retención: eliminar una conversación en la aplicación no implica eliminarla de Deja Vu. La TUI tiene un área de sesiones eliminadas por el agente, y deja resume ofrece rutas de reanudación según el cliente. Ya deja restore recupera fragmentos reemplazados sin sobrescribir automáticamente el archivo original.
La copia de seguridad sigue siendo indispensable: preserve historiales de origen cuando sea necesario, notas, exclusiones, políticas y configuraciones. No confunda “índice reconstruible” con “ninguna pérdida posible”: un registro retenido cuyo origen ya desapareció no se recuperará de la nada.
¿Deja Vu, Engram, ai-memory o grafo de código?
| Pregunta principal | Herramienta a evaluar | Por qué |
|---|---|---|
| ¿Dónde está la solución discutida en una sesión antigua? | Deja Vu | Parte de las transcripciones ya existentes y facilita la investigación retroactiva entre agentes. |
| ¿Cómo compartir decisiones grabadas explícitamente por los agentes? | Engram | Flujo de memoria persistente con SQLite, herramientas de grabación/consulta e inspección en el terminal. |
| ¿Cómo mantener una wiki y organizar la continuidad de las sesiones? | ai-memory | Wiki Markdown versionada, notas y handoffs en una arquitectura de servicio. |
| ¿Quién llama a esta función y qué dependencias se verán afectadas? | codebase-memory-mcp | El objeto es la estructura del código, no la historia de la conversación. |
No son categorías perfectamente excluyentes: el Deja Vu también tiene notas y handoff; otros proyectos también pueden importar información. La diferencia es el punto de partida y la operación cotidiana. Consulta el comparativa completa para otras opciones y la evolución de ai-memory para el flujo de wiki.
Problemas comunes y cómo deshacer la integración
deja: command not found: consulta~/.local/bin,GOBINy elPATH. Instalar y configurar los agentes son pasos separados.- Una fuente quedó vacía: ejecutes
deja sourcesedeja doctor; revisa el perfil, el directorio del agente, las exclusiones y las utilidades ausentes. - La búsqueda no encuentra lo que recuerdas: usa un término literal del error, amplía el período y revisa el proyecto. Puede que el historial se haya borrado antes de la primera indexación.
- MCP configurado, pero el agente no recuerda solo: cargar la herramienta no implica auto-recall. Reinicia la sesión y revisa el modo de instalación.
- La primera ejecución tras la actualización tarda: los cambios de formato pueden requerir reconstrucción. La release 0.22.1 lo advierte explícitamente.
- Las pruebas de notas fallan en tu zona horaria: reproduce el caso aislado; UTC es una comparación diagnóstica, no motivo para ocultar el fallo original.
# Diagnóstico mais detalhado
deja doctor --deep
# Remove a integração de todos os alvos instalados pelo Deja Vu.
deja uninstall --all
Desinstalar la integración no es sinónimo de borrar notas, índice y todas las copias de seguridad. Decide la retención de esos datos por separado y consulta la ayuda de la versión instalada. No elimines ~/.claude o ~/.codex para “limpiar el Déjà Vu”: esos directorios pertenecen a los propios agentes.
¿Merece la pena?
Sí, para quienes alternan agentes y ya han acumulado historial local. La facilidad más convincente es empezar encontrando trabajo antiguo, no esperar a la semana siguiente para que la memoria resulte útil. CLI, TUI e integración selectiva permiten experimentar sin transformar toda la máquina de golpe.
El código muestra pruebas, organización y una preocupación real por la integridad y los secretos, pero la herramienta aún es joven. Nuestro piloto funcionó y también reveló un supuesto de zona horaria en una prueba. La recomendación es empezar bajo demanda, medir la ganancia en el propio proyecto y solo después activar la automatización. Una buena memoria reduce la investigación repetida; no sustituye a Git, la documentación ni la revisión.