Headroom — слой сжатия контекста для AI-агентов

· 3 мин чтения
token-compression context-engineering ai-agents proxy mcp
📂 Исходный код на GitHub

Слой сжатия контекста для AI-агентов. Компрессирует вывод инструментов, логи, RAG-чанки, файлы и историю диалога перед отправкой в LLM — локально, с сохранением ответов. Прокси, обёртка агентов, библиотека для Python/TypeScript и MCP-сервер. Apache 2.0.

Headroom — слой сжатия контекста для AI-агентов

Headroom — слой сжатия контекста для AI-агентов. Он сжимает всё, что агент читает — вывод инструментов, логи, RAG-чанки, файлы и историю диалога — до того, как это попадёт в LLM. Ответы остаются теми же, токенов уходит в разы меньше. Компрессия выполняется локально: ни промпты, ни содержимое файлов никуда не отправляются.

Что умеет

  • Библиотекаcompress(messages) на Python или TypeScript, встраивается в любое приложение.
  • Проксиheadroom proxy --port 8787, ноль изменений в коде, работает с любым языком.
  • Обёртка агентовheadroom wrap claude|codex|grok|copilot|cursor|aider|opencode|cline|continue|goose|openhands|... одной командой, откат через headroom unwrap <tool>.
  • MCP-сервер — инструменты headroom_compress, headroom_retrieve, headroom_stats для любого MCP-клиента.
  • Кросс-агентная память — один общий стор для Claude, Codex, Gemini и Grok с автоматической дедупликацией.
  • headroom learn — разбирает неудачные сессии и пишет коррекции в CLAUDE.local.md (по умолчанию, gitignored), CLAUDE.md, AGENTS.md, GEMINI.md или GROK.md.
  • Сокращение выходных токенов — урезает не только то, что отправляется модели, но и то, что она пишет обратно.
  • Обратимость (CCR) — оригиналы кешируются локально и достаются по запросу.

Как работает

 Ваш агент / приложение
   (Claude Code, Cursor, Codex, LangChain, Agno, ваш код…)
        │   промпты · вывод инструментов · логи · RAG · файлы
        ▼
    ┌────────────────────────────────────────────────────┐
    │  Headroom   (работает локально — данные не уходят)  │
    │  CacheAligner  →  ContentRouter  →  CCR             │
    │                    ├─ SmartCrusher   (JSON)         │
    │                    ├─ CodeCompressor (AST)          │
    │                    └─ Kompress-v2-base (текст, HF)  │
    │  Кросс-агентная память · headroom learn · MCP       │
    └────────────────────────────────────────────────────┘
        │   сжатый промпт  +  инструмент поиска
        ▼
 LLM-провайдер  (Anthropic · OpenAI · Bedrock · …)
  • ContentRouter определяет тип контента и выбирает компрессор.
  • SmartCrusher / CodeCompressor / Kompress-v2-base обрабатывают JSON, исходный код и прозу соответственно.
  • CacheAligner помечает волатильный контент, который сломал бы KV-кеш провайдера. Промпты он никогда не переписывает.
  • CCR хранит оригиналы локально, чтобы модель могла вызвать headroom_retrieve, когда нужен полный текст.

Быстрый старт (60 секунд)

# 1 — Установка
uv tool install --python 3.13 "headroom-ai[all]"  # CLI в изолированном окружении
pip install "headroom-ai[all]"                    # Python — включает CLI
npm install headroom-ai                           # только TypeScript SDK, без CLI

# 2 — Выбор режима
headroom deploy                         # локальное развёртывание + конфиг агента
headroom wrap claude                    # обернуть кодинг-агента
headroom proxy --port 8787              # drop-in прокси, ноль изменений кода
# или: from headroom import compress     # встроенная библиотека

# 3 — Проверка и экономия
headroom doctor                         # health check — подтверждает маршрутизацию
headroom perf
headroom dashboard                      # live-экономия (нужен запущенный прокси)

Встраивание на Python:

