3,583 papers
arXiv:2610.04868 78 4 окт. 2026 г. FREE

From Memory to Guide (Spatio-Temporal Composer): превращаем скилы агента в короткие инструкции с границами и сроком действия

КЛЮЧЕВАЯ СУТЬ
Обнаружено: агент не подгоняет чужой скил под проект, а исполняет его буквально. Скил под npm портит файл версий (lockfile) в проекте на yarn. Скил про архитектурный рефакторинг толкает переписывать рабочий код вместо точечной правки. Метод Spatio-Temporal Composer позволяет давать кодирующему агенту не сырые скилы, а короткую инструкцию под текущий проект и текущий этап. Между «нашли подходящий скил» и «агент действует» встаёт отдельная модель-композитор. Она пишет Runtime Guide: цель, действия, границы и условие окончания. Итог на долгих задачах: около +7 пунктов успешных прохождений и 32% экономии токенов у основного агента.
Адаптировать под запрос
⚡

TL;DR

Spatio-Temporal Composer — это промежуточный слой между библиотекой скилов (готовых инструкций «как делать X») и кодирующим агентом. Скил не вставляется в контекст целиком. Отдельная модель сначала подгоняет его под текущий проект и текущий этап работы. Результат — короткий «Runtime Guide»: локальная цель, рекомендованные действия, границы и условие, когда инструкция перестаёт действовать.

Главная находка: текст скила, понятный человеку, ещё не значит, что агент применит его безопасно. Скил, написанный под npm, портит lockfile в проекте на yarn. Скил про архитектурный рефакторинг, сработавший во время мелкой отладки, толкает агента переписывать рабочий код вместо точечной правки. Агент не «подгоняет» чужой опыт под ситуацию сам. Он исполняет его буквально, и ошибки накапливаются в долгих задачах.

Суть метода: между «нашли подходящий скил» и «агент действует» добавляется шаг композиции. Он учитывает пространство (правила и инструменты этого проекта) и время (на каком этапе мы сейчас, когда инструкция истекает). Каждый Guide завершается явным условием окончания. После него агент заново перечитывает требования задачи и просит следующий Guide.

🔬

Схема метода

ШАГ 0: Агент видит только каталог скилов (названия + краткое описание)
ШАГ 1: Агент формулирует локальную цель, прогресс, блокеры → запрос на Guide
ШАГ 2: СЕЛЕКТОР (вспомогательная модель) получает: профиль задачи + свидетельства
        выполнения + прошлый Guide
        → decision (нужен ли новый Guide), skillRefs (какие скилы), whyNow (почему сейчас)
ШАГ 3: КОМПОЗИТОР собирает Runtime Guide:
        GOAL → ACTIONS → BOUNDARIES (Applies When) → Verification → TERMINATION
ШАГ 4: Агент работает строго внутри Guide
ШАГ 5: Условие завершения сработало → Guide снят → агент перечитывает требования
        задачи → новая цель → снова ШАГ 1

В исследовании шаги 2–3 выполняют отдельные модели в коде. Каждый шаг — отдельный запрос.

🚀

Пример применения

Задача: Вы ведёте с Claude Code бэкенд сервиса приёма платежей. Стек: FastAPI, Poetry, PostgreSQL. В библиотеке три скила: «идемпотентность платежей», «миграции БД», «архитектурный рефакторинг». Скил по миграциям написан под pip и requirements.txt. Ваш проект живёт на Poetry. Сейчас агент должен сделать создание и просмотр платежей через ЮKassa. Если дать ему все скилы целиком, он начнёт ставить пакеты через pip, а при первой же ошибке теста решит «улучшить архитектуру».

Промпт (отдельный чат или субагент-«композитор»):

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

ПРОФИЛЬ ПРОЕКТА:
FastAPI, Poetry (pip не использовать), PostgreSQL, платежи через ЮKassa.
Правила: все суммы в копейках (int), API v1 не ломать, миграции только через Alembic.

СВИДЕТЕЛЬСТВА ВЫПОЛНЕНИЯ:
Готово: модели Payment, подключение к БД. Тесты на модели проходят.
Текущая цель: эндпоинты создания и просмотра платежа.
Блокеров нет.

