Ir al contenido

Optimiza tareas con OpenClaw: Cron vs Heartbeat

¿Alguna vez has sentido que tus automatizaciones son un caos? A veces necesitas que algo ocurra exactamente a las 9:00 AM, y otras veces solo quieres que tu agente esté al tanto de lo que pasa en tu inbox o calendario sin saturarte con notificaciones innecesarias.

Configurar esto correctamente es la diferencia entre tener un asistente que realmente te ayuda y uno que solo genera ruido. Tanto los heartbeats como los cron jobs te permiten ejecutar tareas de forma programada, pero cada uno brilla en situaciones distintas. Aquí te explico cómo elegir la mejor opción para tu caso.

Caso de usoRecomendadoPor qué
Revisar inbox cada 30 minHeartbeatAgrupa con otros checks, tiene contexto
Enviar reporte diario a las 9amCron (isolated)Necesitas precisión exacta
Monitorear eventos en el calendarioHeartbeatIdeal para conciencia periódica
Análisis profundo semanalCron (isolated)Tarea independiente, puede usar otro modelo
Recuérdame en 20 minutosCron (main, --at)Ejecución única con tiempo preciso
Check de salud de un proyectoHeartbeatAprovecha el ciclo existente

Los heartbeats se ejecutan en la main session en un intervalo regular (por defecto: 30 min). Están diseñados para que el agente revise cosas y saque a la luz cualquier tema importante.

  • Múltiples revisiones periódicas: En lugar de tener 5 cron jobs separados revisando el inbox, el calendario, el clima, las notificaciones y el estado del proyecto, un solo heartbeat puede agrupar todo esto.
  • Decisiones con contexto: El agente tiene todo el contexto de la main session, por lo que puede decidir qué es urgente y qué puede esperar.
  • Continuidad conversacional: Las ejecuciones de heartbeat comparten la misma sesión, así que el agente recuerda conversaciones recientes y puede dar seguimiento de forma natural.
  • Monitoreo de baja carga: Un solo heartbeat reemplaza muchas tareas pequeñas de polling.
  • Agrupa múltiples checks: Un solo turno del agente puede revisar el inbox, el calendario y las notificaciones a la vez.
  • Reduce llamadas a la API: Un solo heartbeat es más barato que 5 cron jobs aislados.
  • Conciencia del contexto: El agente sabe en qué has estado trabajando y puede priorizar en consecuencia.
  • Supresión inteligente: Si nada requiere tu atención, el agente responde HEARTBEAT_OK y no se envía ningún mensaje.
  • Tiempos naturales: El horario puede variar ligeramente según la carga de la cola, lo cual está bien para la mayoría de los monitoreos.

Ejemplo de heartbeat: checklist HEARTBEAT.md

Sección titulada «Ejemplo de heartbeat: checklist HEARTBEAT.md»
# Heartbeat checklist
- Check email for urgent messages
- Review calendar for events in next 2 hours
- If a background task finished, summarize results
- If idle for 8+ hours, send a brief check-in

El agente lee esto en cada heartbeat y gestiona todos los puntos en un solo turno.

{
agents: {
defaults: {
heartbeat: {
every: "30m", // interval
target: "last", // explicit alert delivery target (default is "none")
activeHours: { start: "08:00", end: "22:00" }, // optional
},
},
},
}

Consulta Heartbeat para ver la configuración completa.

