Skip to main content
Las tareas programadas permiten que Claude vuelva a ejecutar un prompt automáticamente en un intervalo. Úselas para sondear una implementación, supervisar un PR, verificar una compilación de larga duración o recordarse a sí mismo que debe hacer algo más adelante en la sesión. Para reaccionar a eventos a medida que ocurren en lugar de sondear, consulte Channels: su CI puede insertar el error directamente en la sesión. Para mantener la sesión funcionando turno tras turno hasta que se cumpla una condición en lugar de en un intervalo, consulte /goal. Las tareas tienen alcance de sesión: viven en la conversación actual y se detienen cuando inicia una nueva. Cuando reanuda con --resume o --continue, Claude Code restaura las tareas que no han expirado, excepto las enumeradas en Limitaciones. Para la programación que sobrevive independientemente de cualquier sesión, utilice Routines para crear una rutina en la nube, configure una tarea programada de Desktop o utilice GitHub Actions.

Comparar opciones de programación

Claude Code ofrece tres formas de programar trabajo recurrente o puntual:
Utilice tareas en la nube para trabajo que debe ejecutarse de forma confiable sin su máquina. Utilice tareas de Desktop cuando necesite acceso a archivos y herramientas locales. Utilice /loop para sondeo rápido durante una sesión.

Ejecutar un prompt repetidamente con /loop

El /loop bundled skill es la forma más rápida de ejecutar un prompt repetidamente mientras la sesión permanece abierta. Tanto el intervalo como el prompt son opcionales, y lo que proporcione determina cómo se comporta el bucle. También puede pasar un skill como el prompt, por ejemplo /loop 20m /review-pr 1234, para volver a ejecutar ese skill en cada iteración. Un disparo programado solo ejecuta skills que Claude está autorizado a invocar por su cuenta. Lo siguiente llega a Claude como texto sin formato en lugar de ejecutarse:

Ejecutar en un intervalo fijo

Cuando proporciona un intervalo, Claude lo convierte en una expresión cron, programa el trabajo y confirma la cadencia y el ID del trabajo.
El intervalo puede encabezar el prompt como un token simple como 30m, o seguirlo como una cláusula como every 2 hours. Las unidades admitidas son s para segundos, m para minutos, h para horas y d para días. Los segundos se redondean al minuto más cercano ya que cron tiene una granularidad de un minuto. Los intervalos que no se asignan a un paso cron limpio, como 7m o 90m, se redondean al intervalo más cercano que sí lo hace y Claude le dice cuál eligió.

Dejar que Claude elija el intervalo

Cuando omite el intervalo, Claude elige uno dinámicamente en lugar de ejecutarse en un horario cron fijo. Después de cada iteración, elige un retraso entre un minuto y una hora según lo que observó: esperas cortas mientras una compilación se está terminando o un PR está activo, esperas más largas cuando no hay nada pendiente. El retraso elegido y la razón del mismo se imprimen al final de cada iteración. El ejemplo a continuación verifica CI y comentarios de revisión, con Claude esperando más tiempo entre iteraciones una vez que el PR se queda en silencio:
En una sesión donde la herramienta Monitor está disponible, Claude puede usarla directamente cuando solicita un horario /loop dinámico. Monitor ejecuta un script de fondo y transmite cada línea de salida, lo que evita el sondeo por completo y a menudo es más eficiente en tokens y más receptivo que volver a ejecutar un prompt en un intervalo. Un bucle programado dinámicamente aparece en su lista de tareas programadas como cualquier otra tarea, por lo que puede enumerarla o cancelarla de la misma manera. Las reglas de jitter no se aplican a ella, pero el vencimiento de siete días sí.
Los intervalos elegidos dinámicamente y el prompt de mantenimiento integrado funcionan en todos los proveedores, y con obtención de banderas de características desactivada. En Amazon Bedrock, Claude Platform en AWS, Google Cloud’s Agent Platform y Microsoft Foundry, o con obtención desactivada, ambos requieren Claude Code v2.1.248 o posterior. En esos casos, en versiones anteriores, un prompt sin intervalo se ejecuta en un horario fijo de 10 minutos, y un /loop sin prompt imprime el mensaje de uso.

