chat-recall

Una memoria buscable en todas las sesiones de Claude Code, Gemini, Codex, OpenCode, Antigravity y Cursor.

Documentación

chat-recall

npm npm downloads MCP registry Smithery Glama

Install in Cursor Install in VS Code

chatrecall.dev · Cómo funciona · Herramientas MCP · Precios · Autoalojamiento · Seguridad

Una sola memoria para cada herramienta de codificación con IA que uses. Claude Code, Gemini CLI, Codex, OpenCode, Antigravity y Cursor comparten un único historial buscable — y el agente puede buscarlo por sí mismo.

Tus agentes de codificación guardan cada uno sus propias transcripciones, en su propio formato, en su propio directorio, y ninguno puede leer las de otro. chat-recall indexa todas en un solo lugar, enmascara los secretos de camino, y expone el resultado a tu agente mediante 61 herramientas MCP para que pueda recordar su propio trabajo pasado en lugar de que tú se lo vuelvas a explicar.

Esa parte entre herramientas es el punto clave. El historial integrado de una sola herramienta se detiene en su propio límite; esto no.

Véalo funcionar

Cada pantalla a continuación es una llamada MCP real contra un servidor real — la herramienta y los argumentos exactos se muestran encima de cada respuesta. Nada está simulado, reproducido o re-temporizado.

Una memoria, cada herramienta. Aquí se le pregunta a OpenCode sobre una sesión de Claude Code: una herramienta diferente, un formato de transcripción diferente, un solo índice.

recall_smart_resume called from OpenCode with a Claude Code session id, returning that session's request, plan and completed work

O simplemente pregunte en inglés sencillo — sin nombres de herramientas, sin IDs de sesión. El agente elige la llamada por sí mismo:

Claude Code answering a question about a past session by calling chat-recall itself

También encuentra las credenciales que pegaste y comprueba cuáles siguen funcionando. Una clave muerta es higiene. Una viva es un incidente, y solo las vivas generan una alerta.

The security view: leaked secrets grouped by rule, each with a masked preview, a live-or-dead verdict and the sessions it appeared in

Instalación

npx chat-recall init

Eso indexa las transcripciones que ya están en tu disco, detecta qué herramientas de IA tienes y registra el servidor MCP en la configuración de cada una de ellas:

HerramientaArchivo que escribe
Claude Code~/.mcp.json
Codex~/.codex/config.toml
Gemini CLI~/.gemini/settings.json
OpenCode~/.config/opencode/opencode.json
Cursor~/.cursor/mcp.json

Solo toca una configuración cuya herramienta esté en esta máquina, nunca sobrescribe una entrada que hayas curado a mano, y chat-recall doctor imprime una línea por herramienta para que un registro faltante sea visible. Dentro de Claude Code puedes instalar las habilidades y el servidor MCP juntos en su lugar:

/plugin marketplace add munhq/chat-recall
/plugin install chat-recall@chat-recall

Luego:

chat-recall search "that auth bug"      # search everything you have ever done
chat-recall recent                      # what was I working on

Por defecto esto sincroniza con el servidor alojado en chatrecall.dev, que comienza con una prueba de 7 días que no requiere tarjeta y es una suscripción de pago después — ver precios. Para mantener todo en tu propia máquina en su lugar, ejecuta el servidor tú mismo: eso es gratis para una persona, para siempre, con todas las funciones y sin clave de licencia — incluidos el tablero de tareas y el Toolkit — y una licencia solo compra colaboración: un segundo miembro, historial compartido, asignación de trabajo. Ver Autoalojamiento abajo. En cualquier caso, el CLI es el mismo binario y los mismos comandos; solo difiere la URL del servidor.

No se requieren claves de API. La búsqueda es búsqueda de texto completo de Postgres. Los resúmenes de IA son una mejora opcional, no un requisito previo.

Lo que nunca sale de tu máquina

Indexa cada sesión de IA en este disco, así que init te muestra lo que se subiría — cantidad, herramientas y los proyectos por nombre — y espera un sí antes de la primera sincronización. (--yes, o sin TTY, imprime el mismo resumen y continúa; --skip-sync retiene la subida por completo.) Los secretos se enmascaran en el lado del cliente y las rutas de proyecto se envían como hashes; además, tú eliges qué está en alcance:

chat-recall exclude project ~/work/client   # a path, and everything under it, never syncs
chat-recall exclude tool cursor             # one AI tool never syncs
chat-recall sync-only add git:github.com/me/app   # invert it: ship ONLY what you list
chat-recall sources decline ~/.claude-work  # a whole transcript profile stays out
                                            #   (--delete-remote purges what it already sent)
