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Обновлено