Ejecutar el prompt de mantenimiento integrado

Cuando omite el prompt, Claude usa un prompt de mantenimiento integrado en lugar de uno que proporcione. En cada iteración, trabaja a través de lo siguiente, en orden:
  • continuar cualquier trabajo inacabado de la conversación
  • cuidar el pull request de la rama actual: comentarios de revisión, ejecuciones de CI fallidas, conflictos de fusión
  • ejecutar pasadas de limpieza como búsquedas de errores o simplificación cuando no hay nada más pendiente
Claude no inicia nuevas iniciativas fuera de ese alcance, y las acciones irreversibles como insertar o eliminar solo proceden cuando continúan algo que la transcripción ya autorizó.
Un /loop simple ejecuta este prompt en un intervalo elegido dinámicamente. Agregue un intervalo, por ejemplo /loop 15m, para ejecutarlo en un horario fijo en su lugar. Para reemplazar el prompt integrado con el suyo propio, consulte Personalizar el prompt predeterminado con loop.md.

Personalizar el prompt predeterminado con loop.md

Cree un archivo loop.md para reemplazar el prompt de mantenimiento integrado con sus propias instrucciones. Define un único prompt predeterminado para /loop simple, no una lista de tareas programadas separadas, y Claude Code lo ignora siempre que proporcione un prompt en la línea de comandos. Para programar prompts adicionales junto a él, use /loop <prompt> o pida a Claude directamente. Claude busca el archivo en dos ubicaciones y usa el primero que encuentra. El archivo es Markdown simple sin estructura requerida. Escríbalo como si estuviera escribiendo el prompt /loop directamente. El siguiente ejemplo mantiene una rama de lanzamiento saludable:
.claude/loop.md
Las ediciones a loop.md tienen efecto en la siguiente iteración, por lo que puede refinar las instrucciones mientras un bucle se está ejecutando. Cuando no existe loop.md en ninguna ubicación, el bucle vuelve al prompt de mantenimiento integrado. Mantenga el archivo conciso: el contenido más allá de 25,000 bytes se trunca.

Detener un bucle

Para detener un bucle /loop de ritmo propio mientras espera la siguiente iteración, presione Esc. Esto borra el despertar pendiente para que el bucle no se ejecute nuevamente. Las tareas que programó pidiendo a Claude directamente no se ven afectadas por Esc y permanecen en su lugar hasta que las elimine. En modo de ritmo propio, Claude también puede terminar el bucle por su cuenta una vez que la tarea se complete. Claude llama a la herramienta ScheduleWakeup con stop: true, que cancela el despertar pendiente inmediatamente. Si una iteración termina sin reprogramar ni detener, Claude Code programa un despertar de respaldo aproximadamente 20 minutos después y termina el bucle cuando esa iteración tampoco se reprograma. Los bucles en un intervalo fijo siguen ejecutándose hasta que los detenga como cualquier otra tarea programada o transcurran siete días.

Establecer un recordatorio único

Para recordatorios únicos, describa lo que desea en lenguaje natural en lugar de usar /loop. Claude programa una tarea de un solo disparo que se elimina a sí misma después de ejecutarse.
Claude fija la hora de disparo a un minuto y hora específicos usando una expresión cron y confirma cuándo se ejecutará.

Gestionar tareas programadas

Pida a Claude en lenguaje natural que enumere o cancele tareas, o haga referencia directamente a las herramientas subyacentes.
Estas son las herramientas subyacentes que Claude utiliza: Cada tarea programada tiene un ID de 8 caracteres que puede pasar a CronDelete. Una sesión puede contener hasta 50 tareas programadas a la vez.

Cómo se ejecutan las tareas programadas

El programador verifica cada segundo si hay tareas vencidas y las encola con baja prioridad. Un prompt programado se ejecuta entre sus turnos, no mientras Claude está en medio de una respuesta. Si Claude está ocupado cuando vence una tarea, el prompt espera hasta que termine el turno actual. Todos los tiempos se interpretan en su zona horaria local. Una expresión cron como 0 9 * * * significa las 9am donde está ejecutando Claude Code, no UTC.