chat-recall exclude list                    # every rule in force
chat-recall delete <session-id>             # purge one session on every server, tombstoned
chat-recall retention                       # how long the server keeps what you sent
chat-recall retention set 90                # delete anything older, on a timer (0 = keep everything)

Algunas herramientas archivan transcripciones bajo un hash en lugar de una carpeta de proyecto, por lo que esas sesiones no tienen una ruta para que una regla de ruta coincida; exclude tool es el control que las cubre, y init imprime esa cantidad. Una ventana de retención elimina del servidor en un temporizador. retention set imprime cuántas sesiones eliminaría y te hace confirmar el número. Solo es deshacible donde la transcripción original aún está en una máquina que tienes — amplía la ventana y chat-recall sync --full reenvía lo que admite. Para un portátil que ya no posees, historial que tu herramienta de IA rotó o archivos que eliminaste, nuestra copia es la única copia. Exporta primero si quieres una.

Las exclusiones viven en la máquina que tiene los datos, así que el CLI las posee; se aplican desde la siguiente sincronización, y las filas ya sincronizadas permanecen hasta que se eliminen. El panel de reglas de Sync del tablero añade reglas en todos los dispositivos — unidas con las locales, por lo que solo puede añadir protección. Modelo completo, límites incluidos: Seguridad.

Cuatro cosas que realmente hace

  1. Memoria unificada entre herramientas. Un índice, una búsqueda, una interfaz sobre Claude Code (~/.claude/projects/), Gemini CLI (~/.gemini/tmp/), Codex (~/.codex/), OpenCode (~/.local/share/opencode/), Antigravity y Cursor (~/.cursor/ para el CLI, ~/.config/Cursor/ para el IDE). Sesiones, planes, tareas, archivos CLAUDE.md, caché de pegado, historial de shell y diarios de agente comparten una interfaz MemorySource conectable.
  2. El agente se recuerda a sí mismo. 61 herramientas MCP, para que Claude Code pueda recall_smart_resume, recall_search (con like_session para encontrar trabajo similar), recall_edits_timeline, recall_subagent_search y recall_redundant_files en lugar de preguntarte qué pasó la última vez. También escribe de vuelta, mediante recall_decision_record, recall_kg_add y recall_set.
  3. Advierte antes de que rehagas trabajo. Un hook de UserPromptSubmit busca sesiones pasadas similares en cada prompt e inyecta una nota corta "ya has hecho esto antes, en la sesión X" en el contexto del agente.
  4. Grafo de conocimiento temporal. Decisiones y menciones de herramientas se convierten en tripletas entidad-relación con ventanas de valid_from/valid_to, para que puedas preguntar qué se decidió en marzo y si sigue vigente.

Añade tu propia herramienta de IA

Un nuevo backend es un archivo y una línea — sin cambios en el motor. Si una herramienta que usas escribe transcripciones en disco, se puede indexar aquí, y una solicitud de extracción es la forma más rápida de lograrlo.

Opcional: tablero web

El tablero de React es parte del servidor (SaaS o docker compose autoalojado) — el CLI en sí no tiene interfaz. Para desarrollo del tablero:

npm run web:install                 # install web deps
npm run web:dev                     # API on :5000, UI on :5174

Autoalojar el servidor (docker compose)

Todo en tu propia máquina, sin cuenta, nada enviado a ningún lado:

git clone https://github.com/munhq/chat-recall && cd chat-recall
echo "ADMIN_KEY=$(openssl rand -hex 24)"         >> .env
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" >> .env
docker compose up -d --build          # FIRST RUN BUILDS FROM SOURCE (minutes)

Luego crea un token de dispositivo y conecta una máquina — la secuencia completa, con solución de problemas, está en docs/SELF_HOSTING.md.

Dos contenedores: el servidor más un Postgres pgvector/pgvector incluido, para que un docker compose up simple sea autónomo. Traer tu propio Postgres también es compatible (así es como funciona el servicio alojado): establece DATABASE_URL a un Postgres 16+ externo.

Mantén el índice vivo (+ sincronización opcional con el servidor)

No necesitas un demonio. Claude Code genera el servidor MCP, y ese proceso sincroniza cada 3 minutos por sí solo — el binario es el demonio. Para una caja sin cabeza sin asistente en ejecución, opta por un servicio en segundo plano:

chat-recall watch                    # foreground daemon: watches every tool, summaries, precompute
chat-recall watch --install-service  # systemd user unit (Linux) · launchd (macOS) · Scheduled Task (Windows)

