Все заметки

Отдай контекст, Claude, я всё прощу

Играюсь сейчас с MCP для Unreal Engine. Claude сам пишет C++ классы, блупринты поверх них как слой репрезентации + простого тюнинга, тыкает живой Editor, запускает игру, делает скрины, сам всё тестит... Прикольно, но чёт заметил что лимиты стали кончаться сильно быстрее обычного. А контекст даже на довольно небольшой задаче распухает как не в себя.

Пошёл разбираться вместе с ChatGPT (потому что читать ахинею от Opus/Sonnet 5 -- это пытка). Первым делом тот посоветовал не сидеть в километровых чатах. Спасибо, кэп, но я и так всегда начинаю новый чат на каждую задачу. Иногда даже на новый этап предыдущей.

Открыл /context в свежем чате: 66.5k, из них Messages всего 100 токенов. Остальное уже занято инструментами, системными инструкциями, памятью и скиллами проекта.

Свежий чат: 66.5k контекста, Messages — всего 100 токенов

Потом дал ему простую задачку: несколько конкретных исправлений в уже работающем прототипе. Минут через одиннадцать Claude ещё ковыряется. К концу задачи — 292.2k контекста, из них 225.4k в Messages.

К концу задачи: 292.2k контекста, из них 225.4k в Messages

В Messages копится вся рабочая история: мои сообщения, ответы Claude, прочитанные файлы, результаты вызовов инструментов. Снаружи это свёрнуто в безобидное Used 14 tools. Внутри он успел почитать граф, найти нужный API, запросить логи, ошибиться, повторить запрос и проверить результат в редакторе. Всё это остаётся с ним на следующих шагах. В документации Claude Code это тоже описано.

За короткими строками интерфейса — цепочка вызовов Unreal MCP, включая discovery и ошибку

В полном логе нашёл чудесное: Claude запрашивает логи анрила и делает print(out), печатая весь ответ. Там были выводы на 116, 186 и 326 тысяч символов. Самые жирные Claude Code уже складывал в отдельные файлы, так что все 225k на них не спишешь. Но привычка выгребать всё подряд прекрасная.

Попробовал compact и subagents

Перед следующим экспериментом сделал /compact. В Messages осталось около 16k. Дальше попробовал выносить исследование в subagent, чтобы основной чат снова не забивался блупринтами и логами.

У subagent своё окно контекста. Пусть там разбирается, а в основной чат приносит результат, по которому можно продолжить работу.

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

В итоге получилось вот такое правило для CLAUDE.md:

Правило для CLAUDE.md целиком
## Context efficiency — PROJECT OVERRIDE

Context isolation takes priority over VibeUE's general guidance to discover, inspect, and verify directly in the current agent.

- Keep the main agent focused on the overall task, decisions, coordination, and final result.
- Exploratory Unreal work belongs in a focused subagent when the answer is not already known and may require Blueprint/editor/runtime/log/API inspection. This includes API discovery and investigative MCP/Python calls.
- The subagent may use VibeUE's normal discovery, inspection, and verification workflow as needed.

- A subagent must return an actionable handoff sufficient to continue without repeating the investigation. Include:
  - the verified root cause or conclusion;
  - exact assets, files, graphs, functions, nodes, properties, pins, or components involved;
  - the relevant current state and relationships between them;
  - the exact minimal change to make;
  - any identifiers, values, or small code/graph details required to perform that change;
  - a narrowly scoped verification procedure;
  - unresolved uncertainty, if any.

- Keep the handoff compact by omitting exploratory history, failed attempts, raw dumps, full logs, and unrelated observations — not by omitting implementation-relevant details.

- Do not repeat a subagent's investigation in the main agent. If the handoff is missing information required to continue, delegate the specific missing question back to a subagent.

- Do not force investigation and implementation into separate agents when that would require reconstructing expensive Unreal context. If a subagent has already built the working context needed to safely make a tightly coupled change — for example Blueprint graph surgery — let that subagent implement and narrowly verify that change too.

- Direct source/file work and known, local implementation steps may stay in the main agent when they do not require exploratory Unreal inspection.

- When using MCP or Execute Python in any agent, filter and aggregate inside the call. Return only information needed for the current decision or implementation; do not print broad raw logs, graph dumps, property dumps, asset lists, or large collections.

- VibeUE's "discover before you call" and evidence requirements apply inside the agent that owns that working context; they do not require the main agent to repeat discovery, inspection, or verification already performed by a subagent.

И Claude таки начал делегировать. Здесь сам занимается C++, а исследование материала и рендера отдаёт subagent:

Claude делегирует исследование материала и рендера: Diagnose orb/highlight render order

К концу задачи основной контекст остановился на 105.1k, из них 49.2k Messages.

Финальный основной контекст: 105.1k всего и 49.2k в Messages

После compact было около 16k Messages, стало 49.2k. То есть рабочая история основного агента прибавила примерно 33k. В предыдущей задаче она набрала около 225k.

Задачи разные: сначала был набор исправлений одной механики, потом более узкая проблема с z-буфером и материалами. На финальных скринах ещё и основной агент уже Opus, а раньше был Sonnet. Поэтому «сэкономил в семь раз» из этого не получается. Но исследование через subagent реально произошло, и основной чат закончил работу с 49k Messages. Вот этот результат мне уже нравится.

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

Все заметки