ПРОШЛЫЙ GUIDE:
«Каркас проекта и модели» — завершён.

ДОСТУПНЫЕ СКИЛЫ:
1) Идемпотентность платежей — {текст скила}
2) Миграции БД — {текст скила}
3) Архитектурный рефакторинг — {текст скила}

Сначала реши:
- decision: нужен ли новый Guide (Generate / None)
- skillRefs: какие скилы использовать (можно несколько)
- whyNow: какой пробел в работе сейчас и чем выбранные скилы его закрывают

Затем составь Runtime Guide:
- GOAL: одна локальная цель
- ACTIONS: конкретные шаги под ЭТОТ проект (команды Poetry, таблицы, ЮKassa),
  а не общие правила из скилов
- BOUNDARIES: что нельзя делать и когда Guide применим (Applies When)
- VERIFICATION: как проверить, что цель достигнута
- TERMINATION: когда Guide снимается (цель достигнута, сменился этап,
  непреодолимый блокер)

Результат: Композитор вернёт решение, список выбранных скилов (скорее всего, идемпотентность и миграции) и объяснение «почему сейчас». Дальше идёт Guide из пяти блоков. Команды в нём будут переписаны под Poetry. Архитектурный рефакторинг в границах запрещён. Условие завершения привязано к готовности эндпоинтов и прохождению тестов. Этот Guide вы отдаёте кодирующему агенту вместо сырых скилов.

🧠

Почему это работает

Слабость. Когда в промпт вставляют скил целиком, агент вынужден сам решать на каждом шаге: что из этого относится к моему проекту, а что нет, и актуально ли это сейчас. У человека такая адаптация происходит незаметно. Модель же склонна читать инструкцию как руководство к действию буквально. В долгой задаче одна неподходящая инструкция запускает цепочку ошибок и «петли отладки».

Сильная сторона. Модель хорошо переписывает общий текст под конкретный контекст, когда это её единственная задача. Ей не нужно одновременно писать код. Она видит профиль проекта, свежие результаты и прошлый Guide и выдаёт короткий конкретный текст.

Как метод это использует. Адаптация выносится в отдельный шаг, а исполнитель получает уже готовую локальную инструкцию. Явное условие окончания не даёт старому совету работать «по инерции» на неподходящем этапе.

Рычаги управления: - Профиль задачи (правила, стек, запреты) → чем точнее, тем лучше композитор отсекает несовместимое. - Свидетельства выполнения (что сделано, что упало, какие тесты) → без них Guide хуже подстраивается под этап. По абляции без них результат падает на 7 пп. - Условие завершения → без него Guide остаётся «висеть» и мешает. Без жизненного цикла падение 10 пп. - Прошлый Guide → позволяет композитору видеть, что уже закрыто, и не повторять советы. - Число скилов в одном Guide → можно брать несколько, если они закрывают разные части цели.

📋

Шаблон промпта

Ниже ручная версия метода для чата или субагента. В статье самих текстов промптов нет. Шаблон собран по описанным в ней полям: decision, skillRefs, whyNow, цель, действия, границы, условия завершения.

Ты — композитор инструкций. Ты не выполняешь задачу. Ты готовишь для кодирующего
агента короткий Runtime Guide на ТЕКУЩИЙ этап.


{цели проекта, стек, правила, запреты, инструменты}



{что уже сделано, результаты тестов, блокеры, текущая локальная цель}



{прошлый Guide и чем он закончился, или «нет»}



{список скилов: название — когда применять — текст}



decision: Generate или None. None — если действующий Guide ещё не завершён
skillRefs: какие скилы использовать (один или несколько)
whyNow: какой пробел в работе сейчас и что именно эти скилы в нём закрывают



GOAL: одна локальная цель этапа
ACTIONS: конкретные шаги под этот проект (имена файлов, команды, таблицы),
         не общие правила из скилов
