Вайбцех

Claude Code теряет контекст на третьем часу: 4 причины и как починить

Опубликовано 20 мин чтенияБазовый
Автор с фотографии показывает схему сжатия контекста, рядом растерянный кот и карточки с причинами.
Что узнаете
  • Понятное объяснение, почему он забывает, без единого технического термина
  • Короткий CLAUDE.md в корне проекта и способ проверить, читает ли он его вообще
  • Бланк заметки о состоянии проекта из четырёх пунктов: сделано, в процессе, застряло, следующий шаг
  • Правило нарезки работы и понимание, когда жать /clear, а когда /compact
  • Детектор поломки, который срабатывает раньше, чем полоска внизу экрана
Применить за 20 мин
Базовый
10просмотров
Что в инструкции
  1. Он забыл - он пересказал сам себе: что случилось на третьем часе
  2. Контекст простыми словами: почему каждый новый запуск начинается с чистого листа
  3. Что съедает контекст: чтение файлов, поиск, длинный вывод команд
  4. Полоска «до автосжатия» внизу экрана: почему на неё нельзя ориентироваться
  5. CLAUDE.md: постоянная памятка о проекте, которую он читает каждый раз
  6. Заметка о проекте на завтра: что записать в конце сессии
  7. Дробим работу на задачи: почему одна большая просьба сжигает всю память
  8. Context7: как подсунуть свежую документацию вместо угадывания по памяти
  9. Почему памятка перестаёт работать к середине дня
  10. Опасный край: момент, когда сжать уже нельзя
  11. Если взять модель помощнее и окно побольше - само пройдёт?
  12. Вопросы и ответы

По этой теме у нас регулярно выходят новые разборы и шаблоны. Подпишитесь, чтобы не пропустить: https://vibeceh.ru/?utm_source=article&utm_campaign=kontekst-v-claude-code-zabyvaet-proekt&utm_content=subscribe-cta#buy

Он забыл - он пересказал сам себе: что случилось на третьем часе

Официальная формулировка Anthropic звучит буднично: при сжатии длинной сессии Claude Code суммирует историю разговора, чтобы она влезла в окно (Explore the context window). Модель сама решает, что из вашей трёхчасовой работы «важно», а что можно выбросить. Ты в этом решении не участвуешь.

Вот как это выглядит изнутри. Инженер Ian Paterson описал свой случай: три часа многофайлового рефакторинга, он только что объяснил, каким модулям нужны правки интерфейсов, а какие уже готовы, - и на 80% заполнения сработало автосжатие.

When Claude came back, it had no idea which files had been edited and which still needed changes

- Ian Paterson, Stop Claude Code from Lobotomizing Itself Mid-Task

После этого агент предложил править файл, законченный часом раньше, и потерял ограничение, которое ему повторили дважды. Задачу пришлось объяснять с нуля.

С такой ситуацией сталкиваешься не только ты. В официальном баг-трекере Anthropic лежит жалоба ровно про это ощущение:

auto compact is the worst. every time it happens i feel like claude code has forgotten everything

- Автор issue #13112, anthropics/claude-code

Пожалуй, самое неприятное - момент поломки никак не отмечен. Alexander Golev в разборе «Claude Saves Tokens, Forgets Everything» указывает: сильнее всех страдают те, кто ведёт длинные совместные сессии и накапливает общее понимание, и они же чаще всего застигнуты врасплох, потому что разговор внешне продолжается нормально. Сообщения об ошибке не будет. Красного экрана тоже. Есть уверенный тон и предложение сделать уже выполненную работу.

Поэтому первым делом перестань искать свою ошибку в формулировках. Ты сформулировал нормально. Сработала штатная процедура сжатия, и результат оказывается не в твою пользу.

Контекст простыми словами: почему каждый новый запуск начинается с чистого листа

Так прямо написано в документации:

Each Claude Code session begins with a fresh context window.

- Anthropic, How Claude remembers your project

Знание через сессии переносят два механизма: файл CLAUDE.md и автоматическая память. Anthropic отдельно оговаривает: система воспринимает их как контекст и использует в роли подсказки. Проще говоря - читает как подсказку.