Los cron jobs se ejecutan en momentos exactos y pueden funcionar en sesiones aisladas sin afectar el contexto principal. Las programaciones recurrentes al inicio de la hora se distribuyen automáticamente mediante un desplazamiento determinista en una ventana de 0 a 5 minutos.

  • Se requiere tiempo exacto: “Envía esto a las 9:00 AM todos los lunes” (no “alrededor de las 9”).
  • Tareas independientes: Tareas que no necesitan el contexto de la conversación.
  • Diferente modelo o razonamiento: Análisis pesados que justifican el uso de un modelo más potente.
  • Recordatorios de una sola vez: “Recuérdame en 20 minutos” usando --at.
  • Tareas ruidosas o frecuentes: Tareas que llenarían de basura el historial de la main session.
  • Triggers externos: Tareas que deben ejecutarse independientemente de si el agente está activo o no.
  • Tiempos precisos: Expresiones cron de 5 o 6 campos (segundos) con soporte para zona horaria.
  • Distribución de carga integrada: Las programaciones recurrentes se desfasan hasta 5 minutos por defecto.
  • Control por tarea: Puedes sobrescribir el desfase con --stagger <duration> o forzar el tiempo exacto con --exact.
  • Aislamiento de sesión: Se ejecuta en cron:<jobId> sin ensuciar el historial principal.
  • Sobrescritura de modelo: Usa un modelo más barato o más potente según la tarea.
  • Control de entrega: Los jobs aislados usan announce (resumen) por defecto; puedes elegir none si es necesario.
  • Entrega inmediata: El modo announce publica directamente sin esperar al heartbeat.
  • Sin necesidad de contexto: Funciona incluso si la main session está inactiva o compactada.
  • Soporte para ejecuciones únicas: Usa --at para timestamps precisos en el futuro.
Ventana de terminal
openclaw cron add \
--name "Morning briefing" \
--cron "0 7 * * *" \
--tz "America/New_York" \
--session isolated \
--message "Generate today's briefing: weather, calendar, top emails, news summary." \
--model opus \
--announce \
--channel whatsapp \
--to "+15551234567"

Esto se ejecuta exactamente a las 7:00 AM hora de Nueva York, usa Opus para mayor calidad y envía un resumen directamente a WhatsApp.

Ventana de terminal
openclaw cron add \
--name "Meeting reminder" \
--at "20m" \
--session main \
--system-event "Reminder: standup meeting starts in 10 minutes." \
--wake now \
--delete-after-run

Consulta Cron jobs para ver la referencia completa de la CLI.

Does the task need to run at an EXACT time?
YES -> Use cron
NO -> Continue...
Does the task need isolation from main session?
YES -> Use cron (isolated)
NO -> Continue...
Can this task be batched with other periodic checks?
YES -> Use heartbeat (add to HEARTBEAT.md)
NO -> Use cron
Is this a one-shot reminder?
YES -> Use cron with --at
NO -> Continue...
Does it need a different model or thinking level?
YES -> Use cron (isolated) with --model/--thinking
NO -> Use heartbeat

La configuración más eficiente utiliza ambos:

  1. Heartbeat gestiona el monitoreo rutinario (inbox, calendario, notificaciones) en un solo turno agrupado cada 30 minutos.
  2. Cron gestiona horarios precisos (reportes diarios, revisiones semanales) y recordatorios únicos.

Ejemplo: Configuración de automatización eficiente

Sección titulada «Ejemplo: Configuración de automatización eficiente»

HEARTBEAT.md (revisado cada 30 min):

# Heartbeat checklist
- Scan inbox for urgent emails
- Check calendar for events in next 2h
- Review any pending tasks
- Light check-in if quiet for 8+ hours

Cron jobs (tiempos precisos):

Ventana de terminal
# Daily morning briefing at 7am
openclaw cron add --name "Morning brief" --cron "0 7 * * *" --session isolated --message "..." --announce
# Weekly project review on Mondays at 9am
openclaw cron add --name "Weekly review" --cron "0 9 * * 1" --session isolated --message "..." --model opus
# One-shot reminder
openclaw cron add --name "Call back" --at "2h" --session main --system-event "Call back the client" --wake now

Lobster: Workflows deterministas con aprobaciones

Sección titulada «Lobster: Workflows deterministas con aprobaciones»

