fast-jev-compaction заменяет стандартный пересказ истории при сжатии контекста в Claude Code отбором сообщений о вызовах инструментов. Это пригодится, если вы ведёте длинную сессию и не хотите потерять точный путь к файлу или текст ошибки в пересказе. Плагин решает, какие вызовы и ответы инструментов оставить, сократить или удалить; сообщения пользователя и обычный текст ассистента он сохраняет без переписывания.
Почему fast-jev-compaction не пересказывает историю целиком
Когда история диалога становится слишком длинной, Claude Code может сжать её в краткое изложение. Пересказ экономит место, но точная команда, ограничение или имя файла могут в него не попасть. fast-jev-compaction предлагает другой обмен: он не сокращает обычный текст диалога, зато убирает часть старых обращений к инструментам и их результатов.
Вызов инструмента — это, например, просьба ассистента прочитать файл. Результат — содержимое, которое инструмент вернул после чтения. Плагин связывает вызов с результатом по идентификатору tool_use_id, поэтому результат не должен остаться в истории без соответствующего вызова. Вызовы в первом сообщении и в нескольких последних сообщениях защищены от отбора.
Остальные пары оценивает Jev — модель, к которой плагин обращается через TypeSafe API. Для каждого вызова она отдельно отвечает на два вопроса: важно ли помнить, что инструмент запускали, и нужен ли его полный ответ. Если нужен ответ, пара остаётся. Если важен только вызов, ответ сокращается до первых символов и поясняющей строки. Если не нужно ни то ни другое, пара удаляется.
Перед запросом к Jev плагин собирает состояние диалога: текст и входные параметры вызовов остаются видны модели, а объёмные результаты заменяются короткими пометками. Если состояние не укладывается в лимит, плагин поэтапно сокращает именно представление для Jev. Это не то же самое, что переписать итоговую историю: обычные сообщения пользователя и ассистента в результате остаются без изменений.
Когда отбор вызовов полезен в проекте Claude Code
Представьте, что вы работаете с Claude Code над ошибкой и ассистент уже прочитал несколько файлов, запустил инструменты и получил длинные ответы. После сжатия истории вам может понадобиться прежнее ограничение «не менять определённый файл» или точный вывод важного вызова. Плагин сохраняет текст диалога и пытается оставить те результаты инструментов, которые пригодятся дальше. Это выбор модели, а не гарантия, что она угадает правильно.
Другой случай — длинная сессия вайб-кодинга, где старые чтения файлов сменяются новыми. Повторять в истории все прежние результаты может быть незачем, но помнить сам факт обращения к файлу иногда полезно. Для такого случая предусмотрен промежуточный вариант: оставить вызов, а ответ обрезать. Первый результат при этом не восстанавливается из сокращённой записи; при необходимости ассистенту придётся снова вызвать инструмент.
Разработчику npm-пакет полезен, если он сам обрабатывает историю сообщений. README показывает функцию compactMessages и возможность подключить собственный способ обращения к Jev через JevAsker. Пакет также возвращает статистику: число сообщений и символов до и после, причины решений и число запросов. Так можно оценить результат отбора, а не судить о нём только по длине ответа.
Если вы общаетесь только в обычном чате и не используете Claude Code или собственный код для обработки его истории, этот инструмент вам не нужен. Это плагин Claude Code, а не навык с готовыми инструкциями для ответов и не MCP-сервер, который добавляет агенту новые действия.
Установка плагина и ключ TypeSafe
Для плагина нужен Claude Code версии 2.1.274 или новее: функциональные хуки, через которые он работает, в README названы возможностью раннего доступа. Нужно включить их там, где запущен Claude Code, и указать ключ TypeSafe API. README приводит такую запись для ~/.claude/settings.json:
{ "env": { "CLAUDE_CODE_ENABLE_FUNCTION_HOOKS": "1", "TYPESAFE_API_KEY": "<your key>" } }
Затем добавьте репозиторий как источник плагинов и установите плагин. Те же команды, по README, можно выполнить из оболочки или как команды внутри сессии:
claude plugin marketplace add tamaratran/fast-jev-compaction
claude plugin install fast-jev-compaction@fast-jev-compaction
При установке Claude Code предложит параметры плагина, в том числе ключ и пороги отбора. Если оставить значения по умолчанию, плагин возьмёт ключ из TYPESAFE_API_KEY в окружении. После установки перезапустите Claude Code или выполните /reload-plugins. Не записывайте ключ в исходный код и не отправляйте его в репозиторий: README отдельно предупреждает об этом.
Если вам нужна библиотека в собственном проекте, в README указаны отдельные команды:
npm install fast-jev-compaction
export TYPESAFE_API_KEY=...
Версию Node.js README не уточняет. Там же приведён способ запустить плагин из скачанного репозитория без установки через каталог плагинов; выполнять команду нужно из корня репозитория:
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude --plugin-dir .
Что вводить после установки и какой результат ждать
Первый сценарий из README — обычное сжатие сессии. После установки запустите /compact или дождитесь автоматического сжатия. Если отобранная история заменила стандартный пересказ, Claude Code покажет сообщение вида fast-jev-compaction: kept N/M messages, no summary (…). Если Jev не смог убрать достаточно сообщений или произошла ошибка, появится fallback to built-in summary (…): плагин вернёт стандартный механизм Claude Code.
Второй сценарий — передать историю в библиотеку. Пример README начинается с пользовательского запроса Fix the failing test. Never edit src/generated., затем добавляет вызов Read для src/a.ts и результат чтения. Код передаёт такую историю в compactMessages и печатает сообщения, решения и статистику:
const result = await compactMessages(transcript, { preserveRecentMessages: 4 });
console.log(result.messages, result.decisions, result.stats);
if (reductionRatio(result) < 0.25) {
// not worth it: keep the original transcript, or summarize instead
}
Здесь preserveRecentMessages: 4 защищает четыре последних сообщения. Проверка reductionRatio(result) < 0.25 показывает предусмотренный автором вариант: при недостаточном сокращении оставить исходную историю или выбрать пересказ. Конкретный набор удалённых вызовов README не обещает — решение зависит от истории и ответов Jev.
Что проверить перед передачей истории в Jev
Плагин отправляет Jev состояние диалога для оценки. Результаты инструментов в этом запросе заменяются пометками, но текст сообщений и входные параметры вызовов входят в состояние; если оно слишком длинное, плагин сокращает его по этапам. Проверьте, допустимо ли передавать такой контекст внешнему API в вашем проекте. README не описывает условия хранения данных у сервиса, поэтому делать вывод о конфиденциальности по нему нельзя.
Размеры запросов плагин оценивает без токенизатора — программы точного подсчёта токенов. По умолчанию он ограничивает состояние оценкой в 25 000 токенов, а запрос вместе с вопросами — 30 000. При длинной истории состояние может повторяться в нескольких запросах к Jev. Если история не помещается даже после сокращения состояния, нет ключа или ответ Jev некорректен, плагин переключается на встроенный пересказ Claude Code.
На момент обзора репозиторий создан 17 сентября 2026 года, последний коммит датирован 18 сентября 2026 года; у него 7 433 звезды и лицензия MIT. Проекту на эту дату один день, поэтому по карточке нельзя судить о долгой работе плагина в реальных сессиях. Для проверки начните с несекретной истории и посмотрите, что осталось после /compact: вероятность сохранения, которую выдаёт Jev, не доказывает, что удалённый результат больше не понадобится.
Источник: репозиторий tamaratran/fast-jev-compaction на GitHub.