Блог • Claude Code

После того как сессия Claude Code в терминале свыше 200K токенов простояла около 54 минут, как выключить автоматическое сжатие в JSON настроек?

Заметка Claude Code 2.1.299 конкретна: в терминале разговор свыше 200K токенов после примерно 54 минут простоя сжимается до истечения часового кэша промпта, чтобы следующее сообщение не пересчитывало всю историю. Сжатие заменяет историю сообщений сводкой. Останавливает эту замену settings.json, а не ещё один промпт.

Какие поля хранить в блоке compaction Messages API, написано в той статье про API. Сессия, права и JSON-поток — в статье о потоке Claude Code. Эта статья только о сжатии простоя в терминале: когда оно заменяет историю и какие два поля в settings.json его выключают или поднимают порог.

Решение: в терминале, на часовом кэше, выше примерно 200K токенов, после примерно 54 минут простоя сводка заменяет историю. Только boolean false у idleCompaction в settings.json это выключает.

При каких условиях история заменяется?

Заметка 2.1.299 ограничивает случай терминалом: разговор свыше 200K токенов после примерно 54 минут простоя сжимается до истечения часового кэша промпта. Та же заметка даёт выключатель и переменную окружения для нижнего предела токенов и пишет, что оба требуют 2.1.290 или новее. 2.1.302 добавляет в /config строку Idle compaction, и уведомление после сжатия говорит, как его выключить. Журнал изменений: журнал изменений Claude Code.

Руководство по кэшу промпта говорит то же так: если сессия в терминале на часовом TTL и долго простаивает, Claude Code может сжать её незадолго до истечения кэша. Основной разговор в подписке Claude внутри лимита плана по умолчанию на одном часе. На кредитах использования, API-ключе или у облачного провайдера основной разговор по умолчанию на пяти минутах. Сжатие простоя в этом руководстве — это часовой случай. Настройка — idleCompaction со значением false, версия снова 2.1.290 или новее. Руководство: руководство по кэшу промпта.

Какие два поля писать в settings.json?

Одно поле включает или выключает. Другое меняет только нижний предел токенов. Значение в env — строка, потому что Claude Code хранит переменные окружения в файле настроек как строки. Число 200000 — неверная форма.

Настройки, которые сохраняют историю. idleCompaction — boolean false, порог остаётся на значении по умолчанию 200000.
{
  "idleCompaction": false,
  "env": {
    "CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS": "200000"
  }
}

Если нужно реже сжимать, а не выключать совсем, поднимите цифры в этой строке. Журнал изменений говорит, что переменная меняет нижний предел в 200K токенов. Он не говорит, что она меняет ожидание около 54 минут. С 2.1.302 это можно переключить и в /config, не правя файл. Ручная правка по-прежнему требует boolean, а не строку.

Какая схема фиксирует форму этого JSON?

Используйте JSON Schema , чтобы зафиксировать типы. idleCompaction должен быть boolean. Порог в env должен быть строкой. Схема не доказывает, что надо выключать. true — всё ещё верная форма. Сохранять историю — правило приложения, которое возвращает true в false.

Форма настроек. idleCompaction true всё ещё проходит эти типы.
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["idleCompaction"],
  "properties": {
    "idleCompaction": { "type": "boolean" },
    "env": {
      "type": "object",
      "properties": {
        "CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS": { "type": "string" }
      },
      "required": ["CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS"]
    }
  }
}
Что видно в настройкахСхемаЕсли нужна история
idleCompaction — это строка falseНе проходит. Здесь нужен boolean.Сначала сделайте boolean, потом выберите включено или выключено.
Порог — число 200000Не проходит. Значения в env — строки.Смените на строку 200000 или удалите поле и оставьте порог по умолчанию.
idleCompaction равен true, форма вернаПроходит. true — это boolean.Смените на false, если нужна история. true значит, что сжатие простоя всё ещё может заменить историю.

После сжатия что остаётся и что уже заменено?

Руководство пишет: сжатие заменяет историю сообщений сводкой, поэтому префикс кэша слоя разговора уже не тот. Слой системного промпта используется дальше, если это возобновление не сохранило системный промпт, который и так бы изменился. Контекст проекта читается с диска заново. Этот слой попадает в кэш только если CLAUDE.md и память не менялись с начала сессии. Это не блок compaction из статьи про Messages API.

