Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.
Контекст агента для программирования научились обновлять вслед за репозиторием, чтобы старые сведения не мешали следующим правкам. StateTape дал более высокую долю решённых задач, чем хранение полной истории, маскирование, суммаризация и другие сравниваемые подходы; препринт команды Causal Dynamics Lab при Emory University не проходил рецензирование, а все числа получили сами авторы. Для длинных задач управление контекстом становится частью инфраструктуры репозитория, а не настройкой запроса к модели.
Почему текстовая история расходится с репозиторием
Обычный агент добавляет в контекст результаты чтения файлов, поиска и запуска тестов. Когда история разрастается, система скрывает старые наблюдения, сжимает их в сводку или просит отдельную модель решить, что больше не пригодится.
Такие способы оценивают текст, но не учитывают связи в коде. Если агент прочитал функцию, а затем переписал её, прежняя копия стала ложной. Если правка удалила единственный вызов вспомогательной функции, её текст остаётся верным, но больше не нужен. Одновременно агенту может понадобиться вызывающая функция, которой раньше не было в контексте.
На TraceBench перед очередной правкой 73,4% токенов в контексте не требовались для продолжения задачи, а 58,5% нужного кода отсутствовали. StateTape удалил 74,2% ненужных токенов и вернул 68,1% недостающих. Эталонным контекстом здесь считается минимальный набор сведений, достаточный для завершения задачи с текущего шага.
Разница между «устарело» и «не нужно» существенна. Запись может точно описывать репозиторий, но относиться к уже завершённой ветке работы. StateTape сначала находит записи, которые могла опровергнуть правка, а затем отдельная модель решает, какие из них обновить, сохранить или удалить.
Как запись в код запускает пересборку контекста
StateTape встраивается в систему, которая запускает агента и его инструменты. Она представляет репозиторий как граф на уровне символов: функций, методов, классов и других определений. Рёбра показывают вызовы, ссылки, импорты и зависимости, поэтому одна функция не сливается со всем файлом.
После каждой записи система сравнивает граф до и после изменения. Лента StateTape отмечает символы, чей текст изменился, а также соседние символы, у которых появились или исчезли связи. Эти отметки связывают правку с конкретными записями контекста: устаревание больше не приходится угадывать по формулировкам старого сообщения.
Для очевидных случаев действуют стандартные правила. Если определение сохранилось, его копию можно заменить текущей. Если символ удалён или прежняя связь больше не существует, запись убирают и оставляют отметку, которая не даёт вернуть её как актуальную. Результаты тестов и поиска тоже можно привязать к состоянию репозитория, в котором агент их получил.
Небольшая управляющая модель разбирает неоднозначные случаи и ищет сведения для следующей правки. Точкой старта служит не текст задания, а изменённый символ. От него система проходит по графу к вызывающим функциям, новым зависимостям и контрактам, которые могла затронуть запись.
В примере из работы агент сначала читает load_config и вызываемую ею _read_json, а затем переводит загрузку на YAML и добавляет ошибку ConfigError. StateTape обновляет копию load_config, удаляет ставшую ненужной _read_json и подбирает start_server вместе с yaml_io.load. Обычная суммаризация видит прежний текст, но не узнаёт, что у помощника исчез вызывающий код, а у изменённой функции появился новый вызываемый код.
Когда StateTape меняет архитектурный план
Проверка охватывает шесть агентов из семейств Claude и GPT-5.6 и три тестовых набора с большим количеством правок: SWE-EVO, SlopCodeBench и SWE-bench Pro. Для TraceBench использовали реальные траектории Claude Code с Opus 4.8 на задачах SWE-EVO. Сравнение включало работу без обслуживания контекста, маскирование наблюдений, сводки, CORVUS и управляющую модель без графа.
StateTape показал лучшую долю решённых задач во всех сочетаниях агентов и наборов. Разбор компонентов показал, что больше всего результата даёт граф на уровне символов: замена его файловым представлением сильнее всего ухудшила итог. Следом по вкладу идёт сама лента изменений, без которой модель снова пытается определять устаревание только по тексту.
Управляющая модель потратила от 0,8% до 4,7% токенов основного агента в зависимости от модели и набора задач. Однако StateTape требует индексировать символы и зависимости, перехватывать каждую запись и связывать записи контекста с участками репозитория. Это не замена одного системного запроса, а новый слой среды исполнения агента.
Работа меняет планы команд, которые строят агентов для длинных серий взаимосвязанных правок. Им стоит измерять контекст после записей, отдельно считать устаревшие сведения и недостающий код, а граф репозитория поддерживать в актуальном состоянии. Граница вывода проходит по задачам с большим числом изменений: для коротких запусков накопление ложных записей остаётся небольшим, поэтому перенос инфраструктуры может не окупиться.
Источники
Иллюстрация: рисунок из статьи «StateTape: Action-Conditioned Evidence Lifecycle Modeling for Long-Horizon Coding Agents», Ziyang Yu, Liang Zhao, Bowen Zhu и др., CC BY 4.0
Похоже на вашу задачу?
Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.



