⏰Tareas programadas (Crons)
La página Crons ejecuta cosas según un horario: un comando de shell o un prompt de Harness en un tema. Cada ejecución queda registrada (estado, duración, salida) y se puede notificar por Telegram.
Crear una tarea
Haz clic en Nueva tarea y rellena:
| Campo | Significado |
|---|---|
| Nombre | etiqueta corta |
| Programación | expresión cron; el editor la muestra en palabras y lista las próximas ejecuciones |
| Tipo | Shell (un comando ejecutado con bash) o Claude (un prompt enviado a una sesión en un tema) |
| Comando | shell: p. ej. /root/maxxing/projects/acme/scripts/report.sh |
| Tema, prompt, modelo | Claude: dónde se ejecuta la sesión, qué hacer, qué modelo usar |
| Reutilizar sesión | Claude: mantiene una misma sesión entre ejecuciones (acumula contexto) en lugar de una sesión nueva cada vez |
| Notificar | Informe por Telegram: nunca, en caso de fallo (por defecto), siempre |
| Tiempo límite | duración máxima (por defecto 1 hora) |
Ejecutar ahora inicia una tarea de inmediato. El historial muestra las últimas ejecuciones con el final de su salida; en las tareas de Claude, un enlace abre la sesión.
Sintaxis de la programación
Cinco campos: minute hour day-of-month month day-of-week.
| Expresión | Se ejecuta |
|---|---|
0 7 * * * |
todos los días a las 07:00 |
*/15 * * * * |
cada 15 minutos |
30 8 * * 1-5 |
de lunes a viernes a las 08:30 |
0 9 1 * * |
el día 1 de cada mes a las 09:00 |
0 */6 * * * |
cada 6 horas |
@daily, @hourly, @weekly, @monthly, @reboot |
atajos |
Zona horaria
El demonio cron lanza las tareas en la zona horaria del sistema del servidor, mientras que la interfaz (vista previa de la programación, próximas ejecuciones, historial) usa la zona horaria de Ajustes -> General. Ambas deben ser la misma; de lo contrario, una tarea que aparece "a las 07:00" se ejecuta a otra hora. En un servidor nuevo, la zona que eliges en la configuración inicial (o en Ajustes -> General) pasa a ser también la zona del sistema; maxxing doctor avisa si difieren.
En un servidor que ya está en uso (otras tareas programadas, otros servicios), el instalador conserva el reloj del servidor (system_clock = keep en la configuración): Harness Maxxing escribe entonces la línea de crontab de cada tarea para que se lance cada hora en sus minutos, y maxxing cron run <id> --if-due comprueba la programación en tu zona antes de ejecutar. Así, las tareas se ejecutan a las horas que ves, incluido el cambio de horario de verano, y los demás programas conservan su reloj. Cambia de modo con maxxing init --system-clock keep|follow.
Para cambiar la zona del sistema a mano (modo follow):
timedatectl set-timezone Europe/Paris && systemctl restart cron
maxxing init --timezone Europe/Paris && systemctl restart claude-maxxing
Tareas integradas
- Compactación de memoria – a diario a las 05:00, tarea de Claude que usa la skill
memory-compaction(se crea durante la instalación y se activa cuando terminas la configuración inicial con Claude conectado, así nunca falla antes de que Claude esté conectado; si te saltaste ese paso, actívala en la página Crons; puedes editarla, desactivarla o eliminarla). - Copia de seguridad de la memoria – se crea cuando configuras la Copia de seguridad (por defecto a las 04:40).
- Buscar actualizaciones – los lunes a las 09:00, tarea de shell
maxxing update --check --notify: cuando hay una versión nueva, un mensaje de Telegram te dice que abras el temasystem/harness(system/updateen los servidores instalados antes de 2.0.0a33) y digas "update". Nunca se actualiza por sí sola. En un servidor sin remoto git ni licencia (una copia local) se crea desactivada (no hay nada que comprobar); entoncesmaxxing update --checkresponde "updates unavailable (no git remote)". - Tareas de la mañana (desactivada) – a diario a las 08:00, tarea de Claude en
general/inbox(system/tasksantes de 2.0.0a33): tareas atrasadas y de hoy, enviadas por Telegram. Actívala en la página Crons. - Recordatorio de renovación – se crea cuando pides recordatorios de suscripciones (los lunes a las 09:30, en el tema que guarda
accounts.md); los servidores instalados antes de 2.0.0a33 la tienen desactivada ensystem/accounts. - Los Proyectos iniciales añaden sus propias tareas, creadas desactivadas.
Las tareas integradas se crean una sola vez, durante la instalación (o con la actualización que las introdujo); una tarea que eliminas nunca se vuelve a crear. Con la notificación en "siempre", el informe incluye la salida de la tarea (la respuesta de una tarea de Claude), de modo que un recordatorio llega como un mensaje legible.
Cómo funciona
Cada tarea activada se convierte en una línea del crontab de root, dentro de un bloque que gestiona Harness Maxxing:
# >>> claude-maxxing (managed) >>>
0 5 * * * MAXXING_CRON_DETACH=1 /usr/local/bin/maxxing cron run c_3fa91c >/dev/null 2>&1
# <<< claude-maxxing <<<
Las líneas fuera del bloque son tuyas y nunca se tocan; se muestran en solo lectura como tareas "externas". Si la línea de cierre del bloque se borra a mano, solo las líneas maxxing cron run se consideran gestionadas: tus propias líneas posteriores se conservan.
Desde un terminal: maxxing cron list, maxxing cron run <id> (la ejecuta en tu terminal y espera), maxxing cron sync (reescribe el bloque), maxxing cron deleted (las tareas eliminadas que se conservan) y maxxing cron restore <id> (recupera una). Dos ejecuciones de la misma tarea nunca se solapan.
Memoria y límites de tiempo
Una ejecución programada empieza exactamente igual que Ejecutar ahora: en su propia unidad de systemd (maxxing-cron-<id>, consulta journalctl -u maxxing-cron-<id>), de modo que una tarea voraz no pueda tumbar todo el servidor por la noche:
- cada tarea puede usar como máximo
unit_memory_maxde la RAM (por defecto 75 %, el mismo límite que una sesión); - todas las tareas que se ejecutan al mismo tiempo comparten un único presupuesto,
jobs_memory_max(por defecto 75 % de la RAM, la unidadmaxxing-jobs.slice). Para cambiarlo, definejobs_memory_maxen/var/lib/claude-maxxing/config.json("3G","50%"o""para ningún límite) y luego ejecutamaxxing init; - al superar su tiempo límite, una tarea de shell recibe una señal de parada y, 5 segundos después, se mata todo lo que haya iniciado, incluso un programa que ignore la señal de parada.
Cuando la tarea termina, los programas que dejó ejecutándose en segundo plano terminan con ella. Para iniciar un programa que debe seguir funcionando (un servidor, un bot), conviértelo en un servicio de systemd en lugar de una tarea cron (pídeselo a Claude). Las instalaciones hechas antes de 2.0.0-alpha.70 conservan el comportamiento anterior: sus tareas programadas se ejecutan en el proceso cron como antes, así que los programas que dejan en segundo plano siguen ejecutándose, sin los límites de memoria anteriores ("cron_keep_background": true en config.json; ponlo en false para obtener las unidades de tarea). Lo mismo ocurre con las protecciones de las sesiones y de las tareas ("unit_hardening": false ahí; true las activa).
En un servidor sin systemd (algunos contenedores), la tarea se ejecuta dentro del proceso cron: el tiempo límite sigue aplicándose, los límites de memoria no.
Los secretos marcados como "expose" en Ajustes -> Claves están disponibles como variables de entorno para las tareas de shell y las sesiones de Claude.
Una tarea de shell se ejecuta con la misma configuración de Claude que tus sesiones (la carpeta de Claude Code de Harness y la cuenta de Claude conectada en Harness), así que un script puede llamar él mismo a claude -p "...", por ejemplo un script que prepara datos, pide un texto a Claude y luego lo publica.
Consejos para las tareas de Claude
Escribe el prompt como una instrucción completa: qué producir, dónde escribirlo, qué skill usar. La tarea no tiene ninguna conversación previa a menos que "Reutilizar sesión" esté activada.