BOUNDARIES / Applies When: что нельзя делать; при каких условиях Guide применим
VERIFICATION: как проверить, что цель достигнута
TERMINATION: когда Guide снимается — цель достигнута, сменился этап
             или появился непреодолимый блокер


Если decision = None, верни только .

Плейсхолдеры: - {цели проекта…}: всё, что агент не должен нарушать (менеджер пакетов, версии API, формат данных). - {что уже сделано…}: свежий отчёт агента, а не вся история. - {список скилов}: ваши скилы или файлы инструкций.

🚀 Быстрый старт — вставь в чат:

Вот шаблон композитора Runtime Guide. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит про стек, правила проекта, текущий этап и список скилов. Метод работает только тогда, когда Guide привязан к конкретным правилам проекта и конкретному этапу. Без этих данных композитор выдаст те же общие советы, что и скил.

⚠️

Ограничения

⚠️ Нужен код для полной версии: в исследовании Селектор и Композитор — отдельные модели, встроенные в цикл агента (агент сам запрашивает Guide, система передаёт ему результат). Вручную можно повторить идею, но не автоматизацию.

⚠️ Цена вспомогательных запросов не учтена: экономия токенов в 32% посчитана только для основного агента. Расходы на Селектор и Композитор отдельно не включены.

⚠️ Одна среда и одна модель-исполнитель: проверка шла на одном кодирующем агенте и на бенчмарке самих авторов. Перенос на другие агенты и модели — догадка.

⚠️ Только долгие задачи: метод создан для многочасовой разработки. На короткой правке файла лишний шаг композиции, скорее всего, не окупится.

⚠️ Эффект умеренный: абсолютный прирост успешных прохождений — около 7 пунктов на сложных задачах. Это заметно, но не «агент стал решать всё».

⚠️ Материал неполный: в доступном тексте обрывается раздел со сравнением «только Селектор» и «общий совет без скилов». Поэтому вклад каждого компонента виден только по абляциям.

🔍

Как исследовали

Авторы взяли 13 длинных задач по разработке ПО из бенчмарка EngramBench. В среднем один прогон шёл 4,3 часа, самый долгий больше 12. Всего вышло 78 прогонов и более 335 часов работы. Исполнитель — Codex с GPT-5.5 на среднем уровне рассуждений. Библиотека — 18 фиксированных скилов, подготовленных заранее.

Основное сравнение: тот же агент и те же скилы, но в одном случае скилы подаются напрямую, в другом идут через Composer. На четырёх самых сложных задачах (около 8,5 часа на прогон) доля подтверждённо пройденных тестов выросла с 29,9% до 37,1%. Это +7,2 пункта. Расход токенов основного агента упал на 32,2%. На остальных девяти задачах число пройденных проверок выросло с 458 до 563 (+22,9% относительно), а токенов ушло на 6,86% меньше.

Затем провели абляции на четырёх задачах: по очереди убирали отдельные части. Без свежих свидетельств выполнения результат падал на 7,03 пункта. Без явного жизненного цикла (условий завершения и повторного чтения требований) — на 10,09 пункта. Инсайт для практики: «когда перестать применять инструкцию» влияет сильнее, чем «как адаптировать». Заодно метод тратит меньше токенов, потому что агент не тянет в контекст лишнее.

💡

Адаптации и экстраполяции

Это не часть метода статьи, а возможные переносы идеи на работу без кода.

🔧 Техника: добавить в каждый скил блок «Applies When / Termination» → агент сам понимает, когда скил включать и снимать

## Applies When
Только при создании нового модуля. Не использовать при исправлении багов.

## Verification
Новый модуль проходит линтер и тесты.

## Termination
Модуль создан и тесты зелёные — скил больше не применять в этой сессии.

В статье границы и завершение задаёт Композитор. Здесь вы заранее прописываете их в самом файле скила.

Экстраполяция: правило в CLAUDE.md / AGENTS.md

Перед применением любого скила:
1. Сверь его с правилами проекта (менеджер пакетов, версии API, формат данных).
   Если скил им противоречит — перепиши шаги под проект.
2. Сформулируй локальную цель и условие завершения одной строкой.
3. Когда условие выполнено — скил больше не применяй,
   перечитай требования задачи и выбери следующую цель.