Размер окна упирается в число. У обычных моделей это 200 000 токенов, у Sonnet 5, Opus 4.6 и Sonnet 4.6 - 1 000 000; в Claude Code 4.8 и новее окно также расширено до 1 000 000. Токен - это кусочек текста. Главное тут одно: окно конечно и заполняется всем подряд - твоими сообщениями, его ответами, прочитанными файлами, выводом команд.

Когда окно заполняется, срабатывает сжатие. И вот тут ключевой момент, который меняет отношение к работе: после сжатия от разговора остаётся резюме, которое модель написала сама для себя будущей. В документации по компактизации так и сказано - модель пишет сводку с той информацией, которая нужна, чтобы продолжить задачу (Compaction). Всё, чего нет в сводке, исчезает из текущего контекста.

Работа при этом не пропадает

Транскрипты сессий пишутся на диск непрерывно, поэтому к прошлому разговору можно вернуться после выхода или после /clear. Для этого есть /resume, --continue и --resume. Команда /clear закрывает вкладку, проект при этом остаётся на месте.

Вывод для ежедневной работы простой. Всё, что должно пережить сегодняшний вечер, держи в файле в проекте. Переписка - расходник, её сотрут.

Что съедает контекст: чтение файлов, поиск, длинный вывод команд

Кот закрывает морду лапой рядом с карточками источников, которые заполняют контекст.

Разбор claude code возможностей на Medium называет результаты инструментов «самым незаметным источником раздувания», а Damian Galarza формулирует ещё точнее: легко упустить, насколько быстро чтения файлов съедают контекст. Один просмотр большого файла целиком - и приличный кусок окна ушёл, а ты этого нигде не увидел.

Куда уходит память:

  1. Стартовый налог. В замере Systima Claude Code отправляет около 33 000 токенов ещё до того, как прочитает первую просьбу.
  2. Подключённые внешние сервисы. Один MCP-сервер GitHub добавляет примерно 42 000 токенов описаний инструментов - около 21% окна на 200K, ещё до первого твоего сообщения.
  3. Чтение файлов. Каждый открытый файл целиком остаётся в окне.
  4. Вывод команд. Длинные логи, простыни ошибок, результаты поиска по проекту.

Что с этим делать, если ты не инженер. Сначала отключи всё, чем сегодня не пользуешься: каждый лишний сервер - это оплаченный кусок окна. Затем проси смотреть конкретные места вместо «прочитай проект»: Galarza пишет, что указывает на конкретные диапазоны строк вместо чтения файлов целиком. Разведку можно отдавать вбок: у Claude Code есть встроенный субагент Explore, и официально про него сказано, что он держит результаты разведки вне основного разговора и возвращает только выжимку (Subagents).

Практикум ровно про это и построен: как за вечер настроить себе рабочий процесс, в котором агент не жрёт память впустую и не переписывает работающее. Руками заводим файлы проекта, режем задачи и проверяем, что он реально читает то, что ему подложили. https://vibeceh.ru/?utm_source=article&utm_campaign=kontekst-v-claude-code-zabyvaet-proekt&utm_content=mid-cta#buy

Полоска «до автосжатия» внизу экрана: почему на неё нельзя ориентироваться

Начнём с неприятного. Часть окна занята заранее - резервом под само сжатие. В отдельных отчётах этот буфер занимал 45 000 токенов, то есть 22,5% окна до написания первой строки кода. В фиче-реквесте пишут, что VSCode-расширение сжимает примерно при 75% использования, резервируя около 20% на сам процесс. А автор разбора HyperDev наблюдал, как реальные 64% использования показывались как «10% до автокомпакта».

Дальше - порог. По разным источникам пороги такие:

Источник / клиентПорог сжатия
VSCode-расширение~75%
Терминал (ранние версии)~80%
Терминал (поздние версии)~83%
Окно 1M (по умолчанию)~95% (950K)

Свести их в одну цифру нельзя: порог менялся и зависит от версии и клиента. Значит опираться на него тем более не стоит.

Типовая ошибка новичка выглядит так: человек ждёт предупреждения и жмёт /compact на 90%. К этому моменту он уже начал терять инструкции и качество ответов просело. Практики советуют сжимать раньше: источники расходятся между 60% и 75%, но сходятся в одном - не на 90%. Некоторые ещё советуют периодически смотреть расход командой /context во время долгих сессий; официального описания этой команды у Anthropic я не нашёл, так что бери её как приём из блогов, гарантии тут никакой.

Теперь про то, что работает надёжнее любой полоски. Автор разбора okhlopkov.com держит агента круглосуточно и описывает диагностический признак: агент начинает переспрашивать то, что уже обсуждали - «в каком файле конфиг?» про файл, который правили 20 минут назад.

Практикум «Старт»

Три дня живой практики: от идеи до работающего проекта по ссылке

2 000 ₽старт 5 августа, 18:00 МСК

CLAUDE.md: постоянная памятка о проекте, которую он читает каждый раз

Официально: все файлы памяти автоматически загружаются в контекст при запуске. Уровней три: проектный ./CLAUDE.md в корне, пользовательский ~/.claude/CLAUDE.md для личных привычек и корпоративная политика. Файлы склеиваются в один общий текст - поэтому «мой файл не сработал» обычно означает «он добавился к остальным, а не заменил их».

Есть ловушка с подпапками. По документации вложенные CLAUDE.md подключаются только когда он полез читать файлы в этих подпапках. На практике всё хуже: с июня 2025 по февраль 2026 в трекере накопилось четыре отдельных issue про то, что файл в подпапке просто не подхватывается. Вывод для первого месяца - один файл в корне, вложенных не заводить.

Что писать. Цель по объёму официальная: меньше 200 строк, потому что длинные файлы съедают больше контекста и хуже соблюдаются. И не превращать файл в помойку: строка вида @docs/architecture.md втягивает весь этот документ в каждую сессию. Правило простое - удаляй каждую строку, которая не даёт конкретной информации о проекте.

Вот рабочая заготовка, которую можно скопировать и поправить под себя:

markdown
# Проект: интернет-магазин на Next.js

## Что это
Витрина + корзина. Оплата через ЮKassa. Деплой на Vercel.

## Где что лежит
- Страницы: app/
- Компоненты: components/
- Цены и тексты витрины: content/prices.json
- Переменные окружения: .env.local (в git не коммитим)

## Соглашения
- Стили только через Tailwind, отдельных css-файлов не заводим.
- Правки цен идут только в content/prices.json, в компонентах цифр нет.
- Перед коммитом запускать npm run build.

## Подводные камни
- Сборка падает, если в prices.json остался хвостовой запятой.
- Файлы в public/ кешируются на Vercel, менять имя при замене картинки.

## Заметка о состоянии проекта
@.claude/HANDOFF.md

Чтобы я видел, что этот файл прочитан, обращайся ко мне по имени Антон.

Последняя строка стоит там ради проверки. Приём взят из готового примера CLAUDE.md: автор просит всегда обращаться к нему по имени, чтобы понимать, читается ли файл вообще. Если в ответ имени нет, файл не доехал.

Проверь, что именно загрузилось

Практики советуют смотреть загруженную память командой /memory прямо в том каталоге, где работаешь. Официального описания команды я не нашёл, так что это совет из блогов - но проверка через обращение по имени работает всегда и ничего не стоит.

Заметка о проекте на завтра: что записать в конце сессии

