Files
agents_and_robots/crons/README.md
T
egutierrez e481cb8783 feat: catálogo crons/ + scripts dev-scripts/cron/ + Fire() en scheduler
Implementa issue 0025: catálogo central de automatizaciones cron y scaffolder.

- crons/: directorio de automatizaciones nombradas con README explicando la
  convención. Incluye dos ejemplos listos para usar:
    · good-morning (send_message, 0 9 * * *) — saludo diario
    · daily-summary (llm_prompt, 0 18 * * *)  — resumen generado por LLM

- dev-scripts/cron/new.sh: scaffolder interactivo — pregunta nombre,
  descripción, tipo de acción y cron expression; crea schedule.yaml +
  archivo de prompt vacío; imprime el bloque YAML para copiar en config.yaml.

- dev-scripts/cron/list.sh: lista todas las automatizaciones del catálogo
  con nombre, tipo, cron y descripción en formato tabular.

- dev-scripts/cron/apply.sh: añade la automatización al config.yaml del
  agente indicado usando yq si está disponible; si no, imprime el bloque
  YAML para copiar a mano (sin dependencias obligatorias).

- shell/cron/scheduler.go: exporta Fire(ctx, sc) para disparo inmediato
  de un schedule sin esperar al timer cron — útil en tests y CLI.

- shell/cron/scheduler_test.go: cuatro tests nuevos para Fire()
  (send_message inline, llm_prompt, sin output_room, sin LLM).
  TestScheduler_SkipsInvalidSchedule y TestFire_LLMPrompt_NoLLM_Skips
  reemplazados por versiones instantáneas usando Fire en lugar de
  @every 100ms + sleep, eliminando ~700ms de tiempo de test.
2026-03-08 20:01:02 +00:00

74 lines
2.1 KiB
Markdown

# crons/ — Catálogo de automatizaciones
Directorio central de automatizaciones nombradas para los agentes. Cada subdirectorio es una
automatización reutilizable que puede aplicarse a uno o más agentes.
## Estructura de una automatización
```
crons/<nombre>/
schedule.yaml # spec: descripción, cron por defecto, acción
prompts/
message.md # plantilla de mensaje (send_message)
prompt.md # prompt para el LLM (llm_prompt)
```
## Convención de `schedule.yaml`
```yaml
# Metadata
name: nombre-de-la-automatizacion
description: "Descripción breve"
# Cron por defecto (el agente puede sobreescribir en su config.yaml)
default_cron: "0 9 * * *"
# Acción
action:
kind: send_message # send_message | llm_prompt
template: prompts/message.md # relativo a la raíz del proyecto
# Sala por defecto (opcional; el agente debe sobreescribir con output_room)
default_output_room: ""
```
> **Nota**: `template` es relativo a la **raíz del proyecto**, no a la carpeta de la automatización.
> Usa siempre la ruta completa desde la raíz: `crons/<nombre>/prompts/message.md`.
## Automatizaciones disponibles
| Nombre | Tipo | Cron por defecto | Descripción |
|--------|------|-----------------|-------------|
| `good-morning` | `send_message` | `0 9 * * *` | Saludo de buenos días |
| `daily-summary` | `llm_prompt` | `0 18 * * *` | Resumen diario del equipo |
## Scripts de gestión
```bash
# Crear nueva automatización (interactivo)
./dev-scripts/cron/new.sh
# Listar todas las automatizaciones con descripción
./dev-scripts/cron/list.sh
# Aplicar automatización a un agente (parchea config.yaml)
./dev-scripts/cron/apply.sh <nombre> <agent-id>
```
## Cómo añadir manualmente a un agente
En `agents/<id>/config.yaml`:
```yaml
schedules:
- name: good-morning
cron: "0 9 * * *"
output_room: "!TUROOM:matrix-af2f3d.organic-machine.com"
action:
kind: send_message
template: "crons/good-morning/prompts/message.md"
```
Ajusta `output_room` con la sala real del agente. El campo `cron` puede sobreescribir el
`default_cron` del catálogo.