Это ручная имитация цикла Composer без вспомогательной модели. Эффект не проверен, это идея по мотивам статьи.

🔗

Ресурсы

  • From Memory to Guide: Spatio-Temporal Composer for Procedural Coding Memory (Composer Technical Report, v1.0)
  • Авторы: Zhixuan Tan, Pengjie Gu, Zhao Li, Yihan Hu, Xu He, Dong Li, Jianye Hao
  • Организации: The Chinese University of Hong Kong, Shenzhen; MemoraX AI
  • Бенчмарк: EngramBench (Z. Tan et al. 2026)
  • Связанные работы: Agentic Context Engineering, ExpeL, Agent Workflow Memory, SEAM, SkVM, SkillSmith

📋 Дайджест исследования

Ключевая суть

Обнаружено: агент не подгоняет чужой скил под проект, а исполняет его буквально. Скил под npm портит файл версий (lockfile) в проекте на yarn. Скил про архитектурный рефакторинг толкает переписывать рабочий код вместо точечной правки. Метод Spatio-Temporal Composer позволяет давать кодирующему агенту не сырые скилы, а короткую инструкцию под текущий проект и текущий этап. Между «нашли подходящий скил» и «агент действует» встаёт отдельная модель-композитор. Она пишет Runtime Guide: цель, действия, границы и условие окончания. Итог на долгих задачах: около +7 пунктов успешных прохождений и 32% экономии токенов у основного агента.

Принцип работы

Это сменное задание вместо толстого регламента завода. Бригаде не выдают весь свод правил. Дают листок на одну смену: что делать, чего не трогать, когда листок недействителен. Guide собирается из пяти блоков: 1. GOAL: одна локальная цель. 2. ACTIONS: шаги под этот проект. Не pip, а команды Poetry. 3. BOUNDARIES: что нельзя и когда Guide вообще применим. 4. VERIFICATION: как понять, что цель достигнута. 5. TERMINATION: когда инструкцию снять. Guide живёт только до условия окончания, потом его снимают, и агент заново читает задачу. Старый совет не тянется за агентом на чужой этап.

Почему работает

Когда скил вставлен целиком, агент сам решает на каждом шаге: это про мой проект или нет? Это актуально сейчас? Человек делает так незаметно. Модель читает инструкцию как приказ. В долгой задаче одна неподходящая строка запускает цепочку ошибок и «петли отладки». Модель хорошо переписывает общий текст под конкретный контекст, если это её единственная работа. Ей не надо одновременно писать код. Она видит правила проекта, свежие результаты и прошлый Guide. На выходе короткий конкретный текст. Что в этой схеме держит результат (отключали по одному): - Свидетельства выполнения (что сделано, что упало, какие тесты): без них результат падает на 7 пунктов. - Жизненный цикл (условие окончания): без него падение на 10 пунктов. Срок годности весит больше, чем данные о прогрессе. - Профиль задачи (стек, правила, запреты): чем точнее, тем лучше композитор отсекает несовместимое. - Прошлый Guide: композитор видит, что уже закрыто, и не повторяет советы.

Когда применять

Разработка с кодирующими агентами → долгие многочасовые задачи, особенно когда в библиотеке много скилов или файлов инструкций (Claude Code, Cursor и похожие). Метод нужен, когда скилы написаны «в общем», а у проекта свои правила: менеджер пакетов, версии API, формат данных. Не подходит для короткой правки одного файла: лишний шаг композиции не окупится. Полная версия требует кода, где агент сам запрашивает Guide. Вручную повторяется идея, но не автоматизация. Цифры получены на одном агенте и бенчмарке самих авторов. Экономия токенов 32% посчитана без затрат на Селектор и Композитор.

Мини-рецепт

