$ sudo teach IT

Рано или поздно каждый, кто работает с Claude Code, сталкивается с одним и тем же: агент, который час назад безошибочно правил код, начинает забывать договорённости, повторно читает уже прочитанные файлы и предлагает решения, противоречащие обсуждённому в начале сессии. Инструмент не сломался — переполнился контекст.

Контекст — главный ограниченный ресурс в работе с агентом. Не скорость и не лимиты подписки, а объём информации, который модель удерживает одновременно. Почти все практические приёмы работы с Claude Code сводятся к вопросу: что должно быть в контексте прямо сейчас, а что только мешает. После этого урока вы будете понимать, как устроено контекстное окно, что его заполняет и почему деградация качества предсказуема.

Что уже умеем / что добавим

К этому моменту вы установили Claude Code, разобрались с интерфейсом, режимами разрешений и slash-командами, научились откатывать изменения через /rewind. Всё это — управление действиями агента. Теперь мы переходим к управлению его памятью: разберём, что модель вообще «знает» в момент ответа и откуда это знание берётся.

Что вы узнаете в рамках статьи

  • Что такое контекстное окно и почему модель ничего не помнит между запросами
  • Из чего складывается контекст: что загружается до вашего первого сообщения и что добавляется по ходу работы
  • Почему качество ответов падает по мере заполнения окна
  • Что такое токены и как оценивать расход контекста
  • Почему сессии независимы друг от друга и что это меняет в работе

Ключевые термины

  • Токен — единица, в которой измеряется текст для модели. Примерно соответствует куску слова: одно английское слово — это 1–2 токена, русское — обычно больше.
  • Контекстное окно — максимальный объём в токенах, который модель может обработать за один запрос. Для большинства моделей Claude — 200 000 токенов; отдельные модели поддерживают окно в 1 миллион.
  • Контекст — всё, что фактически находится в окне прямо сейчас: системный промпт, инструкции проекта, ваши сообщения, ответы Claude, содержимое прочитанных файлов и вывод выполненных команд.
  • Стартовый контекст — то, что загружается автоматически при запуске сессии, до того как вы что-либо написали.
  • Сессия — сохранённый локально диалог, привязанный к рабочей директории. Каждая новая сессия стартует с чистым контекстным окном.
  • Кэширование промпта — механизм, при котором API переиспользует уже обработанное начало запроса вместо повторного счёта.

Модель не помнит ничего между запросами

Первое, что нужно принять: модель не обладает памятью. Каждый ваш вопрос — отдельный сетевой запрос, и модель не имеет доступа к предыдущим. Иллюзию непрерывного диалога создаёт Claude Code, а не модель.

Работает это так: при каждом сообщении Claude Code заново отправляет весь накопленный контекст — системный промпт, инструкции проекта, все предыдущие сообщения и результаты вызова инструментов — и дописывает в конец ваше новое сообщение.

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

Чтобы это не выливалось в полную переобработку каждый раз, работает кэширование промпта: API сопоставляет начало нового запроса с уже обработанным и переиспользует совпавшую часть. Чтение из кэша стоит примерно 10 процентов от обычной цены входных токенов. Но кэш работает только на неизменившемся начале: если поменялось что-то в начале, всё последующее пересчитывается заново.

Что лежит в контексте до вашего первого слова

Заблуждение новичка: «пока я ничего не написал, контекст пуст». На деле к моменту появления приглашения ввода в окно загружено уже довольно много:

  • Системный промпт — базовые инструкции о поведении, инструментах и формате ответов. Вы его не видите.
  • Автопамять — заметки, которые Claude сохранил себе в прошлых сессиях по этому репозиторию. Загружаются первые 200 строк или 25 КБ файла MEMORY.md, что наступит раньше.
  • Информация об окружении — рабочая директория, платформа, оболочка, версия ОС, признак git-репозитория, текущая ветка и последние коммиты.
  • Имена доступных инструментов — чтобы Claude знал, что может вызвать.
  • Пользовательский ~/.claude/CLAUDE.md — ваши личные инструкции для всех проектов.
  • Проектный CLAUDE.md — инструкции конкретного репозитория. К этому файлу мы вернёмся в уроке 3.5.

В типичном проекте всё вместе занимает порядка нескольких тысяч токенов. На фоне окна в 200 000 это немного, но это уже не ноль — и это то, за что вы платите на каждом запросе.

Как контекст растёт во время работы

Дальше окно заполняется тем, что делает агент. Каждое действие оставляет след:

# Ваш промпт — обычно десятки токенов
> Разберись, почему падает тест авторизации

