Новый экспериментальный интерфейс командной строки, @expo/agent-cli, предоставляет агентам написания кода коды завершения, данные в формате JSON и следующую команду для выполнения для каждой задачи Expo.
Представьте, что вы просите агента написания кода добавить функцию в ваше приложение Expo. Он устанавливает нативный модуль, пишет код и запускает сервер разработки. Но когда он пытается открыть приложение в Expo Go, происходит ошибка во время выполнения. Агент начинает отладку, изменение кода, переустановку пакетов и перезапуск сервера, даже не подозревая, что новому модулю требуется dev-сборка.
Мы видели, как агенты застревают в подобных ситуациях. Они умеют писать приложения для Expo, но не всегда знают, когда использовать Expo Go, когда создавать dev-сборку или когда пересобирать проект после изменения нативных зависимостей. Опытные разработчики Expo со временем учатся этому, но агенты часто приходят к решению методом проб и ошибок.
Мы могли бы и дальше улучшать нашу документацию и создавать новые навыки для агентов, чтобы обучать их этим рабочим процессам. Но мы задумались: что, если предотвратить эти ошибки за счет улучшения самих инструментов? Именно поэтому мы представляем @expo/agent-cli, новый экспериментальный CLI, созданный агентами и для агентов.
Понимание проекта с помощью status
Прежде чем запустить приложение Expo, агенту нужно разобраться в нескольких вещах. Может ли этот проект работать в Expo Go? Нужна ли ему dev-сборка? Если зависимости изменились, нужно ли пересобирать приложение?
Сегодня агенты могут выяснить это, изучая зависимости проекта, проверяя конфигурацию и иногда запуская приложение, чтобы посмотреть, что выдаст ошибку. Это огромный объем работы только для того, чтобы решить, какую команду выполнять дальше.
Мы вдохновлялись командой git status. При работе с Git вам не нужно самостоятельно исследовать репозиторий, чтобы понять, какие файлы изменились. Вы выполняете одну команду и получаете всю необходимую информацию.
Мы хотели создать нечто подобное для Expo:
Команда status проверяет ваш проект и сообщает, совместим ли он с Expo Go, требуется ли нативная пересборка и что делать дальше.
Ей не нужно запускать приложение, чтобы ответить на эти вопросы. Агент может выполнить ее перед принятием решения, а не ждать ошибки и пытаться восстановиться после нее.
Сомневаетесь — запустите status. Она должна подсказать агенту дальнейшие действия.
Одна команда для начала разработки
Если вы работали с веб-фреймворками, вы, вероятно, привыкли запускать npm run dev и открывать браузер. Вам не нужно особо задумываться о том, как подготавливается среда разработки.
В мобильной разработке на несколько шагов больше. В зависимости от проекта вам может потребоваться сгенерировать нативные проекты, скомпилировать приложение, установить его на симулятор и запустить сервер разработки.
Expo уже предоставляет инструменты для этих шагов, но агентам все равно нужно знать, какие из них запускать и в каком порядке.
С помощью @expo/agent-cli мы объединяем эти шаги в одну команду dev:
Команда проверяет проект, определяет, что больше подходит — Expo Go или dev-сборка, и выясняет, что нужно сделать для запуска приложения.
Если требуется нативная сборка, она выполняет необходимые шаги. Если существующую сборку можно использовать повторно, она избегает ненужной пересборки. А по завершении она подсказывает агенту, что делать дальше.
Вы также можете запустить dev --plan, чтобы изучить шаги перед их выполнением.
Мы хотим, чтобы запуск приложения Expo больше напоминал запуск веб-приложения, даже когда задействована нативная компиляция. Агент должен иметь возможность запросить запуск приложения без необходимости самостоятельно планировать весь процесс сборки.
И поскольку успешная сборка не всегда означает, что приложение действительно работает, мы также добавили smoke:
Думайте об этом как о быстрой проверке работоспособности вашей среды разработки. Команда запускает или использует существующее приложение, проверяет его загрузку, ищет ошибки во время выполнения и сообщает результат.
Это дает агентам возможность убедиться, что приложение действительно может работать, а не останавливаться сразу после успешной сборки.
Позвольте агенту использовать приложение
Работающее приложение — это лишь половина дела. Агент также должен убедиться, что его изменения работают: открыть нужный экран, воспользоваться приложением и прочитать ошибки. Агенты уже умеют делать это с помощью скриншотов и специальных скриптов. @expo/agent-cli предоставляет им команды для управления работающим приложением. Например, navigate открывает маршрут на устройстве, а runtime:reload загружает последний код. Существуют и другие команды runtime:*, которые могут, например, считывать содержимое экрана.
Окружения агентов написания кода часто запускают каждого агента в собственном рабочем дереве git (git worktree). @expo/agent-cli предоставляет каждому рабочему дереву собственный симулятор или эмулятор (либо собственную сессию Expo Simulators с флагом --eas), чтобы параллельные агенты не мешали приложениям друг друга.
Представление совмещенных навыков (co-located skills)
У нас уже есть плагин Expo для агентов, который предоставляет навыки, помогающие агентам создавать приложения Expo. Но по мере добавления специализированных навыков для пакетов у нас возник вопрос: должен ли каждый навык входить в состав плагина?
Например, если ваш проект не использует expo-sqlite, нет причин устанавливать соответствующий навык. Лишние навыки загромождают доступный агенту выбор и усложняют поддержание актуальности инструкций для тех пакетов, которые реально используются в проекте.
Начиная с SDK 58, мы представляем совмещенные навыки. Вместо того чтобы помещать каждый навык в плагин Expo, пакеты могут поставлять собственные навыки вместе со своим кодом. Эти навыки доступны при установке пакета, а их авторы могут поддерживать их вместе с описываемыми ими API.
Это опирается на существующую концепцию, а не на что-то новое, придуманное Expo. Энтони Фу (Anthony Fu) skills-npm представил инструменты для обнаружения и связывания навыков, поставляемых внутри пакетов npm, и эта функциональность теперь интегрируется в более широкий skills CLI. Мы внедряем синхронизацию навыков пакетов в @expo/agent-cli, чтобы агенты могли использовать ее как часть своего стандартного рабочего процесса Expo.
Например, при установке expo-sqlite:
CLI устанавливает версию пакета, совместимую с SDK, и синхронизирует его встроенные навыки в каталог навыков вашего агента.
Если вы уже установили зависимости, вы можете синхронизировать навыки отдельно:
Идея проста: ваш агент должен обладать навыками для тех пакетов, которые действительно используются в вашем проекте. Хранение навыков вместе с их пакетами также упрощает поддержание инструкций в актуальном состоянии вместе с кодом.
Один CLI для локальных и облачных рабочих процессов
Разработчики Expo привыкли использовать Expo CLI для локальной разработки и EAS CLI для облачных служб. Но для агентов написания кода это различие не всегда очевидно. Им нужно выяснить, какой CLI использовать, какие команды доступны и чем отличаются параметры.
Мы хотели это упростить. Независимо от того, запускает ли агент приложение локально или использует EAS, он должен следовать аналогичному рабочему процессу.
Например, вместо переключения между npx expo run:ios и npx eas-cli build -p ios, агент может указать, где он хочет запустить рабочий процесс, используя ту же команду dev:
Мы работали над этим соглашением в разных командах, используя --eas для выбора EAS, а local используется по умолчанию. Цель состоит не в том, чтобы скрыть различия между локальной разработкой и облачными службами, а в том, чтобы предоставить агентам единообразный способ работы с тем и другим.
Существует также практическая причина сделать этот выбор явным: сборки EAS и сеансы симулятора расходуют кредиты. Мы не хотим, чтобы агент случайно запустил облачную сборку только потому, что не может выполнить сборку локально. По умолчанию CLI не будет самостоятельно переключаться на EAS. Вам нужно явно выбрать его с помощью --eas или настроить проект на использование EAS.
Некоторые из этих рабочих процессов опираются на Expo Simulators, которые в настоящее время находятся на стадии предварительного просмотра с листом ожидания. Мы все еще экспериментируем с тем, как далеко мы можем зайти с этим подходом.
Под капотом @expo/agent-cli опирается на Expo CLI, EAS CLI и expo-doctor. Он также обеспечивает структурированный вывод, понятные коды выхода и четкие дальнейшие шаги, чтобы агенты могли понять, что произошло, и решить, что делать дальше.
Попробуйте в деле
Чтобы начать, выполните:
Это помогает настроить вашего агента по кодированию с помощью инструкций и навыков Expo. В зависимости от вашего агента, он может установить плагин или навыки Expo agent, синхронизировать навыки из зависимостей вашего проекта и загрузить документацию для вашего Expo SDK для локального использования агентами. Он также обновляет файл AGENTS.md вашего проекта, чтобы рекомендовать использование @expo/agent-cli вместо прямого вызова Expo CLI или EAS CLI.
В идеале агенты по кодированию должны иметь возможность самостоятельно обнаруживать и использовать @expo/agent-cli. Но мы заметили, что агенты все еще иногда возвращаются к Expo CLI или EAS CLI, особенно учитывая, что наша существующая документация и навыки часто рекомендуют именно эти команды. Команда agents:setup пытается решить эту проблему путем добавления более явных инструкций, хотя это по-прежнему подход, основанный на наилучших усилиях.
Если вы хотите убедиться, что ваш агент пробует новый CLI, вы также можете включить эту инструкцию непосредственно в свой промпт:
Для рабочих процессов разработки Expo используйте @expo/agent-cli вместо прямого вызова Expo CLI или EAS CLI.
Несколько заключительных замечаний
Это экспериментальный CLI, и мы все еще активно его развиваем. Команды и вывод могут измениться по мере улучшения пользовательского опыта.
Если вы предпочитаете более короткое имя пакета, expo-agent-cli также доступно в качестве псевдонима. Спасибо Kazutoyo Tokai за передачу нам имени этого пакета.
Наша цель — не научить агентов каждой детали инструментария Expo. Она заключается в том, чтобы сделать большую часть этих деталей тем, с чем инструменты могут справиться за них.
Попробуйте, и сообщите нам, где именно ваш агент застрял.