1. Собери профиль проекта: стек, менеджер пакетов, версии API, формат данных, запреты. Всё, что агент не имеет права нарушать.
2. Заведи каталог скилов: название, когда применять, текст. Хватит папки с файлами инструкций.
3. Открой отдельный чат или субагента: это композитор. Его задача — не писать код, а писать инструкцию.
4. Скармливай свежий отчёт, не всю историю: что сделано, какие тесты упали, какая локальная цель, чем кончился прошлый Guide.
5. Пусть сначала выберет скилы: decision, skillRefs, whyNow. Если прошлый Guide ещё не завершён, ответ None.
6. Потом пусть соберёт Guide: GOAL, ACTIONS, BOUNDARIES, VERIFICATION, TERMINATION.
7. Отдай исполнителю только Guide: сырые скилы ему не показывай.
8. Дождись условия окончания: Guide снят, агент перечитывает задачу, просишь следующий.

Быстрый старт для чата:
Вот шаблон композитора Runtime Guide. Адаптируй под мою задачу: [твоя задача]. Задавай вопросы, чтобы заполнить поля.

Примеры

[ПЛОХО] Задача: бэкенд приёма платежей, FastAPI, Poetry, PostgreSQL. Нужны эндпоинты создания и просмотра платежа через ЮKassa. Скил по миграциям написан под pip. : Вот три скила: идемпотентность, миграции, архитектурный рефакторинг. Сделай эндпоинты платежей. Агент начнёт ставить пакеты через pip. При первой упавшей проверке решит «улучшить архитектуру».
[ХОРОШО] : Ты композитор инструкций. Не выполняй работу, подготовь Guide на текущий этап. ПРОФИЛЬ: FastAPI, Poetry (pip не использовать), PostgreSQL, ЮKassa. Суммы в копейках (int), API v1 не ломать, миграции только через Alembic. СВИДЕТЕЛЬСТВА: модели Payment и подключение к БД готовы, тесты на модели проходят, цель: эндпоинты создания и просмотра платежа, блокеров нет. ПРОШЛЫЙ GUIDE: «Каркас проекта и модели», завершён. СКИЛЫ: 1) идемпотентность платежей, 2) миграции БД, 3) архитектурный рефакторинг. Сначала реши decision, skillRefs, whyNow. Потом составь Guide: GOAL, ACTIONS (команды Poetry, таблицы, ЮKassa), BOUNDARIES, VERIFICATION, TERMINATION. На выходе: выбраны идемпотентность и миграции. Команды переписаны под Poetry. Архитектурный рефакторинг в границах запрещён. Guide снимается, когда эндпоинты готовы и тесты зелёные.
Источник: From Memory to Guide: Spatio-Temporal Composer for Procedural Coding Memory
ArXiv ID: 2610.04868 | Сгенерировано: 2026-10-06 06:10

Проблемы LLM

ПроблемаСутьКак обойти
Агент выполняет чужую готовую инструкцию буквальноДаёшь агенту общую инструкцию, например «как делать миграции». Она написана под другой стек или другой этап. Человек молча подгоняет её под проект. Модель этого не делает. Она ставит пакеты не тем менеджером. Она берётся за переписывание кода, когда нужна точечная правка. В долгой задаче одна такая ошибка тянет за собой другие и приводит к петлям отладки. Проблема касается любых общих плейбуков, правил и шаблоновНе вставляй общую инструкцию в контекст целиком. Сначала пусть отдельный запрос перепишет её под твой проект и текущий этап. Исполнитель получает короткую готовую версию. Подробности в методе ниже

Методы