# Дальше в контекст добавляется:
# Read src/auth/session.ts     ~2400 токенов
# Read src/auth/session.test.ts ~1600 токенов
# Grep "refreshToken"           ~600 токенов
# Вывод npm test                ~1200 токенов
# Рассуждения и ответ Claude    ~800 токенов

Обратите внимание на пропорцию: ваш промпт — самая маленькая часть. Основной объём создают чтения файлов и вывод команд. Один вызов npm test с подробным логом может стоить дороже, чем вся ваша переписка за сессию.

Отсюда два практических правила. Первое: задача вроде «разберись, как устроен проект» может съесть десятки тысяч токенов на чтении ненужных файлов. Второе: вывод команд стоит ограничивать — запуск одного конкретного теста вместо всего набора экономит и время, и контекст.

Почему переполненное окно ухудшает результат

Когда окно заполняется, качество падает — и падает раньше, чем упирается в жёсткий предел. Модель распределяет внимание по всему содержимому окна. Чем больше в нём материала, не относящегося к задаче, тем выше шанс, что важная инструкция из начала диалога потеряется среди тысяч токенов логов и старых версий файлов.

Проявляется это узнаваемо: Claude перечитывает уже прочитанный файл, забывает соглашение из начала сессии, возвращается к отвергнутому подходу. Каждый такой симптом — сигнал вмешаться в состояние контекста.

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

# Ненадёжно: живёт только в истории этой сессии
> Всегда используй двойные кавычки в JS-файлах

# Надёжно: загружается заново в каждой сессии
# записать в CLAUDE.md проекта

Каждая сессия начинается с нуля

Сессии независимы. Открывая новую, вы получаете чистое окно: истории вчерашнего диалога в нём нет. Claude Code сохраняет диалоги на диск, к ним можно вернуться, но по умолчанию новая сессия о них не знает.

Отсюда основной способ переносить знания между сессиями: то, что должно быть известно всегда, записывается в файлы, загружаемые при старте. Всё остальное — одноразовый рабочий контекст, который не жалко потерять.

Частые ошибки

  • Считать, что Claude «помнит» прошлые разговоры. Модель не помнит ничего между запросами, а новая сессия стартует с пустым окном. Знание, которое должно пережить перезапуск, надо записать в файл, а не проговорить в чате.
  • Вести всю работу в одной бесконечной сессии. Контекст накапливает содержимое всех задач подряд, включая неудачные попытки, и смешанный контекст ухудшает результат по любой из них.
  • Просить агента «изучить проект» без границ. Ненаправленное исследование читает сотни файлов и заполняет окно ненужным материалом. Ограничивайте область поиска директорией или файлом.
  • Запускать полный набор тестов ради одного случая. Многотысячный лог попадает в контекст целиком, тогда как один нужный тест даёт тот же сигнал за долю стоимости.

Наиболее частые вопросы

  • Сколько текста помещается в 200 000 токенов? — Ориентировочно это несколько сотен страниц обычного текста или средняя кодовая база небольшого сервиса. Точное соотношение зависит от языка: русский текст расходует токены заметнее английского.
  • Контекст расходуется только когда Claude читает файлы? — Нет. Расходуется всё: ваши сообщения, ответы Claude, вывод команд, стартовые инструкции. Чтения файлов и вывод команд просто обычно самые объёмные.
  • Влияет ли размер контекста на скорость ответа? — Да. Чем длиннее запрос, тем дольше он обрабатывается. Кэширование промпта заметно смягчает эффект, но не убирает его полностью.
  • Что произойдёт, когда окно всё-таки заполнится? — Claude Code не оборвёт сессию: он автоматически освободит место, сначала убрав старый вывод инструментов, затем сжав историю в сводку. Как это работает и как этим управлять — в уроке 3.3.
  • Можно ли посмотреть, сколько контекста занято сейчас? — Да, для этого есть команда /context. Ей посвящён следующий урок.

Итоги

Вы разобрались с основным ограничением, вокруг которого выстроена вся практика работы с агентами: модель не хранит память между запросами, контекст заполняется ещё до вашего первого сообщения, основной объём создают чтения файлов и вывод команд, а переполненное окно ухудшает результат раньше, чем упирается в предел. Тема не самая эффектная, но именно она объясняет большую часть странного поведения агента, на которое жалуются новички.

Пока это была теория. В следующем уроке мы посмотрим на контекст глазами инструмента: команда /context покажет живую картину вашей сессии — сколько занято, чем именно и сколько осталось. С этого момента управление контекстом перестанет быть догадками и станет измеримым.

На следующий урок