Коротко (TL;DR)
Контекст в Claude Code — конечный ресурс, и главная ошибка думать, что он «просто заканчивается» на пределе окна. На деле качество проседает задолго до предела, а при сжатии теряется не случайный шум, а предсказуемые вещи: отрицания, точные числа, история отвергнутых решений.
- Коротко (TL;DR)
- Почему контекст заканчивается раньше, чем кажется
- Внутри сессии: что переживает /compact
- Между сессиями: resume, CLAUDE.md и память
- Между агентами: субагент отдаёт саммари, а не всё окно
- Шаблон handoff-документа: собираем пошагово
- Сколько это стоит
- Где ломается и что теряется первым
- Риски: когда потерянное ограничение опасно
- Альтернативы: форматы прогресс-файла и когда handoff не нужен
- FAQ
Проблема живёт на трёх уровнях, и для каждого — свой инструмент:
— Внутри одной сессии окно переполняется — спасает /compact (сжатие истории) и ручное правило «компактить около 40%».
— Между сессиями контекст обнуляется — возвращает /resume, а постоянные вещи держат CLAUDE.md и память.
— Между агентами субагент теряет нить — решает handoff-документ: осознанно написанная сводка для следующего агента.
Эти три механики постоянно путают. /compact продолжает ту же сессию со сжатой историей; /resume возвращает к старой сессии целиком; handoff — это не автоматика, а сводка, которую вы (или агент) пишете вручную. Ниже — точный контракт «что переживает компакт», готовый шаблон handoff-документа и честный разбор, что теряется и чем это опасно.
Пороги и поведение компакта меняются между версиями — сверяйтесь с документацией; у волатильных цифр в тексте указана своя дата.
Почему контекст заканчивается раньше, чем кажется
У долгоживущего агента есть три системные стены: окно конечно, между сессиями нет состояния, и у модели нет встроенной самопроверки — она не знает наверняка, что забыла.
Первая стена — самая коварная, потому что действует плавно. Явление называют context rot: способность модели точно вспоминать нужное снижается по мере роста заполнения окна. Это градиент, а не обрыв — агент не «выключается» на 100%, он постепенно тупеет. Один инженер Anthropic (Tariq), в пересказе стороннего блога, отмечал заметную деградацию уже примерно с 40% заполнения даже на больших окнах — это community-эвристика, а не официальный порог. Отсюда и практическое «правило 40%»: не ждать авто-сжатия, а компактить раньше, пока качество ещё высокое.
Насколько раньше — вопрос цифр. Автоматический компакт срабатывает поздно: по замерам сообщества на июль 2026 года, около 83,5% заполнения (раньше было 77–78%), с буфером порядка 33K токенов. Но это неофициальные измерения — в официальной документации точного порога нет, а другой независимый гайд называет вовсе 95%. Вывод для практики: не полагайтесь на авто-триггер как на защиту качества, он про защиту от переполнения, а не про «пока всё хорошо». Держите руку на /compact сами.
Внутри сессии: что переживает /compact
/compact сжимает историю текущей сессии: модель сохраняет суть и продолжает работу в том же диалоге. Что именно она сохраняет, а что выбрасывает — не магия, а вполне конкретный контракт.
Модель при сжатии удерживает архитектурные решения, нерешённые баги, детали реализации и содержимое примерно пяти последних файлов; отбрасывает избыточные результаты вызовов инструментов (те самые простыни логов). Отдельно ведёт себя обвязка сессии:Элемент Что происходит при /compact Системный промпт Не меняется — он не часть истории сообщений Корневой CLAUDE.md, авто-память Переинъектируются с диска — не теряются Path-scoped правила, вложенные CLAUDE.md Выпадают, пока агент снова не прочитает файл Навыки (skills) Ограничены капами (порядка 5000 / 25000 токенов) Избыточные tool-результаты Отбрасываются в первую очередь
Не путайте /compact с /clear. /compact — та же сессия, сжатая история, работа продолжается. /clear — новый разговор с чистого листа; старый при этом никуда не девается, к нему можно вернуться через /resume. Компакт — «уплотнить», очистка — «начать заново».
Между сессиями: resume, CLAUDE.md и память
Каждая новая сессия Claude Code стартует с чистого окна. Из прошлого автоматически переезжают только два канала: CLAUDE.md (что вы написали руками) и авто-память (что Claude записал сам) — оба подгружаются в начале каждой сессии.
Чтобы вернуться к конкретной прошлой сессии целиком, есть /resume (алиас /continue). С версии v2.1.144 фоновые сессии в списке выбора помечаются меткой bg, чтобы не путать их с интерактивными.
Разница между тремя каналами постоянства важна на практике. /resume возвращает всю историю конкретной сессии — это дорого по контексту, но полно: подходит, когда нужно продолжить ровно с того места. CLAUDE.md — это то, что вы решили держать всегда (правила проекта, соглашения, важные пути); оно переинъектируется в каждую новую сессию и в этом смысле «бесплатно» переживает и компакт, и смену сессии. Авто-память — промежуточный канал: Claude сам записывает то, что счёл достойным запоминания, и это тоже переезжает между сессиями. Практический вывод: разовое живое состояние передавайте через /resume или handoff, а то, что должно жить вечно, кладите в CLAUDE.md — не рассчитывайте, что важное правило «само переживёт» через историю диалога.
Здесь важна граница: CLAUDE.md и авто-память — это про долгую память проекта (что помнится всегда), и это отдельная большая тема. В этой статье нас интересует механика передачи — как перенести живое состояние работы, а не что запомнить навсегда. Если вам нужна именно постоянная память, её логику мы разбираем отдельно; тонкость версии модели (размер окна, пороги) тоже влияет на то, как часто вы упираетесь в компакт — это видно на разборе возможностей Claude Sonnet 5 с его большим контекстным окном.
Между агентами: субагент отдаёт саммари, а не всё окно
Когда работу делает субагент, он трудится в своём отдельном контекстном окне и возвращает родителю не всё, что прочитал, а сжатую сводку — обычно порядка 1000–2000 токенов. Это и есть передача контекста между агентами в чистом виде: сто прочитанных файлов сворачиваются в абзац вывода.
Тот же принцип работает как приём проектирования — progressive disclosure (постепенное раскрытие): не загружать в агента всё заранее, а давать информацию по мере надобности, ссылками вместо полного текста. Выгода двойная: контекст оркестратора остаётся чистым, а субагент не отвлекается на лишнее и работает точнее по своей узкой задаче. В Dynamic Workflows идея доведена до предела — план и ветвление живут в переменных скрипта, а в контекст модели попадает только финальный результат шага, поэтому такой воркфлоу и тянет десятки шагов без переполнения.
Отдельно стоит различать context reset и компакцию — их часто считают синонимами, а это разные вещи. Компакция сохраняет непрерывность диалога, но не лечит «context anxiety» — эффект, когда модель занижает свою оставшуюся способность и начинает торопиться закончить. Reset даёт чистый лист (тревога уходит), но ценой того, что всё важное нужно вручную переложить в handoff-документ. Именно к нему и переходим.
Шаблон handoff-документа: собираем пошагово
Handoff-документ — это осознанно написанная сводка состояния для следующего агента или сессии. Не автоматика: вы или агент пишете её намеренно, когда близится предел контекста или задача передаётся дальше.
Хорошая новость — структура давно устоялась. Сведём две независимые схемы (aipatternbook.com и agentpatterns.ai) в один шаблон из пяти полей:
# Handoff
## 1. Цель (Objective)
Что мы вообще делаем и какой результат считается готовым.
## 2. Ограничения (Constraints)
Жёсткие рамки: чего делать НЕЛЬЗЯ, какие требования обязательны.
(Это поле критично — именно ограничения теряются первыми, см. риски.)
## 3. Принятые решения (Prior decisions)
Что уже решено и ПОЧЕМУ; какие варианты отвергнуты и почему —
чтобы получатель не гонялся за уже закрытыми гипотезами.
## 4. Текущее состояние (Current state)
Где мы сейчас: что сделано, что в работе, ссылки на файлы/ветки.
## 5. Следующие шаги (Next steps)
Что делать дальше, по пунктам.
Главное правило, которое противоречит инстинкту, — не дублируй. При потере контекста хочется записать в handoff всё подряд, но самый частый провал — не «мало», а слишком много: полная цепочка рассуждений заставляет получателя перебирать уже отвергнутые ходы («context dump fallacy»). Не копируйте в handoff то, что уже существует в проекте (PRD, ADR, коммиты) — ссылайтесь на них по пути. В документ пишите только то, что живёт исключительно в разговоре и иначе исчезнет.
Как это выглядит на практике. Плохой handoff — это простыня: «я попробовал вариант A, потом подумал про B, но вспомнил про C, посмотрел файл X, там было…» — получатель тонет и повторяет ваш путь. Хороший — короткий и адресный: «Цель: починить экспорт в CSV. Ограничение: не трогать схему БД. Решено использовать стриминг вместо загрузки в память (вариант с буфером отвергнут — падал на файлах >1 ГБ). Сейчас: готов парсер, не дописан вывод заголовков. Дальше: доделать заголовки, добавить тест на пустой файл». Пять строк вместо страницы — и следующий агент сразу в контексте, без раскопок.
Обратите внимание, почему поле «Принятые решения» хранит и отвергнутые варианты с причиной: без этого получатель с высокой вероятностью снова предложит буфер в памяти — тот самый, что уже провалился. Отрицания и история отказов теряются при сжатии первыми (об этом ниже), поэтому именно их важно зафиксировать явно.
Parallel-safe рецепт. Если вы гоняете несколько терминалов параллельно, один общий handoff-файл превращается в гонку записи (last-write-wins, кто-то затрёт чужое). Решение простое: timestamped-файлы — каждый агент пишет свой handoff-<время>.md, а не общий один. Race condition исчезает.
Что это не «фича одного вендора» — хорошо видно по индустрии: тот же паттерн под тем же именем реализован в OpenAI Agents SDK (transfer_to_<agent>) и Microsoft Agent Framework. А живой рабочий пример — кейс с Хабра: связка агента-инициализатора и агента-кодера общается через init.sh плюс claude-progress.txt плюс JSON-чеклист фич с полем passes, причём готовность проверяется не самооценкой агента, а прогоном через браузер (Puppeteer MCP). Это тот же handoff, только формализованный до машиночитаемого файла — и, что показательно, к идее машиночитаемого прогресс-файла независимо пришли в разных местах (JSON-чеклист Anthropic; форматы progress.json и record_note у практиков). Схождение к одной идее обычно говорит о реальной необходимости, а не о моде.
Сколько это стоит
Handoff и context-reset — это труд и токены, и вопрос «а стоит ли» законный. Ориентиры такие:Подход Трудозатраты Когда оправдан Просто /compactНулевые Короткая задача в одной сессии Ручной handoff-файл Написать сводку Передача между сессиями/агентами Полный harness с context reset Инфраструктура Многочасовые автономные прогоны
Наглядный пример от Anthropic: тот же долгий прогон в варианте «соло» стоил около $9 за 20 минут и ломался, а с полноценным harness’ом (context reset плюс handoff между стадиями) — около $200 за 6 часов и работал. Это конкретный эксперимент (одна задача-генератор игр, одна модель), а не универсальное соотношение цен — но иллюстрирует принцип: переплата не за «магию», а за то, что система не рассыпается на длинной дистанции. Для ориентира: средняя стоимость Claude Code на предприятиях — порядка $13 на разработчика в день ($150–250 в месяц).
Если задача — не разовый прогон, а постоянный автономный агент со своей экономикой, это другой класс инструментов; себестоимость такого мы считали на примере персонального ИИ-агента OpenClaw.
Где ломается и что теряется первым
Сжатие не бесплатно для качества, и потери не случайны. При компакции первыми под нож идут предсказуемые категории: отрицания и запреты, точные числа, порядок шагов, атрибуция результатов инструментов и история отклонённых решений. Это готовый чек-лист «что закреплять вручную».
Насколько глубоки потери — показывают два независимых препринта 2026 года (оба ещё не рецензированы, но качественно согласны): — По одному, уже 5% компакции стоят около −7 процентных пунктов recall, а при 50% сжатия наступает почти «мёртвая зона» (0–7% точности воспроизведения). — По другому, после компакции доля нарушений запрещённых действий подскакивает с 0% до 30–59% — то есть агент начинает делать то, что ему запрещали, просто потому что запрет «выпал» из контекста. Приём под названием Constraint Pinning (принудительное закрепление ограничения вне сжатия) возвращает нарушения к нулю.
Второй провал — «испорченный телефон» при передаче саммари: если сводка неточна или, наоборот, перегружена, получатель уходит не туда. Отсюда и no-duplication rule выше: краткая точная сводка надёжнее длинной. Особенно коварно это в цепочке из нескольких передач — каждая следующая сводка строится на предыдущей, и мелкое искажение на первом шаге к третьему агенту разрастается в неверную картину.
Для сравнения, агент, который ведёт структурированную базу знаний, решает проблему памяти иначе — не передачей контекста, а внешним хранилищем; это другой инженерный компромисс.
Риски: когда потерянное ограничение опасно
Для технической темы это и есть YMYL-блок. Пока агент пишет код в песочнице, потеря ограничения при компакции — неприятность. Но если агенту доверены необратимые действия — git push, отправка писем, платежи, — исчезновение safety-ограничения из контекста становится реальным риском: агент может выполнить то, что вы явно запрещали в начале сессии, потому что запрет не пережил сжатие (см. цифры про governance decay выше).
Практическая рекомендация простая и структурная: критичные ограничения держите вне зоны компакта — в CLAUDE.md (он переинъектируется), в закреплённом виде (Constraint Pinning) или в начале handoff-документа отдельным полем «Ограничения». Не рассчитывайте, что модель «сама вспомнит» запрет из истории — на длинной дистанции она его теряет предсказуемо.
Альтернативы: форматы прогресс-файла и когда handoff не нужен
Полноценный handoff-документ — не единственный инструмент, и не всегда он вообще нужен.
- Лёгкие чекпоинты вместо полного handoff. Для повторяющихся задач удобны компактные форматы:
record_note(короткая заметка-отметка о прогрессе) илиprogress.json(структурированный статус по пунктам). Это тот же принцип, но без развёрнутой сводки — когда терять особо нечего, хватает пометки «сделано/не сделано». - Готовые community-инструменты. Под задачу «мост контекста между сессиями» уже появились сторонние утилиты (handoff-skill и подобные) — их можно взять, а не изобретать формат с нуля. Проверяйте только, что инструмент не тянет в контекст лишнего.
- Когда handoff не нужен вовсе. Короткая задача в пределах одной сессии не требует ни handoff, ни даже ручного компакта — доработали и закрыли. Городить прогресс-файл ради получаса работы — тот самый оверинжиниринг, которого стоит избегать.
Правило простое: масштаб инструмента — под масштаб задачи. Многодневный автономный прогон требует harness с context reset и структурированным handoff; правка на полчаса — ничего из этого.
FAQ
Что теряется при /compact, а что сохраняется?
Сохраняются архитектурные решения, нерешённые баги, детали реализации и примерно пять последних файлов; корневой CLAUDE.md и авто-память переинъектируются с диска, а системный промпт и так не является частью истории сообщений. Отбрасываются в первую очередь избыточные результаты вызовов инструментов, а также предсказуемо страдают отрицания, точные числа и история отвергнутых решений. Path-scoped правила и вложенные CLAUDE.md выпадают, пока агент снова не прочитает файл.
Когда компактить — ждать авто-триггера или руками? Руками, раньше авто-триггера. Автоматический компакт срабатывает поздно (по замерам сообщества — около 83% заполнения, но точного официального порога нет), а качество проседает уже примерно с 40%. Правило 40% — про то, чтобы сжать, пока агент ещё «умный», а не когда он уже начал тупить.
Чем /compact отличается от /resume и /clear?
/compact сжимает историю той же сессии и продолжает работу. /clear начинает новый разговор с чистого листа (старый доступен через /resume). /resume (алиас /continue) возвращает к конкретной прошлой сессии целиком. Три разные операции под три разные задачи.
Как выглядит хороший handoff-документ? Пять полей: цель, ограничения, принятые решения (с причинами и отвергнутыми вариантами), текущее состояние, следующие шаги. Главное правило — не дублировать то, что уже есть в проекте (PRD, коммиты, ADR): ссылайтесь по пути, а в handoff пишите только то, что живёт лишь в разговоре. Самая частая ошибка — впихнуть слишком много.
Как передавать контекст, если запускаю несколько агентов параллельно?
Не используйте один общий handoff-файл — будет гонка записи, кто-то затрёт чужое. Давайте каждому агенту свой файл с меткой времени (handoff-<время>.md). Это устраняет race condition и позволяет потом собрать состояние из всех файлов.
Правда ли, что агент может «забыть» запрет после сжатия?
Да, и это измеримо: после компакции доля нарушений ранее запрещённых действий растёт с нуля до десятков процентов, потому что ограничение выпадает из контекста. Поэтому критичные запреты держат вне зоны сжатия — в CLAUDE.md или закреплёнными отдельно, а не полагаются на историю диалога.
Курс «Claude Code с нуля до продакшена» · модуль «Агенты и оркестрация». Полная программа и два маршрута обучения — на странице курса.
Предыдущий урок: Оркестрация агентов: Agent Team · Следующий урок: Воркфлоу против ИИ-агента