init no lo instala, a propósito. Ambos caminos empujan a través del mismo syncIncremental() bajo el mismo bloqueo de índice multiplataforma, para que un escritor toque el libro mayor a la vez — ver docs/SYNC.md antes de cambiar cualquiera de eso. Los secretos se enmascaran en el lado del cliente antes de que algo salga de la máquina. chat-recall sync hace el mismo empuje una vez, bajo demanda.

Conéctalo a Claude Code

chat-recall init hace esto por ti. Equivalente manual en ~/.mcp.json:

{
  "mcpServers": {
    "chat-recall": {
      "command": "chat-recall-mcp"
    }
  }
}

Luego instala los hooks (un comando configura el guardado automático, la copia de seguridad previa a la compactación y la pista de reanudación que advierte cuando estás a punto de rehacer trabajo):

chat-recall install-hooks                 # registers all five events, in every Claude profile
chat-recall install-hooks --no-resume-hint  # skip the resume warning
chat-recall install-hooks --no-wakeup       # skip the session-start wake-up bundle
chat-recall install-hooks --no-escalate     # skip the session-end escalation
chat-recall install-hooks --uninstall     # remove all of ours, leave third-party hooks alone
HookCuándo se disparaQué hace
SessionStartNueva sesión (startup / clear)Inyecta el paquete de activación con alcance de proyecto
UserPromptSubmitCuando escribes un promptBusca sesiones pasadas; si existe una similar, inyecta "ya has trabajado en esto antes" en el contexto del agente
StopDespués de cada turno del asistenteGuarda automáticamente temas, decisiones y herramientas en ~/.chat-recall/memory/
PreCompactAntes de que Claude Code compacte el contextoGuardado de emergencia para que nada se pierda por la compactación
SessionEndCuando la sesión se cierraEscala los aprendizajes de la sesión en segundo plano, para que nada se retrase

Compañero: codeindex (auto-detectado)

Hay un servidor MCP separado llamado codeindex (binario Zig, ~56 MB) de munhq que le da al agente búsqueda a nivel de código. Los dos se complementan:

  • chat-recall = memoria de sesión. ¿En qué he trabajado? ¿Qué decidimos?
  • codeindex = memoria de código. ¿Dónde está este símbolo? ¿Quién lo llama? ¿Qué se rompe si lo cambio?

Juntos, el agente puede responder "¿he construido esto antes?" y "¿ya existe en este código base?" antes de rehacer trabajo.

Cómo lo maneja chat-recall: chat-recall init detecta si codeindex está en tu PATH (o en ~/.local/bin/codeindex). Si es así, lo registra como servidor MCP en ~/.mcp.json automáticamente — sin descarga, sin sorpresas. Si no, imprime una pista de una línea sobre cómo obtenerlo.

chat-recall init                       # default — detect and register if installed
chat-recall init --with-codeindex      # additionally force-download the binary
chat-recall init --skip-codeindex      # don't even check
chat-recall companions install         # download manually (after init)
chat-recall companions status          # show what was detected
chat-recall companions uninstall       # remove the binary + MCP registration

codeindex es de código abierto (MIT) en github.com/munhq/codeindex. La instalación es opcional — chat-recall funciona completamente sin él; simplemente no obtienes las herramientas a nivel de código.

Qué se indexa

