Retrato de Santiago Fernández

CubeLabs

IA · Fintech · Agentes · Automatización
⚡ Práctico

Headroom: Compresión de Contexto para Agentes de IA

Reduce 60-95% los tokens de tus agentes sin cambiar una línea de código

⏱ 45 min 📊 Intermedio 📝 10 lecciones

Headroom es la capa de compresión de contexto para agentes y aplicaciones LLM: comprime salidas de herramientas, logs, chunks RAG, ficheros e historial de conversación antes de que lleguen al modelo. Mismas respuestas, fracción de los tokens. Funciona en cuatro modos — proxy, wrap, librería y MCP — es local-first y reversible (CCR): el agente puede recuperar los originales cuando los necesita. En este curso lo instalas, lo conectas a Claude Code, Codex y tus propias apps, y mides el ahorro real.

Headroom — la capa de compresión de contexto para agentes de IA
Headroom: library · proxy · MCP · content-aware compressors · local-first · reversible (Apache 2.0)

Contenido

  1. El problema: la inflación de tokens en los agentes
  2. Qué es Headroom y cómo funciona
  3. Instalación y verificación
  4. Modo Proxy: compresión sin cambiar código
  5. Modo Wrap: envuelve tu agente de código
  6. Modo Librería: compress() en Python
  7. SDK TypeScript e integraciones con frameworks
  8. Compresores especializados: JSON, código, texto e imágenes
  9. CCR: compresión reversible con recuperación
  10. MCP, memoria cross-agent y monitoreo del ahorro

1. El problema: la inflación de tokens en los agentes

Cada turno de un agente de IA reenvía al modelo un contexto que crece sin control: salidas de herramientas (búsquedas de código, respuestas de APIs, logs), chunks de RAG, ficheros leídos, diffs, y todo el historial de la conversación. Ese contexto se paga por token, y además choca con la ventana de contexto del modelo.

Con cargas de trabajo reales de agentes, el desperdicio es enorme. Headroom publica mediciones sobre workloads reales:

WorkloadAntesDespuésAhorro
Code search (100 resultados)17.7651.40892%
Debug de incidente SRE65.6945.11892%
Triage de issue GitHub54.17414.76173%
Exploración de codebase78.50241.25447%

Y la precisión se conserva: en GSM8K se mantiene exactamente (0.870 → 0.870), y en TruthfulQA incluso sube (+0.030). El ahorro no es "apretar texto a ciegas": es quitar lo que no aporta y comprimir lo que sí aporta de forma estructurada.

⚠️ Error común

Comprimir con un simple "resume el historial" del proveedor pierde fidelidad y rompe el caché KV. Headroom comprime solo la "zona viva" (bytes nuevos) y mantiene el prefijo congelado byte-idéntico para no invalidar el caché del proveedor.

2. Qué es Headroom y cómo funciona

Headroom es una capa que se coloca entre tu agente/app y el proveedor de LLM. Comprime todo lo que el agente lee — prompts, salidas de herramientas, logs, resultados RAG, ficheros e historial — antes de que llegue al modelo. Corre en tu máquina: tus datos no salen de tu equipo (local-first).

El pipeline interno es:

ComponenteFunción
CacheAlignerDetecta contenido volátil que rompería el prefijo de caché KV del proveedor; nunca reescribe prompts
ContentRouterDetecta el tipo de contenido y selecciona el compresor adecuado
SmartCrusherCompresión estadística de JSON: arrays de dicts, objetos anidados, tipos mixtos (70-90%)
CodeCompressorCompresión AST para Python, JS/TS, Go, Rust, Java, C/C++, Perl (preserva imports, firmas y tipos)
Kompress-v2-baseModelo HuggingFace entrenado con trazas de agentes, para texto/prosa
CCRCompress-Cache-Retrieve: guarda los originales localmente y los recupera bajo demanda

Se integra de cuatro maneras, según tu caso:

