Everest (compress) — сжатие вывода инструментов Codex до попадания в контекст модели

· 2 мин чтения
context-management context-engineering tokens cli codex
📂 Исходный код на GitHub

Бесплатный CLI от Everest, который сжимает вывод инструментов Codex до того, как тот попадёт в контекст модели. Репозиторий содержит CLI, установщик и опубликованные файлы релизов. Сам сервис сжатия, веса моделей и SDK в репозиторий не входят.

Everest (compress) — сжатие вывода инструментов Codex до попадания в контекст модели

Everest (compress) — сжатие вывода инструментов Codex до попадания в контекст модели

Когда coding-агент читает проект, он получает огромные куски текста: листинги файлов, вывод тестов, логи, diff. Всё это уходит в контекст модели и стоит денег, а модель от него часто не нуждается в полном объёме. Репозиторий spenmcke/compress решает именно эту задачу. Это бесплатный CLI, который сжимает вывод инструментов Codex до того, как тот попадёт в контекст.

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

Репозиторий написан на Python, распространяется по лицензии MIT и сейчас на версии 0.1.0. Это молодая разработка: в истории пять коммитов и один релиз.

Что именно сжимается

Под сжатие попадает не весь вызов модели, а только текстовая часть ответа инструмента. В коде прокси перечислены конкретные поля: text, content, output, stdout, stderr, result, body. Отдельно в коде заданы имена функций, которые считаются запуском команд в оболочке: exec, exec_command, write_stdin.

Есть порог по размеру. Константа MIN_OUTPUT_CHARS в коде равна 2048. Результат короче этого порога не отправляется на сжатие. Логика простая: короткий вывод и так почти ничего не стоит, а лишний запрос к сервису только добавит задержки.

Сжатие устроено через локальный прокси. Он слушает соединение на loopback и пересылает запросы дальше, в api.openai.com/v1 для запусков с ключом API или в chatgpt.com/backend-api/codex для запусков через подписку ChatGPT. По дороге прокси перехватывает ответы инструментов и заменяет текст на сжатый.

Как выглядит сжатый результат

Сжатая версия приходит от модели в виде одного JSON-объекта с двумя полями: type и content. В коде описаны три случая.

type Что означает Пример
unchanged Сжимать не нужно, content равен null Вывод уже короткий и понятный
plain Обычный текст: листинги, итоги тестов, статистика, логи «Все выбранные тесты прошли, трассировки ошибки не было»
code Список диапазонов строк для исходного кода, diff, grep, трассировок Номера строк с короткими пометками, что в них происходит

Третий случай — самый осторожный. Для кода нельзя пересказывать содержимое, потому что важны точные номера строк и то, что строки стоят рядом. Поэтому вместо пересказа модель возвращает диапазоны строк с короткими пометками. Правило из промпта звучит прямо: сжатый вывод должен быть не длиннее оригинала, а когда есть сомнение, лучше оставить содержимое как есть.

Задание на сжатие

Модель не сжимает вывод «вообще». Перед вызовом формируется конкретный вопрос, и ответ на него определяет, что именно сохранить. По умолчанию вопрос такой:

Which exact results, errors, identifiers, paths, diagnostics, and code lines
from this command output are needed for the next action?

То есть модель ищет результаты, ошибки, имена, пути, диагностику и строки кода, нужные для следующего шага. Всё остальное можно отбросить.

Задание можно уточнить вручную. В начале команды ставится отдельный комментарий с директивой compress, и она должна быть первой непустой строкой:

# compress: find the failing assertion and the line that changed it
pytest tests/test_auth.py -q

Код проверяет, что директива стоит именно первой непустой строкой, что она одна, и что её длина не больше 1000 символов. Если условия нарушены, директива игнорируется и используется вопрос по умолчанию.

Есть и противоположный режим. Значения raw, verbatim, uncompressed и full output означают «оставить как есть». В таком случае прокси не сжимает вывод.

Установка

Требования простые: macOS или Linux, Bash или Zsh и уже установленный Codex. Python должен быть версии 3.11 или новее. Установка одной командой:

curl -fsSL https://install.everestagi.com/install.sh | sh && source ~/.config/everest/shell.sh

Установщик проверяет контрольную сумму пакета, ставит команду, добавляет интеграцию в оболочку для Codex и запускает вход через браузер в Everest. Дальше нужно открыть новое окно терминала и запустить codex как обычно.

