Решили: выставить свой редакторный тулинг агенту как custom MCP tools — первой партией balance_bench, battle_trace, dev_command, capture_view; тул живёт в Editor-сборке своей подсистемы, ссылка на пакет закрыта versionDefines.

Почему: агент видел наши тридцать девять пунктов меню как ряд кнопок без подписей. execute_menu_item умеет только НАЖАТЬ — ни параметров, ни возвращаемого значения, дальше гадай по консоли, твоя ли это строка; execute_code параметры даёт, но с готчами (тело метода без using, SaveAssets уносит чужие правки) и с риском на каждый вызов. Отвергли общую сборку Alebardium.AgentTools: она стала бы складом ссылок на все подсистемы разом, а тул — отстающей от того, что оборачивает. Отвергли белый список команд для dev_command: он отстанет от реестра, а половинчатый доступ погнал бы агента в обход через execute_code — ровно тот дефект, против которого инструмент и заводится.

Сказано: развилки закрыты выбором Макса 02.08.2026 — состав «все четыре», права dev_command «весь реестр», захват «оба механизма в один заход» (вопреки рекомендации делать синхронный первым), владелец композиции листа — Presentation.Editor.

Грабли:

  • compile-check.ps1 показывает зелёное на коде, которого не компилировал. Скрипт собирает по готовым .rsp из Library/Bee, а их пишет Unity. Новый versionDefine в .rsp не попадает, весь файл под #if MCP_FOR_UNITY схлопывается в пустоту — и сборка проходит за полторы секунды, «успешно». Ловится не цветом, а проверкой: Select-String по .rsp на имя дефайна. Проверять такой код пришлось вручную — csc из установки редактора по тому же .rsp плюс -define:MCP_FOR_UNITY, -r: на MCPForUnity.Editor.dll и явный список новых исходников (их в старом .rsp тоже нет).
  • Правка .asmdef вообще выводит заход из режима «код мимо редактора»: новая ссылка и новая сборка требуют одного прохода через Unity, иначе тулы не появятся.
  • BalanceCli заканчивает работу через EditorApplication.Exit — обёртка над ним из живого редактора убила бы редактор вместе с несохранённой работой. Тулы встали рядом с ним на общем ядре.
  • Имя параметра уходит в схему как есть: ToolDiscoveryService.ExtractParameters берёт prop.Name без приведения к snake_case, хотя ConvertToSnakeCase в классе рядом лежит. Свойства в Parameters называются строчными, иначе агент увидит Benches.
  • Generic TryResolve(out T) у VContainer — extension в неймспейсе VContainer; без него компилятор видит только TryResolve(Type, out object, object) и падает невнятным CS7036.

Владелец правды: Balance/Editor/Agent/BalanceAgentTools.cs, DevTools/Editor/DevCommandTool.cs, Presentation/Editor/Agent/CaptureViewTool.cs, Presentation/Editor/FrameSheet.cs; ход захода — docs/agent-loop-progress.md.