ModoCuándo usarloCambios de código
ProxyCualquier cliente OpenAI-compatible; tráfico de agentes y appsCero — solo cambiar la base URL
WrapAgentes de código: Claude Code, Codex, Cursor, Aider, OpenCode, etc.Cero — un comando
LibreríaTu app Python/TypeScript, inlineUna llamada a compress()
MCPHerramientas headroom_compress, headroom_retrieve, headroom_statsCero — instalar servidor MCP

3. Instalación y verificación

Headroom requiere Python 3.10+ y se instala con tu gestor favorito. El paquete de PyPI es headroom-ai e incluye el CLI headroom.

1

Instala con uv (recomendado)

CLI aislado en su propio entorno virtual:

uv tool install --python 3.13 "headroom-ai[all]"
2

Alternativa con pip

Instala en el entorno Python que uses:

pip install "headroom-ai[all]"
3

SDK TypeScript (solo librería)

Sin CLI, solo la función compress:

npm install headroom-ai
4

Comprueba que funciona

headroom --version
headroom doctor

Los extras se instalan por separado cuando los necesitas: [proxy], [mcp], [ml] (modelo Kompress-v2-base), [code], [memory], [langchain], [agno], [evals]…

💡 Tip

Usa Python 3.13 si quieres ver el ahorro en dólares: el tile "Proxy $ Saved" del dashboard usa LiteLLM, que no se instala en Python 3.14+.

⚠️ Error común

Si el proxy no arranca en Docker/QEMU o en VMs antiguas x86, es por la CPU: las features ONNX (detección Magika y relevancia por embeddings) necesitan AVX2. Headroom cae automáticamente a BM25 y detección heurística — no es un error grave.

4. Modo Proxy: compresión sin cambiar código

El modo proxy levanta un endpoint local compatible con OpenAI. Cualquier cliente que apunte su base_url al proxy recibe compresión automática — cero cambios de código.

headroom proxy --port 8787

Luego apunta tu cliente al proxy:

# Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8787/v1", api_key="tu-key")

# CLI
export OPENAI_BASE_URL="http://localhost:8787/v1"

El proxy también puede recortar lo que el modelo escribe de vuelta (los tokens de salida cuestan hasta 5× más):

export HEADROOM_OUTPUT_SHAPER=1     # off por defecto
headroom proxy --port 8787
💡 Tip

Los switches del proxy se leen en vivo en cada request. Si usas headroom wrap, los cambios de entorno se sincronizan al proxy en caliente vía POST /admin/runtime-env — sin reiniciar, sin perder cachés.

5. Modo Wrap: envuelve tu agente de código

El modo wrap es la vía más rápida para agentes de código: lanza el proxy local, instala Serena (navegación semántica de código) y arranca tu agente ya configurado para pasar por Headroom.

headroom wrap claude      # Claude Code
headroom wrap codex       # Codex (comparte memoria con Claude)
headroom wrap cursor      # imprime las base URLs para configurar Cursor
headroom wrap aider
headroom wrap opencode
headroom wrap grok

Para deshacer el wrapping de forma duradera:

headroom unwrap claude    # también: copilot, codex, grok, kimi, opencode, openclaw…

Matriz de compatibilidad (extraída del README oficial):

Agenteheadroom wrapNotas
Claude Code✅--memory · --code-graph · --1m · --tool-search
Codex✅Comparte memoria con Claude
Grok CLI✅Rutea vía GROK_MODELS_BASE_URL
CursorSetup manualArranca proxy y muestra base URLs para settings
VS Code Copilot✅Proxy transparente; preserva el modelo seleccionado
OpenClaw✅Se instala como plugin ContextEngine
OpenCode / Cline / Continue / Goose / OpenHands✅Arranca proxy + lanza o inyecta config
Cortex CodeSolo librería60-65% de ahorro en modo librería
⚠️ Error común