Установщик работает через uv и кладёт файлы в ~/.local/bin. Перед установкой он проверяет, не занято ли имя команды. Если по тому же пути лежит посторонняя программа с именем compress, установщик остановится и попросит выбрать другой каталог.

Команды

everest savings          # show estimated savings for the latest run
everest doctor           # check the service connection
everest update --check   # check for an update
codex --uncompressed      # run Codex without compression
everest uninstall        # remove the integration and CLI

everest doctor — самая полезная команда при настройке. Она проверяет конфигурацию и доступность адреса сервиса. Проверка идёт по OpenAI-совместимому маршруту /models, без отправки запроса на генерацию. Есть ключ --json, если нужен вывод для разбора.

codex --uncompressed отключает сжатие на один запуск. Это удобно, когда вы хотите посмотреть, что именно модель потеряла.

В коде CLI есть также login, logout и install. Последняя настраивает сжатие для Codex вручную и умеет выбирать оболочку: --shell auto, --shell zsh или --shell bash.

Одно расхождение стоит знать заранее. README сейчас называет команды everest, но сам CLI, пакет compress-cli и точка входа compress по-прежнему называются compress. Последние коммиты репозитория как раз переименовывают compress в everest, и переименование не завершено. Это признак ранней стадии проекта, а не отдельная функция.

Что уходит в сервис

Здесь нужно быть внимательным, потому что сжатие — это сетевая операция.

На сервер отправляется подходящий вывод инструментов, аргументы вызова, описание задачи и до 4000 символов последнего сообщения пользователя. Сервис обрабатывает это и возвращает сжатый результат. Содержимое сессии сервис не сохраняет. В логах остаются служебные данные: хеши, счётчики, результаты запросов, время и количество токенов.

Свои локальные журналы событий тоже содержат только метаданные. Но есть важная оговорка: собственные файлы сессий Codex на вашем компьютере могут содержать исходное содержимое. То есть оригинал никуда не делся, он остался на диске.

Экономия и её оценка

CLI считает, сколько токенов было сэкономлено на последнем запуске. В коде есть таблица цен на миллион токенов для нескольких моделей Codex и GPT, с отметкой даты, на которую эта таблица актуальна.

Считается не только прямая экономия. Учитываются некэшированные входные токены, кэшированные входные и запись в кэш. Для запусков по подписке Codex запись в кэш не тарифицируется, а для запусков по ключу API она учитывается отдельно.

README предупреждает, что это оценки. Они не гарантируют меньший счёт и не гарантируют, что модель поведёт себя точно так же.

Обновления и снятие

CLI проверяет обновления не чаще одного раза в счётные сутки, и проверка происходит в начале запуска Codex. Переменная COMPRESS_AUTO_UPDATE=0 полностью отключает эту проверку.

Снятие установки по умолчанию сохраняет учётные данные, конфигурацию и историю экономии. Полная очистка — everest uninstall --purge.

Что лежит в репозитории

Репозиторий открытый, но исходники тут не полные. В нём есть CLI, установщик и опубликованные файлы релизов — wheel-пакеты лежат в каталоге releases вместе с файлами контрольных сумм.

Сам сервис сжатия, веса моделей, клиентские SDK и конфигурация развёртывания в репозиторий не входят. Это важный момент: полностью локально сжатие здесь не работает. Нужен либо сервис Everest, либо свой OpenAI-совместимый адрес, который указывается в конфигурации. Модель сжатия, веса и код сервиса вам не отдадут.

Лицензия — MIT, текст лежит в LICENSE, а список сторонних компонентов и их авторов — в THIRD_PARTY_NOTICES.md. В коде есть прямая отсылка: протокол сжатия адаптирован из исходного промпта и парсера вывода, тоже под MIT.

Кому это пригодится

Подойдёт тем, кто работает в Codex и много читает вывод: запускает тесты, смотрит логи, греет grep и rg по большому репозиторию. Смысл простой — вы продолжаете видеть полный вывод в терминале, а платить и ждать приходится только за сокращённую версию.

Не подойдёт тем, кому нужен полностью локальный инструмент без сети. Весов модели в открытом доступе нет, а сжатие работает через удалённый сервис.

Отдельно стоит проверить codex --uncompressed на своём типе задач. Если для вас важна точная работа с кодом и номерами строк, стоит сравнить оба режима и решить, где сжатие не мешает.

Источник: https://github.com/spenmcke/compress