from headroom import compress
from openai import OpenAI

messages = [{"role": "user", "content": "Analyze these results"}]
result = compress(messages, model="gpt-4o")

client = OpenAI()
response = client.chat.completions.create(model="gpt-4o", messages=result.messages)
print(f"Saved {result.tokens_saved} tokens ({result.compression_ratio:.0%})")

headroom wrap запускает локальный прокси, устанавливает Serena для семантической навигации по коду и запускает агента с маршрутизацией через Headroom. Serena регистрируется на уровне пользователя (для Claude Code — в ~/.claude.json), поэтому остаётся доступной в других проектах до headroom unwrap. Отключить можно флагом --code-memory none.

CLI поставляется только в PyPI-пакете. npm-пакет headroom-ai — это TypeScript SDK (import { compress } from 'headroom-ai'), без команды headroom.

Доказательства

Четыре сценария на реальных форматах вывода MCP-серверов, замерено токенизатором провайдера:

Сценарий До После Экономия
Поиск по коду (100 результатов) 17 199 13 597 21%
Разбор инцидента SRE 55 957 24 340 57%
Исследование кодовой базы 58 801 33 895 42%
Триаж GitHub-issue 46 067 32 429 30%

Экономия растёт с повторяемостью данных. Повторяющиеся JSON-массивы и строки логов дают больше 90% в benchmarks/bench_latency.py; проза и уже плотный вывод сжимаются слабо. Точную цифру для своего трафика покажет headroom savings.

Сжатие стоит значительно меньше миллисекунды — 0,21 мс p50 на JSON-результате поиска в 10K токенов, 1,4 мс на 100K токенов — и не влияет на задержку агента.

Точность на python -m headroom.evals suite --tier 1:

Бенчмарк Категория N Baseline Headroom Дельта
GSM8K Математика 100 0.870 0.870 ±0.000
TruthfulQA Факты 100 0.530 0.560 +0.030
SQuAD v2 QA 100 97% при сжатии 19%
BFCL Инструменты 100 97% при сжатии 32%

При N=100 дельта ±0.03 попадает в доверительный интервал, так что на TruthfulQA разница не обнаружима, а не является улучшением.

Сокращение выходных токенов

Всё вышеперечисленное уменьшает отправляемый промпт. Но вы платите и за каждый токен, который модель пишет обратно — а на моделях уровня Opus вывод стоит в 5 раз дороже ввода. Большая часть этого вывода — церемонии: преамбулы «Great, let me…», перепечатанный код и глубокое рассуждение над рутинными шагами.

Headroom урезает это на прокси, без изменений в вашем коде:

  • Управление многословием — добавляет короткую заметку «будь кратким, не повторяй контекст» в конец системного промпта, чтобы кеш промпта продолжал попадать.
  • Маршрутизация усилий — снижает усилия на размышление, когда ход — это лишь продолжение после результата инструмента (чтение файла, прошедший тест). Новые вопросы и ошибки сохраняют полные усилия.
export HEADROOM_OUTPUT_SHAPER=1     # выключено по умолчанию
headroom proxy --port 8787

Экономия на выводе контрфактична — Headroom не видит, что модель написала бы — поэтому отчёт идёт с оценкой и доверительным интервалом:

headroom output-savings
# Reduction: 31.7%  (95% CI 27.7% … 35.7%)   [estimated]

Для измеренной цифры отложите 10% диалогов как контрольную группу: export HEADROOM_OUTPUT_HOLDOUT=0.1.

Совместимость с агентами