Собака поднимает лапу у карточки HANDOFF.md с четырьмя пунктами состояния проекта.
  1. Заведи один файл HANDOFF.md.

    Путь .claude/HANDOFF.md в корне проекта. Схема из готового набора правил: один файл, каждая сессия перезаписывает предыдущую. Никаких папок с историей на старте - иначе через неделю там будет архив, который никто не читает.

  2. Заполни четыре пункта.

    Что сделано - с конкретными изменёнными файлами. В процессе - над чем сидишь прямо сейчас. Заблокировано - что упёрлось во внешнее. Следующий шаг - одно точное действие, с которого завтра начинаешь.

    markdown
    # Состояние проекта на 12 марта
    
    ## Сделано
    - Правки цен вынесены в content/prices.json
    - Компонент ProductCard читает цену оттуда, хардкода больше нет
    
    ## В процессе
    - Корзина: components/Cart.tsx, считает сумму, но не учитывает скидку
    
    ## Заблокировано
    - Оплата: нет тестового ключа ЮKassa, жду от бухгалтера
    
    ## Следующий шаг
    - Открыть components/Cart.tsx и добавить учёт поля discount из prices.json,
     затем запустить npm run build
  3. Добавь секцию с тупиками.

    Обычный markdown, заголовок «Failed Approaches» или «Куда не лезть». Туда идёт то, что уже пробовали и что не сработало, чтобы завтра он не пошёл по этому кругу второй раз.

  4. Пиши факты, приказы тут не работают.

    «Цены лежат в content/prices.json» работает. «Всегда следуй моим инструкциям» не работает - модель читает этот файл как справку о проекте.

  5. Держи заметку в пределах страницы.

    Автоматические заметки самого инструмента режутся на 200 строк молча, без предупреждения и без ошибки. Длинный файл даёт иллюзию контроля.

  6. Подцепи заметку к CLAUDE.md.

    Строкой @.claude/HANDOFF.md - официальный синтаксис импорта. Старый CLAUDE.local.md объявлен устаревшим в пользу импортов, на него не завязывайся.

  7. Начинай новую сессию с чтения.

    Первым сообщением проси прочитать заметку и пересказать своими словами в 3-5 строк: цель, текущее состояние, следующий шаг. Пересказ показывает, понял он или сделал вид.

    prompt
    Прочитай файл .claude/HANDOFF.md и ничего пока не меняй в коде.
    Перескажи мне в 3-5 строках: какая цель, в каком состоянии проект сейчас и какой следующий шаг записан.
    Отдельно назови, что в заметке помечено как заблокированное.
    Потом спроси меня, продолжаем с записанного следующего шага или беру другую задачу.
  8. Закрывай сессию, пока окно не забито под завязку.

    Одна строка в CLAUDE.md вида «в конце сессии обнови .claude/HANDOFF.md» заставляет его писать заметку самому, но просить об этом надо до того, как окно заполнено, - иначе писать будет уже нечем.

Дробим работу на задачи: почему одна большая просьба сжигает всю память

Официальные best practices Anthropic формулируют принцип так: отделяй исследование и планирование от исполнения, чтобы не решать не ту задачу. Рабочий порядок из тех же рекомендаций - Explore, Plan, Implement, Commit. Правку, которую можно описать одним предложением, выполняй без отдельного плана: планирование только съест окно.

Что делать, когда сессия распухла:

  • Новая, несвязанная задача - /clear. Разговор обнуляется, CLAUDE.md никуда не девается, он загружается при старте сессии заново.
  • Та же задача затянулась - /compact, и лучше с фокусом: попроси сохранить то, что относится к конкретному багу, над которым сидишь.

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

Context7: как подсунуть свежую документацию вместо угадывания по памяти

Что известно точно. MCP - это способ подключить к Claude Code внешние источники: документацию, базы, сервисы, - чтобы он тянул факты оттуда и не полагался на свою память. Смысл приёма понятен: библиотеки меняются, а модель отвечает по тому, что запомнила на обучении, и уверенно выдаёт устаревший синтаксис.

Спрос тоже подтверждён. В русской выдаче по запросу «claude code контекст» стоят и context7.com, и разбор pimenov.ai, а подсказки поисковика ведут к «context 7 claude code» и «mcp context 7 claude code». То есть люди ищут именно это.

А вот чего у меня нет: проверенной инструкции подключения, официального описания, чем именно Context7 отличается от обычного контекста, и подтверждения его поведения на реальном проекте. Выдумывать шаги установки я не стану: неверная команда в терминале стоит дороже, чем ненаписанный абзац. Первоисточник для самостоятельной проверки: context7.com/docs/clients/claude-code.

Почему памятка перестаёт работать к середине дня

