JavaRush /Курсы /Claude code /Operational model: как устроен контекст Claude

Operational model: как устроен контекст Claude

Claude code
5 уровень , 0 лекция
Открыта

1. Миф «Claude всё помнит» мешает работать

Самая дорогая ошибка — говорить с Claude как с коллегой, который вчера смотрел тот же файл и за ночь перечитал репозиторий. Claude не сидит ночью над вашим Commerce OS и не перечитывает src/auth/*. Он работает только с тем, что попало в окно текущей сессии.

Вы: Ты же уже смотрел LoginController.java, почему снова спрашиваешь?
Claude: В этой сессии файл ещё не открыт. Могу прочитать его сейчас.

Кажется, что он «тормозит». На деле он честно сообщает: файла в контексте нет.

Claude не «помнит проект». Claude работает с тем, что реально оказалось в текущем окне контекста.

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

2. Контекст — это рабочее окно, а не память

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

flowchart LR
    A[Ваш текущий prompt] --> E[Текущее окно контекста]
    B[Прочитанные файлы] --> E
    C[Вывод команд и логи] --> E
    D[CLAUDE.md, rules, memory] --> E
    E --> F[Следующий ответ Claude]

Два следствия. Окно конечно — точные лимиты знать не нужно, важен принцип. И сигнал попадает в него не телепатией: прочитали файл — он в контексте; команда вывела ошибку — её вывод тоже сигнал; правило в CLAUDE.md подгружается как инструкция. Подразумеваете «это же понятно» — для модели это пустота.

Поэтому «Claude должен был догадаться» значит «я думал, сигнал в окне, а его там нет».

3. Под капотом: окно — это лента сообщений

Технически окно контекста — это лента сообщений. Каждый prompt, каждый ответ Claude, каждое чтение файла, каждый вывод команды, каждый результат инструмента — отдельное сообщение. Отвечая, Claude не «обновляет мнение о проекте» — он смотрит на всю ленту и дописывает в конец ровно одно сообщение. Прочитал LoginController.java — добавилось сообщение с файлом. Вернулся stack trace — ещё одно.

Отсюда конечность окна: лента растёт, каждое сообщение остаётся до конца сессии. Когда она упирается в потолок, что-то выбрасывается или пересобирается — об этом отдельный разговор про /context и compaction.

Формула: Claude не «помнит проект» — он смотрит на ленту и дописывает следующее сообщение. Слои, которые разберём дальше, — это разные виды её сообщений.

4. Слои, из которых складывается контекст

Когда Claude отвечает плохо, спрашивайте не «умный он сегодня», а «из каких источников собрался контекст»:

Источник Что это на практике Что важно помнить
Текущий диалог Ваши последние сообщения и ответы Claude Самый заметный слой, но он не переносится в новую сессию автоматически
Прочитанные файлы Код, конфиги, README, тесты, документы проекта Файл не становится известным «сам по себе»: его нужно действительно прочитать
Вывод команд и логи test, build, stack trace, console output, runtime logs Очень полезный слой, но он легко засоряет контекст и может затащить туда секреты
CLAUDE.md, rules, memory Стабильные проектные инструкции и заметки Часто создают иллюзию, будто Claude «помнит проект» между сессиями
Выделение из IDE, скриншоты, фрагменты UI Конкретный кусок кода или интерфейса, который вы показали Это становится контекстом только если действительно передано в сессию
Служебные инструкции и слой инструментов Product/system instructions, names of tools, иногда skill descriptions Это фоновый слой, но он не заменяет ваши факты о проекте

Слои грузятся по-разному. Диалог возникает сам, файлы — только если вы дали доступ, а CLAUDE.md и часть постоянных слоёв подгружаются заново сами. Отсюда иллюзия: «он и в новой сессии знает, что нельзя трогать migrations, значит, всё помнит». Нет — он снова получил стабильные инструкции, например такой фрагмент CLAUDE.md в Commerce OS:

# CLAUDE.md

Команда тестов: ./gradlew test
Не менять public API в src/auth/*
Не трогать migrations
Перед правками — перечисли затронутые файлы

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

5. Новая сессия — не полная амнезия

Обратный миф: раз старая беседа не переносится, новая сессия — абсолютный ноль. Тоже нет. Это новый рабочий стол: постоянные бумаги положили заново, черновики убрали. Как новая смена в поддержке: сотрудник получил папку с постоянными правилами — какие команды запускать, какие директории не трогать, какие ограничения в проекте. Но вчерашний спор, виноват ли SessionService, в папку не попал — его нужно зафиксировать отдельно или заново принести в сессию.

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

На практике: вчера вы нашли подозрительное место в LoginController.java, отклонили идею про SessionService, увидели stack trace, решили писать минимальный фикс. Откроете сегодня сессию с «реализуй вчерашнее решение» — Claude знает правила проекта, но не само решение.

Поэтому task spec — не бюрократия, а способ восстановить детали. Записанные goal, scope, non-goals, constraints и фиксация принятых решений превращают сессию из «всё заново» в продолжение работы.

6. Откуда ощущение, что Claude «не знает очевидного»

Разложите его на типовые причины — почти всегда дело в одной из них.

Первая: сигнал вообще не попал в окно. Вы знаете, что баг вылезает после неверного пароля, но не дали ни reproduction steps, ни лог, ни файл.

Вторая: сигнал был, но перестал быть центром внимания. В длинной сессии деталь не исчезает — тонет среди старых сообщений и побочных обсуждений.

Третья: конфликт сигналов. В CLAUDE.md — «не менять public API», а в prompt вы расплывчато просите «переделай auth flow нормально». Старые сигналы не сняты, новые нечётки — Claude тянет ответ в несовместимые стороны.

Четвёртая, самая коварная: информация подана как настроение, а не как факт. «Кажется, дело где-то в backend, но я не уверен» — предчувствие. «Гипотеза: проблема может быть в backend; сначала проверь по коду и логам, не правь вслепую» — проверяемая задача.

Вопрос теперь не «почему он не догадался», а «какого сигнала нет или какой конфликтует».

7. Один баг в Commerce OS, две постановки задачи

Баг: после неверного пароля пользователь видит пустую страницу вместо сообщения об ошибке. Вчера вы покопали src/auth/*, сегодня продолжаете. Слабая постановка:

Почини баг с логином.
Ты же уже смотрел auth вчера.
Сделай нормально и без лишнего.

Для Claude почти бесполезно: нет наблюдаемого поведения, эффекта, области изменений, ограничений. «Ты же смотрел auth вчера» опирается на веру в память модели.

Вариант, использующий то, что вы умеете после модулей 3 и 4:

Цель: убрать пустую страницу после неверного пароля.
Наблюдаемое поведение: после неверных credentials UI рендерит пустой экран.
Область изменений: src/auth/LoginController.java, src/auth/SessionService.java, AuthFlowTest.
Не-цели: не менять public API, не трогать migrations, не добавлять зависимости.
Ограничение: сначала проверить, действительно ли проблема в backend, а не в рендеринге UI.

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

8. От спора с памятью — к управлению средой

Главный сдвиг — новый язык мышления. Странный ответ не объясняйте мистикой, задайте инженерные вопросы: видел ли он в этой сессии нужный файл; есть ли в окне stack trace; не конфликтует ли prompt с инструкциями проекта; не опираюсь ли я на вчерашний разговор, которого нет; подал ли я гипотезу как гипотезу, а не как ощущение?

Переведите эмоции на рабочий язык:

Эмоциональная фраза Инженерная формулировка
«Claude всё забыл» «В новой сессии нет деталей предыдущего расследования»
«Он же это уже знал» «Этот файл или лог не загружен в текущий контекст»
«Он упорно чинит не то» «В окне осталась старая гипотеза или конфликтующие сигналы»
«Ну это же очевидно» «Для меня это очевидно, но как сигнал в сессию это не попало»

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

1
Задача
Claude code, 5 уровень, 0 лекция
Недоступна
Исправление неверных memory-утверждений в CLAUDE.md
Исправление неверных memory-утверждений в CLAUDE.md
1
Задача
Claude code, 5 уровень, 0 лекция
Недоступна
Что известно в текущей session
Что известно в текущей session
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