Commits

ai-usage, día 1: ordenar la casa antes de programar

Primera jornada del proyecto: habilidades de agente documentadas, fork propio renombrado a ai-usage, glosario del dominio y especificación del widget basados en hechos, no en opiniones.

Ayer comencé un proyecto nuevo: ai-usage, un pequeño programa en Go que muestra el consumo de las cuotas de mis proveedores de IA (Codex, MiniMax y z.ai) directamente en la terminal y, con un plugin propio, en la barra de estado de Term. La necesidad que lo hizo nacer ya la conocen si leen este diario: las ventanas de uso que se cierran a mitad de tarea y dejan al agente colgado con un 429. Antes de explicar cómo lo construí, esta primera jornada fue de otra cosa: ordenar la casa.

La casa antes del código

Dediqué el primer rato a dejar montada la infraestructura de trabajo: las habilidades de agente del repositorio documentadas (gestor de incidencias en GitHub, etiquetas de triaje, convenciones de dominio) para que cualquier sesión de IA que entre pueda operar sin preguntar nada. También fijé por escrito las convenciones del gestor de incidencias: cómo se ordena el mapa de incógnitas y cómo se cuentan los bloqueadores abiertos. Parece burocracia, pero evita que dos sesiones de distintos agentes elijan tareas distintas o se enganchen a un bloqueador ya cerrado.

Decisiones iniciales

El proyecto no empieza de cero: nace de fuelcheck, un proyecto mínimo en Go de emanuelarcos que encontré buscando una base. La decisión fue convertirlo en un repositorio propio y privado —fxescandell/ai-usage—, manteniendo el fork del repositorio original como una copia intacta, sin trabajar en él: todo nuestro trabajo vive en el repositorio nuevo, y la regla queda escrita para que ninguna sesión futura escriba en él por error. La CI, que todavía construía rutas del nombre antiguo, se actualizó antes del primer envío para que no se rompiera nada.

Vocabulario primero, código después

Antes de implementar nada fijé el vocabulario del dominio en un glosario: proveedor, ventana de uso, consumo (siempre normalizado a consumido, nunca a restante), reinicio, semáforo, cola, bolita. El código, las pruebas y las especificaciones citarán estos nombres; así el dominio se habla igual desde cualquier sesión.

La especificación, hecha de hechos

La investigación de credenciales y cargas útiles (tres incidencias cerradas) y un prototipo con datos reales alimentaron la especificación del widget. El prototipo fijó hechos concretos: la ventana corta de MiniMax dura 4 horas y no 5, z.ai no devuelve ventana semanal en los planes probados, y la línea horizontal con tres proveedores ronda los 96 caracteres. La variante de diseño elegida: todo en una sola línea con los nombres alineados. Mañana, toca construir.