FuenteOrigenNotas
Sesiones (Claude)~/.claude/projects/<hash>/<uuid>.jsonlTranscripciones completas, tokens, costo, archivos tocados, modelos usados
Sesiones (Gemini CLI)~/.gemini/tmp/*/chats/*.jsonTokens y uso de herramientas extraídos donde estén presentes
Sesiones (OpenCode)~/.local/share/opencode/opencode.db (SQLite)Costo, tokens, tareas pendientes
Transcripciones de subagentes<session-dir>/<id>/subagents/*.jsonlExplore, aside, y acompact-* (historial compactado huérfano)
Planes~/.claude/plans/*.mdDocumentos de planificación del agente, divididos por ##
Tareas~/.claude/tasks/<session>/*.jsonVinculadas a la sesión principal
CLAUDE.mdAuto-descubierto desde hashes de proyectoVinculado a sesiones en el mismo proyecto
Historial~/.claude/history.jsonlHistorial de shell, opcionalmente vinculado a una sesión
Pegado~/.claude/paste-cache/*.txtGrandes bloques pegados
Diario~/.chat-recall/index/diary/<agent>/*.jsonLo que el agente le dijo a su yo futuro mediante recall_diary_write

Herramientas MCP (61, incluidas 4 herramientas de inteligencia de código que se registran cuando el binario compañero está instalado)

Búsqueda y recuperaciónrecall_search, recall_memory_search, recall_recent, recall_show, recall_context, recall_summary, recall_smart_resume, recall_project_context, recall_weekly_digest, recall_analytics_summary, recall_wake_up.

Detección de patronesrecall_search con like_session: <id> (encontrar trabajo similar a una sesión dada), recall_redundant_files (advertir cuando un nuevo nombre de archivo se superpone con trabajo previo), recall_diff con files_only: true (qué archivos tocó realmente la sesión X), recall_edits_timeline con group_by: "session" (qué sesiones editaron auth.rs).

Subagentes y filtrosrecall_subagent_search (buscar dentro de transcripciones ocultas de Explore/aside/compact), recall_user_prompts (solo lo que el humano escribió, sin banners).

Hallazgos, clasificadosrecall_claude_suggestions (cada hallazgo que se convierte en un cambio de instrucción del agente: las reglas de CLAUDE.md e instalaciones de habilidades, fusionadas en el alcance de la cuenta y cada proyecto indexado) y recall_improvements (todo lo demás, clasificado por urgencia primero, con create_tasks: true para abrir una tarea de equipo por elemento). Particionan los mismos motores de recomendación, por lo que un elemento nunca aparece en ambos.

Grafo de conocimientorecall_kg_query, recall_kg_add, recall_kg_invalidate, recall_kg_timeline, recall_kg_stats. Además, recall_decision_record para escribir una decisión como una tripleta y una entrada de diario en una sola llamada.

Estado KVrecall_set, recall_get (sin clave = listar el alcance). Pequeños valores persistentes claveados por cadenas con espacio de nombres: "URL del PR actual", "rama en la que estoy trabajando", preferencias del usuario. Diario y estadorecall_diary_write, recall_diary_read, recall_status (incluye desglose de memoria), recall_index. Planes/tareas: búsqueda mediante recall_memory_search(source_types:['plan','task']), lectura mediante recall_show.

Eliminación de elementosrecall_forget borra una conversación del servidor de forma permanente, con marca de tumba para que ninguna sincronización posterior la restaure (tu propio archivo de transcripción no se toca); recall_exclude_path detiene la sincronización de una ruta, en esta máquina y en tu cuenta. Existen como herramientas porque "olvida esa conversación" y "deja de sincronizar este repositorio" son cosas que la gente dice en mitad de una conversación, no cosas para las que abren un panel. Ambas requieren confirm: true, ambas están marcadas como destructivas y ninguna tiene aprobación automática: tu cliente pregunta cada vez. El límite es unidireccional a propósito: un agente puede reducir lo que se almacena y no hay ninguna herramienta que lo amplíe de nuevo (sin des-exclusión, sin lista blanca, sin retención). Ampliar es cosa tuya: chat-recall exclude remove, o el panel.

Cuando el compañero codeindex está instalado, el agente también obtiene 16 herramientas a nivel de código (find_symbol, find_callers, get_imports, plan_change, get_change_impact, analyze, etc.) de un servidor MCP separado. Se combinan: chat-recall encuentra lo que has hecho; codeindex te dice lo que existe actualmente.

Arquitectura de búsqueda

La búsqueda se ejecuta en el servidor, y es búsqueda de texto completo de Postgres: coincidencia de palabras clave con clasificación, más pg_trgm tolerancia a errores tipográficos. No necesita incrustador, ni clave de API, ni servicio adicional.

La CLI envía fragmentos redactados al servidor, que los indexa.

Seguimiento de costos

El costo en USD se calcula a partir del uso de tokens cuando al menos un modelo en la sesión tiene una tarifa que el servidor conoce. Para cualquier otro modelo (local, autoalojado, más nuevo que la tabla de tarifas), el panel muestra en lugar de inventar un número. El resumen muestra un contador de sessionsWithoutPricing, para que puedas ver cuánto del total cubre realmente la cifra.

Contexto de activación

chat-recall memory wake-up

Crea un paquete pequeño para una sesión de IA: nota de identidad opcional, los 10 fragmentos principales que el clasificador marcó como decisiones/preferencias/hitos con importancia ≥ 4, y una instantánea de los hechos del grafo de conocimiento actualmente válidos. Sin compresión mágica: solo los elementos de mayor señal que el indexador ya etiqueta.

Ubicaciones de datos

La CLI guarda casi nada localmente, solo lo que necesita para llegar al servidor:

RutaQué
~/.chat-recall/credentials.jsonDestino(s) del servidor + token del dispositivo (modo 0600)
~/.chat-recall/sync-ledger.jsonMarca de agua de sincronización por servidor (lo que ya se ha enviado)
~/.chat-recall/hooks/Hooks instalados (después de install-hooks)
~/.chat-recall/index/diary/Diarios de agente escritos por recall_diary_write
~/.chat-recall/shadow/Copia comprimida con gzip de la transcripción más completa vista por sesión, para que una truncación de --resume aguas arriba no pueda destruir el historial
~/.chat-recall/cache.dbCaché local de resultados/metadatos para el panel local. No es un índice y no se usa en modo servidor

Todo el contenido indexado (fragmentos, FTS, vectores, grafo de conocimiento, hallazgos de secretos, diario) vive en el servidor (Postgres para autoalojado y SaaS). Restablécelo borrando los datos de Postgres del servidor, no nada bajo ~/.chat-recall.

Privacidad

Tus sesiones se sincronizan con un servidor chat-recall, ya sea uno que autoalojas (tu propia máquina, tu propio Postgres) o el SaaS. Antes de que algo salga de la CLI, se redacta: los secretos se enmascaran en el lado del cliente, por lo que el servidor nunca recibe credenciales sin procesar. El autoalojamiento mantiene todos los datos en infraestructura que controlas; el SaaS es la alternativa alojada.

Sin telemetría. Tus datos viven en el Postgres de tu servidor: haz copias de seguridad como quieras. En el SaaS viven en el Postgres alojado; autoaloja si prefieres mantenerlo todo en tu propia infraestructura.

Arquitectura

packages/
├── engine/src/
│   ├── core/
│   │   ├── backends/        ToolBackend per AI tool (claude, gemini, opencode, codex, agy)
│   │   ├── tool-backend.ts  Registry interface — single source of truth for tool identity
│   │   ├── tool-paths.ts    Env-overridable default paths for each tool
│   │   ├── generic-engine.ts  Shared turn extraction / edit scan / replay (canonical events)
│   │   └── …                Indexing, storage, embeddings, summaries, KG, classifier
│   └── parsers/             *-source.ts plugins per content type (sessions, plans, tasks, …)
├── cli/
│   ├── src/cli.ts           CLI
│   ├── src/mcp.ts           MCP server
│   ├── auto-indexer/        chokidar-based watcher daemon (systemd-friendly)
│   └── hooks/               Claude Code hooks (install via `chat-recall install-hooks`)
└── server/
    ├── src/                 Express API
    ├── client/              React + Vite UI — the dashboard
    └── cloud/migrations/    Empty by design — pg-schema.ts owns the schema

docker/                  Dockerfile + entrypoint for the server image
e2e/                     Playwright tests for the dashboard

Dos puntos de extensión, ambos impulsados por registro:

  • Agregar un nuevo tipo de contenido (por ejemplo, otro formato de archivo para indexar): implementa MemorySource (discoverparseextractLinks) y regístralo en el SourceRegistry.
  • Agregar una nueva herramienta de IA (un séptimo backend junto a Claude/Gemini/OpenCode/Codex/Antigravity/Cursor): implementa ToolBackend (rutas, manejo de ID, readEvents, fileToolMap, extractEditDelta) y regístralo en packages/engine/src/core/backends/index.ts. Todas las rutas se pueden sobrescribir mediante variables de entorno a través de CHAT_RECALL_{CLAUDE,GEMINI,CODEX,AGY,CURSOR,CURSOR_IDE}_HOME / CHAT_RECALL_OPENCODE_DB.

Requisitos

  • Node.js 22 o posterior. La imagen de Docker y CI ejecutan la 24.
  • Sesiones escritas por una herramienta compatible, en su ubicación estándar: ~/.claude/, ~/.codex/, ~/.local/share/opencode/, ~/.gemini/.

Esa es toda la lista. No se necesita clave de API para instalar, indexar o buscar.

Una función es opcional y necesita un backend que tú elijas:

FunciónBackends a los que puedes apuntar
Resúmenes de IAOllama, una CLI en la que ya hayas iniciado sesión (SUMMARY_CLI_CMD), un endpoint compatible con OpenAI, o ANTHROPIC_API_KEY

Sin ella, las sesiones no llevan resumen generado. Todo lo demás funciona igual.

Licencia

Licencia Elastic 2.0 para todo el repositorio.

En términos simples: úsalo, modifícalo, ejecútalo para ti o dentro de tu empresa, gratis y sin pedir permiso. Lo único que no puedes hacer es ofrecerlo a terceros como servicio alojado o gestionado: ese es el producto. Tampoco puedes eliminar las comprobaciones de clave de licencia ni los avisos de copyright.

Es código fuente disponible, no código abierto OSI, y este README no fingirá lo contrario. Reemplazó una división donde la CLI y el motor eran MIT y el servidor era BSL 1.1, que respondía "¿puedo usar esto?" de tres maneras diferentes dentro de un mismo repositorio.