Si usas --code-memory none al wrap, evitas que Serena quede registrada a nivel de usuario (~/.claude.json). Si no lo haces, Serena permanece disponible en otros proyectos hasta que ejecutes headroom unwrap.

6. Modo Librería: compress() en Python

Si tu app construye los mensajes ella misma, la llamada compress() es lo más simple que existe:

from headroom import compress

messages = [
    {"role": "system", "content": "Eres un asistente de operaciones."},
    {"role": "user", "content": "Resume este incidente: " + tool_output},
]
compressed = compress(messages, model="gpt-4o")
# compressed.messages -> mensajes comprimidos
# compressed.tokens_saved -> 12345

También puedes medir antes de enviar con simulación (sin hacer llamada al LLM):

from headroom import simulate

result = simulate(messages)
print(result.summary)
# {'total_requests': 1, 'total_tokens_saved': 245, 'average_savings_percent': 12.3}

Para apps ASGI (FastAPI, etc.) hay middleware directo:

from headroom.asgi import CompressionMiddleware
app.add_middleware(CompressionMiddleware)
💡 Tip

get_summary() devuelve total_requests, total_tokens_saved, avg_compression_ratio y total_cost_saved_usd — ideal para exponer el ahorro en tu propio dashboard.

7. SDK TypeScript e integraciones con frameworks

En TypeScript/Node la API es equivalente:

import { compress } from 'headroom-ai';

const result = await compress(messages, { model: 'gpt-4o' });
// result.messages, result.tokensSaved

Y con los SDKs oficiales basta un wrapper:

import { withHeadroom } from 'headroom-ai';
import Anthropic from '@anthropic-ai/sdk';

const client = withHeadroom(new Anthropic());   // Anthropic SDK
const client2 = withHeadroom(new OpenAI());     // OpenAI SDK

Headroom se conecta a casi cualquier stack de agentes:

StackCómo se engancha
Vercel AI SDKwrapLanguageModel({ model, middleware: headroomMiddleware() })
LiteLLMlitellm.callbacks = [HeadroomCallback()] (100+ proveedores)
LangChainHeadroomChatModel(your_llm)
AgnoHeadroomAgnoModel(your_model)
CrewAI / AutoGenCompresión automática de tool outputs con métricas por herramienta
Multi-agenteSharedContext().put / .get — contexto comprimido entre agentes (~80% menos tokens)
⚠️ Error común

El paquete npm headroom-ai es solo librería: no trae el CLI headroom. El CLI solo llega con el paquete de PyPI.

8. Compresores especializados: JSON, código, texto e imágenes

No todo se comprime igual. Headroom enruta cada tipo de contenido al compresor que mejor lo preserva:

CompresorContenidoTécnicaAhorro típico
SmartCrusherJSON: arrays de dicts, objetos anidados, tipos mixtosEstadístico: conserva los items importantes, descarta el resto70-90%
CodeCompressorCódigo fuenteAST con tree-sitter: preserva imports, firmas y tipos; comprime cuerpos de funciones—
Kompress-v2-baseTexto/prosa, logs, búsquedasModelo HuggingFace entrenado con trazas de agentes15-20% en agentes de código
Image compressionImágenes para modelos de visiónRouter ML40-90%
Text & logsResultados de búsqueda, build logs, diffsCompresores específicos por tipo—

La clave está en la live-zone compression: solo se comprimen los bytes nuevos (salida fresca de herramienta, último turno). El prefijo congelado permanece byte-idéntico para que el caché KV del proveedor siga pegando. El historial nunca se descarta.

💡 Tip

Para estimar el ahorro antes de tocar producción, ejecuta el benchmark local: python -m headroom.evals suite --tier 1 reproduce las métricas oficiales en tu máquina.

9. CCR: compresión reversible con recuperación

