chat-recall
Una memoria buscable en todas las sesiones de Claude Code, Gemini, Codex, OpenCode, Antigravity y Cursor.
Documentación
chatrecall.dev · Cómo funciona · Herramientas MCP · Precios · Auto-alojamiento · Seguridad
Convierte lo que tus herramientas de codificación con IA ya escriben en conocimiento compartido para el equipo, alertas de secretos filtrados, hallazgos de código clasificados y tareas rastreadas.
Tus agentes lo escribieron todo. Nadie lo leyó.
Cada agente de codificación que ejecutas guarda una transcripción completa de su trabajo: las decisiones, el razonamiento, las claves que alguien pegó, los problemas que encontró y nunca registró. Cada uno escribe en su propio directorio con su propio formato, ninguno puede leer el de otro, y nada lee ninguno de ellos. chat-recall sí lo hace, a través de 63 herramientas MCP.
| Qué hace | Herramientas | |
|---|---|---|
| Conocimiento compartido de IA | Decisiones, convenciones y datos del proyecto que un agente aprendió, disponibles para cualquier otro agente y compañero de equipo. Consciente del tiempo, de modo que una decisión reemplazada se lee como reemplazada | 16 |
| Hallazgos de seguridad | Credenciales pegadas en conversaciones pasadas, marcadas por sesión, verificadas para saber si siguen funcionando, y rastreadas hasta que se rotan o se descartan | 4 |
| Mejoras de código automatizadas | Clasifica lo que realmente vale la pena corregir en un repositorio, luego aplica o descarta cada recomendación, con inteligencia de código sobre el propio repositorio | 9 |
| Seguimiento de tareas | Un tablero compartido alimentado por esos hallazgos, con reglas por repositorio, de modo que un hallazgo se convierte en trabajo en lugar de un informe | 5 |
Debajo de los cuatro hay un único índice de cada sesión que tus herramientas ya escribieron, y 28 herramientas más para buscar, reproducir y comparar. Ese índice es el mecanismo. No es el argumento de venta, ni es la razón por la que alguien compra esto.
La parte entre herramientas es lo que lo hace funcionar. El historial integrado de una sola herramienta se detiene en su propio límite. Esto no, y tu equipo tampoco.
Véalo funcionar
Cada pantalla a continuación es salida real contra un servidor real, capturada desde la cuenta de demostración. Nada está simulado, reproducido o re-temporizado.
Un índice, cada herramienta. La búsqueda encuentra una sesión por lo que se discutió en ella, no por su nombre de archivo, y memory status muestra cada tipo de fuente en un solo lugar: sesiones junto a las habilidades, MCPs, comandos, subagentes y hooks que las produjeron.

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

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

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 cada una de sus configuraciones:
| Herramienta | Archivo que escribe |
|---|---|
| Claude Code | ~/.mcp.json |
| Codex | ~/.codex/config.toml |
| 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 manualmente, y chat-recall doctor imprime una línea por herramienta para que una falta de registro 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
Cualquier otro cliente MCP (Claude Desktop, Windsurf, Zed, Cline, o una herramienta que init no conozca) toma el mismo servidor como una entrada JSON. El binario es chat-recall-mcp, por lo que el nombre del paquete solo no es suficiente — npx -y chat-recall inicia la CLI, no el servidor:
{
"mcpServers": {
"chat-recall": {
"command": "npx",
"args": ["-y", "-p", "chat-recall", "chat-recall-mcp"]
}
}
}
El mismo comando en una línea, para un cliente estilo claude mcp add: npx -y -p chat-recall chat-recall-mcp.
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 — el tablero de tareas y el Toolkit incluidos — y una licencia solo compra colaboración: un segundo miembro, historial compartido, asignación de trabajo. Ver Auto-alojamiento abajo. De cualquier manera, la CLI es el mismo binario y los mismos comandos; solo cambia la URL del servidor.
No se requieren claves 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, por lo 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 procede; --skip-sync retiene la subida por completo.) Los secretos se enmascaran del lado del cliente y las rutas de proyectos 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 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 tengas — amplía la ventana y chat-recall sync --full reenvía lo que admite. Para una laptop 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, por lo que la CLI las posee; se aplican desde la próxima sincronización, y las filas ya sincronizadas permanecen hasta que se eliminan. El panel de Reglas de sincronización del tablero agrega reglas en todos los dispositivos — unidas con las locales, por lo que solo puede agregar protección. Modelo completo, límites incluidos: Seguridad.
Cuatro cosas que realmente hace
- Memoria unificada entre herramientas. Un índice, una búsqueda, una interfaz sobre Claude Code (
~/.claude/projects/), Codex (~/.codex/), OpenCode (~/.local/share/opencode/), Antigravity (~/.gemini/antigravity-cli/), Cursor (~/.cursor/para la CLI,~/.config/Cursor/para el IDE) y Hermes Agent (~/.hermes/). Sesiones, planes, tareas, archivos CLAUDE.md, caché de pegado, historial de shell y diarios de agentes comparten una interfazMemorySourceconectable. - El agente se recuerda a sí mismo. 63 herramientas MCP, para que Claude Code pueda
recall_smart_resume,recall_search(conlike_sessionpara encontrar trabajo similar),recall_edits_timeline,recall_subagent_searchyrecall_redundant_filesen lugar de preguntarte qué pasó la última vez. También escribe de vuelta, a través derecall_decision_record,recall_kg_addyrecall_set. - Advierte antes de que rehagas trabajo. Un hook
UserPromptSubmitbusca 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. - Grafo de conocimiento temporal. Las decisiones y menciones de herramientas se convierten en tripletas entidad-relación con ventanas
valid_from/valid_to, para que puedas preguntar qué se decidió en marzo y si sigue vigente.
Agrega 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, puede indexarse 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 auto-alojado) — la 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
Auto-aloja 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, por lo que un docker compose up simple es autónomo. Trae-tu-propio-Postgres también es compatible (así es como funciona el servicio alojado): establece DATABASE_URL a un Postgres externo 16+.
Mantén el índice en vivo (+ sincronización opcional del servidor)
No necesitas un daemon. Claude Code genera el servidor MCP, y ese proceso sincroniza cada 3 minutos por sí solo — el binario es el daemon. 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, por lo que un escritor toca el libro mayor a la vez — ver docs/SYNC.md antes de cambiar cualquiera de eso. Los secretos se enmascaran del lado del cliente antes de que cualquier cosa 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"
}
}
}
chat-recall-mcp es un relevo, no el servidor. Encuentra el daemon en segundo plano para tu perfil de herramienta, inicia uno si no hay ninguno y pasa bytes a él. Cada sesión en una máquina por lo tanto comparte un motor cargado en lugar de llevar el suyo propio: una sesión cuesta alrededor de 50 MB en lugar de 87 MB, contra un daemon compartido único, y la sincronización en segundo plano se ejecuta en un proceso en lugar de competir por un bloqueo en todos ellos. El daemon sale 15 minutos después de que la última sesión se cierra.
Dos perillas, ambas opcionales:
CHAT_RECALL_NO_DAEMON=1 # load the whole server in each session instead
CHAT_RECALL_DAEMON_IDLE_SECS=0 # keep the daemon resident (default 900)
Si el daemon no se puede alcanzar por cualquier razón, la sesión carga el servidor por sí misma y funciona exactamente como antes — más lento, nunca roto.
Luego instala los hooks (un comando configura el auto-guardado, la copia de seguridad previa a la compactación y la sugerencia 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
| Hook | Cuándo se dispara | Qué hace |
|---|---|---|
SessionStart | Nueva sesión (startup / clear) | Inyecta el paquete de activación con alcance de proyecto |
UserPromptSubmit | Cuando escribes un prompt | Busca sesiones pasadas; si existe una similar, inyecta "ya has trabajado en esto antes" en el contexto del agente |
Stop | Después de cada turno del asistente | Auto-guarda temas, decisiones y herramientas en ~/.chat-recall/memory/ |
PreCompact | Antes de que Claude Code compacte el contexto | Guardado de emergencia para que nada se pierda por compactación |
SessionEnd | Cuando la sesión se cierra | Escala los aprendizajes de la sesión en segundo plano, para que nada se retrase |
El guardián de decisiones
Una decisión que nadie lee es una sugerencia. chat-recall guard se ejecuta antes de una llamada de herramienta y lo dice cuando la llamada alcanza algo ya descartado:
chat-recall: this reaches for something already decided against.
- keycloak was ruled out — BetterAuth is the decision (2026-03-14) · session 8f2c1a4e
Proceed only if this is a deliberate reversal. If it is, record it:
recall_decision_record with the area, so the old decision is closed rather than contradicted.
Se dispara en instalaciones, importaciones y ediciones de manifiesto — npm install auth0, una nueva línea import, un nombre agregado a package.json. Nunca en prosa: "podríamos usar Auth0" en una oración no debe detener nada, o el guardián se convierte en algo que la gente apaga.
Advierte; no bloquea. Un bloqueo incorrecto le cuesta al usuario un turno y hace que el guardián se desinstale; una advertencia incorrecta cuesta una línea de contexto. Establece CHAT_RECALL_GUARD_ENFORCE=1 para bloquear en su lugar, por máquina. CHAT_RECALL_GUARD=0 lo apaga.
chat-recall install-hooks lo registra en las cinco herramientas. Cada una mantiene su hook de pre-ejecución en su propio archivo, por lo que el instalador escribe cinco formas y omite cualquier herramienta que no esté en la máquina (--no-guard para omitirlas todas):
| Herramienta | Dónde | Evento |
|---|---|---|
| Claude Code | ~/.claude/hooks.json, cada perfil | PreToolUse |
| Codex | ~/.codex/hooks.json | PreToolUse |
| Antigravity | ~/.gemini/antigravity-cli/hooks.json | PreToolUse — la única herramienta con un veredicto ask real, por lo que puede preguntar |
| Cursor | ~/.cursor/hooks.json | beforeShellExecution + afterFileEdit |
| OpenCode | ~/.config/opencode/plugins/chat-recall-guard.js | tool.execute.before |
Codex necesita un paso más. Ejecuta un hook solo después de que confíes en él — abre Codex y ejecuta /hooks una vez. chat-recall doctor informa el registro para cada herramienta.
Dos de esos no son cobertura completa, y los documentos lo dicen en lugar de dar a entender lo contrario. Cursor expone beforeShellExecution pero solo afterFileEdit, por lo que una importación añadida en una edición se informa después de la escritura, no se previene. Los hooks de plugin de OpenCode no se activan para llamadas a herramientas de subagentes (#5894), por lo que un agente que delega rutas lo evita.
Compañero: codeindex (auto-detectado)
Hay un servidor MCP separado llamado codeindex (binario Zig, ~56 MB) de munhq que le da al agente una búsqueda a nivel de código. Los dos se componen:
- 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 el 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
| Fuente | Origen | Notas |
|---|---|---|
| Sesiones (Claude) | ~/.claude/projects/<hash>/<uuid>.jsonl | Transcripciones completas, tokens, costo, archivos tocados, modelos usados |
| Sesiones (OpenCode) | ~/.local/share/opencode/opencode.db (SQLite) | Costo, tokens, tareas pendientes |
| Transcripciones de subagentes | <session-dir>/<id>/subagents/*.jsonl | Explorar, aparte, y acompact-* (historial compactado huérfano) |
| Planes | ~/.claude/plans/*.md | Documentos de planificación del agente, divididos por ## |
| Tareas | ~/.claude/tasks/<session>/*.json | Vinculadas a la sesión principal |
| CLAUDE.md | Auto-descubierto a partir de hashes de proyecto | Vinculado a sesiones en el mismo proyecto |
| Historial | ~/.claude/history.jsonl | Historial de shell, opcionalmente vinculado a una sesión |
| Pegar | ~/.claude/paste-cache/*.txt | Grandes bloques pegados |
| Diario | ~/.chat-recall/index/diary/<agent>/*.json | Lo que el agente le dijo a su yo futuro a través de recall_diary_write |
Herramientas MCP (62, incluyendo 4 herramientas de inteligencia de código que se registran cuando el binario compañero está instalado)
Buscar y recuperar — recall_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 patrones — recall_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 anterior), 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 filtros — recall_subagent_search (buscar dentro de transcripciones ocultas de Explorar/aparte/compactas), recall_user_prompts (solo lo que el humano escribió, sin banners).
Hallazgos, clasificados — recall_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 ámbito 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 conocimiento — recall_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 un triple y una entrada de diario en una sola llamada.
Estado KV — recall_set, recall_get (sin clave = listar el ámbito). 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 estado — recall_diary_write, recall_diary_read, recall_status (incluye desglose de memoria), recall_index. Planes/tareas: buscar a través de recall_memory_search(source_types:['plan','task']), leer a través de recall_show.
Eliminar cosas — recall_forget elimina una conversación del servidor permanentemente, 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 medio de una conversación, no cosas para las que abren un panel. Ambas requieren confirm: true, ambas están anotadas como destructivas, y ninguna está aprobada automáticamente — tu cliente pregunta cada vez. El límite es unidireccional a propósito: un agente puede reducir lo que se almacena y no hay herramienta que lo amplíe de nuevo (sin des-exclusión, sin lista blanca, sin retención). Ampliar es tuyo: 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 componen: 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 tolerancia a errores tipográficos pg_trgm. No necesita incrustador, ni clave API, ni servicio adicional.
El 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 — cualquier cosa local, cualquier cosa autoalojada, cualquier cosa más nueva que la tabla de tarifas — el panel muestra — en lugar de inventar un número. El resumen muestra un contador sessionsWithoutPricing, para que puedas ver cuánto del total cubre realmente la cifra.
Contexto de activación
chat-recall memory wake-up
Construye un pequeño paquete para una sesión de IA: fragmento 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
El CLI guarda casi nada localmente — solo lo que necesita para llegar al servidor:
| Ruta | Qué |
|---|---|
~/.chat-recall/credentials.json | Destino(s) del servidor + token de dispositivo (modo 0600) |
~/.chat-recall/sync-ledger.json | Marca de agua de sincronización por servidor (lo que ya se envió) |
~/.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 ascendente de --resume no pueda destruir el historial |
~/.chat-recall/cache.db | Caché 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 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 del 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 completamente en tu propia infraestructura.
Arquitectura
packages/
├── engine/src/
│ ├── core/
│ │ ├── backends/ ToolBackend per AI tool (claude, opencode, codex, agy, cursor)
│ │ ├── 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(discover→parse→extractLinks) y regístralo en elSourceRegistry. - Agregar una nueva herramienta de IA (un séptimo backend junto a Claude/OpenCode/Codex/Antigravity/Cursor/Hermes) — implementa
ToolBackend(rutas, manejo de ID,readEvents,fileToolMap,extractEditDelta) y regístralo enpackages/engine/src/core/backends/index.ts. Todas las rutas se pueden sobrescribir con variables de entorno a través deCHAT_RECALL_{CLAUDE,CODEX,AGY,CURSOR,CURSOR_IDE,HERMES}_HOME/CHAT_RECALL_OPENCODE_DB.
Requisitos
- Node.js 22 o posterior. La imagen Docker y CI ejecutan 24.
- Sesiones escritas por una herramienta compatible, en su ubicación estándar:
~/.claude/,~/.codex/,~/.local/share/opencode/,~/.gemini/antigravity-cli/.
Esa es la lista completa. No se necesita clave API para instalar, indexar o buscar.
Una función es opcional, y necesita un backend que tú elijas:
| Función | Backends a los que puedes apuntar |
|---|---|
| Resúmenes de IA | Ollama, un CLI en el 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
Elastic License 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 un servicio alojado o administrado — ese es el producto. Tampoco puedes eliminar las comprobaciones de clave de licencia ni los avisos de derechos de autor.
Es código fuente disponible, no código abierto OSI, y este README no fingirá lo contrario. Reemplazó una división donde el CLI y el motor eran MIT y el servidor era BSL 1.1, que respondía "¿puedo usarlo?" de tres maneras diferentes dentro de un solo repositorio.