Lobster es el runtime para pipelines de herramientas de varios pasos que necesitan una ejecución determinista y aprobaciones explícitas. Úsalo cuando la tarea sea más compleja que un solo turno del agente y quieras un workflow que se pueda pausar y reanudar con puntos de control humanos.

  • Automatización de varios pasos: Necesitas un pipeline fijo de llamadas a herramientas, no un prompt único.
  • Puertas de aprobación: Las acciones con efectos secundarios deben pausarse hasta que las apruebes.
  • Ejecuciones reanudables: Puedes continuar un workflow pausado sin repetir los pasos anteriores.
  • Pipelines definidos: El flujo de trabajo sigue una estructura establecida.
  • Heartbeat/cron deciden cuándo ocurre una ejecución.
  • Lobster define qué pasos ocurren una vez que la ejecución comienza.

Para workflows programados, usa cron o heartbeat para activar un turno del agente que llame a Lobster. Para workflows ad-hoc, llama a Lobster directamente.

  • Lobster se ejecuta como un subproceso local (CLI de lobster) en modo herramienta y devuelve un JSON envelope.
  • Si la herramienta devuelve needs_approval, reanudas con un resumeToken y un flag de approve.
  • La herramienta es un plugin opcional; actívalo de forma aditiva mediante tools.alsoAllow: ["lobster"].
  • Lobster espera que la CLI de lobster esté disponible en tu PATH.

Consulta Lobster para ver ejemplos y uso completo.

Tanto heartbeat como cron pueden interactuar con la sesión principal, pero de formas distintas:

HeartbeatCron (main)Cron (isolated)
SesiónMainMain (vía system event)cron:<jobId>
HistorialCompartidoCompartidoNuevo en cada ejecución
ContextoCompletoCompletoNinguno (empieza limpio)
ModeloModelo de la main sessionModelo de la main sessionSe puede sobrescribir
SalidaEntregada si no es HEARTBEAT_OKPrompt de heartbeat + eventoResumen announce (por defecto)

Usa --session main con --system-event cuando quieras:

  • Que el recordatorio o evento aparezca en el contexto de la sesión principal.
  • Que el agente lo gestione durante el próximo heartbeat con todo el contexto.
  • Evitar una ejecución aislada separada.
  • Mantener la conciencia total del estado actual.
Ventana de terminal
openclaw cron add \
--name "Check project" \
--every "4h" \
--session main \
--system-event "Time for a project health check" \
--wake now

Usa --session isolated cuando quieras:

  • Empezar de cero sin contexto previo.
  • Ajustes de modelo o razonamiento diferentes.
  • Enviar resúmenes directamente a un canal.
  • Un historial que no ensucie la sesión principal.
Ventana de terminal
openclaw cron add \
--name "Deep analysis" \
--cron "0 6 * * 0" \
--session isolated \
--message "Weekly codebase analysis..." \
--model opus \
--thinking high \
--announce
MecanismoPerfil de costo
HeartbeatUn turno cada N minutos; escala con el tamaño de HEARTBEAT.md
Cron (main)Añade un evento al siguiente heartbeat (sin turno aislado)
Cron (isolated)Un turno completo del agente por job; puede usar modelos baratos

Consejos:

  • Mantén HEARTBEAT.md pequeño para minimizar el gasto de tokens.
  • Agrupa revisiones similares en el heartbeat en lugar de usar múltiples cron jobs.
  • Usa target: "none" en el heartbeat si solo quieres procesamiento interno.
  • Usa cron aislado con un modelo más barato para tareas rutinarias.
  • Heartbeat - configuración completa de heartbeat
  • Cron jobs - referencia completa de API y CLI de cron
  • System - eventos de sistema y controles de heartbeat
  • CLI - guía de uso de la línea de comandos

¿Necesitas ayuda para configurar tu primera automatización? Prueba el AI Setup Assistant.


Siguiente paso: Aprende a configurar notificaciones externas para recibir alertas de tus cron jobs en Slack o WhatsApp.

OpenClaw

OpenClaw Expert

Sigues atascado?

Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.