JSON y automatización
La CLI está hecha para automatizarse con scripts. Pasa --json para obtener salida legible por máquinas, contrólala desde CI con un token y descubre el esquema de cualquier comando en tiempo de ejecución.
El otro lector de esta salida es un agente de programación con IA: despliegue desde Claude Code muestra los comandos de log en JSON que ejecuta para comprobar un despliegue.
--json en todas partes
Añade --json a cualquier comando para obtener salida estructurada. La CLI también cambia a JSON automáticamente cuando stdout no es un TTY.
lizard ps --json
lizard secrets list --json
lizard metrics --jsonComandos en streaming
Para los comandos en streaming (lizard up sin --detach), --json emite un objeto JSON por línea:
{ "event": "log", "line": "Step 1/8 : FROM node:20" }
{ "event": "log", "line": "..." }
{ "event": "deployed", "status": "running", "url": "https://app.onlizard.com" }El stream de la compilación termina con done o error. Después de done, lizard up sin --ci emite un evento final deployed, failed o deploying con status. Solo deployed incluye url (que puede ser null). Después de error no hay evento final y el comando sale con 1.
logs --json es una instantánea, no un stream
lizard logs --json devuelve las últimas 200 líneas (se puede cambiar con --tail N, máximo 1000) y sale. No esperes más salida de él.
Para un incidente específico, usa --restart latest o --restart <id>.
Errores
En modo JSON, un comando que falla imprime un objeto de error en stdout y sale con un código distinto de cero (consulta la tabla en Uso en CI / sin interfaz):
{
"error": {
"code": "ERROR",
"status": null,
"message": "Project \"my-projet\" not found.",
"body": null
}
}code es el código de error de la API, un código de la CLI como NOT_AUTHENTICATED o PROJECT_DELETED, o ERROR para un error genérico; los errores en las banderas dan códigos como commander.unknownOption. status es el estado HTTP, o null cuando la CLI falló antes de que respondiera la API. body contiene la respuesta de la API, o null.
Sin una sesión iniciada, los comandos fallan con NOT_AUTHENTICATED y salen con 2. Fuera de CI, body.login contiene enlaces de inicio de sesión (authUrl, authUrls) y una instruction: un agente puede darle el enlace al usuario y luego volver a ejecutar el comando.
Descubrimiento de esquemas
Muestra los argumentos, opciones y códigos de salida exactos de cualquier comando:
lizard --help --json # whole tree + global flags + exit codes
lizard service set --help --json # one commandLa forma de la respuesta es { cli, version, agents, command: { arguments, options, subcommands }, globalOptions, exitCodes }. Como se genera a partir del binario instalado, siempre coincide con tu versión; úsala de preferencia en lugar de fijar flags manualmente.
Uso en CI / sin interfaz
Autentícate con un token y vincula el proyecto explícitamente. Si no, up sin interfaz despliega en el proyecto predeterminado de tu cuenta:
# Set LIZARD_TOKEN through your CI secret store.
lizard init --name my-project
lizard up --ci --service api --detach # creates api on the first runComprueba los códigos de salida para decidir el flujo de tu pipeline:
| Código | Significado |
|---|---|
0 | éxito |
1 | error genérico |
2 | auth — token ausente/caducado |
3 | no encontrado: la API no tiene nada con ese ID |
4 | tiempo de espera agotado |
5 | cancelado |
Un nombre de proyecto o servicio que no coincide con nada sale con 1. lizard run, lizard sandbox exec y lizard sandbox ssh salen con el código del propio comando (127 si run no encuentra el comando).
--wait hace que redeploy espere a que termine la compilación y a que el nuevo despliegue esté listo. Sin él, el modo JSON sale con 0 en cuanto Lizard acepta la solicitud de compilación.
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"
fiActualizado