Jitter

Para evitar que cada sesión golpee la API en el mismo momento de reloj de pared, el programador agrega un desplazamiento determinista a los tiempos de disparo:
  • Las tareas recurrentes se ejecutan hasta 30 minutos después de la hora programada (o hasta la mitad del intervalo, para tareas que se ejecutan más frecuentemente que cada hora). Un trabajo por hora programado para :00 puede ejecutarse en cualquier momento hasta :30.
  • Las tareas únicas programadas para la parte superior o inferior de la hora se ejecutan hasta 90 segundos antes.
El desplazamiento se deriva del ID de la tarea, por lo que la misma tarea siempre obtiene el mismo desplazamiento. Si el tiempo exacto es importante, elija un minuto que no sea :00 o :30, por ejemplo 3 9 * * * en lugar de 0 9 * * *, y el jitter único no se aplicará.

Vencimiento de siete días

Las tareas recurrentes expiran automáticamente 7 días después de su creación. La tarea se ejecuta una última vez, luego se elimina a sí misma. Esto limita cuánto tiempo puede ejecutarse un bucle olvidado. Si necesita que una tarea recurrente dure más, cancele y recree antes de que expire, o utilice Routines o tareas programadas de Desktop para programación duradera.

Referencia de expresión cron

CronCreate acepta expresiones cron estándar de 5 campos: minute hour day-of-month month day-of-week. Todos los campos admiten comodines (*), valores únicos (5), pasos (*/15), rangos (1-5) y listas separadas por comas (1,15,30). El día de la semana usa 0 o 7 para domingo hasta 6 para sábado. La sintaxis extendida como L, W, ? y alias de nombres como MON o JAN no se admiten. Cuando tanto el día del mes como el día de la semana están restringidos, una fecha coincide si cualquiera de los campos coincide. Esto sigue la semántica estándar de vixie-cron.

Deshabilitar tareas programadas

Establezca CLAUDE_CODE_DISABLE_CRON=1 en su entorno para deshabilitar completamente el programador. Las herramientas cron y /loop dejan de estar disponibles, y cualquier tarea ya programada deja de ejecutarse. Consulte Variables de entorno para la lista completa de banderas de deshabilitación.

Limitaciones

La programación con alcance de sesión tiene limitaciones inherentes:
  • Las tareas solo se ejecutan mientras Claude Code está ejecutándose e inactivo. Cerrar la terminal o dejar que la sesión salga detiene su ejecución. Poner la sesión en segundo plano traslada las tareas /loop a una sesión en segundo plano, que sigue ejecutándose sin una terminal.
  • Sin recuperación de disparos perdidos. Si el tiempo programado de una tarea pasa mientras Claude está ocupado en una solicitud de larga duración, se ejecuta una vez cuando Claude queda inactivo, no una vez por intervalo perdido.
  • Iniciar una conversación nueva borra todas las tareas con alcance de sesión. Cuando reanuda una sesión con claude --resume o claude --continue, Claude Code restaura las tareas programadas con CronCreate, excepto las tareas recurrentes que han expirado y las tareas únicas cuyo tiempo programado ha pasado. Un /loop autorrítmico no se restaura, así que ejecute /loop nuevamente para reiniciarlo. Las tareas de Bash de fondo y monitor nunca se restauran al reanudar.
  • Con obtención de banderas de características desactivada, Claude Code almacena una tarea que solicitó mantener entre sesiones en el archivo .claude/scheduled_tasks.json del proyecto. Cuando el directorio .claude o ese archivo es un enlace simbólico, Claude Code devuelve un error en lugar de programar la tarea. Una tarea guardada se ejecuta solo en la carpeta del proyecto donde la creó. Si copia el archivo en otra carpeta, como un nuevo worktree, las sesiones allí enumeran las tareas copiadas pero no las ejecutan, así que cree la tarea nuevamente en esa carpeta.
Para la automatización impulsada por cron que necesita ejecutarse sin supervisión: