Sobrevivir a la compactación
Cuando Claude Code compacta una conversación larga, el resumen conserva la idea general y pierde los detalles. La recuperación post-compactación devuelve esos detalles: justo después de cada compactación, un hook vuelve a inyectar en el contexto del modelo las memorias más recientes de tu proyecto en ContextForge y sus tareas pendientes. Disponible desde contextforge-mcp 0.12.0. Solo para Claude Code.
El problema
Las sesiones largas llenan la ventana de contexto. Claude Code compacta la conversación, ya sea cuando ejecutas /compact o automáticamente cuando se queda sin espacio. El resumen que conserva es bueno con la visión general y malo con los detalles. Lo que suele perderse es justo lo que necesitas a continuación:
- Las decisiones que tomaste hace una hora y los motivos detrás de ellas.
- Qué tareas se terminaron, cuáles siguen pendientes y qué se acordó como siguiente paso.
- Las correcciones que le diste al agente y que ahora olvida en silencio.
El agente no sabe qué perdió. Tras la compactación sigue trabajando a partir del resumen como si nada hubiera pasado, así que la desviación solo se nota cuando vuelve a preguntar algo ya resuelto o deshace una decisión.
Cómo funciona
Dos piezas: un hook de Claude Code y un subcomando de la CLI.
1. El hook que instala init
npx contextforge-mcp init ahora añade un hook SessionStart con el matcher compact al archivo .claude/settings.json de tu proyecto. Claude Code lo ejecuta justo después de cada compactación y añade la salida estándar del comando al contexto del modelo.
# .claude/settings.json
{
"hooks": {
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{ "type": "command", "command": "npx -y contextforge-mcp recall" }
]
}
]
}
}init se fusiona con un settings.json existente sin tocar otras claves ni otros hooks, y es idempotente: si lo vuelves a ejecutar imprime "already present". Cursor no recibe nada aquí, porque no tiene hooks.
2. El subcomando recall
contextforge-mcp recall resuelve tu clave API (desde CONTEXTFORGE_API_KEY; si no, desde la entrada del servidor contextforge en ~/.claude.json; si no, desde el .mcp.json del proyecto), lee el proyecto vinculado desde el archivo .contextforge en la raíz del repositorio, obtiene las 10 memorias más recientes del proyecto en todos sus espacios y hasta 5 tareas pendientes, e imprime un bloque de texto plano como este:
# salida de npx contextforge-mcp recall
## ContextForge: context restored after compaction Recent memories: - [Decisions] Keep Supabase magic links, drop password login — Decided after the support thread on 2026-09-22. Password reset emails were the top ticket… - [API] Rate limit is 60 requests per minute per key — Enforced in the edge function. Return 429 with a Retry-After header, never a 500… Pending tasks: - [f8drg2] Ship the billing webhook retry (high, due 2026-09-30) - [k2m9xa] Write the 0.12.0 release notes (medium, due 2026-10-02) For anything older or more specific, call memory_query before answering.
Nunca bloquea una sesión. Sin clave, sin proyecto vinculado, con un error de red o al superar el tiempo límite de 8 segundos, no imprime nada y sale con código 0. Una ejecución normal tarda unos 4 segundos.
Usuarios nuevos
Nada extra. Ejecuta init en el proyecto, como en el paso "Inicializa tu proyecto" de la guía de inicio, y el hook se instala junto con todo lo demás:
cd ~/your-project npx contextforge-mcp init
Usuarios existentes
Dos pasos: obtén la 0.12.0 y vuelve a ejecutar init una vez por proyecto.
1. Actualiza el paquete
Si lo instalaste globalmente, actualízalo. Si solo has usado npx, recibirás la 0.12.0 en el próximo arranque. En cualquier caso, comprueba la versión, porque una instalación global antigua se impone sobre npx:
npm update -g contextforge-mcp npx contextforge-mcp --version # expect 0.12.0 or newer
2. Vuelve a ejecutar init en cada proyecto
Solo añade el hook que falta. Tu CLAUDE.md, tus otros hooks y el resto de claves de settings quedan tal como están.
cd ~/your-project npx contextforge-mcp init
¿Prefieres hacerlo a mano? Pega el grupo hooks.SessionStart del fragmento de arriba en el .claude/settings.json de tu proyecto. Si ya tienes un array SessionStart, añade el grupo dentro en lugar de reemplazarlo.
Comprueba que funciona
- Desde la carpeta del proyecto, ejecuta el subcomando directamente. Deberías ver el bloque de arriba con tus propias memorias y tareas. Una salida vacía significa que no hay clave o que el proyecto no está vinculado.
- Después, en Claude Code, ejecuta
/compacty pregunta "what context did you just receive?". El agente debería repetir las memorias y tareas del bloque.
cd ~/your-project npx contextforge-mcp recall
Requisitos y límites
- Solo Claude Code. El hook vive en
.claude/settings.json. Cursor no tiene hooks, así que ahí no se instala nada. - Un proyecto vinculado. El proyecto necesita un archivo
.contextforgeen la raíz del repositorio. Consulta Vinculación de proyectos. - Solo vuelve a inyectar lo que guardaste. El bloque contiene las 10 memorias más recientes y hasta 5 tareas pendientes de ContextForge. No puede decirte qué descartó el resumen de la compactación, porque nunca ve la conversación.
- Así que guarda las decisiones sobre la marcha. Pídele al agente que "guarde dónde estamos y qué sigue" antes de un tramo largo de trabajo. Lo que está en ContextForge vuelve; lo que solo estaba en el chat, no.
Solución de problemas
El hook se ejecuta pero no inyecta nada
Un export CONTEXTFORGE_API_KEY=... antiguo en el rc de tu shell tiene prioridad sobre ~/.claude.json. Si esa clave está caducada, el hook no imprime nada y no avisa. Elimina el export o sustituye la clave, y vuelve a ejecutar npx contextforge-mcp recall para confirmarlo.
El hook ejecuta una versión vieja
Una instalación global antigua hace que npx -y contextforge-mcp ejecute la versión vieja, que no tiene el subcomando recall. Compruébalo y actualízala:
which contextforge-mcp npm update -g contextforge-mcp npx contextforge-mcp --version
Salida vacía, la clave es correcta
El proyecto no está vinculado. Debe existir un archivo .contextforge en la raíz del repositorio. Pídele al agente que "vincule el proyecto" (usa cf_tools) y vuelve a ejecutar recall.