deja-vu
Una memoria compartida por Claude Code, Codex, Cursor, Copilot CLI, OpenClaw y 28 agentes de codificación más, construida a partir del historial de sesiones ya en disco. Una solución encontrada en un agente regresa en cualquiera de ellos, incluyendo meses de sesiones anteriores a su instalación. Sin LLM, sin embeddings, un solo binario local de Go.
Documentación
La única memoria que comparten tus agentes de codificación, construida a partir del historial que ya está en tu disco.
Tu agente está a punto de volver a depurar algo que arreglaste en marzo — en un agente diferente. deja indexa las sesiones que Claude Code, Codex, Cursor y cualquier otro agente en esta máquina ya escribieron en el disco, y entrega la correcta a cualquier agente que la pida.

Nadie buscó nada — el agente llamó a deja por sí mismo. Cada línea está citada de dos sesiones reales.
Cada herramienta de memoria empieza vacía y registra hacia adelante. deja empieza llena.
Y nadie tiene que pedirlo: el recuerdo llega al inicio de la sesión, en cada mensaje, antes de que se edite un archivo o se ejecute un comando, y después de que uno falle. Las claves y tokens se eliminan mientras se construye el índice, así que lo que llega al modelo es seguro de enviar.
85.3% hit@1 en LongMemEval-S · 69.7% retrieval hit@1 en LoCoMo · búsquedas en milisegundos sobre gigabytes de historial
Ambos harnesses se incluyen en este repositorio y se ejecutan en los conjuntos de datos públicos en minutos ·
comprueba los números tú mismo
English | 中文
Docs · Benchmarks · Cómo se compara · Integrarlo en tu herramienta
¿Te resultó útil? Dale una estrella a deja-vu en GitHub para que otros desarrolladores puedan encontrarlo.
Instalación
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto

Diez segundos para instalar, unos diez para indexar, y ya es útil. El segundo comando conecta el recuerdo MCP a cada agente que encuentre, activa el recuerdo al inicio de sesión donde el agente lo soporte, y construye el primer índice para que la próxima sesión no tenga que pagar por ello.
Inicia una nueva sesión de agente y pregúntale algo en lo que trabajaste hace meses:
¿hemos tratado la rotación de refresco de JWT antes? revisa tu memoria
Tampoco tiene que ser preguntado — con el auto-recuerdo el agente ya sabe lo que resolviste en ese proyecto cuando la sesión se abre.
Otras formas de instalar, y qué hacer si quieres menos que todo
brew install deja-vu, go install github.com/vshulcz/deja-vu/cmd/deja@latest,
o npx @vshulcz/deja-vu "query" para probarlo sin instalar nada. Las aplicaciones de escritorio que
toman servidores MCP como paquetes pueden abrir el .mcpb desde el
último lanzamiento; lleva el binario.
Claude Code, Codex, Cursor, Qwen, OpenClaw y Copilot pueden tomar el mismo paquete de plugin desde sus propios marketplaces en su lugar:
claude plugin marketplace add vshulcz/deja-vu && claude plugin install deja-vu@deja-vu
En Windows el script de instalación sale con unsupported OS — es un script de shell. Usa
Scoop en su lugar, desde el bucket principal que cada instalación de Scoop ya tiene:
scoop install deja-vu
O toma deja-vu_<version>_windows_amd64.zip del
último lanzamiento y pon deja.exe en
tu PATH, por ejemplo en %USERPROFILE%\.local\bin.
El binario solo es una instalación completa para buscar: indexar, buscar, show, ctx, blame,
--json y redacción no necesitan nada más. deja install es lo que conecta MCP a tus agentes
y activa el recuerdo al inicio de sesión — vale la pena tenerlo, y es opcional. En una configuración solo-binario
deja doctor reporta cada objetivo MCP como not-wired, que es esa configuración funcionando como
se pretende. deja warmup también deja una habilidad en ~/.agents/skills/deja-search/SKILL.md
que enseña a un agente el contrato CLI — deja search --json, ctx, blame, cómo leer
tier y total — para que sepa que el historial es buscable sin MCP. La copia en el repositorio es
skills/deja-search/SKILL.md.
deja install --all es --auto sin el recuerdo al inicio de sesión: los agentes responden desde la memoria
cuando deciden llamarlo, en lugar de empezar cada sesión con él. La
guía de configuración de agentes cubre lo que cada
harness soporta, el archivo de contexto de solo lectura de aider, y el wrapper de Windows cmd /c deja mcp.
Lo que se escribe en el archivo de guía de cada agente
La instalación también escribe guía a nivel de usuario para los 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 y Zed — cada uno recibe su propia guía en su archivo (o bajo el XDG_CONFIG_HOME configurado). Re-ejecutar reescribe la habilidad o bloque marcado de deja sin cambiar el contenido de usuario circundante. Usa deja install --all --no-guidance para optar por no participar; Grok Build recibe la habilidad compartida en ~/.agents/skills, que es lo que lee; el ~/.grok/GROK.md escrito junto a ella es para el CLI comunitario no relacionado que comparte ese directorio. Cursor no tiene archivo de instrucciones a nivel de usuario, así que recibe la habilidad compartida en ~/.agents/skills — uno de los cuatro lugares de donde Cursor lee habilidades — leída solo cuando algo parece relevante en lugar de cada sesión.
Lo que obtienes
Resuélvelo en Codex. Claude lo recuerda. Treinta y cuatro agentes de codificación escriben cada conversación en archivos locales, y deja convierte esos archivos en una capa de memoria que todos leen.
| Búsqueda retroactiva | deja "connection pool exhausted" sobre gigabytes, incluyendo todo lo anterior a instalar deja. Las preguntas en lenguaje natural caen a un nivel de relevancia. El tiempo es una pista, no un filtro. |
| Recuerdo entre agentes | La herramienta MCP recall responde "arreglamos esto hace tres semanas" en cualquier agente que pregunte, sin importar quién lo resolvió originalmente. |
| Sobrevive a la compactación | Medido en 43 compactaciones: el resumen conserva el 77% de las decisiones y el 0.2% de los comandos que ejecutaste. deja devuelve el otro 99.8% — y en Claude Code y Codex captura la tarea, los archivos y los comandos cuando la compactación comienza, luego los devuelve una vez en la próxima sesión. |
| Recuerdo en el punto de acción | Antes de que un agente edite un archivo o ejecute un comando, deja nombra la decisión previa de ese archivo, la invocación funcional de ese comando, o el programa que esta máquina no tiene. Cuando un comando falla, un hook PostToolUse responde con lo que siguió a ese mismo error aquí antes — el par que un agente nunca piensa en pedir. |
| Indexa el trabajo, no solo la charla | Los archivos que cada turno abrió, los comandos que se ejecutaron con su estado de salida, y los tramos exactos que una edición reemplazó. Esa es la parte que todo resumen descarta. |
Cuatro más: decisiones rechazadas, obsolescencia, sincronización y traspaso, redacción
| Sabe lo que se mantuvo | deja promote <id> --state rejected --note "why" marca una decisión que revertiste. Cada acierto posterior para esa sesión muestra que se intentó y se rechazó, con la razón. Nada se elimina, y --state accepted quita la marca. |
| Dice cuando el terreno se movió | Un acierto reporta 4 archivos que esta sesión tocó han cambiado desde entonces, y no dice nada cuando no puede saberlo. Nunca afirma que algo no ha cambiado. |
| Sincronización y traspaso | deja sync ssh laptop mueve memoria entre máquinas, solo-agregar, sin nube en el medio. deja handoff --to codex empaqueta el contexto vivo para que puedas continuar en otro agente. |
| Redacción | Claves, tokens, JWTs y bloques de claves privadas se eliminan al indexar, así que la caché es segura de conservar. |
Tu propio trabajo, envuelto
deja stats --card lo dibuja en la terminal; dale un nombre de archivo y escribe un
SVG para un README de perfil. Para publicarlo en cualquier otro lugar, conviértelo en un
PNG — esa página lo convierte en tu propio
navegador.
La referencia completa de funciones vive en los docs.
Privacidad
La indexación y la búsqueda son locales. La red se usa solo por deja update, deja sync ssh,
y la verificación de versión en deja doctor.
Las credenciales se redactan al indexar: claves AWS, asignaciones de api_key= y token=,
tokens bearer y JWTs crudos, bloques de claves privadas PEM, tokens de proveedores, URLs de scheme://user:pass@host,
valores de alta entropía para formas que ningún patrón conoce, y una contraseña declarada en prosa —
"la contraseña de administrador es …", donde no hay delimitador para que las otras reglas la encuentren. El
valor se convierte en [redacted:<kind>] y el texto circundante permanece buscable. deja share y
deja sync export re-aplican la redacción a la salida.
deja forget elimina sesiones de un índice reconstruido y escribe tombstones, así que un
deja index posterior no puede restaurarlas desde el historial fuente. --unforget levanta un tombstone.
Las exclusiones de proyecto son un patrón por línea en ~/.config/deja/exclude; una línea con prefijo
harness: nombra un almacén en su lugar — harness:opencode — y deja ni lo recorre ni pide
la herramienta que lo leería.
El modelo de seguridad documenta flujos de datos, límites de redacción, supuestos de confianza y verificación de lanzamientos.
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
Pregunta a tu historial
| Comando | Qué hace |
|---|---|
deja <query> | Busca en todo el historial. Multi-palabra es Y y frases entre comillas requieren texto contiguo; una consulta sin coincidencia exacta luego prueba formas de palabras y ortografías cercanas, que es donde una subcadena alcanza su palabra (code encuentra opencode). |
deja | Con un índice y una terminal: las sesiones de hoy, recuerdos servidos, una pregunta que hiciste en más de una sesión, y un muro que tus agentes siguen golpeando. |
deja wip | Lo que la última sesión en este directorio estaba haciendo: la tarea, lo que resolvió, los archivos en vuelo, el último comando y si falló — derivado de la transcripción, no de una nota que alguien recordó escribir. |
deja blame <path>[:line] | Qué sesiones discutieron un archivo, qué se decidió, y por qué. Con una línea: el commit que la cambió por última vez, y la sesión que escribió esa línea o el texto que el commit reemplazó. --attribution imprime la respuesta de línea sola, como JSON con --json, y --git-note la registra en refs/notes/deja. |
deja files <topic> | La otra dirección: qué archivos tocó realmente el trabajo sobre un tema. |
deja how <tool> | Cómo esta máquina realmente ejecuta algo, con las banderas reales, de lo que los agentes ejecutaron antes. |
deja fix <error> | Lo que esta máquina ejecutó después de ese mismo error antes, cuando el error no volvió. |
deja friction | Errores que golpearon tres o más sesiones separadas, con los harnesses nombrados. |
Usar lo que encuentra, y moverlo entre máquinas
Usa lo que encuentra
| Comando | Qué hace |
|---|---|
deja ctx <query> | Resumen Markdown de la mejor coincidencia, listo para pasar a un prompt. |
deja resume <id> | Reabrir una sesión encontrada en su entorno nativo. |
deja restore <path> | Devolver un fragmento que un agente reemplazó, desde el old_string que su edición registró. Nunca sobrescribe el original. |
deja promote <id> | Destilar una sesión en una nota curada con procedencia, etiquetas y un estado de ciclo de vida. Las notas superan a los transcripciones crudas. |
deja share <id> | Un resumen de sesión sanitizado para un colega, con los secretos ya eliminados. |
Muévelo y verifícalo
| Comando | Qué hace |
|---|---|
deja sync export/import/ssh | Mover memoria entre máquinas. Con marca de agua, solo añadido, idempotente. |
deja view | Toda tu memoria como un único archivo HTML local. Sin servidor, nada sale de la máquina. |
deja stats | Tu trabajo de agente, empaquetado. --card lo dibuja en la terminal, --card <file>.svg escribe uno para un perfil, --html una línea de tiempo navegable. |
deja doctor [--deep] | Autodiagnóstico, y con --deep, prueba del índice contra las fuentes. |
deja mcp | El servidor MCP stdio, que es lo que deja install conecta. |
Referencia completa: comandos y salida JSON.
Herramientas MCP
El servidor expone una herramienta, deja, con un mode. deja install la conecta, así que
esto solo se necesita para configurar un agente manualmente. Los seis nombres de herramientas más antiguos
(recall, recall_context, blame, fix, how, remember) todavía responden para
cualquier cosa ya conectada a ellos.
Argumentos y formas de retorno
| Herramienta | Argumentos | Retornos |
|---|---|---|
deja | mode, más query, path, error, what, text, tags?, harness?, project?, since?, limit?, offset?, all? | Depende del modo, abajo. |
| Modo | Argumentos que lee | Retornos |
|---|---|---|
recall | query, harness?, limit?, offset? | Fragmentos de coincidencia densos, limitados a 4KB. |
context | query, harness? | Resumen Markdown de la sesión con mejor coincidencia. |
blame | path, harness?, project?, since?, limit?, all? | Sesiones que discutieron un archivo. |
fix | error, project?, limit? | Lo que esta máquina ejecutó, o cambió, después de ese mismo error antes. |
how | what, project?, limit? | La invocación real, de lo que los agentes ejecutaron aquí. |
remember | text, project?, tags? | Almacena una decisión duradera para recuperarla después. |
Entornos compatibles
Con el auto-recuperación instalado, Claude Code y Codex entregan a deja la transcripción cuando
comienza una compactación, y conserva lo que el resumen está a punto de descartar: la tarea, las
conclusiones, los archivos, los comandos con lo que hizo cada uno, y lo que quedó
abierto. El siguiente hook para la misma sesión y espacio de trabajo lo devuelve una vez, dentro
de un presupuesto de 4 KB, con una línea que indica si el repositorio se movió desde entonces. deja stats
cuenta las llamadas a herramientas antes de la primera edición después de una compactación, que es el
número contra el que se mide esto. Consulta recuperación automática de
compactación para ver qué se lee, qué se almacena y dónde están
los límites.
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.
Qué soporta cada uno
| Entorno | Recuperación MCP | Auto-recuperación | Habilidad | Comando | Reanudar | Transferencia | Necesita |
|---|---|---|---|---|---|---|---|
| aider | ⚠ | ✅ | ✕ | ⚠ | ✕ | ✅ | deja aider |
| Amp | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Antigravity | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Claude Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Cline | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Codex CLI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Copilot CLI | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | — |
| VS Code Copilot Chat | ✅ | ✕ | ✅ | ✅ | ✕ | pegar | — |
| Cursor | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 (chats IDE) |
| DeepSeek Harness | ✅ | ✅ | ✅ | ✅ | ✕ | pegar | zstd |
| Gemini CLI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Goose | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | deja goose |
| Grok Build | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 (tienda grok-dev) |
| Hermes | ✅ | ✅ | ✅ | ✅ | ✅ | pegar | sqlite3 |
| Kimi Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| omp (Oh My Pi) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| OpenClaw | ✅ | ✅ | ✅ | ✅ | ✅ | pegar | — |
| opencode | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 |
| Continue | ✅ | ⚠ | ✅ | ✅ | ✅ | pegar | — |
| Crush | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | sqlite3 |
| pi | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| prime-agent (PrimeIntellect) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Qwen Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Cherry Studio | ✅ | ✕ | ✅ | ✕ | ✕ | pegar | importa el servidor una vez en Configuración -> MCP; habilita la habilidad para el agente |
| Senpi | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ninguno |
| gajae-code | ✅ | — | ✅ | ✅ | ✅ | pegar | ninguno |
| Kimchi Coding | ✅ | ⚠ | ⚠ | ⚠ | ✅ | pegar | ninguno |
| Command Code | ✅ | ✅ | ✅ | ✅ | ? | pegar | ninguno |
| ZCode | ✅ | ✅ | ? | ? | ? | pegar | sqlite3 para la base de datos CLI |
| Kiro | ✅ | — | ✕ | ? | ✅ | pegar | ninguno |
| Kilo Code | ✅ | ⚠ | ✅ | ✅ | ✅ | pegar | sqlite3 para el almacén CLI |
| Roo Code | ✅ | ⚠ | ✅ | ✅ | ✅ | pegar | roo CLI (las tareas del editor se reabren en el editor) |
| Zed | ✅ | ✕ | ✅ | ✅ | ✕ | pegar | sqlite3 + zstd |
| CodeWhale | — | — | ? | ? | ✅ | pegar | ninguno |
✅ funciona · — posible, aún no construido · ✕ el entorno no tiene tal mecanismo · ⚠ bloqueado por un error ascendente · ? no investigado
Las ubicaciones de almacenamiento personalizadas pasan por variables DEJA_*_ROOT, y la variable de reubicación
de cada agente también se respeta. El
registro de formato de sesión documenta
las rutas observadas, los esquemas de registro y el mapeo de roles por entorno, con fixtures sintéticos
que mantienen esas descripciones verificadas contra los analizadores.
Entornos con un paquete propio
deja install --auto conecta los seis como cualquier otro entorno, y
esa sigue siendo la ruta más corta. También tienen un paquete en su propio ecosistema,
para personas que instalan extensiones allí en lugar de desde un CLI:
| Entorno | Paquete | Instalación |
|---|---|---|
| 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 → Extensiones → 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 luego codex plugin add deja-vu@deja-vu |
| Grok Build | plugin deja | grok plugin marketplace add xai-org/plugin-marketplace luego grok plugin install deja |
Cualquiera de las dos rutas es suficiente por sí sola, y tener ambas no es un problema: los
paquetes de opencode, dsh, Kimi, Grok y Codex leen lo que deja install escribió y
contribuyen solo lo que falta, y en Zed ambas mitades usan un solo id de servidor, así que
no hay nada que tener dos veces en cualquier orden que instales.
Cada uno usa el deja que ya tienes; la copia que incluye es solo el respaldo.
La misma búsqueda también es una habilidad, para cualquier agente que cargue un 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
La habilidad impulsa el binario deja del paso de instalación anterior; no incluye uno.
Recuperación semántica (opcional)
Apunta deja embed a un endpoint local de Ollama, LM Studio o compatible con OpenAI con
DEJA_EMBED_URL y las consultas reformuladas aún aciertan. Sin un runtime alcanzable, la búsqueda
léxica y la recuperación MCP continúan sin cambios. OpenAI Platform funciona con su clave estándar:
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
Sin DEJA_EMBED_URL configurado, deja sondea localhost:11434 y localhost:1234,
así que una máquina que ya ejecuta Ollama o LM Studio se detecta sin que se le pregunte.
DEJA_EMBED_OFF=1, o DEJA_EMBED_URL=off, desactiva esa sonda — cualquier otro
DEJA_EMBED_URL configurado aún gana.
Para otro endpoint autenticado compatible con OpenAI, configura DEJA_EMBED_KEY explícitamente:
export DEJA_EMBED_URL='https://example.com/v1/embeddings'
export DEJA_EMBED_MODEL='embedding-model'
export DEJA_EMBED_KEY='...'
deja embed
DEJA_EMBED_KEY tiene prioridad. OPENAI_API_KEY se usa automáticamente solo para una
URL api.openai.com HTTPS; nunca se envía implícitamente a endpoints locales o de terceros.
Dónde viven los vectores y cuánto cuestan
El sidecar se encuentra junto al índice como .vectors.bin, no dentro de index.db. Los vectores Float32
cuestan aproximadamente 4 MB por 1k mensajes para un modelo de 1,024 dimensiones. Un endpoint remoto recibe
el texto indexado redactado, truncado a unos 2k caracteres, pero nunca archivos fuente crudos.
Con Ollama o LM Studio, la incrustación permanece local y no necesita clave.
Prueba
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 hace la pregunta que los otros tres no pueden: con la sesión correcta en
mano, ¿el bloque lleva lo que esa sesión resolvió? Ocho sesiones discuten cada
tema y una de ellas lo resuelve, en medio de su propia transcripción en lugar
de al final — así que el brazo base, los turnos más nuevos del mejor resultado, puntúa
cero y un brazo por encima de cero tuvo que elegir.
| Brazo | Lleva la respuesta | Tokens medianos |
|---|---|---|
deja-block (bloque de inicio de sesión) | 1.00 | 665 |
deja-digest (resumen de contexto) | 1.00 | 1656 |
newest-turn (base) | 0.00 | 289 |
cold | 0.00 | 0 |
El experimento de contexto compara deja-recall contra historial completo, grep ingenuo y contexto frío. Con la semilla predeterminada:
| Brazo | Tokens medianos | Cobertura mediana | Tokens de control negativo |
|---|---|---|---|
| deja-recall | 1,096 | 1.00 | 0 |
| historial completo | 80,547 | 1.00 | 78,145 |
| grep ingenuo | 273,238 | 1.00 | 0 |
| frío | 0 | 0.00 | 0 |
Misma cobertura de hechos que hacer grep de los registros crudos por aproximadamente 250x menos tokens, y aproximadamente 70x menos que reproducir las sesiones coincidentes en su totalidad, mientras no inyecta nada en las cadenas donde ningún hecho previo es relevante. El generador de corpus y las etiquetas de relevancia son Go ordinario revisado. Audita qué significa "relevante" antes de confiar en cualquier cifra, incluidas las nuestras.
Medido en un almacén real de 2,419 sesiones y 179k mensajes, 1.9 GB de transcripciones:
| Medición | Resultado |
|---|---|
| Búsqueda, en proceso | ~0.7 ms mediana (deja bench recall, 100 consultas, la mitad en ruso), ~19 ms en los pajares de LongMemEval-S |
deja <query>, de extremo a extremo | ~0.2 s mediana en ese almacén: inicio del proceso, la verificación de frescura sobre cada almacén, clasificación, impresión |
| Verificación de frescura sola | ~50 ms cuando nada cambió |
| Tamaño del índice | 200 MB, ~10% del corpus |
El índice es incremental. Cuando un archivo de sesión crece, solo ese archivo se vuelve a leer.
Cómo funciona
Índice invertido local en ~/.cache/deja: analiza los almacenes JSONL y SQLite, redacta
credenciales, escribe records.bin más cubos de tokens, y rastrea el estado por archivo en
manifest.gob para que las ejecuciones repetidas solo ingieran lo que cambió. El servidor MCP, estadísticas, compartir y
sincronizar leen ese único índice. Detalles en docs/ARCHITECTURE.md.
Preguntas frecuentes
¿Sale algo de mi máquina? No, a menos que lo pidas. Consulta los
flujos de datos.
¿Qué pasa con los secretos que ya están en mis registros? Permanecen en los archivos originales del harness, que son los datos de tu agente. Las formas conocidas — claves de AWS, asignaciones de api_key=/token=, tokens de portador y JWTs simples, bloques PEM, tokens de proveedores, valores de alta entropía — se eliminan al construir el índice, por lo que no llegan a resúmenes, comparticiones o exportaciones de sincronización. La coincidencia de patrones no es detección de secretos: una forma que no conoce puede pasar. Consulta el modelo de seguridad.
¿Hará más lento a mi agente? Una recuperación es una búsqueda léxica contra un índice local: mediana de ~0.7 ms, y nada espera a un modelo. Un hook añade el inicio del proceso y una verificación de frescura sobre tus almacenes además de eso — decenas de milisegundos en un almacén de unos pocos gigabytes.
¿Tengo que cambiar mi forma de trabajar? No. El agente llama a la recuperación por sí mismo, y con la recuperación automática ya conoce las decisiones previas del proyecto cuando se abre la sesión.
¿En qué se diferencia de las otras herramientas de memoria?
| deja | Plataformas de memoria (Mem0, Letta, memU) | Búsqueda de sesión (cass) | |
|---|---|---|---|
| Conoce el trabajo anterior a su instalación | sí | no | sí |
| Paso de captura | ninguno, las transcripciones son la memoria | el agente o tu código escribe hechos | ninguno |
| Necesita un LLM o clave de embeddings | no | sí | opcional |
| Recuerda sin que se lo pidan | al inicio de la sesión y antes de ejecutar una herramienta | no | no |
engram es la más sólida de las herramientas de registro hacia adelante y vale la pena si ese modelo se ajusta a ti; aún así comienza vacía y solo conoce lo que un agente eligió guardar. La comparación completa cubre once de ellas.
¿Dónde se almacena el historial de sesiones de Claude Code y puedo buscarlo? En ~/.claude/projects, un archivo JSONL por sesión; Codex mantiene ~/.codex/sessions, Cursor una SQLite state.vscdb. deja search los lee todos en su lugar, deja last lista las sesiones recientes de cada agente, y deja view abre todo el historial como una página local. Rutas para cada agente: dónde se almacenan las sesiones.
Mi historial de sesiones de Claude Code desapareció. ¿Se ha ido? Claude Code elimina transcripciones de más de 30 días (cleanupPeriodDays en ~/.claude/settings.json), y claude --resume lista solo lo que queda. Una sesión indexada por deja antes de la limpieza sigue siendo buscable después de que el archivo desaparezca. Detalles: archivos de sesión en disco.
¿Qué pasa con Windows? Existen builds y CI ejecuta la suite allí. macOS y Linux son las rutas probadas en batalla. Informes de campo bienvenidos en #9.
¿Cómo borro todo?
deja uninstall --all
rm -rf ~/.cache/deja
Guías
Escritas para la situación más que para la característica:
- ¿Tu agente recuerda conversaciones anteriores? — qué conserva cada agente entre sesiones y qué descarta
- Archivos de sesión en disco — cuánto crece
~/.claude/projectsy qué cuesta eliminarlo - El agente perdió el contexto que tenías — después de un bloqueo, una limpieza o una sesión que volvió vacía
- La ventana de contexto está llena — qué conserva la compactación, medido, y qué hacer en su lugar
- Reanudar la sesión de ayer — encuéntrala en cada agente, reábrela en el que la posee
- El agente repite un error que ya corregiste
- Encontrar la sesión donde lo resolviste
- Por qué los agentes olvidan entre sesiones · Dónde guarda cada agente su historial
- Qué descarta la compactación · Cambiar de agente · Auditar un agente · Exportar una conversación · Entre máquinas · Cuánto cuesta la memoria
Por harness: opencode · DeepSeek Harness · Kimi Code · Zed · Grok Build · Gemini CLI · Qwen Code · OpenClaw · Goose · Cline · pi y omp · Hermes
Pruébalo con tu propio historial
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh
deja install --auto
Diez segundos para instalar, unos diez para indexar. En la próxima sesión que abra tu agente, ya sabrá lo que resolviste en ese proyecto — incluyendo todo lo anterior a la instalación de esto.
Contribuciones
make build test lint, luego CONTRIBUTING.md. Añadir un harness comienza en el registro de parsers. Prioridades y no-objetivos están en ROADMAP.md. Las buenas primeras issues están etiquetadas.
Soporte
Errores y preguntas van a issues. Cualquier cosa que creas explotable va a través del enlace de aviso privado en SECURITY.md en su lugar. Lo que deja lee, lo que nunca envía a ningún lugar, y cómo excluir un proyecto u olvidar una sesión está en Privacidad.
Licencia
MIT © Vladislav Shulcz