Dynamic Context Pruning — умное сжатие контекста для OpenCode
📂 Исходный код на GitHubПлагин динамического сжатия контекста для OpenCode — интеллектуально управляет контекстом диалога, чтобы оптимизировать расход токенов.
Dynamic Context Pruning (DCP)
Dynamic Context Pruning — это плагин для OpenCode, который автоматически снижает расход токенов, интеллектуально управляя контекстом диалога с LLM. Проект набирает популярность: почти 4 000 звёзд на GitHub.
Установка
Плагин ставится прямо из CLI:
opencode plugin @tarquinen/opencode-dcp@latest --global
Команда устанавливает пакет и добавляет его в глобальный конфиг OpenCode.
Как это работает
DCP уменьшает размер контекста через инструмент компрессии и автоматическую очистку. При этом история сессии никогда не изменяется — плагин заменяет обрезанный контент плейсхолдерами перед отправкой запроса в LLM.
Компрессия (Compress)
Compress — инструмент, который выдаётся модели. Он заменяет закрытые, устаревшие фрагменты диалога на высокоточные технические резюме.
Ключевое отличие от стандартного процесса компактации OpenCode: вместо статического срабатывания при достижении лимита контекста и сжатия всей сессии, Compress позволяет модели самой выбирать момент активации (по завершению подзадачи) и сжимать только те сообщения, которые больше не нужны дословно.
Поддерживаются два режима:
range— сжимает непрерывные промежутки диалога в одно или несколько резюме.message(экспериментальный) — сжимает отдельные «сырые» сообщения, позволяя модели управлять контекстом точнее.
В режиме range, когда новое сжатие перекрывает более раннее, раннее резюме вкладывается в новое — так информация сохраняется через слои компрессии, а не размывается. В обоих режимах защищённые выводы инструментов (субагенты, навыки) и защищённые паттерны файлов сохраняются в резюме, чтобы важная информация не терялась. Опция protectUserMessages сохраняет ваши сообщения дословно (но большие вставленные промпты тогда никогда не сожмутся).
Дедупликация
Находит повторные вызовы инструментов (тот же инструмент, те же аргументы) и оставляет только самый свежий результат. Пересчитывается при запуске Compress, так что промпт-кэш затрагивается только вместе с компрессией.
Очистка ошибок (Purge Errors)
Удаляет входные данные неуспешных вызовов инструментов после заданного числа ходов (по умолчанию 4). Сообщения об ошибках сохраняются; удаляется только потенциально большой входной контент. Также пересчитывается при использовании Compress.
Конфигурация
DCP использует собственный файл конфигурации, который ищется в порядке приоритета:
- Глобальный:
~/.config/opencode/dcp.jsonc(илиdcp.json), создаётся автоматически при первом запуске. - Пользовательская папка конфигов:
$OPENCODE_CONFIG_DIR/dcp.jsonc, если задана переменнаяOPENCODE_CONFIG_DIR. - Проектный:
.opencode/dcp.jsoncв папке.opencodeпроекта.
Каждый уровень перекрывает предыдущий, то есть проектные настройки имеют приоритет над глобальными. После изменения конфига нужно перезапустить OpenCode.
Совет: если вы используете модели с меньшими окнами контекста (GitHub Copilot или локальные модели), снизьте compress.minContextLimit и compress.maxContextLimit в конфигурации.
Базовый пример конфига:
{
"$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/master/dcp.schema.json",
"enabled": true,
"autoUpdate": true,
"debug": false,
"pruneNotification": "detailed",
"pruneNotificationType": "chat",
"manualMode": {
"enabled": false,
"automaticStrategies": true
},
"compress": {
"mode": "range",
"permission": "allow",
"showCompression": false,
"summaryBuffer": true,
"maxContextLimit": 100000,
"minContextLimit": 50000,
"nudgeFrequency": 5,
"iterationNudgeThreshold": 15,
"nudgeForce": "soft",
"protectUserMessages": false
},
"strategies": {
"deduplication": {
"enabled": true
},
"purgeErrors": {
"enabled": true,
"turns": 4
}
}
}
Поддерживаются modelMaxLimits и modelMinLimits для пер-модельных переопределений (например, "openai/gpt-5.3-codex": 120000 или "anthropic/claude-sonnet-4.6": "80%").
Команды
/dcp— открывает панель DCP с контекстом, статистикой и контролем ручного режима./dcp-compress [focus]— просит модель выполнить один проход компрессии. Необязательный текстfocusуказывает, что именно сжимать, следуя активномуcompress.mode.
Переопределение промптов
DCP предоставляет шесть редактируемых промптов: system, compress-range, compress-message, context-limit-nudge, turn-nudge, iteration-nudge. Функция отключена по умолчанию — включите experimental.customPrompts: true. По умолчанию они записываются в ~/.config/opencode/dcp-prompts/defaults/, переопределения — в отдельной папке с теми же именами файлов.
Защищённые инструменты
По умолчанию от сжатия защищены: task, skill, todowrite, todoread, compress, batch, plan_enter, plan_exit, write, edit. Массивы protectedTools в commands и strategies дополняют этот список. Для инструмента Compress настройка compress.protectedTools гарантирует, что выводы указанных инструментов попали в сжатое резюме.
Влияние на промпт-кэширование
LLM-провайдеры кэшируют промпты на основе точного совпадения префикса. Когда DCP обрезает контент, он меняет сообщения, что инвалидирует кэшированные префиксы с этой точки.
Компромисс: вы теряете часть кэш-хитов, но выигрываете в экономии токенов и снижении галлюцинаций от устаревшего контекста. В большинстве случаев, особенно в длинных сессиях, экономия перевешивает потери. В тестах доля кэш-хитов составила примерно 85% с DCP против 90% без.
Нет влияния для: провайдеров с оплатой за запрос (например, GitHub Copilot) и единообразным тарифом на токены (например, Cerebras).
Статус проекта
Разработка DCP замедлилась: большая часть новых функций управления контекстом переехала в Sleev — локальный прокси для Claude Code, Codex и OpenCode, который развивает идеи DCP и работает с любым харнесом. Для новых пользователей рекомендуется начать с npm i -g sleev, но DCP остаётся доступен для пользователей плагина OpenCode.
Лицензия: AGPL-3.0-or-later.