CliAI brilla en la categoría lo necesito una vez. El 80% de los casos. Pero hay otra categoría más silenciosa: el comando con la misma forma que sigues regenerando. En algún punto, ese comando merece un nombre, una revisión y un sitio bajo scripts/.
Tres señales de madurez
Has corrido la misma forma tres veces en una semana. No el mismo comando exacto — la misma forma. "Tail de los logs de staging y grep FAILED" el lunes, "…y grep ERROR" el miércoles, "…y grep timeout" el viernes. La forma es lo que pide script.
Un compañero te pide el comando. Si va a copiar tu one-liner a Slack, ahórrale el viaje y métele en el repo.
El comando corre en CI. Shell sin revisar en CI es un incidente en cámara lenta. En el momento en que un one-liner generado entra a CI, escríbelo bien.
El patrón de graduación
Empieza con el prompt. Ejecuta. Copia el resultado.
$ clai para cada pod en staging que no esté Ready, imprime nombre y últimas 20 líneas de log→ kubectl -n staging get pods -o json \ | jq -r '.items[] | select(.status.containerStatuses[0].ready==false) | .metadata.name' \ | xargs -I{} sh -c 'echo "── {} ──"; kubectl -n staging logs {} --tail=20'
Luego conviértelo en algo revisable:
#!/usr/bin/env bash
# scripts/staging-unready-pods.sh
# Imprime nombre y últimas 20 líneas de cada pod en staging que no está Ready.
set -euo pipefail
NAMESPACE="${1:-staging}"
kubectl -n "$NAMESPACE" get pods -o json \
| jq -r '.items[] | select(.status.containerStatuses[0].ready==false) | .metadata.name' \
| while read -r pod; do
echo "── $pod ──"
kubectl -n "$NAMESPACE" logs "$pod" --tail=20
done
El delta es pequeño pero real: set -euo pipefail, parámetro de namespace, comentario de una línea, encabezado por pod. Nada de eso necesita LLM, y una vez en el repo, cada ejecución futura es reproducible sin gastar solicitud.
Lo que sigue siendo terreno de CliAI
No gradúes todo. Las tareas de una vez — onboarding en un repo nuevo, debugar un incidente, leer la config de un extraño — son exactamente el trabajo ad-hoc para el que se construyó CliAI. Si las pasas a script demasiado pronto, has añadido ruido al repo sin añadir palanca.
Ver también
- Tareas de Git en lenguaje natural — muchas se convierten en helpers de repo.
- Programar tareas con cron — una vez existe el script, suele vivir aquí.