- Resuelve el problema de que grandes volúmenes de datos sin procesar consumen rápidamente la ventana de contexto al llamar herramientas externas
- Se ubica entre Claude Code y la salida de las herramientas para comprimir y filtrar datos, reduciendo 315 KB a 5.4 KB (98% menos)
- Mediante una arquitectura de sandbox, aísla cada ejecución e incluye solo stdout en el contexto, bloqueando la filtración de datos originales como logs y snapshots
- Con una base de conocimiento basada en SQLite FTS5, indexa contenido Markdown y aplica ranking BM25 y Porter stemming para permitir búsquedas precisas de bloques de código
- Con el mismo límite de 200K tokens, la duración de la sesión pasa de 30 minutos a 3 horas, lo que permite una gestión de contexto más eficiente para agentes de IA
Problema
- Las llamadas a herramientas MCP de Claude Code vuelcan datos sin procesar directamente en la ventana de contexto de 200K en cada llamada
- Snapshot de Playwright: 56 KB, 20 issues de GitHub: 59 KB, logs de acceso: 45 KB, etc.
- Tras unos 30 minutos de uso, se consume el 40% del contexto total
- MCP se convirtió en el estándar para usar herramientas externas, pero existe una limitación estructural en la que tanto las definiciones de entrada como los datos de salida llenan el contexto
- Con más de 81 herramientas activadas, ya se había consumido el 72% (143K tokens) incluso antes del primer mensaje
Estructura de Context Mode
- Es un servidor MCP ubicado entre Claude Code y la salida de las herramientas, que entrega los datos minimizando la información sin procesar
- Una salida de 315 KB se reduce a 5.4 KB (98% menos)
- Cada llamada a
execute se ejecuta en un subproceso aislado, por lo que opera de forma independiente sin compartir memoria ni estado
- Solo stdout se incluye en el contexto, mientras que logs, respuestas de API, snapshots, etc. permanecen dentro del sandbox
- Soporta 10 runtimes de lenguaje: JavaScript, TypeScript, Python, Shell, Ruby, Go, Rust, PHP, Perl y R
- La detección automática de Bun mejora la velocidad de ejecución de JS/TS entre 3 y 5 veces
- Los CLI autenticados (
gh, aws, gcloud, kubectl, docker) transfieren credenciales de forma segura mediante herencia de variables de entorno
Base de conocimiento (knowledge base)
- La herramienta
index divide Markdown por encabezados y lo guarda en una tabla virtual SQLite FTS5 manteniendo intactos los bloques de código
- Al buscar, usa el algoritmo de ranking BM25 para calcular relevancia con base en frecuencia de palabras, frecuencia inversa de documento y normalización de longitud del documento
- Aplica Porter stemming, de modo que “running”, “runs” y “ran” coinciden con la misma raíz
- En las llamadas a
search, devuelve bloques de código exactos y la jerarquía de encabezados, no resúmenes
fetch_and_index obtiene una URL, convierte HTML a Markdown y luego lo indexa; la página original no se incluye en el contexto
Métricas de rendimiento
- En 11 escenarios reales (triaje de pruebas, diagnóstico de errores de TypeScript, revisión de git diff, etc.), toda la salida se mantuvo por debajo de 1 KB
- Snapshot de Playwright: 56 KB → 299 B
- Issues de GitHub (20): 59 KB → 1.1 KB
- Logs de acceso (500 entradas): 45 KB → 155 B
- Análisis de CSV (500 filas): 85 KB → 222 B
- Log de Git (153 commits): 11.6 KB → 107 B
- Investigación de repositorio (subagent): 986 KB → 62 KB (5 llamadas vs 37)
- A nivel de sesión completa, se reduce de 315 KB a 5.4 KB, y la duración de la sesión pasa de 30 minutos a 3 horas
- Contexto restante después de 45 minutos: de 60% a 99%
Instalación y uso
- Soporta hooks de enrutamiento automático y comandos slash mediante Plugin Marketplace
- También puede instalarse solo para MCP
- Queda listo para usar inmediatamente después de reiniciar Claude Code
Cambios en la práctica
- Sin cambiar la forma de uso, el hook PreToolUse enruta automáticamente la salida
- Los subagentes usan
batch_execute como herramienta predeterminada
- El subagente Bash se actualizó a
general-purpose, con acceso a herramientas MCP
- Como resultado, la ventana de contexto deja de llenarse rápidamente, lo que permite sesiones más largas con la misma cantidad de tokens
Antecedentes del desarrollo
- Mientras operaban MCP Directory & Hub, descubrieron un patrón común en el que todos los servidores MCP volcaban datos sin procesar en el contexto
- Inspirado en Code Mode de Cloudflare, que comprimía definiciones de herramientas, se amplió la idea hacia la compresión de datos de salida
- Tras comprobar que permitía trabajar 6 veces más tiempo en sesiones de Claude Code, lo publicaron como open source bajo licencia MIT
- GitHub: mksglu/claude-context-mode
1 comentarios
Opiniones en Hacker News
El enfoque de indexación con FTS5 propuesto aquí es correcto, pero creo que hay que ir un paso más allá
La salida de las herramientas mezcla datos estructurados (JSON, tablas, configuración) y lenguaje natural (comentarios, mensajes de error, docstrings), así que BM25 puro rinde mal
Para resolver un problema similar, construí un buscador híbrido que combina Model2Vec + sqlite-vec + FTS5. Fusiono ambos resultados con Reciprocal Rank Fusion (RRF), así obtengo al mismo tiempo el emparejamiento exacto por palabras clave de BM25 y el emparejamiento semántico de la búsqueda vectorial
El indexado incremental también es importante. Mi indexador vuelve a generar embeddings solo para los chunks modificados con la bandera
--incremental. Reindexar los 15,800 archivos completos toma 4 minutos, y el incremental diario menos de 10 segundosDesde el punto de vista del caché, este enfoque también tiene ventajas. Para la misma consulta, la salida comprimida es determinista, así que el caché de prompts funciona de manera estable
Algo más que añadiría a la arquitectura de Context Mode es ejecutar el mismo buscador como hook de PostToolUse para que la salida se comprima antes de entrar en la conversación
Soy el autor del post. Hace unos días compartí el repositorio en GitHub y recibí muy buenos comentarios. Este artículo es la explicación de la arquitectura
La idea central es que, en vez de meter en la ventana de contexto de 200K los datos en bruto que arrojan las llamadas a herramientas MCP, Context Mode crea un subproceso aislado y solo pasa stdout al contexto. Está basado puramente en algoritmos, sin llamadas a LLM, usando SQLite FTS5 + BM25 + Porter stemming
Últimamente he conseguido 228 estrellas y datos de uso reales, y me di cuenta de lo importante que es el enrutamiento de subagentes. Si actualizas automáticamente el subagente Bash a uno general y usas batch_execute, ya no hace falta llenar el contexto con salida cruda
No entiendo por qué no usan el modo mcp-cli. Yo hice una versión clonada con wener-mcp-cli
Gran trabajo. Creo que todavía hay mucho margen de mejora en la gestión de la ventana de contexto. Por ejemplo, si el modelo encuentra la respuesta correcta después de varios intentos, un enfoque de backtracking para quitar del contexto los intentos fallidos podría ser útil
Al ver este post me di cuenta de que no entendía para nada el uso de tokens de Claude Code, así que en la mañana hice un CLI llamado claude-trace
Analiza
~/.claude/projects/*/*.jsonlpara desglosar uso y costo (incluyendo lectura/generación de caché) por sesión, herramienta, proyecto y línea de tiempoSi Context Mode resuelve bien la compresión de salida, esto funciona como una capa de medición para visualizar el consumo antes y después de los cambios
Se puede reducir mucho el uso de tokens usando apps CLI en vez de MCP. Por ejemplo, GitHub CLI hace lo mismo con muchos menos tokens que MCP
Los hooks se sienten demasiado agresivos. Está bien bloquear todo curl/wget/WebFetch y crear snapshots de 56 KB en sandbox, pero para algo tan simple como
curl api.example.com/health, donde solo necesitas 200 bytes, es excesivoSi comprimes 153 commits de git a 107 bytes, el modelo solo podrá ver los datos si escribe un script de extracción perfecto. Si usa un comando equivocado, la información necesaria desaparece
El benchmark asume que el modelo siempre escribe el código de resumen correcto, pero en la práctica no es así
No está mal, pero existe pérdida de precisión y riesgo de alucinación. Por datos incompletos o por una lógica de extracción incorrecta, Claude podría llegar a conclusiones erróneas. Aquí se asume que MCP será lo bastante inteligente como para escribir tanto buenos scripts de extracción como buenas consultas de búsqueda. Creo que la preservación de la información es un problema grande en la práctica
La tasa de compresión es impresionante, pero me pregunto si, incluso con contexto comprimido, el modelo produce salidas de la misma calidad. Aunque una sesión pase de 30 minutos a 3 horas, solo tiene sentido si la calidad del razonamiento a las 2 horas se mantiene
La economía del caché que menciona esafak también importa. Si el prompt caching funciona bien, incluso un contexto largo es prácticamente gratis. Pero si la compresión rompe la continuidad del caché, los costos podrían subir en lugar de bajar
El problema más de fondo es que la mayoría de las herramientas MCP traen todos los datos con SELECT *. Es un problema de diseño de protocolo: deberían soportar resumen y drill-down
Dudo que realmente haga falta meter más de 80 herramientas en el contexto. El contexto vale oro, y mientras más cosas no relacionadas con el problema metas, peor será el resultado. Más que compresión de datos, una mejor estrategia es la separación por subagentes
git logpuede costar 50 mil tokens, y eso lo procesa dentro del sandbox