Почему Remix 3 проектируется с расчётом на AI-агенты для написания кода
Проектировать фреймворк для AI-агентов написания кода — значит относиться к агенту как к первоклассному потребителю API, а не просто допускать работу AI-инструментов поверх фреймворка. Именно это различие лежит в основе бета-версии Remix 3, и оно куда конкретнее, чем можно судить по заголовкам в духе «Remix отказался от React». Репозиторий Remix 3 включает agent skill по пути template/.agents/skills/remix/, который CLI распространяет в каждое создаваемое приложение — тем самым переводя заявления из плоскости конференционных докладов в нечто, что можно изучить прямо сейчас.
В этой статье мы разберём, является ли тезис «спроектировано для AI-агентов написания кода» архитектурным обязательством или маркетинговым глянцем. Remix 3 служит здесь кейсом для более широкого вопроса, с которым скоро столкнётся каждый frontend-разработчик: какой образ мой фреймворк представляет LLM и поддаётся ли этот образ обучению?
Ключевые выводы
- Проектирование для AI-агентов написания кода принципиально отличается от простой AI-совместимости: это означает, что поверхность API фреймворка структурирована таким образом, чтобы агент генерировал корректный код с меньшим количеством токенов и скрытых поведений, которые нужно симулировать.
- Remix 3 включает собственный agent skill по пути
template/.agents/skills/remix/и распространяет его в каждое создаваемое приложение, превращая заявление об AI-агентах в конкретный артефакт, который разработчики могут проверить. - В Beta Preview Remix 3 прямо говорится: «AI вознаграждает фреймворки с чёткими формами» — маршруты в одном месте, контроллеры, возвращающие ответы, middleware, владеющий жизненным циклом запроса.
- Runtime-over-build — не самостоятельный принцип, а следствие подхода model-first: агент может предсказать результат, не симулируя мысленно весь конвейер сборки.
- Независимо от того, получит ли Remix 3 широкое распространение, он устанавливает новую ось конкуренции — фреймворки будут оцениваться по качеству работы с агентами, а не только по удобству для разработчиков.
Что на самом деле означает «проектирование для AI-агентов написания кода»
Проектирование для AI-агентов написания кода — это не то же самое, что AI-совместимость: речь идёт о структурировании фреймворка таким образом, чтобы агент мог выполнить задачу с меньшим количеством токенов, меньшим числом выводимых поведений и детерминированной целью вывода. Три этих формулировки звучат взаимозаменяемо, но описывают разные вещи.
- AI-assisted development описывает процесс создания — использование LLM для написания кода самого фреймворка. Именно этот угол зрения выбирает материал Capaxe, и он ничего не говорит о том, насколько удобен получившийся фреймворк для написания кода агентами.
- AI-compatible означает, что агент способен создавать работающий код для фреймворка — так же, как и для любой достаточно задокументированной библиотеки. В той или иной мере AI-совместим каждый фреймворк.
- Designed for AI coding agents означает, что сама поверхность API рассматривается как цель для генерации кода. Примитивы фреймворка выбираются в том числе потому, что они снижают когнитивную нагрузку LLM при генерации, проверке или редактировании кода.
Практический тест для третьей категории: поставляет ли фреймворк что-либо, что агент потребляет напрямую? Remix 3 — да, и именно это отличает его от фреймворков, которые лишь заявляют о дружелюбности к LLM в блог-постах.
Принципы Remix сквозь призму агента
Discover how at OpenReplay.com.
Три принципа Remix 3 — Web APIs, Runtime-over-Build и Composable Abstractions — усиливают единое архитектурное обязательство перед подходом Model-First, а не существуют как независимые цели. Эти принципы описаны в постах команды Remix «Wake up, Remix!» и Remix 3 Beta Preview.
Model-First — архитектурное ограничение, а не UX-слоган
Model-First в Remix 3 — не UX-принцип, а архитектурное ограничение: каждое решение по API оценивается с точки зрения того, может ли LLM предсказать результат, не симулируя конвейер сборки. LogRocket в своём материале частично сфокусировался на «LLM-противоречии» и привёл реакцию с Reddit («Есть ли вообще кто-то, кто не взял денег от венчурных инвесторов и при этом думает об LLM?»). Однако механизм, лежащий в основе этого дизайна, — предсказуемость.
Рассмотрим модель состояния из ранних прототипов Remix 3:
// Прототип Remix 3, показанный на Remix Jam 2025 — иллюстративный, API ещё в процессе разработки
function Counter(this: Remix.Handle) {
let count = 0; // обычная переменная замыкания
return () => (
<div>
<div>{count}</div>
<button onClick={() => {
count++;
this.update(); // явная команда перерисовки
}}>
Increment
</button>
</div>
);
}
Ключевой момент — явный вызов this.update(). При использовании useState в React триггер перерисовки неявен: агент должен знать правила реконсилятора, семантику массива зависимостей для связанных эффектов и то, какие мутации отслеживаются. При явном вызове обновления причинно-следственная связь видна прямо в коде. Ничего не нужно выводить. Как выразился Алекс Котлярский, «LLM плохо справляются с React, производя “безобразные нагромождения useEffect’ов и случайных хаков”». Model-First — это дизайнерский ответ именно на этот сценарий сбоя.
Web APIs сокращают поверхность, которую агент должен запомнить
Приоритет Web Platform APIs усиливает подход Model-First, заменяя специфичные для фреймворка абстракции примитивами, которые LLM уже знает из своих обучающих данных. Обработчики Remix 3 принимают стандартный Request и возвращают стандартный Response; формы используют FormData; взаимодействие компонентов опирается на CustomEvent. Агенту, генерирующему обработчик запроса, не нужно изучать проприетарный объект контекста — он сопоставляет паттерны с веб-семантикой, которая встречается во всём корпусе серверного JavaScript. Меньше специфичных абстракций означает меньшую грамматику для изучения и меньше шансов «галлюцинировать» несуществующий метод.
// Обработчик Remix 3: стандартные Request/Response Web Platform — иллюстративный пример
async function action(request: Request): Promise<Response> {
const form = await request.formData();
const name = form.get("name");
return new Response(`Hello, ${name}`, { status: 200 });
}
Runtime-over-Build устраняет конвейер, который агент не видит
Предпочтение runtime перед шагами сборки усиливает подход Model-First, поскольку шаг сборки — это скрытое преобразование, которое агент не может наблюдать из исходного кода. Когда поведение фреймворка определяется во время выполнения из кода, который агент может прочитать, исходный код и есть источник истины. Когда поведение зависит от прохода компилятора, плагина кодогенерации или трансформации бандлера, агент вынужден мысленно симулировать конвейер, который никогда не видит, чтобы предсказать результат. Runtime-over-build — это не самостоятельный принцип, а прямое следствие подхода Model-First.
Composable Abstractions сохраняют поведения локальными
Компонуемые минималистичные абстракции усиливают то же ограничение, сохраняя поведения локальными и явными, а не размазанными по дереву провайдеров и эффектов. Фреймворк, в котором маршруты живут в одном месте, обработчики возвращают стандартные объекты Response, а middleware владеет полным жизненным циклом запроса, даёт AI-агенту фиксированную, обучаемую грамматику — сокращая бюджет токенов, необходимых для генерации корректного кода по новому промпту.
Конкретное доказательство: репозиторий remix-run/agent-skills
Agent skills — это структурированные наборы инструкций, которые AI-агент загружает, чтобы научиться правильно использовать конкретный инструмент: упакованный ответ на вопрос «как писать код для этого фреймворка». Репозиторий Remix 3 включает собственные agent skills в директории .agents/skills, и именно эти встроенные skills переводят заявления Remix 3 об AI-агентах из маркетинговой плоскости в нечто, что разработчик может прочитать, проверить и оценить прямо сейчас, а не просто философию из доклада.
Следующее основано на README репозитория Remix 3 и встроенных agent skills в директории
.agents/skillsна момент написания статьи; репозиторий активно разрабатывается, и детали могут измениться.
Согласно README Remix 3, агенты не устанавливают skill отдельно — он поставляется внутри репозитория фреймворка и копируется в шаблон приложения на шаге CLI prepack. README говорит об этом прямо:
Агенты, создающие приложение Remix 3 из этого репозитория, должны использовать app skill
remix. Шаг CLI prepack копирует этот skill в шаблон приложения, чтобы сгенерированные приложения могли использовать те же инструкции.
App skill remix проводит агента через всю поверхность приложения Remix 3 — структуру, маршруты, контроллеры, middleware, валидацию, доступ к данным, аутентификацию, сессии, загрузку файлов, настройку сервера, UI-компоненты, гидратацию, навигацию и тесты — построенную вокруг единого npm-пакета remix и его subpath imports. Значимость здесь структурная: фреймворк, который поставляет собственный agent skill внутри репозитория и распространяет его в каждое сгенерированное приложение, относится к агенту как к первоклассному потребителю своего API — точно так же, как к разработчикам-людям, читающим документацию.
Именно это обнаруживает проверка утверждения frantic.im «LLM плохо справляются с React» применительно к Remix 3. Жалоба реальна и широко распространена; вопрос в том, делает ли Remix 3 что-то с этим помимо риторики. Встроенный app skill remix — это операциональный ответ: он не просто заявляет о более чистом API, но поставляет инструкции, позволяющие агенту правильно использовать этот API, в каждое создаваемое приложение.
Почему «чёткие формы» важны для агентов
Чёткие, предсказуемые формы фреймворка снижают бюджет токенов и нагрузку на инференс агента при выполнении каждой задачи — именно поэтому команда Remix позиционирует дружелюбность к AI как архитектурную цель, а не маркетинговый тезис. В Remix 3 Beta Preview это сформулировано прямо:
AI вознаграждает фреймворки с чёткими формами: маршруты в одном месте, контроллеры, возвращающие ответы, middleware, владеющий аспектами жизненного цикла запроса.
Это описывает сниженную когнитивную нагрузку как для людей, так и для языковых моделей, а не отдельную категорию преимуществ. Три механизма объясняют, почему это особенно важно для LLM:
-
Эффективность токенов. Когда поведение неявно — рассредоточено по хукам, эффектам, провайдерам и шагу сборки — агент вынужден загружать больше контекста в своё окно для рассуждений о задаче и генерировать больше кода, чтобы подстраховаться от граничных случаев, которые не может исключить. Фиксированная форма позволяет агенту генерировать минимально корректный код, поскольку ему не нужно защищаться от скрытых поведений.
-
Детерминированные цели кодогенерации. Когда маршруты всегда живут в одном месте, а обработчики всегда возвращают
Response, у агента есть известный шаблон для сопоставления паттернов. Он генерирует по форме, а не импровизирует структуру. Детерминированные цели — это разница между тем, правильно ли агент завершит обработчик маршрута с первой попытки, или произведёт те самые «случайные хаки», о которых пишет frantic.im. -
Runtime как источник истины. Когда выполняемый код является полной спецификацией поведения, агент может прочитать исходный код и знать результат. Нет прохода компилятора для симуляции, нет границы
"use client"/"use server"для анализа, нет планировщика реконсилятора для предсказания. Чем меньше скрытых поведений агент должен симулировать мысленно, тем надёжнее он генерирует и редактирует код.
Ничто из этого не требует признания того, что Remix 3 лучше React. Достаточно лишь заметить, что «чёткие формы» — это измеримое свойство поверхности API, и что LLM чувствительны к нему.
Честная контрпозиция
Наиболее весомые критические аргументы в адрес позиционирования Remix 3 как AI-агентного фреймворка имеют реальные основания, но не все бьют в правильную цель — и этот зазор важен при оценке того, выдерживает ли заявление об агентной дружелюбности проверку.
- Критика «венчурного тренда» утверждает, что «model-first» гонится за хайпом в ущерб реальным болям разработчиков. Строчка с Reddit, которую процитировал LogRocket, отражает это подозрение. Контраргумент — артефакт: встроенный agent skill, который встраивается в каждое сгенерированное приложение, — это на редкость конкретный способ гнаться за трендом.
- Меньше обучающих данных. LogRocket характеризует Remix 3 как построенный на форке Preact. Фреймворк, представленный в публичных корпусах LLM значительно меньше, чем React, изначально проигрывает в качестве предсказания следующего токена — что, примечательно, именно тот пробел, для закрытия которого и существует встроенный agent skill. Skill, распространяемый в шаблон приложения при создании проекта, внедряет актуальные, корректные соглашения, которые агент иначе был бы вынужден извлекать из скудных обучающих данных.
- Статус беты и миграция. Remix 3 — это бета. Материал команды Remix о слиянии с React Router позиционирует React Router v7 как путь продолжения для существующих пользователей Remix v2; Remix 3 — это отдельный экспериментальный рерайт, а не обновление. Делать на него ставку в продакшене сегодня преждевременно.
Критика «венчурного тренда» небезосновательна, но задаёт неверный вопрос: встраивание agent skill в собственный репозиторий фреймворка — это не ставка на распространение Preact, а ставка на то, что спецификации agent skill станут критерием выбора фреймворка.
Что это означает, если вы никогда не прикоснётесь к Remix 3
Даже разработчики, которые никогда не напишут ни строчки кода на Remix 3, ощутят влияние его дизайнерских решений, поскольку он устанавливает новую ось конкуренции: фреймворки будут всё чаще оцениваться по качеству работы с агентами — по качеству цели, которую они представляют LLM, — а не только по удобству для разработчиков.
Этот сигнал виден по всей экосистеме. Предложение llms.txt стандартизирует способ предоставления сайтами и проектами LLM-читаемого контекста. Встроенные agent skills формируются как формат доставки специфичных для инструмента соглашений. Remix 3 — заметно ранний пример крупного веб-фреймворка, поставляющего выделенный agent skill внутри собственного репозитория и распространяющего его в каждое создаваемое приложение.
Долгосрочный урок не зависит от того, добьётся ли Remix 3 успеха. Каждый фреймворк, желающий оставаться конкурентоспособным в рабочих процессах с участием агентов — таких, которые терминал-ориентированные агенты вроде OpenCode делают рутиной, — столкнётся с тем же вопросом, на который отвечает Remix 3: какой образ мой фреймворк представляет LLM и поддаётся ли этот образ обучению?
Команды, выбирающие инструментарий, тоже начнут его задавать. «Насколько хорошо мой AI-агент пишет код для этого фреймворка?» становится критерием выбора наравне с размером бандла и DX, присоединяясь к традиционным компромиссам Next.js vs Remix, которые уже определяют этот выбор.
Заключение
Remix 3 — наиболее наглядный из доступных сегодня кейсов того, что значит строить фреймворк с агентом как первоклассным потребителем: явные обновления состояния, примитивы Web Platform, runtime как источник истины и встроенные agent skills, которые поставляют необходимые LLM соглашения в каждое создаваемое приложение. Независимо от того, примете ли вы его, следующий конкретный шаг — оценить собственный стек тем же образом: изучить встроенные skills в директории .agents/skills, разобраться, как фреймворк упаковывает свои соглашения для агента, и спросить себя, представляют ли инструменты, которые вы используете сегодня, форму, которую LLM способен освоить.
Часто задаваемые вопросы
Нет. Remix 3 — это отдельный экспериментальный бета-рерайт, а не путь обновления с Remix v2. Команда Remix позиционирует React Router v7 как путь продолжения для существующих приложений на Remix v2, тогда как Remix 3 — это отдельный проект с иной архитектурой и без официального маршрута миграции с v2 на v3 на момент Beta Preview. Перенос продакшен-приложения с v2 на v3 не является поддерживаемым сценарием на данном этапе.
AI-совместимый означает, что агент способен создавать работающий код для фреймворка при наличии достаточной документации — это справедливо практически для любого фреймворка. Спроектированный для AI-агентов написания кода означает, что сама поверхность API рассматривается как цель для генерации кода, а примитивы выбираются так, чтобы сократить количество токенов и выводимых поведений, которые агент несёт при выполнении каждой задачи. Практический тест — поставляет ли фреймворк артефакт, который агент потребляет напрямую, например встроенные agent skills, которые Remix 3 включает в директорию .agents/skills и распространяет в каждое создаваемое приложение.
Agent skills — это структурированные наборы инструкций, которые AI-агент загружает, чтобы научиться правильно использовать инструмент: упакованные в виде поставляемого артефакта, а не разбросанные по документации. Remix 3 включает собственные agent skills внутри репозитория фреймворка в директории .agents/skills, а шаг CLI prepack копирует соответствующие инструкции в каждый сгенерированный шаблон приложения, чтобы агент располагал корректными инструкциями с момента создания проекта. Они внедряют актуальные, корректные соглашения фреймворка, которые агент иначе был бы вынужден выводить из скудных или устаревших обучающих данных.
Да, потому что причинно-следственная связь перерисовки указана в исходном коде, а не выводится. При использовании React useState триггер перерисовки неявен, и агент должен знать правила реконсилятора, семантику массива зависимостей и то, какие мутации отслеживаются. Прототипы Remix 3 демонстрируют явную команду обновления на хендле компонента, поэтому агент читает триггер напрямую, не симулируя ничего. Эта явность — дизайнерский ответ на проблему запутанных цепочек эффектов, которые LLM генерируют в React.
Gain Debugging Superpowers
Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.