Справочник CLIJSON и автоматизация

JSON и автоматизация

CLI создан для скриптинга. Передавайте --json для машиночитаемого вывода, управляйте из CI с помощью токена и обнаруживайте схему любой команды в рантайме.

Другой читатель этого вывода — ИИ-агент для кодинга — деплой из Claude Code показывает JSON-команды для логов, которые он запускает, чтобы проверить деплой.

--json везде

Добавляйте --json к любой команде для структурированного вывода. CLI также автоматически переключается на JSON, когда stdout не является TTY.

lizard ps --json
lizard secrets list --json
lizard metrics --json

Команды со стримингом

Для стриминговых команд (lizard up без --detach) --json выдаёт один JSON-объект на строку:

{ "event": "log", "line": "Step 1/8 : FROM node:20" }
{ "event": "log", "line": "..." }
{ "event": "deployed", "status": "running", "url": "https://app.onlizard.com" }

Поток сборки завершается событием done или error. После done команда lizard up без --ci выдаёт финальное событие deployed, failed или deploying с status. Только deployed содержит url (который может быть null). После error финального события нет, и команда завершается с кодом 1.

logs --json — это снимок, а не поток

lizard logs --json возвращает последние 200 строк (переопределяется через --tail N, максимум 1000) и завершается. Не ждите от него дополнительного вывода. Для конкретного инцидента используйте --restart latest или --restart <id>.

Ошибки

В режиме JSON команда, завершившаяся ошибкой, выводит в stdout один объект ошибки и завершается с ненулевым кодом (см. таблицу в разделе «CI / работа без интерфейса»):

{
  "error": {
    "code": "ERROR",
    "status": null,
    "message": "Project \"my-projet\" not found.",
    "body": null
  }
}

code — код ошибки API, код CLI, например NOT_AUTHENTICATED или PROJECT_DELETED, или ERROR для общей ошибки; ошибки во флагах дают коды вроде commander.unknownOption. status — HTTP-статус или null, если CLI упал до ответа API. body содержит ответ API или null.

Без входа команды завершаются с NOT_AUTHENTICATED и кодом 2. Вне CI body.login содержит ссылки для входа (authUrl, authUrls) и instruction: агент может передать ссылку пользователю, а затем запустить команду снова.

Обнаружение схемы

Выведите точные аргументы, опции и коды выхода любой команды:

lizard --help --json                 # whole tree + global flags + exit codes
lizard service set --help --json     # one command

Формат ответа — { cli, version, agents, command: { arguments, options, subcommands }, globalOptions, exitCodes }. Поскольку он генерируется из вашего установленного бинарника, он всегда соответствует вашей версии — лучше полагаться на него, чем хардкодить флаги.

CI / работа без интерфейса

Аутентифицируйтесь токеном и явно укажите проект. Иначе up без интерфейса развернёт код в проекте по умолчанию вашего аккаунта:

# Set LIZARD_TOKEN through your CI secret store.
lizard init --name my-project
lizard up --ci --service api --detach   # creates api on the first run

Проверяйте коды выхода для ветвления пайплайна:

КодЗначение
0успех
1общая ошибка
2авторизация — токен отсутствует / просрочен
3не найдено: в API нет ничего с таким ID
4таймаут
5отменено

Имя проекта или сервиса, которому ничего не соответствует, даёт код 1. lizard run, lizard sandbox exec и lizard sandbox ssh завершаются с кодом самой команды (127, если run не находит команду).

--wait заставляет redeploy дождаться завершения сборки и готовности нового деплоя. Без него в режиме JSON команда завершается с кодом 0, как только Lizard принимает запрос на сборку.

if lizard redeploy --service api --wait --json; then
  echo "Deploy succeeded"
else
  status=$?
  echo "Deploy failed with code $status" >&2
  lizard logs --build --json || true
  exit "$status"
fi

Обновлено