Этот слойПосле сжатия
История сообщенийЗаменена сводкой. Префикс разговора следующего запроса отличается от того, что был до сжатия.
Системный промптОбычно используется дальше. Если возобновление сохранило системный промпт, который бы изменился, первое сжатие переключается на текущий промпт, и этот слой строится заново один раз.
CLAUDE.md и памятьЧитаются с диска заново. Кэш попадает только если они не менялись с начала сессии. CLAUDE.md, изменённый посреди сессии, ждёт сжатия, очистки или перезапуска, прежде чем войти в сессию.
Инструменты, вызванные раньше2.1.304 добавляет имена инструментов, вызванных раньше, в сводку сжатия в виде транскрипта, сочетание Ctrl+O. Заметка говорит об именах, а не о полном JSON аргументов. Сохраните аргументы сами, если они ещё нужны.

/recap — не та же замена. Он дописывает сводку как вывод команды, история сообщений остаётся, префикс кэша остаётся. /rewind обрезает до более раннего хода, а не пишет сводку. Сжатие простоя — это путь, который заменяет историю сводкой.

Чем это отличается от статьи про compaction Messages API?

Статья про APIЭта статья
Где это происходитВосстановление сессии Messages APIТерминал Claude Code, простой на часовом кэше
JSON, который проверяетеПоля, которые должны остаться как есть в блоке compactionidleCompaction и нижний предел токенов в settings.json
Как остановитьНе тем, что переключатель простоя стоит в falseПоставить idleCompaction в boolean false или выключить в /config

Как проверить эти настройки в JSONNote?

  1. 1
    Выбрать нужную операцию

    Откройте JSON Schema. Переключите действовать на Проверьте с помощью Schema. Настройки — в первое поле, схему выше — во второе. idleCompaction может быть только boolean. Если порог записан, он может быть только строкой.

  2. 2
    Прогнать четыре плохих документа

    Поставьте idleCompaction равным строке false, удалите idleCompaction, поставьте порог числом 200000 или оставьте env и удалите порог внутри. Все четыре не проходят. Настройки false выше проходят. Прохождение значит только верную форму.

  3. 3
    Сравнить false и true

    Откройте JSON Сравнить Diff. В первое поле — настройки с idleCompaction false. Во втором поменяйте только idleCompaction на true. Строка порога может остаться той же. Оба проходят схему. Автозамену истории останавливает false, а не эта проверка формы.

Вопросы

Это то же самое, что ручной /compact?

Нет. /compact вы запускаете сами между задачами. Сжатие простоя — это терминал, который заменяет историю сводкой после примерно 54 минут без нового сообщения, когда сессия выше примерно 200K токенов и на часовом кэше. Оба заменяют историю. idleCompaction в settings.json выключает только путь простоя.

Сессия с API-ключом тоже сжимается через 54 минуты?

Руководство помещает сжатие простоя на сессию в терминале с часовым TTL. На кредитах использования, API-ключе или у облачного провайдера основной разговор по умолчанию на пяти минутах, а не на часе. Ожидание около 54 минут в журнале изменений — это то, что идёт до истечения часового кэша. Не переносите эти 54 минуты на пятиминутный случай.

После выключения следующее сообщение всё ещё может быть медленным?

Да. Журнал изменений даёт это поведение, чтобы следующее сообщение не пересчитывало всю историю. Выключение только останавливает замену истории сводкой. После истечения кэша следующее сообщение всё ещё может заново обработать несжатую историю. Остаётся исходный текст.

Это та же статья, что сентябрьская про Conversation Compaction?

Нет. Та статья о полях, которые Messages API должна сохранить без изменений вокруг сжатия, чтобы сессия продолжилась. Эта — о том, как терминал Claude Code после простоя заменяет историю и как settings.json это выключает. Оба называют сжатием. JSON, который вы храните, — не тот же документ.

Остаются ли аргументы инструмента в сводке сжатия?

2.1.304 говорит, что сводка сжатия в виде транскрипта содержит имена инструментов, вызванных раньше, сочетание Ctrl+O. Там не сказано, что полный JSON аргументов остаётся в сводке. Если аргументы ещё нужны, сохраните копию до сжатия и проверьте её схемой.

Итог

В терминале у сессии выше примерно 200K токенов, простоявшей около 54 минут на часовом кэше, история заменяется сводкой. CLAUDE.md читается с диска заново. Имена инструментов могут появиться в сводке транскрипта с 2.1.304. JSON аргументов сохраняете вы сами.

Решение: поставьте idleCompaction в boolean false, чтобы сохранить историю; если меняете порог, пишите строку; выключение не останавливает истечение кэша; ни /recap, ни /rewind не являются этой заменой простоя.

Дальше: зафиксируйте boolean idleCompaction и строку порога схемой, затем через Diff посмотрите false рядом с true.

Назад в блог