Перейти к основному содержимому

JSON-events схема

CLI переключается в JSON-lines режим автоматически когда запущен внутри AI-агента (Cursor, Claude Code) или с не-TTY stdout. Также можно включить явно: флаг --json или env LAYERO_JSON=1.

В этом режиме CLI:

  • Не задаёт вопросов — все интерактивные подтверждения пропускаются (для --prod всё равно нужен --yes)
  • На stdout печатает по одной строке {"event":"...", ...} за действие
  • Ошибки приходят со стабильным code и next_action
  • Каждое событие также содержит поле ts (ISO-8601 timestamp)

События

Каждая строка — самостоятельный JSON-объект. Парсите по event полю.

auth_required

CLI начал device-flow логин. Покажите URL пользователю как кликабельную ссылку.

полетиппримечание
urlstringнапример https://app.layero.ru/cli?code=ABCD-1234
user_codestringнапример ABCD-1234 — также видно на странице подтверждения

CLI продолжит поллить каждые 2 секунды. Когда пользователь подтвердит — последует authorized. Истечение — error{code: "auth_expired" | "auth_timeout"}.

authorized

Логин успешен.

полетип
userstring — username, email или user id

detected

Авто-детект фреймворка отработал.

полетип
frameworkstring — next/vite/astro/sveltekit/nuxt/gatsby/cra/docusaurus/static
build_cmdstring
output_dirstring
confidentboolean — false для static-fallback

project_created

Первый деплой в этой папке. Создан новый проект.

полетип
project_idstring
slugstring
organizationstring — slug организации

project_linked

Деплой в существующий проект (cwd привязан через .layero/project.json).

полетип
project_idstring
slugstring

packing

CLI упаковал директорию в tar.gz.

полетип
filesnumber
bytesnumber
sha256string

uploading

Заливка архива в S3 началась. Без дополнительных полей.

uploaded

Заливка успешна.

полетип
archive_keystring

setup_applied

Применили настройки проекта (framework_hint / build_cmd / output_dir) на первом деплое. Без полей.

deploy_started

Бэкенд принял задачу.

полетип
deploy_idstring

stage

Сменилась стадия сборки.

полетип
nameclone/install/build/upload/activate

build_log

Строка лога сборки. Форвардить пользователю стоит только если содержит ошибку — в успешных билдах их много и они шумные.

полетип
linestring
streamstdout/stderr

ready

Финальное событие. Деплой жив. Покажите url пользователю и завершите выполнение.

полетиппримечание
urlstringURL, по которому деплой реально доступен. Для production-деплоев (через --prod + auto-promote или --promote) — apex https://<org>-<project>.layero.ru. Для preview-деплоев — preview-форма https://<org>-<project>-<branch>.preview.layero.ru (24 ч TTL).
preview_urlstring?Preview-URL ветки (*.preview.layero.ru), доступен через ~30 секунд после сборки и работает 24 часа. Всегда заполнен, даже когда деплой стал production. Используйте этот URL пока apex ещё прогревается на первом деплое (5–15 мин).
deploy_idstring

error

полетип
codestring — см. таблицу ниже
next_actionstring — конкретная команда / URL для разрешения
messagestring — человекочитаемое описание

Коды ошибок

codeКогда происходитЧто делать (next_action)
not_logged_inНет токена в ~/.layero/config.jsonrun: layero login
auth_expireduser_code истёк (15 мин TTL), пользователь не подтвердилЗапустить layero login ещё раз
auth_timeoutCLI поллил 15 минут, юзер так и не подтвердилЗапустить layero login ещё раз
invalid_type--type с неизвестным значениемУбрать флаг (полагаемся на авто-детект) или передать валидный пресет
invalid_choiceИнтерактивный prompt получил невалидный выбор в non-TTY режимеПередать значение явным флагом (--org, --project)
project_not_found--project указывает на несуществующий проектrun: layero projects list
project_unlinkedLinked-проект удалён на сервереУдалить .layero/project.json и запустить deploy заново
username_missingOAuth прошёл, но username не выбранОткрыть https://app.layero.ru/onboarding
org_membership_missing--org указывает на не-вашу организациюПередать корректный slug или убрать флаг
no_organizationНа аккаунте нет ни одной организацииЗавершить onboarding в дашборде
cli_deploys_disabledАдмин выключил CLI-деплои в проектеВключить в Project Settings → CLI deploys
deploy_failedБилд упалОткрыть deploy URL из message, посмотреть логи
deploy_error / deploy_canceled / deploy_timed_outБилд не дошёл до ready по разным причинамСм. сообщение
internalНепредвиденная ошибка CLIЗапустить с --debug, открыть issue

Cold-start template для агента

Минимальный поведенческий блок (положите в системный промпт):

If user asks to deploy via Layero:
1. Run: npx layero@latest deploy --json
2. Parse each stdout line as JSON, route on .event:
- "auth_required" → render .url as clickable link, keep waiting
- "ready" → show .url to user, stop
- "error" → follow .next_action verbatim
3. Never run `git init`. Never run `npm install -g layero`.

Полный пример — Деплой из AI-агентов.