La arquitectura CCR (Compress-Cache-Retrieve) hace la compresión prácticamente lossless: los originales se guardan en caché local y el LLM puede pedirlos cuando los necesita.

  1. Compress — el contenido se comprime antes de enviarse al modelo.
  2. Cache — el original se almacena localmente con un TTL.
  3. Retrieve — si el modelo necesita el dato exacto, llama a la herramienta de recuperación y obtiene el original.
# Configura el TTL de la caché CCR (7200 s = 2 h)
HEADROOM_CCR_TTL_SECONDS=7200 headroom proxy

# Estado de la caché de recuperación
curl http://localhost:8787/v1/retrieve/stats

Este diseño es lo que permite afirmar "mismas respuestas, fracción de los tokens": el modelo nunca pierde acceso a la información completa — solo decide cuándo merece la pena recuperarla.

⚠️ Error común

La compresión reversible no es magia: si el TTL expira, el original ya no está disponible para recuperar. Para sesiones largas de agentes, sube HEADROOM_CCR_TTL_SECONDS antes de arrancar el proxy.

10. MCP, memoria cross-agent y monitoreo del ahorro

Servidor MCP

Headroom expone compresión, recuperación y estadísticas como herramientas MCP para cualquier host compatible:

headroom mcp install          # para hosts MCP (Claude Code, Cursor…)

# Config manual en el cliente MCP:
# [mcp_servers.headroom]
# command = "/ruta/absoluta/headroom"
# args = ["mcp", "serve"]

Herramientas disponibles: headroom_compress, headroom_retrieve y headroom_stats.

Memoria cross-agent y aprendizaje de fallos

La memoria es compartida entre agentes (Claude, Codex, Gemini, Grok) con procedencia por agente y auto-dedup. Y headroom learn mina tus sesiones fallidas y escribe correcciones en CLAUDE.local.md (gitignored), AGENTS.md o GEMINI.md:

headroom learn                      # analiza y muestra qué corregir (dry run)
headroom learn --apply              # escribe las correcciones en CLAUDE.local.md
headroom learn --target AGENTS.md   # o en el fichero de otro agente
headroom learn --verbosity --apply  # aprende el nivel de concisión que prefieres

Monitoreo del ahorro

headroom doctor        # health check — confirma que el routing funciona
headroom perf          # benchmark rápido
headroom savings       # ahorro acumulado: hoy / últimos 7 días / total, por modelo y cliente
headroom output-savings
# Reduction: 31.7%  (95% CI 27.7% … 35.7%)   [estimated]
headroom dashboard     # dashboard en vivo (requiere proxy en marcha)

Los ahorros de salida son contrafactuales (nunca vemos lo que el modelo habría escrito), así que Headroom reporta una estimación honesta con rango de confianza. Para una cifra medida, deja un 10% de conversaciones sin moldear como grupo de control: export HEADROOM_OUTPUT_HOLDOUT=0.1.

💡 Tip

¿Actualizas a menudo? headroom update detecta cómo instalaste Headroom (pip, pipx o uv tool) y se actualiza en el sitio correcto. headroom update --check solo informa de la última versión.

Preguntas frecuentes

¿Headroom envía mis datos a la nube?

No. Corre local-first: el proxy, la caché CCR y el modelo de compresión viven en tu máquina. Solo el tráfico ya comprimido sale hacia tu proveedor de LLM habitual.

¿Funciona con cualquier modelo o proveedor?

Sí. El proxy es compatible con cualquier endpoint OpenAI-compatible, y el wrap cubre Claude Code, Codex, Cursor, Aider, OpenCode, Grok CLI, Copilot, OpenClaw y más. Para Anthropic y OpenAI hay SDKs dedicados, y LiteLLM da acceso a 100+ proveedores con un solo callback.

¿Perderé precisión si comprimo?

En los benchmarks oficiales, no: GSM8K se mantiene idéntico y TruthfulQA mejora ligeramente. Además, CCR permite recuperar los originales cuando el modelo los necesita, así que la compresión es reversible dentro del TTL configurado.