Агент headroom wrap Примечания
Claude Code --memory · --code-graph · --1m · --tool-search
Codex делит память с Claude
Grok CLI маршрутизация через GROK_MODELS_BASE_URL
Cursor Вручную запускает прокси и печатает base URL для настроек
Aider запускает прокси + агента
Copilot CLI запускает прокси + агента
VS Code Copilot прозрачный прокси; сохраняет выбранную модель
OpenClaw ставится как плагин ContextEngine
OpenCode инжектит конфиг · запускает прокси + агента
Cline запускает прокси + инжектит конфиг
Continue запускает прокси + инжектит конфиг
Goose запускает прокси + агента
OpenHands запускает прокси + агента
Mistral Vibe запускает прокси + агента
Oh My Pi инжектит конфиг · запускает прокси + агента
Cortex Code Только библиотека 60–65% экономии в режиме библиотеки
Kimi CLI OAuth-токен пробрасывается — логин один раз
ZCode запускает прокси и печатает base URL для настроек

Любой OpenAI-совместимый клиент работает через headroom proxy. MCP-нативные клиенты: headroom mcp install. Долговременная обёртка снимается командой headroom unwrap <tool>.

Когда использовать, а когда пропустить

Подходит, если вы ежедневно работаете с кодинг-агентами и хотите экономить без изменений в коде, работаете с несколькими агентами и нужна общая память, или нужна обратимая компрессия — оригиналы остаются доступны через CCR в течение настроенного TTL.

Пропустите, если вам хватает нативной компакции одного провайдера и не нужна кросс-агентная память, или вы работаете в песочнице, где нельзя запускать локальные процессы.

Headroom окупается на длинных сессиях с тяжёлым выводом инструментов. Короткие разговорные обмены, проза и уже плотные данные сжимаются слабо, а блоки меньше min_input_words возвращаются байт-в-байт.

Интеграции

Ваш стек Подключение
Любое Python-приложение compress(messages, model=…)
Любое TypeScript-приложение await compress(messages, { model })
Anthropic / OpenAI SDK withHeadroom(new Anthropic()) · withHeadroom(new OpenAI())
Vercel AI SDK wrapLanguageModel({ model, middleware: headroomMiddleware() })
LiteLLM litellm.callbacks = [HeadroomCallback()]
LangChain HeadroomChatModel(your_llm)
Agno HeadroomAgnoModel(your_model)
ASGI-приложения app.add_middleware(CompressionMiddleware)
Мультиагентность SharedContext().put / .get
MCP-клиенты headroom mcp install

Что внутри

  • SmartCrusher — универсальный JSON: массивы словарей, вложенные объекты, смешанные типы. Сохраняет элементы с ошибками, значения вне статистического диапазона и первую/последнюю границы — отбор по статистике дисперсии полей, а не по списку ключевых слов.
  • CodeCompressor — AST-ориентированный для Python, JS/TS, Go, Rust, Java, C/C++ и Perl.
  • Kompress-v2-base — HuggingFace-модель, обученная на агентных трейсах.
  • Сжатие изображений — 40–90% сокращения через обученный ML-роутер.
  • Live-zone компрессия — сжимаются только новые байты (свежий вывод инструментов, последний ход). Замороженный префикс остаётся байт-в-байт идентичным, поэтому кеш провайдера выживает, а история никогда не теряется.

Установка и лицензия

uv tool install --python 3.13 "headroom-ai[all]"  # CLI, изолированное окружение
pip install "headroom-ai[all]"                    # Python, всё включено — и CLI
npm install headroom-ai                           # TypeScript SDK (только библиотека)
docker pull ghcr.io/headroomlabs-ai/headroom:latest

Требуется Python 3.10+. Гибкие экстра: [proxy], [mcp], [ml] (Kompress-v2-base), [code], [memory], [vector], [image], [langchain], [agno] и другие. Обновление — headroom update.

Телеметрия: анонимный beacon включён по умолчанию — передаёт только метрики сжатия (коэффициенты, счётчики, ID провайдера и модели, ОС и архитектуру). Никогда не отправляет промпты, ответы, код или пути к файлам. Отключение: HEADROOM_BEACON=off, DO_NOT_TRACK=1 или --offline.

Лицензия — Apache 2.0. Всё в репозитории остаётся открытым; управляемое предложение для команд — отдельный продукт.

Источник: https://github.com/headroomlabs-ai/headroom