МетодСуть
Отдельный шаг адаптации: общая инструкция → короткая локальнаяДобавь между «нашёл подходящую инструкцию» и «агент работает» ещё один запрос. Его делает отдельный чат или субагент. Он ничего не выполняет, только готовит текст. На входе четыре блока: ПРОФИЛЬ (стек, правила, запреты), ХОД РАБОТЫ (что сделано, что упало, текущая цель), ПРОШЛАЯ ИНСТРУКЦИЯ и ОБЩИЕ ИНСТРУКЦИИ. На выходе: ЦЕЛЬ (одна, на этот этап), ДЕЙСТВИЯ (конкретные команды и файлы проекта, не общие правила), ГРАНИЦЫ (что нельзя и когда это применимо), ПРОВЕРКА, ОКОНЧАНИЕ. Перед этим пусть модель решит, нужна ли новая инструкция вообще. Если прошлая ещё действует, ответ «не нужна». Пусть она объяснит, какой пробел в работе закрывают выбранные инструкции. Это защищает от лишних и случайных советов. Почему работает: переписать общий текст под контекст — одна узкая задача. Модель не отвлекается на код. Исполнитель не тратит силы на вопрос «что из этого про мой проект». Когда да: долгая работа в несколько этапов, есть библиотека общих инструкций, у проекта свои жёсткие правила. Когда нет: короткая правка одного файла. Лишний шаг не окупится. Если нет профиля проекта, получатся те же общие советы
Срок действия у инструкции: условие окончания и перечитывание задачиКаждая инструкция для агента заканчивается явным условием снятия. Например: «цель достигнута», «сменился этап», «непреодолимый блокер». Когда условие сработало, инструкция отменяется. Агент заново перечитывает требования задачи, формулирует новую цель и просит следующую инструкцию. Почему работает: без срока совет живёт по инерции. Совет «рефактори архитектуру» полезен на одном этапе и вреден на другом. Условие окончания не даёт ему мешать. Применяй: в любой длинный запрос агенту добавляй строку ОКОНЧАНИЕ: инструкция снимается, когда .... Условие должно быть проверяемым: «тесты на эндпоинты проходят», а не «когда будет готово»

Тезисы

ТезисКомментарий
Модель лучше адаптирует текст под контекст, когда это её единственная задачаЕсли просить одновременно адаптировать совет и писать код, внимание делится. Отдельный запрос видит профиль проекта, свежие результаты и прошлую инструкцию. Он выдаёт короткий конкретный текст. Применяй: разделяй роли. Один запрос готовит инструкцию, другой её выполняет
Свежие данные о ходе работы сильно влияют на качество инструкцииПрофиль проекта говорит, что можно. Данные о ходе работы говорят, что нужно сейчас: что готово, что упало, какие тесты проходят. Без них инструкция хуже попадает в этап, качество падает примерно на 7 пунктов. Применяй: передавай короткий свежий отчёт агента, а не всю историю. Добавляй прошлую инструкцию, чтобы советы не повторялись
📖 Простыми словами

From Memory to Guide: Spatio-Temporal Composer for Procedural Coding Memory

arXiv: 2610.04868

Нейросети-программисты тупят не из-за глупости, а от избытка абстрактных советов. Когда ты пихаешь в агента готовые скилы целиком, для модели это превращается в информационный передоз. Она видит инструкцию по установке пакетов через pip, тупо применяет её в проекте на Poetry и гарантированно улетает в петлю бесконечной отладки. Модель не умеет фильтровать базу знаний на лету: любое общее правило в контексте она воспринимает как приказ стрелять прямо сейчас.

Это как отправить стажёра прикрутить дверную ручку, выдав ему пятитомник по капитальному строительству. Вместо пары шурупов парень начнёт сносить несущие стены, потому что в умной книжке так написано. В разработке с ИИ происходит ровно та же дичь: при первой мелкой ошибке теста агент бросается переписывать всю архитектуру проекта, ведь в памяти лежит инструкция про «правильный рефакторинг».

Решение проблемы — прослойка Spatio-Temporal Composer. Отдельная модель берёт общий скил и на лету вырезает из него всё лишнее под текущий стек и конкретную секунду работы. На выходе агент получает не простыню текста, а хирургический Runtime Guide. В нём всего четыре пункта: локальная цель, разрешённые действия, жёсткие рамки («не лезь в чужой код») и условие деактивации, чтобы вовремя стереть задачу из контекста.

Тестировали на бэкенде и миграциях баз данных, но принцип универсален. Любой сложный AI-агент — будь то автопилот для DevOps, юрист или аналитик данных — мгновенно ломается от нерелевантных инструкций. Хранить библиотеку процедурных знаний полезно, но скармливать её модели без фильтрации — верный способ получить сломанный прод. Память агента должна быть строго одноразовой под каждый микрошаг.

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

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с