m
Mars AI Operator Модуль 4 ⭐ Working memory · Context engineering
60 мин · hands-on
Структура модуля
  1. Hook
  2. Mental model15м
  3. 3 техники10м
  4. Demo Mars10м
  5. Упражнение · 3 probe20м
  6. Quiz
  7. Что дальше
Модуль 4 из 5 · Discernment × Working Memory

AI не тупеет. У него заканчивается внимание.

«AI nimani ko'rmoqda — va nimani unutib qo'ydi»

Эта техника — самая полезная в курсе. Но решать тебе. Один навык: видеть что у агента в контексте, что он уже потерял, и чем его дозаправить. Без этого Claude Code превращается в гадалку к третьему часу работы.

Длительность
60 мин
Hands-on
35 мин
Prerequisite
M1 CLAUDE.md
Релиз
MVP вместе с M1

Hook — почему сильный AI к вечеру тупеет.Nega kuchli AI kechqurun ahmoqlashadi

Сцена · вторник вечером в Mars

Утром ты открыл claude в ~/mars/src/. Идея — переписать роутер уведомлений. Утро шло гладко: агент прочитал 12 файлов, нашёл нужный модуль, предложил план. Ты согласился. Он сделал. Тесты зелёные.

Дальше ты остался в том же чате. Добавил вторую задачу. Третью. К обеду — рефактор миграций. К пяти — обсуждали ещё кусок sales-воронки.

В семь вечера попросил «запусти тесты которые мы прошли утром». И тут он начал переписывать совсем другой файл. Не помнит, что вы решили утром. Уверенно идёт в стену.

Это не баг. Это не «модель устала». Это context rot — и это первое, чему учится оператор.

К концу модуля ты сможешь

Три навыка, которые я проверю

  • Запускать /compact до того как агент начал галлюцинировать в длинной сессии — по наблюдаемым сигналам, а не по таймеру.
  • Делегировать Explore или Plan sub-agent (built-in или свой через /agents), когда задача требует исследования файлов, а не правки.
  • Объяснять, что survives /compact, что нет, и почему project-root CLAUDE.md — единственный надёжный носитель правил для длинной сессии.

Mental model — context window как working memory.Context window — bu working memory

Главная идея модуля: у агента есть конечный бюджет внимания. Разберём, как он расходуется, почему к вечеру агент «тупеет», и три приёма, которые это лечат.

1. Внимание — это бюджет, а не полка

У модели есть бюджет внимания — конечный, как у человека. Каждый новый токен (слово, символ, кусок кода) — списание с этого бюджета. Дашь 200 000 токенов — внимание размазано по всему. Дашь 10 000 нужных — внимание сконцентрировано. Больше контекста ≠ лучше.

Чем больше текста в окне, тем тяжелее каждому слову держать связь со всеми остальными — внимание расплывается. Важно: это не обрыв на каком-то числе, а плавное размывание.

// сколько в окне → как агент себя ведёт ~10k токенов короткая сессия ✓ держит всё чётко ~50k токенов час плотной работы ~ начинает напрягаться ~100k токенов полдня в одной сессии ~ точность падает ~200k токенов целый день не закрывал ! теряет середину — «context rot» // внимание не «выключается» на каком-то числе. // оно плавно размывается: чем больше в окне, тем хуже // агент помнит то, что было в начале и в середине. // ты не увидишь ошибку — ты увидишь, что агент // уверенно делает не то.
→ свайп вправо если таблица обрезана

2. Context rot — не «забыл», а «размылось»

У этого есть название — context rot («протухание контекста»): чем больше токенов в окне, тем хуже агент достаёт из них нужное. Это не баг конкретной модели, а общее свойство — лечится не «промптом пожёстче», а приёмами из следующего раздела.

Симптом в Claude Code
Что на самом деле
Агент в 8-м часе сессии нарушает конвенцию из CLAUDE.md, которую сам утром применял
CLAUDE.md лежит в начале контекста, attention туда теперь слабее → правило размылось
Спросил «продолжи где остановились» — он начинает не с того места
«место остановки» обсуждалось 20 turns назад, в середине окна → lost in the middle
Делает лишние Read тех же файлов, которые уже читал
Результаты прошлых Read глубоко в истории, агент им не доверяет — перечитывает
Уверенно ссылается на функцию, которую ты в коде не видишь
Hallucination на фоне «выцветших» истинных фактов из начала

