Un activador inicia una sesión sin ninguna persona presente. Un cron la activa según el reloj; un webhook firmado lo hace ante un evento. En ambos casos, el agente obtiene su propia computadora en la nube, su propia rama y la misma revisión al regresar.
El día 1 de cada mes a las 06:30
0 30 6 1 * *
Un activador es un reloj o una firma. Todo lo demás —con qué agente se ejecuta, qué indica y en qué sesión aterriza— usa la misma configuración en ambos casos.
Una expresión cron de 6 campos —segundo, minuto, hora, día, mes y día de la semana— en cualquier zona horaria IANA. O una marca de tiempo run_at única, para algo que debe ocurrir una vez y después quedar inactivo.
Un servicio externo hace POST a la URL del activador. Kortix comprueba la firma, convierte la carga en el prompt e inicia la sesión. Una carga que no supera tu filtro se acepta y se ignora.
Cada activador de un proyecto es una fila: cómo se llama, cuándo se activa, en qué zona horaria, con qué agente y en qué sesión aterriza esa activación. Nada está oculto tras un estado que tengas que abrir.
| Trigger | Cron | Timezone | Agent | Session |
|---|---|---|---|---|
| daily-digest | 0 0 9 * * 1-5Días laborables a las 09:00 | America/Los_Angeles | kortix | nuevo |
| invoice-sweep | 0 30 6 1 * *El día 1 de cada mes a las 06:30 | Europe/Berlin | finanzas | reutilizar |
| oncall-handoff | 0 0 17 * * 5Viernes a las 17:00 | UTC | support | nuevo |
| roadmap-review | 0 0 8 * * 1Lunes a las 08:00 | America/New_York | planificador | fijado |
Los activadores viven en kortix.yaml junto a tus agentes e imágenes del sandbox. Cada uno indica su agente, su programación o secreto y la plantilla de prompt que se convierte en el primer mensaje de la sesión.
# fires on the clocktriggers: - slug: daily-digest type: cron agent: kortix cron: "0 0 9 * * 1-5" timezone: America/Los_Angeles session_mode: fresh prompt: | Summarize yesterday’s commits. Open a change request against main. # fires on an event - slug: new-lead type: webhook agent: sales secret_env: WEBHOOK_SECRET prompt: >- A new lead arrived: {{ body.name }} ({{ body.email }}). Add it to the CRM.# add it, ship it, and the schedule is live$ kortix triggers add daily-digest --type cron \ --cron "0 0 9 * * 1-5" \ --timezone America/Los_Angeles \ --prompt "Summarize yesterday. Open a CR."$ kortix ship→ kortix.yaml pushed. daily-digest is scheduled. # see every trigger and when it last fired$ kortix triggers ls # do not wait for 09:00 to find out$ kortix triggers fire daily-digest→ session startedUn prompt procesa {{ token.dotted.path }} contra la carga que lo activó. Un webhook obtiene {{ body.* }} y los encabezados de la solicitud; un cron obtiene {{ cron.schedule }}, {{ cron.timezone }} y {{ cron.scheduled_for }}. Un valor inexistente se procesa como vacío: sin error ni llaves sobrantes en el mensaje que lee tu agente.
Cada activador webhook indica un secreto del proyecto que lo firma. Un activador sin secreto se rechaza durante la validación; no existe un webhook sin autenticación que puedas olvidar proteger más adelante.
POST /v1/webhooks/projects/{projectId}/{slug}
X-Kortix-Signature: sha256=<hmac>
HMAC-SHA256 sobre el cuerpo sin procesar de la solicitud, comparado en tiempo constante. El encabezado compatible con GitHub X-Hub-Signature-256 también funciona, así que un webhook de repositorio no necesita un adaptador.
Un filtro es una ruta con puntos que se compara con el mismo payload que ve el prompt. Sirve para romper bucles: una fuente que informa de ambos lados de una conversación ejecutaría de otro modo el agente sobre su propia respuesta.
De forma predeterminada, cada ejecución empieza de cero. Cuando el trabajo es un hilo en curso y no una tarea nueva, un trigger puede volver a solicitar una sesión que ya posee. Kortix prueba los modos en orden y pasa al siguiente si falla, para que una ejecución nunca desaparezca sin más.
Volver a solicitar una sesión exacta, identificada por id. Si esa sesión ya no existe o falló, pasa al siguiente modo.
Generar una clave a partir del payload y volver a solicitar la sesión saludable más reciente marcada con esa clave exacta. Un cliente, un hilo. Nunca pasa a la sesión de otra clave.
Volver a solicitar la sesión saludable más reciente creada por este trigger. Un trigger fijado recurre aquí antes de seguir avanzando.
Crear una rama nueva e iniciar un ordenador cloud nuevo. Es el modo predeterminado y el último recurso para todos los demás modos.
Una sesión activada es visible para todo el proyecto, no solo para quien configuró el trigger. Se detiene tras 5 minutos de inactividad, así que una automatización que se ejecuta a las 3:00 no deja una máquina facturando hasta la mañana.
Una automatización no obtiene privilegios que una persona no tendría. La misma separación, el mismo alcance limitado y el mismo único camino de vuelta a main.
Empieza con una tarea y crece desde ahí.