Issue #19471 описывает воспроизводимый паттерн: до сжатия инструкции из CLAUDE.md выполняются корректно, после - игнорируются. Самое показательное там - ответ самой модели пользователю:

«I didn't read the CLAUDE.md content included in the system prompt. I skipped it and ran the Glob command directly.»

Issue #26160 добавляет к этому цену вопроса: после автосжатия правила терялись, агенты меняли файлы настроек и делали прямо запрещённое, включая нарушение запрета на git add -A.

И масштаб. В отдельном репорте посчитали: явные инструкции из CLAUDE.md не соблюдаются примерно в половине сессий. Часть таких тикетов закрыта как stale или not planned - то есть быстрого исправления ждать не приходится.

Причина у поведения простая и озвучена официально: файл идёт как контекст, силы настройки у него нет. Автор разбора на DEV.to утверждает, что содержимое файла ещё и подаётся модели с оговоркой «может относиться к задаче, а может нет»; первоисточники этой обёртки я не проверял, так что это версия автора, проверкой она не подтверждена.

Практический сдвиг в голове: файл - это справка о проекте. Факты работают, приказы нет.

Практикум «Старт»

Три дня живой практики: от идеи до работающего проекта по ссылке

2 000 ₽старт 5 августа, 18:00 МСК

Опасный край: момент, когда сжать уже нельзя

Мужчина закрывает лицо перед переполненным окном и перечёркнутой командой /compact.

В трекере это issue #13929:

Claude ran out of context, didn't auto-compact, and now won't let me /compact

- Автор issue #13929, anthropics/claude-code

Ручной /compact отвечает ошибкой «Conversation too long, press esc twice», а откатиться на шаг назад не выходит: предыдущее сообщение и есть сжатие. После этого человек уже не может вытащить разговор.

Независимое подтверждение есть в разборе Build This Now: полностью заполненное окно может вообще заблокировать запуск /compact, и тогда придётся начинать с нуля. Причина механическая - сжатию самому нужно место в окне. Есть и смежная деталь: если автоматическое сжатие трижды подряд не удалось, оно останавливается.

Отсюда правило, которое стоит дороже любого индикатора: сжимай рано. Ориентир простой - задача пошла вторым часом, значит пора.

Утешение, если уже наступил на это

Предыдущий разговор остаётся на диске, к нему можно вернуться. Работа цела, потеряна только нить: файлы в проекте на месте, а транскрипт сессии доступен через /resume и --continue. Если файл-заметка обновлялся, потеря вообще сводится к паре минут.

Если взять модель помощнее и окно побольше - само пройдёт?

Большое окно приносит свои проблемы. При загрузке ненужных файлов качество ответов падает по всему окну, включая важные его части. Практик Albert Sikkema сознательно вернул окно к 200K и объясняет почему: на большом окне раньше начинаются забытые инструкции, дрейф цели и непоследовательные решения, причём далеко не на отметке 900K. В его же посте приведены слова Dan Mac из команды Amp:

«You should basically never use compaction.»

Команда Amp отказалась от сжатия вовсе и построила процесс вокруг коротких сессий с чистой передачей состояния. Официально автосжатие на большом окне срабатывает заранее, примерно на 950K токенов по умолчанию, и есть переменная, которая возвращает сессии к 200K. Даже разработчики не считают, что большое окно снимает вопрос.

Чек-лист на сегодня, 20 минут:

  1. Создать CLAUDE.md в корне проекта, до 200 строк, по заготовке выше.
  2. Вписать в него строку с обращением по имени и проверить, что она сработала.
  3. Завести .claude/HANDOFF.md с четырьмя пунктами и подцепить его строкой @.claude/HANDOFF.md.
  4. Взять правило: одна сессия - одна задача, в конце коммит и обновление заметки.
  5. Запомнить детектор: переспросил про то, что делали 20 минут назад - обновляем заметку и жмём /clear.

Вопросы и ответы

Вопросы и ответы

Почему Claude Code забывает, о чём договорились десять минут назад?

