code legible por máquina, no parsear el message humano.
El sobre
retryable es honesto: la CLI reintenta un GET una vez ante un fallo transitorio, pero nunca reenvía una escritura, y nunca reintenta un 4xx. Si construyes tu propio cliente, haz lo mismo.Por qué un code siquiera
Una entrada incorrecta no debería llegar al agente como un 500 opaco. Dos capas lo garantizan:
- La validación rechaza un enum inválido (
status,visibility) con un400a nivel de campo antes de que toque la base de datos. - Un traductor de errores de Postgres captura cualquier violación de restricción que se escape y la convierte en un
4xxcodificado, nunca en un500genérico.
500 significa lo que debe: un bug real o una caída. Ese es también el único momento en que retryable es true.
Catálogo de códigos
Validación y entrada
Acceso e identidad
Gobernanza y conflictos
Saldo comercial
Estos errores incluyen el estado actual en
usage y una next_action
accionable para hablar con ventas. Son definitivos (retryable: false).
Servidor
Observabilidad
Cada error capturado también se emite a PostHog (request_failed del lado del servidor, command_failed desde la CLI) con code, status_code y endpoint como propiedades, de modo que la superficie de errores es un único mapa consultable, segmentable por tipo y endpoint en vez de texto libre. El texto de la excepción nunca sale del log — se une por request_id.