En resumen
- Hermes cron ejecuta el mismo harness de
AIAgentde la Parte 1 según una programación: cada trabajo se activa en una sesión nueva, ejecuta un prompt independiente (opcionalmente con skills adjuntas) y entrega la respuesta final a través del gateway (Telegram, Discord, Slack, correo electrónico, archivos locales y más). - Tres formas de crear trabajos: mediante lenguaje natural en el chat del gateway (herramienta
cronjob), la CLIhermes crony/api/jobsen el servidor API. Los trabajos se guardan en~/.hermes/cron/jobs.json. - El gateway debe estar en ejecución para que funcione el programador integrado de 60 segundos (
hermes gateway install). Las operaciones desatendidas no se resuelven solo con la CLI. - Mejores canales para resúmenes proactivos: Telegram y Discord como primera opción. Los mensajes proactivos de cron por WhatsApp Cloud fallan fuera de la ventana de atención al cliente de 24 horas de Meta (error de Graph
131047) hasta que Hermes incorpore soporte para plantillas. - Controles de costos: trabajos de script
no_agent(cero tokens de LLM), scripts que deciden si activar el agente mediantewakeAgent,[SILENT]cuando no hay cambios, modelos más económicos fijados explícitamente yenabled_toolsetspor trabajo.
Qué aprenderás aquí
- Cómo encaja Hermes cron en el harness del agente y en qué se diferencia de cron del sistema operativo +
curl - Cómo crear resúmenes programados, monitores y pipelines de varias etapas
- Destinos de entrega, asignación de skills y selección fija de proveedor y modelo
- Restricciones de la mensajería proactiva, especialmente WhatsApp frente a Telegram
- Gobernanza de tokens y riesgos de
write_approvalpara trabajos desatendidos - Una lista de verificación operativa y los fallos más comunes
Esta es la Parte 3 de la serie sobre Hermes Agent. La Parte 1 cubre la arquitectura del harness; la Parte 2 cubre la atención reactiva por WhatsApp. La Parte 3 incorpora operaciones salientes programadas.
Cómo encaja cron en el harness
En la Parte 1 describimos Hermes como un harness de agente de ejecución continua. Cron permite ejecutar ese harness sin intervención humana:
┌─────────────────────────────────────────┐
│ Job authoring surfaces │
│ Gateway chat → cronjob tool │
│ CLI → /cron + hermes cron │
│ API → /api/jobs │
└────────────────────┬────────────────────┘
│ create/update
▼
┌──────────────────────┐
│ ~/.hermes/cron/ │
│ jobs.json │
└──────────┬───────────┘
│
┌───────────────────────────────────┼───────────────────────────────────┐
│ Hermes Gateway │
│ CronScheduler ──► tick every 60s ──► due jobs + file lock │
│ │ │
│ ▼ per job │
│ optional pre-run script (wakeAgent gate) │
│ │ │
│ ▼ │
│ Fresh AIAgent session (skills injected, cronjob tool DISABLED) │
│ │ │
│ ▼ │
│ Delivery router → Telegram / Discord / Slack / WhatsApp* / local │
└──────────────────────────────────────────────────────────────────────┘
* proactive WhatsApp Cloud delivery fails outside 24h window (131047)
Criterio editorial: Cron no es un producto independiente. Es la ejecución programada del mismo runtime que procesa los turnos de la CLI, el gateway y el servidor API. El gateway se encarga de la entrega; el agente no invoca directamente las herramientas de mensajería.
Creación de trabajos programados
Formatos de programación
Según la documentación de tareas programadas (cron):
| Tipo | Ejemplos | Repetición predeterminada |
|---|---|---|
| Ejecución única relativa | 30m, 2h, 1d | una vez |
| Intervalo | every 30m, every 2h | indefinidamente |
| Expresión cron | 0 9 * * *, 0 9 * * 1-5 | indefinidamente |
| Marca de tiempo ISO | 2026-03-15T09:00:00 | una vez |
El lenguaje natural como “daily at 9am” no se interpreta como una cadena de programación en la CLI, la Jobs API ni la herramienta cronjob: usa 0 9 * * *. En el chat del gateway (Telegram, Discord, etc.), sí puedes describir la programación en lenguaje natural; Hermes la traduce internamente a una llamada de creación de cronjob.
Opción A: Chat del gateway (lenguaje natural)
En Telegram, Discord u otro canal conectado:
Every morning at 9am, search the web for top AI agent news from the past 24 hours
and send me a summary on Telegram.
Hermes llama internamente a la herramienta cronjob. El comando /cron solo está disponible en la CLI, no en los canales del gateway (referencia de comandos de barra).
Opción B: CLI hermes cron
Instala y verifica el programador:
hermes gateway install
hermes cron status # gateway PID, ticker heartbeat, next run
Crea un resumen diario:
hermes cron create "0 8 * * *" \
"Search the web for top AI agent news from the past 24 hours. Summarize the 3 most important stories: headline, 2-sentence summary, source URL. Use emoji bullets." \
--name "Morning AI digest" \
--deliver telegram
Flags comunes (referencia de comandos de la CLI):
| Flag | Propósito |
|---|---|
--name | Nombre descriptivo del trabajo |
--deliver | telegram, discord, local, origin, telegram:CHAT_ID, etc. |
--skill (se puede repetir) | Adjunta skills en orden |
--script | Script previo a la ejecución ubicado en ~/.hermes/scripts/ |
--no-agent | Solo ejecuta el script; cero tokens de LLM |
--workdir | Inyecta AGENTS.md y archivos de contexto del proyecto |
Prueba el trabajo antes de esperar a la ejecución programada:
hermes cron list
hermes cron run <job_id>
Opción C: Jobs API
Con API_SERVER_ENABLED=true y el gateway en ejecución:
curl -X POST http://127.0.0.1:8642/api/jobs \
-H "Authorization: Bearer $API_SERVER_KEY" \
-H "Content-Type: application/json" \
-d '{
"schedule": "0 9 * * 1",
"prompt": "Weekly AI digest: top 5 stories with links, under 500 words.",
"name": "Weekly AI digest",
"deliver": "telegram"
}'
Consulta Servidor API — Jobs API.
Fijar el proveedor y el modelo para trabajos desatendidos
Los trabajos sin un modelo fijado guardan el valor predeterminado global en el momento de su creación. Si después cambias hermes model, esos trabajos se bloquean por seguridad y te avisan para que fijes un modelo explícitamente. Esto evita cambios inesperados de costo o comportamiento.
Para resúmenes en producción, fija un modelo más económico mediante la herramienta cronjob o la Jobs API:
cronjob(
action="update",
job_id="morning-ai-digest",
model={"provider": "openrouter", "model": "google/gemini-3-flash-preview"},
)
Destinos de entrega
El agente escribe su respuesta como respuesta final. Hermes se encarga de entregarla: no le indiques al agente que invoque las herramientas de Telegram o WhatsApp para enviar el resultado de cron.
| Destino | Significado |
|---|---|
origin | Canal donde se creó el trabajo (predeterminado en mensajería) |
local | Solo ~/.hermes/cron/output/ (predeterminado en la CLI) |
telegram, discord, slack, email, … | Canal principal de la plataforma |
telegram:123456 | ID de un chat específico |
all | Distribución a todos los canales principales conectados |
Configura los canales principales mediante variables de entorno como TELEGRAM_HOME_CHANNEL, DISCORD_HOME_CHANNEL y WHATSAPP_CLOUD_HOME_CHANNEL (variables de entorno).
Opciones adicionales de entrega:
[SILENT]en la respuesta del agente suprime la entrega en ejecuciones exitosas que no requieren acción (trabajos de monitoreo).cron.wrap_response: falseenconfig.yamlenvía el resultado sin encabezado ni pie de página.- Trabajos que permiten continuar la conversación (
attach_to_session=Trueocron.mirror_delivery: true) permiten a los usuarios responder al informe en las plataformas compatibles.
Patrones de implementación
Patrón A: Informe diario (LLM + web)
Tutorial oficial: Bot de informe diario
hermes cron create "0 8 * * *" \
"Search the web for latest AI agent and open-source LLM news from the past 24 hours. Summarize top 3: headline, 2-sentence summary, URL." \
--name "Morning AI digest" \
--deliver telegram
Patrón B: Monitor silencioso (alerta solo cuando hay cambios)
En la sesión interactiva de la CLI de Hermes (no en Telegram/Discord: /cron solo está disponible en la CLI):
/cron add "every 1h" \
"If script output says CHANGE DETECTED, summarize what changed. If NO_CHANGE, respond with only [SILENT]." \
--script watch-pricing.sh \
--name "Pricing monitor" \
--deliver telegram
El script se encuentra en ~/.hermes/scripts/. Hermes rechaza las rutas fuera de ese directorio.
Patrón C: Aviso de métricas sin tokens (no_agent)
cat > ~/.hermes/scripts/memory-watchdog.sh <<'EOF'
#!/usr/bin/env bash
ram_pct=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$ram_pct" -ge 85 ]; then
echo "RAM ${ram_pct}% on $(hostname)"
fi
EOF
chmod +x ~/.hermes/scripts/memory-watchdog.sh
hermes cron create "every 5m" \
--no-agent --script memory-watchdog.sh \
--deliver telegram --name "memory-watchdog"
Patrón D: Pipeline de varias etapas (context_from)
Encadena trabajos de recopilación → clasificación → entrega. Cada etapa lee la salida de la etapa anterior mediante context_from en la herramienta cronjob (guía de automatización con cron):
07:00 Collector → raw brief file
07:30 Triage → ranked brief (context_from: collector)
08:00 Deliver → formatted digest to Telegram (context_from: triage)
Patrón E: Resumen con skills adjuntas
hermes cron create "0 8 * * *" \
"Search arXiv for 3 best 'language model reasoning' papers from the past day." \
--skill arxiv --skill obsidian \
--name "Paper digest" \
--deliver local
Las skills se inyectan en orden; usa el prompt de cron para describir la tarea, no para copiar el contenido de la skill.
Patrón F: Ejecución única desde CI (hermes send)
Para notificaciones de deploy sin el programador de Hermes:
echo "Deploy finished: $(git rev-parse --short HEAD)" | hermes send --to telegram
Usa cron del sistema operativo o CI para activar la ejecución; hermes send omite por completo el LLM.
Mensajería proactiva y WhatsApp
En la Parte 2 implementamos atención reactiva por WhatsApp (mensaje del cliente → respuesta del bot). Cron incorpora operaciones salientes proactivas, donde las políticas de la plataforma son importantes.
| Canal | Resúmenes proactivos con cron | Notas |
|---|---|---|
| Telegram | ✅ Recomendado | Usa TELEGRAM_CRON_THREAD_ID para aislar cron en un tema de foro |
| Discord / Slack | ✅ | Canales con nombre e hilos |
| Correo electrónico / SMS | ✅ | Diferentes políticas aplicables |
| WhatsApp Cloud | ⚠️ Solo dentro de la ventana de 24h | Error de Graph 131047 fuera de la ventana |
Según la documentación de Hermes para WhatsApp Cloud, los mensajes de formato libre requieren que el usuario haya enviado un mensaje en las últimas 24 horas. Hermes aún no implementa soporte para mensajes de plantilla en cron (a julio de 2026). Para los resúmenes matutinos, usa Telegram o correo electrónico; reserva cron por WhatsApp para usuarios con una sesión activa.
Gobernanza de tokens y riesgos de aprendizaje
Las sesiones de cron siguen asumiendo el costo base del harness —prompt de sistema por niveles, índice de skills y snapshots acotados de memoria (Parte 1)— incluso para prompts cortos. Tenlo en cuenta en tu presupuesto.
| Control | Efecto |
|---|---|
no_agent=True | Cero tokens de LLM |
Script + {"wakeAgent": false} | Omite el agente cuando no hay cambios |
[SILENT] | Suprime la entrega (el agente aún puede ejecutarse si no se controla su activación) |
enabled_toolsets por trabajo | Esquemas de herramientas más pequeños para trabajos frecuentes |
| Modelo más económico fijado | Costo predecible por resumen |
| Evitar el navegador y la delegación en trabajos por hora | Evita gastos descontrolados |
Gobernanza: memory.write_approval y skills.write_approval tienen el valor predeterminado false. Si los habilitas, los trabajos cron desatendidos pueden dejar operaciones de escritura pendientes que nunca se aprueben. Para resúmenes operativos, usa prompts de solo lectura o mantén desactivados los controles de aprobación, a menos que una persona revise /memory pending y /skills pending con regularidad (Memoria persistente).
Cron también deshabilita la herramienta cronjob durante sus ejecuciones para evitar bucles recursivos de programación.
Lista de verificación operativa
[ ] Gateway installed and running (hermes gateway install && hermes cron status)
[ ] Provider/model credentials valid; per-job model pinned for unattended jobs
[ ] Prompt is fully self-contained (URLs, format rules, [SILENT] when applicable)
[ ] Delivery target configured (HOME_CHANNEL env vars or explicit chat ID)
[ ] Minimal toolsets for digest jobs (hermes tools → cron platform)
[ ] Test with hermes cron run <job_id> before relying on schedule
[ ] For WhatsApp proactive: confirm 24h window or use Telegram/email instead
[ ] Backup jobs.json before bulk edits
[ ] Review ~/.hermes/cron/output/ for audit trail
Fallos comunes
| Síntoma | Causa probable | Solución |
|---|---|---|
| Los trabajos nunca se ejecutan | El gateway no está en ejecución | hermes gateway install; hermes cron status |
| Se omite el trabajo y se genera una alerta | Cambió el modelo global | Fija el proveedor y el modelo en el trabajo |
| No se entrega ningún resultado | El agente devolvió [SILENT] | Es lo esperado para monitores; revisa el directorio de salida de cron |
last_delivery_error | ID de chat incorrecto o canal no descubierto | Usa los IDs sin modificar; asegúrate de que el gateway haya detectado el canal |
WhatsApp 131047 | Fuera de la ventana de 24h | El usuario debe enviar primero un mensaje directo; usa Telegram para los resúmenes |
| Gasto descontrolado de tokens | Conjuntos completos de herramientas en trabajos frecuentes | enabled_toolsets, monitores no_agent |
| El prompt se bloquea al crear el trabajo | Se activó el escáner de seguridad | Reformula el prompt; evita patrones de exfiltración |
Conclusión
Hermes cron convierte el harness en una capa de operaciones: razonamiento programado, skills adjuntas y entrega mediante el gateway, sin un producto de automatización independiente. Los detalles de implementación que importan en producción son la disponibilidad del gateway, los prompts independientes, los modelos fijados y la elección del canal adecuado para la mensajería proactiva.
Telegram y Discord son las opciones más sencillas para los resúmenes. WhatsApp es el punto delicado donde las capacidades del harness se encuentran con las políticas de Meta: la misma lección de la Parte 2, aplicada a los mensajes salientes programados.
Fuentes
Fuentes principales consultadas el 3 de julio de 2026:
- Hermes Agent — Tareas programadas (cron) — modelo de trabajos, programaciones, entrega, skills,
[SILENT]. hermes-agent.nousresearch.com/docs/user-guide/features/cron - Hermes Agent — Automatiza cualquier cosa con cron — cinco patrones de trabajos, incluidos pipelines. hermes-agent.nousresearch.com/docs/guides/automate-with-cron
- Hermes Agent — Cron solo con scripts (sin LLM) —
no_agent, entrega desde scripts. hermes-agent.nousresearch.com/docs/guides/cron-script-only - Hermes Agent — Bot de informe diario — tutorial de resumen de principio a fin. hermes-agent.nousresearch.com/docs/guides/daily-briefing-bot
- Hermes Agent — Funcionamiento interno de cron — programador, modelo de entrega, proveedor Chronos. hermes-agent.nousresearch.com/docs/developer-guide/cron-internals
- Hermes Agent — Comandos de la CLI —
hermes cron,hermes send. hermes-agent.nousresearch.com/docs/reference/cli-commands - Hermes Agent — Comandos de barra —
/cronsolo en la CLI. hermes-agent.nousresearch.com/docs/reference/slash-commands - Hermes Agent — Referencia de herramientas — conjunto de herramientas
cronjob. hermes-agent.nousresearch.com/docs/reference/tools-reference - Hermes Agent — Servidor API — operaciones CRUD de la Jobs API. hermes-agent.nousresearch.com/docs/user-guide/features/api-server
- Hermes Agent — Proveedores de respaldo — cron hereda la cadena de conmutación por error. hermes-agent.nousresearch.com/docs/user-guide/features/fallback-providers
- Hermes Agent — Variables de entorno — variables de entorno para los canales principales. hermes-agent.nousresearch.com/docs/reference/environment-variables
- Hermes Agent — WhatsApp Cloud — ventana de 24h,
131047, falta de soporte para plantillas. hermes-agent.nousresearch.com/docs/user-guide/messaging/whatsapp-cloud - Hermes Agent — Memoria persistente —
write_approval, revisión en segundo plano. hermes-agent.nousresearch.com/docs/user-guide/features/memory - Nous Research — Hermes Agent en GitHub —
cron/jobs.py,hermes_cli/subcommands/cron.py. github.com/NousResearch/hermes-agent
Serie: