Ir al contenido

Rutinas

Una rutina es trabajo que un agente hace solo, con horario: revisar el stock cada mañana de semana, mirar los pull requests abiertos cada hora, armar un resumen semanal para un cliente. Te enterás solo cuando hay algo para contarte.

Las rutinas viven en la pestaña Rutinas de cada proyecto (las de Home, en el proyecto base). Nueva rutina abre el editor.

La pestaña Rutinas de un proyecto: cada rutina con su flujo, una fila de 14 barras de activación y su próxima corridaLa pestaña Rutinas de un proyecto: cada rutina con su flujo, una fila de 14 barras de activación y su próxima corrida
Rutinas, con sus últimas activaciones

Cada rutina hace una de cuatro cosas:

AcciónQué pasa
AgenteUn agente (Home o uno del proyecto) responde tu prompt. Te avisa solo cuando tiene algo para decir.
MensajeTe manda un mensaje fijo por tu canal (Telegram, WhatsApp…). Sin modelo.
ShellSolo corre un comando en la carpeta del proyecto. Sin modelo ni aviso.
VigíaRecorre tu trabajo buscando lo que vale una palabra (tareas atrasadas, compromisos por vencer, proyectos quietos) y llama al modelo solo cuando hay algo nuevo.
Novedades del equipoTe cuenta en un solo mensaje lo que las rutinas y avisos de tus otros agentes tenían para vos; mientras haya una prendida, ellos no te escriben por su cuenta. Llama al modelo solo cuando hay novedades.
CuándoEjemplo
Con horarioElegí días y hora (“Días hábiles a las 08:30”), o Escribir un cron: cinco campos, en tu hora local. 30 8 * * 1-5 es días hábiles a las 08:30.
CadaCada N minutos, horas, días o semanas. Mínimo 5 minutos.
Una vezUna sola fecha y hora.
A manoSolo cuando apretás Correr ahora.

Una corrida que se perdió con el core apagado corre una vez cuando vuelve, nunca dos.

El prompt de una rutina de agente son tus propias palabras. Cuando esta vez no hay nada que valga contarte, el agente responde solo SKIP y no te llega nada. Escribí prompts que dejen lugar para eso:

Revisá los pedidos de ayer buscando algo raro: reembolsos de más de 200, un producto vendiendo 3 veces su promedio, un pago rechazado. Si no hay nada, respondé SKIP.

Agregar comandos antes y después le suma a la rutina un pre-comando y un post-comando. Los dos son comandos de shell que escribís vos (los agentes no pueden), corren en la carpeta del proyecto, dos minutos como máximo y sin credenciales en su entorno.

  1. Pre-comando corre primero. Su salida le llega al agente donde escribas {{pre_output}} en el prompt (o después del prompt si no lo ponés), marcada como dato de afuera.

  2. Llamar al modelo decide si el agente corre, según el resultado del pre-comando:

    OpciónSe llama al modelo
    Siemprecada vez
    Si hay salidasolo cuando el pre-comando imprimió algo
    Si fallasolo cuando el pre-comando salió con error
    Nuncanunca (corren solo los comandos)
  3. Post-comando corre al final con lo que salió, en estas variables de entorno:

    VariableValor
    APX_LLM_OUTPUTLo que respondió el agente (o el mensaje)
    APX_STATUScompleted, failed o skipped
    APX_SKIPPED1 si no se llamó al modelo, si no 0
    APX_PRE_OUTPUTLa salida del pre-comando
    APX_PRE_EXITEl código de salida del pre-comando

Así una rutina gasta 0 tokens los días tranquilos: el pre-comando de Tomás lista los productos con poco stock, con Si hay salida, y el modelo se llama solo los días en que hay alguno.

Una rutina de Mensaje también usa {{pre_output}}: “El clima de hoy: {{pre_output}}” te manda la salida del comando tal cual, sin modelo.

Las novedades de una rutina normalmente pasan por tu presupuesto de interrupciones: un tope diario, espacios entre avisos, horario de silencio. Prendé Llega siempre en una rutina que nunca querés que se frene, como un resumen de la mañana: sus novedades llegan aunque sea de noche o ya se haya llegado al tope, y no cuentan para él.

Correr ahora arranca una rutina en el momento, tenga el horario que tenga. Cada rutina muestra sus últimas activaciones como 14 barras, de la más vieja a la más nueva:

BarraSignifica
La acción corrióCorrió y no tenía nada para contarte.
Te avisóCorrió y te mandó algo.
Salteada, 0 tokensNo se llamó al modelo (el pre-comando no lo pidió, o no había nada nuevo para vigilar).
FallóLa corrida falló.
No corrióUn momento en que tenía que correr y no corrió.

Cada corrida es un chat propio, así que podés abrirla y ver exactamente qué hizo el agente.

❯ apx routines help
apx routines                                   Routines and when they run next
apx routines add <name> <prompt…> --agent a [--project p] (--cron "30 8 * * 1-5" | --every 60 | --at <ISO date>)
               [--pre "<command>"] [--call always|output|fails|never] [--post "<command>"]
                                              The pre-command's output reaches the prompt at {{pre_output}}
apx routines run <id>                          Run now
apx routines on|off <id>
apx routines rm <id>
apx routines log <id>                          Recent runs

Sin --cron, --every ni --at, la rutina corre a mano. --every va en minutos. La CLI crea rutinas de agente; las de mensaje, shell y vigía, y las anclas, se configuran en el panel.

Ventana de terminal
# Días hábiles a las 9: Tomás mira el stock bajo, solo cuando hay
apx routines add stock-bajo "Esta es la lista de stock bajo de hoy: {{pre_output}} Armá el pedido para el proveedor." \
--agent <id-tomas> --project <id-acme> --cron "0 9 * * 1-5" \
--pre "./scripts/low-stock.sh" --call output
apx routines run <id-rutina> # probala ahora
apx routines log <id-rutina> # corridas recientes; "(nothing to say)" marca un SKIP