Правило оператора: если ты замечаешь нарушение конвенции, лишние Read'ы, или «уверенную ерунду» — это не повод писать жёстче промпт. Это сигнал применить технику из следующего раздела.

3. Что вообще держать в окне

Определение одной фразой: хороший контекст — это минимальный набор нужных токенов, который даёт максимальный шанс получить нужный результат. Не «больше контекста», а меньше шума и больше плотности.

Золотая середина — между двумя крайностями: слишком жёсткие правила «на каждый случай» (хрупко, ломается на новом) и слишком общие «сам догадайся» (агент гадает). Нужно посередине: конкретно настолько, чтобы можно было проверить, и гибко настолько, чтобы агент думал.

Для оператора это значит: CLAUDE.md — это не «всё, что я знаю про проект». Это набор конкретных правил, про каждое из которых ты сможешь проверить по diff'у, что оно применилось. Если правило нельзя проверить — оно зря занимает место в контексте.

Три техники long-horizon из Anthropic blog.Uzun masofa uchun uchta texnika

Это сердце модуля. Три приёма для задач, которые не помещаются в одно окно — у каждого своя команда в Claude Code. Учи парами «приём → команда».

01 · compaction

Сожми диалог, оставь смысл

Берём длинный чат у границы окна, суммируем, начинаем новое окно с этой выжимки. В Claude Code — команда /compact.

02 · structured note-taking

Пиши заметки на диск

Агент или ты ведёт NOTES.md / todo-list вне контекста. Подгружается обратно когда нужно. Это agentic memory.

03 · sub-agents

Делегируй в чистое окно

Sub-agent работает в своём context window, читает 15 файлов в своём окне, возвращает в main только сжатый summary (1-2K токенов).

Compaction — /compact в Claude Code

/compact сжимает историю сессии: модель сама пересказывает диалог, оставляя важное и выкидывая мусор. Что сохраняется: архитектурные решения, нерешённые баги, важные детали + 5 последних прочитанных файлов. Что выкидывается: избыточные выводы команд, повторяющиеся сообщения.

Ещё важный факт из Claude Code docs (docs/04-claude-code-memory.md): project-root CLAUDE.md survives compaction. После /compact Claude перечитывает его с диска и снова инжектит в сессию. Это значит:

Survives /compact
Does NOT survive
✓ project-root CLAUDE.md (re-injected с диска — единственный подтверждённый survivor по docs)
✗ Conversation history — сжимается в summary
✓ 5 последних прочитанных файлов (по blog Anthropic)
✗ Сырые tool outputs (логи, длинные diff'ы) — выкидываются
— user-level ~/.claude/CLAUDE.md и nested CLAUDE.md из subdirectories автоматически подгружаются Claude Code при старте, но это другая механика, не survivor /compact'а
✗ Всё, что было сказано только в чате (без записи в CLAUDE.md)

Практическое следствие. Если в течение длинной сессии ты сказал агенту «вот эта функция — не трогать никогда» — после /compact это исчезнет. Если хочешь чтобы пережило — допиши в CLAUDE.md через команду /memory (старый #-shortcut Anthropic объявили устаревшим в Academy lesson 9).

~/mars/srcsession t=4h 17min · 142k/200k tokens
$ /compact
⠋ Summarizing conversation…
⠙ Preserving: 3 architectural decisions, 2 open bugs, recent file edits
⠹ Discarding: 28 stale tool outputs, 41 redundant turns

✓ compacted  142k → 18k tokens (-87%)
✓ CLAUDE.md re-injected from disk  /Users/rus/mars/src/CLAUDE.md
✓ 5 recent files kept in context
  src/notify/router.py
  src/notify/handlers.py
  src/notify/__init__.py
  tests/test_notify.py
  CLAUDE.md

 можем продолжать. что дальше?

Structured note-taking — NOTES.md и agentic memory

Это память на диске, а не в окне. Простой паттерн: агент ведёт NOTES.md вне контекста. Длинная задача — записал прогресс; новая сессия — прочитал NOTES.md, продолжил. Контекст между сессиями не тратится на пересказ.

Три практических места, где это уже работает в Claude Code (не надо ничего настраивать):

Где
Зачем
TODO-list, который Claude Code ведёт сам
При длинной задаче агент видит свой план как короткий список. Не теряет шаги. Это write-back: пишет на диск, читает обратно.
NOTES.md в корне репы (ты ведёшь руками или просишь агента)
Между сессиями. Закончил вечером — записал «остановился на X, нужно ещё Y». Утром Claude читает первым делом.
Сам CLAUDE.md через команду /memory
Прямо в сессии добавь правило в CLAUDE.md командой /memory — оно сразу в окне, при /compact переживёт сжатие, в новой сессии подгрузится автоматически.

Write-back vs in-context — ключевое различие. CLAUDE.md = in-context, всегда занимает место в окне. NOTES.md = write-back, лежит на диске, грузится по запросу. Используй CLAUDE.md для правил, NOTES.md для прогресса.

Sub-agents — делегирование в чистый context

Главный приём — изоляция шума. Sub-agent тратит свои десятки тысяч токенов на поиск в своём окне, а в главную сессию возвращает только сжатый итог (1-2K токенов). Главное окно остаётся чистым. Это не «быстрее» — это дешевле по вниманию.

Built-in sub-agents в Claude Code — три штуки, доступны сразу:

Sub-agent
Когда уместен
Explore · Haiku · read-only
«Где в этой репе обрабатываются возвраты?» — оптимизирован под поиск и навигацию, не делает edit. Быстрый и дешёвый.
Plan · inherits model · read-only
Включается в plan mode из UI Claude Code. Исследует кодовую базу для составления плана, не правит.
general-purpose · all tools
Multi-step задачи, где нужны и поиск, и правки, и логика. Дороже, но самостоятельнее.

Когда какой приём:

Задача
Приём
Большая итеративная работа с одной целью
Compaction — диалог нужен непрерывный, просто сжатый
Итерации с чёткими milestones, паузы между сессиями
Note-taking — записал прогресс, продолжил завтра
Поиск/research в большой кодовой базе
Sub-agent — изолируй verbose в чистом окне

Demo — ментор рефакторит ~/mars/src/ весь день.Mentor butun kun ~/mars/src/ refactor qiladi

Сценарий из жизни. Зухра, ментор Python из Юнусобода (вечер, после смены — помогает Mars IT с внутренним скриптом): разнести роутер уведомлений на два модуля. Большая репа, длинный день, всё что мы только что разобрали — здесь по шагам.

Прогноз · до того как читать timeline

Зухра в 14:30 имеет 118k токенов в контексте (из 200k). К 18:42 — ещё хуже. На каком шаге, по-твоему, агент начнёт ошибаться? И что Зухра сделает первым, когда заметит? Запиши свои два ответа, потом проверь ниже.

10:14 · Утро, чистый context

~/mars/srcsession start · 0/200k tokens
$ claude

✓ CLAUDE.md loaded  ~/mars/src/CLAUDE.md (2,140 tokens)
✓ user CLAUDE.md loaded  ~/.claude/CLAUDE.md (1,820 tokens)

 разнеси src/notify/router.py на router.py + handlers.py.
  публичный API не ломать. план сначала, код потом.

⠋ Using Plan sub-agent…    (не флудит main context)
✓ план готов:
  1. вынести 4 хендлера в handlers.py
  2. router.py оставить как dispatcher
  3. __init__.py — сохранить старые имена для обратки
  4. tests/test_notify.py — поправить импорты, не логику

Note: Зухра в plan mode. Plan sub-agent не флудит main — main context видит только финальный план.

14:30 · Пообедала, добавила ещё задачу

После реализации Зухра не закрыла чат, а добавила: «теперь поправь миграции». Потом «посмотри warning в sales-воронке». Чат разросся до 118k токенов. CLAUDE.md где-то в начале, обсуждение notify-роутера в середине.

18:42 · Context rot ловится

~/mars/srcsession t=8h 28min · 156k/200k tokens
 запусти тесты которые мы прошли утром

⠋ Reading tests/test_billing.py…
⠋ Reading tests/test_billing_v2.py…
⚠ агент пошёл в billing
  утром был notify. он не помнит.

 Escape  (остановить)

 ты идёшь не туда. утром был notify, не billing.

да, извините — посмотрю tests/test_notify.py…
  ⚠ через 2 turn'а опять предложилف-string в child-friendly коде
    что прямо запрещено в CLAUDE.md

Что произошло: CLAUDE.md в начале окна, его правила «выцвели» под весом 156k токенов посередине. Утренний контекст про notify тоже выцвел. Агент уверенно идёт в стену.

18:45 · Лечение — /compact + Explore

~/mars/srcrecovery
 /compact
⠋ Summarizing… preserving: notify split (DONE), migrations (DONE),
                            sales warning (OPEN — root cause unclear)
✓ compacted  156k → 14k tokens (-91%)
✓ CLAUDE.md re-injected

 sales warning остался открытым. найди что там в воронке через Explore,
  не флуди main контекст.

⠋ Delegating to Explore subagent…
⠋ Explore reading: src/sales/*.py (~22 files)…
⠋ Explore: targeted grep for warning source…

✓ Explore returned summary  (28k tokens explored → 1.4k returned)
  warning источник: src/sales/funnel.py:241
  unused import after refactor 12 days ago
  fix: удалить строку 11.

Что Зухра выиграла: main context — 14k вместо 156k. Explore прошарил 22 файла, но в main вернул только адрес проблемы и решение. Утренние правила из CLAUDE.md снова «свежие». Можно продолжать.

Без техник
С техниками
156k токенов мусора, агент уверенно ошибается, ты теряешь час доверия к нему
14k токенов после /compact + изолированный поиск через Explore. Главное — ты видишь что вернулось в main
Закрыть чат → утром объяснять заново «что мы делали»
Записать в NOTES.md «sales warning fix готов, осталось smoke-тест в pre-prod» → завтра агент с этим стартует
Тот же модуль — другой ментор

Как это выглядит для Тимура (Python олимп 12–14, Чиланзар)

У Тимура другой сценарий: ученик решил задачу с olymp.uz криво — длинное решение в 200 строк, работает, но судья даёт TLE. Тимур хочет показать рефактор через похожие решения, которые уже есть в его репе подготовки.

Вместо того чтобы пускать main-агента читать ~40 файлов прошлых задач и забивать контекст — Тимур делегирует Explore sub-agent: «найди в ~/olymp-prep/ задачи на префиксные суммы, верни 2-3 эталонных решения и в чём отличие от текущей».

Что получает в main: 1.5K токенов summary — ссылки на файлы и ключевая идея. Что НЕ попадает в main: 35k токенов сырых решений. Дальше с учеником обсуждает уже выжимку — внимание агента не размазано.

Та же техника, другая задача. Compaction Тимур почти не использует — его сессии короче. Но sub-agents — каждый день.

Упражнение — 3 probe Before-and-After.Uchta probe — Before va After

Три упражнения на твоих длинных сессиях. Сделай все три руками — без этого следующая длинная сессия пройдёт, как у всех, на удачу.

Probe 1 · 5 мин · cold start vs CLAUDE.md

Открой claude в одной репе дважды

Берём твою CLAUDE.md, которую ты сделал в Модуле 1.

  1. В репе без CLAUDE.md запусти claude. Запрос: «добавь функцию X, оформление как в этом проекте». Запиши: сколько уточняющих вопросов агент задал и попал ли в стиль.
  2. В той же репе с CLAUDE.md запусти claude. Тот же запрос. Запиши те же два числа.
  3. Сравни. Если разницы нет — у тебя слабая CLAUDE.md, перепиши конкретнее.
Что записать в отчёт: вопросов до / вопросов после, соответствие стилю до / после, время до первого diff'а до / после.
Probe 2 · 10 мин · lost in the middle

Похорони важный constraint в середине

Этот probe вытащит «потерю середины» — то самое падение точности по тому, что обсуждалось в середине длинного окна.

  1. Длинный чат. 30+ turns: попроси агента читать разные файлы, обсуждать рефакторинг, переключаться между темами.
  2. На turn'е ~10–15 встрой критический constraint: «никогда не используй библиотеку requests в этом проекте, только httpx». Не повторяй потом.
  3. На turn'е 30+ попроси код, в котором естественно появилась бы requests (HTTP-запрос). Запиши: агент использовал requests? или httpx?
  4. Запиши тот же constraint в CLAUDE.md командой /memory. Открой чистую сессию claude в той же репе. Сделай тот же запрос. Запиши результат.
Falsifiable гипотеза (один прогон даёт yes/no): когда constraint живёт в середине длинного чата, агент в нём ошибается чаще, чем когда тот же constraint живёт в CLAUDE.md чистой сессии. Шаг 3 vs шаг 4 — два независимых результата, сравниваешь напрямую.
Probe 3 · 5 мин · sub-agent isolation

Посмотри что осталось в main

  1. Стартует чистый claude. Спроси: «опиши структуру src/api/ (или любая твоя папка с 10+ файлов)». Дай агенту прочитать всё в main context. Сделай /cost или /transcript — запиши сколько токенов в окне.
  2. Стартует чистый claude. Спроси: «используй Explore sub-agent чтобы описать структуру src/api/». Дай ему отработать. Сделай /cost. Запиши снова.
  3. Сравни числа. Должно быть разница в 3-10×.
Что должно произойти: в случае 1 main контекст забит файлами. В случае 2 main видит только summary от Explore — у тебя есть бюджет на следующий час работы.
Reflection · перед quiz

Перед тем как проверять себя — пауза на 60 секунд

Эти ответы остаются у тебя — мы их не отправляем. Это просто способ заякорить два момента, на которых модуль вырывается из «прочитал и забыл».

Quiz — проверь себя за 3 минуты.O'zingni sina — 3 daqiqada

Три вопроса. Если хотя бы один ошибся — вернись к соответствующему разделу. Это не отметка, это твоя страховка перед следующей длинной сессией.

Вопрос 01

Ты работаешь над рефактором ~/mars/src/ 3 часа подряд в одной сессии. Сначала агент точно правил файлы по конвенции из CLAUDE.md. Теперь стал её нарушать. Что произошло?

AАгент устал — у LLM есть аналог утомления после долгой работы
BContext window заполнился, attention budget исчерпался, ранние инструкции из CLAUDE.md потеряли вес — context rot в действии
CClaude Code на лету переключился на меньшую модель ради экономии
DСрок действия инструкций в CLAUDE.md истёк, нужно перезагрузить файл
Правильно — B. Каждый новый токен расходует бюджет внимания. CLAUDE.md лежит в начале окна — после 3 часов поверх него легло 100k+ токенов, внимание туда теперь слабее, правила «размылись». A, C, D — частые заблуждения: модель не «устаёт» (у неё нет ощущения времени), Claude Code не меняет модель сам, у CLAUDE.md нет «срока годности» — он перечитывается каждой сессией с диска как есть.
Вопрос 02

Что делает /compact в Claude Code?

AУдаляет всю историю чата и начинает с нуля
BУвеличивает размер context window сверх лимита
CСуммирует историю, сохраняя архитектурные решения, открытые баги и 5 последних файлов; project-root CLAUDE.md re-injected с диска
DСжимает каждое сообщение независимо, по одному
Правильно — C. Из Anthropic engineering blog: «model preserves architectural decisions, unresolved bugs, and implementation details while discarding redundant tool outputs». Из Claude Code docs: «project-root CLAUDE.md survives compaction: Claude re-reads it from disk and re-injects it». A — это /clear, не /compact.
Вопрос 03

Когда уместен sub-agent (по Anthropic blog)?

AКогда хочешь сделать ту же работу быстрее в параллель
BКогда побочная задача (поиск, чтение многих файлов) забьёт main context результатами, к которым ты потом не вернёшься
CКогда нужна другая модель
DКогда главный агент сделал ошибку и его надо заменить
Правильно — B. Подробный контекст поиска остаётся внутри sub-agent'а, а главная сессия получает только сжатый итог. Sub-agent может потратить десятки тысяч токенов, а возвращает 1 000–2 000. Главный приём — изоляция шума, не скорость.
// выбери ответ в каждом вопросе
Все команды на одной странице: claude-code-cheatsheet.md /compact, /memory, /agents, /cost, sub-agents, hooks

Что дальше — Модуль 5.Keyingisi — Modul 5

Atribuция и лицензия

Этот модуль адаптирован Mars IT School (2026) на основе:

— Anthropic Engineering Blog «Effective context engineering for AI agents» (Sep 2025) — центральный источник, цитаты verbatim.

«AI Capabilities and Limitations» — Anthropic Academy, 2026, секция Working Memory (уроки 8, 9).

«AI Fluency: Framework & Foundations» — Dakan, Feller, Anthropic, 2025 (CC BY-NC-SA 4.0).

— Claude Code documentation (claude.com/docs) — определения /compact, sub-agents, what survives compaction.

«Claude Code in Action» и «Introduction to Subagents» — Anthropic Academy, 2026.

Наша адаптация — CC BY-NC-SA 4.0. Можно копировать, ремиксить, использовать в обучении — с указанием Mars IT School и сохранением той же лицензии.

Финал · одной фразой

Как модуль в целом?