Потому что переписка не хранится вечно. Когда она перестаёт помещаться в окно, история заменяется пересказом, который модель написала сама для себя, и часть договорённостей в этот пересказ не попадает. Именно эту проблему описывают запросом «claude code контекст». Сообщения об ошибке при этом не будет: диалог продолжается уверенно.

Что такое Context7 и зачем он, если контекст и так есть?

Проверенных фактов по самому Context7 у меня нет, поэтому честно: подробностей не даю. Общая идея класса таких инструментов - подключить внешний источник документации через MCP, чтобы факты приезжали оттуда, а память модели в дело не шла. Смотреть первоисточник: context7.com/docs/clients/claude-code.

Как подключить Context7 через MCP, если я не программист?

Инструкции подключения в проверенных источниках у меня нет, и выдумывать команды для терминала я не буду. Что важно знать заранее: каждый подключённый MCP-сервер занимает часть окна ещё до первого сообщения - у сервера GitHub это около 42 000 токенов, примерно 21% окна на 200K.

Что настроить один раз, чтобы не переобъяснять проект каждый день?

Два файла. CLAUDE.md в корне с фактами о проекте, короткий. И .claude/HANDOFF.md с четырьмя пунктами: сделано, в процессе, заблокировано, следующий шаг. Второй подцепляется к первому строкой @.claude/HANDOFF.md.

Он помнит что-нибудь после нового запуска или всё начинается с нуля?

Каждая сессия стартует с чистым окном. Знание между сессиями переносят только файлы памяти: они загружаются автоматически при запуске. Читает он их как контекст, обязательной настройкой они для него не работают.

Можно ли открыть вчерашнюю сессию и продолжить с того же места?

Да. Транскрипты пишутся на диск непрерывно, поэтому к прошлому разговору можно вернуться после выхода. Для этого есть /resume, --continue и --resume. Но полагаться на это как на память проекта не стоит: файл-заметка надёжнее.

Где видно, сколько контекста осталось, и что значит полоска внизу?

Полоска показывает приближение к автосжатию, но верить ей нельзя. Часть окна занята резервом под само сжатие, в отдельных отчётах это 45 000 токенов, 22,5% окна. Один практик наблюдал, как реальные 64% использования показывались как «10% до автокомпакта», а сам порог по разным источникам называют то 75%, то 80%, то 83%, то около 95%.

Он умеет сам вспоминать проект или мне каждый раз всё пересказывать?

Сам подтягивает только файлы памяти при запуске. Всё остальное зависит от тебя: запиши состояние проекта в файл в конце сессии и попроси прочитать его в начале следующей. Автор гайда по такому протоколу оценивает экономию как 10-15 минут пересказа против 30 секунд, но это прикидка на глаз.

Если взять модель помощнее, он будет помнить дольше?

Дольше - да, надёжнее - нет. У Sonnet 5, Opus 4.6 и Sonnet 4.6 окно 1 000 000 токенов против 200 000 у остальных, но оно заполняется так же, просто медленнее. Механика сжатия при этом та же самая.

В новых версиях окно контекста больше - проблема решается сама?

Нет. Окно на 1M стало общедоступным 13 марта 2026, и корневую причину это не вылечило: лишние загруженные файлы роняют качество по всему окну. Один практик сознательно вернулся к 200K, потому что на большом окне забытые инструкции и дрейф цели начинались раньше, чем ожидалось.

В браузере и в терминале память разная?

Подтверждённого сравнения у меня нет, поэтому не буду утверждать. О различиях инструментов - в статье «Claude Code или Cursor». Что известно официально: любая сессия стартует с чистым окном, а файлы памяти грузятся при запуске. Косвенно про клиенты известно одно: у VSCode-расширения свой порог сжатия, около 75% использования, - то есть настройки у разных клиентов действительно отличаются.

Источники

Практикум «Старт»

Три дня живой практики: от идеи до работающего проекта по ссылке

2 000 ₽старт 5 августа, 18:00 МСК

Материал был полезен?
Сергей Мазур
Автор
Сергей Мазур
Основатель Вайбцеха

Собираю продукты с ИИ-агентами и рассказываю, как это делать без программиста.

Читайте также

Термины из инструкции