算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
choose-loop-wakeup-interval【设计与创意】Select a `delaySeconds` value when scheduling a loop wakeup via the `ScheduleWakeup` tool or the `/loop` slash command. Covers the three-tier cache-aware decision (cache-warm under 5 minutes, cache-miss 5 minutes to 1 hour, idle default 20 to 30 minutes), the 300-second anti-pattern, the [60, 3600] runtime clamp, the minute-boundary rounding quirk, a…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
delaySeconds value when scheduling a loop wakeup via the
ScheduleWakeup tool or the /loop slash command. Covers the three-tier
cache-aware decision (cache-warm under 5 minutes, cache-miss 5 minutes to
1 hour, idle default 20 to 30 minutes), the 300-second anti-pattern, the
[60, 3600] runtime clamp, the minute-boundary rounding quirk, and writing
a telemetry-worthy reason field. Use when designing an autonomous loop,
when a heartbeat cadence is being planned, when polling cadence is being
tuned, or when post-hoc review of loop costs reveals interval mis-sizing.
license: MIT
allowed-tools: ""
metadata:
author: Philipp Thoss
version: "1.0"
domain: general
complexity: intermediate
language: multi
tags: loop, wakeup, cache, scheduling, delay, general
locale: es
source_locale: en
source_commit: 9c546edf
fence_basis_commit: 9c546edf
translator: "Claude + human review"
translation_date: "2026-05-03"Elegir un valor de delaySeconds para ScheduleWakeup que respete el TTL de 5 minutos de la caché de prompt, la granularidad de minuto entero del programador y el clamp en tiempo de ejecución [60, 3600]. La decisión es estructuralmente no trivial: el instinto común "esperar unos 5 minutos" cae en la zona del peor de ambos mundos — pagar el cache miss sin amortizar la espera.
El razonamiento viaja con la descripción de la herramienta ScheduleWakeup en el momento de la llamada, pero para entonces el loop ya está siendo programado. Esta habilidad eleva ese razonamiento al momento de planificación, donde pertenece.
/loop o impulsada por ScheduleWakeup y elegir el delay por tickdelaySecondsDecidir a qué nivel pertenece la espera:
Esperado: Una clasificación clara: vigilancia activa, cache-miss o inactiva.
En caso de fallo: Si la espera no se puede clasificar — si no hay respuesta honesta a "¿qué estoy esperando?" — el loop probablemente no debería existir. Saltar al Paso 5 y considerar no programar un wakeup en absoluto.
Elegir un delaySeconds basado en la clasificación:
| Nivel | Rango | Comportamiento de caché | Usar cuando |
|---|---|---|---|
| Cache-warm | 60 – 270 s | La caché permanece caliente (bajo TTL de 5 minutos) | Vigilancia activa — el siguiente tick necesita re-entrada rápida y barata |
| Cache-miss | 1200 – 3600 s | La caché se enfría; un miss compra una espera larga | Genuinamente inactivo, o el evento esperado no puede ocurrir antes |
| Inactivo por defecto | 1200 – 1800 s (20–30 min) | La caché se enfría | Sin señal específica; verificación periódica con el usuario capaz de interrumpir |
No elegir 300 s. Es el intervalo del peor de ambos: la caché falla, pero la espera es demasiado corta para amortizar el miss. Si te encuentras alcanzando "unos 5 minutos", baja a 270 s (mantén caliente) o comprométete a 1200 s+ (amortiza el miss).
Esperado: Un valor específico de delaySeconds elegido de uno de los tres niveles, no un valor de minuto redondo elegido por hábito.
En caso de fallo: Si la elección sigue cayendo en 300 s, la pregunta subyacente es usualmente "¿debería este loop existir a esta cadencia en absoluto?" — re-examinar el Paso 1.
El programador se dispara en límites de minuto entero. Un delaySeconds de N produce un delay real de N a N + 60 s, dependiendo de en qué segundo del minuto llamas a la herramienta.
Ejemplo trabajado:
Llamar
ScheduleWakeup({delaySeconds: 90})a lasHH:MM:40produce un objetivo deHH:(MM+2):00— es decir, una espera real de 140 s, no 90 s.
Consecuencia: la intención sub-minuto carece de sentido. Tratar el valor que pasas como un piso, no un horario preciso. Si un minuto de skew importa, la cadencia de tu loop es demasiado ajustada para este mecanismo.
Esperado: Has aceptado que la espera real será hasta 60 s más larga que el delaySeconds solicitado. Para ticks cache-warm esto importa — 270 s pueden volverse ~330 s en la práctica, cayendo en territorio cache-miss.
En caso de fallo: Si los valores cerca del techo (p. ej. 265 s al apuntar a cache-warmth) son comunes, rellenar hacia abajo — usar 240 s en lugar de 270 s para preservar la garantía cache-warm incluso bajo el peor caso de skew de límite de minuto.
El runtime hace clamp de delaySeconds a [60, 3600] — los valores fuera de ese rango se ajustan silenciosamente. La telemetría distingue lo que el modelo pidió (chosen_delay_seconds) de lo que realmente se programó (clamped_delay_seconds) y establece was_clamped: true en cualquier discrepancia.
Planificar contra el valor con clamp, no el solicitado:
Esperado: Tu valor elegido cae dentro de [60, 3600], o has aceptado deliberadamente el comportamiento de clamp.
En caso de fallo: Si la necesidad es genuinamente multi-hora (p. ej. "despiértame en 4 horas"), encadenar wakeups — programar un tick de 3600 s que él mismo reprograma — o usar un loop basado en cron (CronCreate con kind: "loop") en su lugar.
reason EspecíficoEl campo reason es telemetría, estado visible para el usuario y razonamiento de calidez de caché de prompt en una línea. Está truncado a 200 caracteres. Hacerlo específico.
checking long bun build, polling for EC2 instance running-state, idle heartbeat — watching the feedwaiting, loop, next tick, continuingEl lector de este campo es un usuario tratando de entender qué está haciendo el loop sin tener que predecir tu cadencia por adelantado. Escribir para ellos.
Esperado: Una razón concreta de una frase que tendría sentido para un usuario que mire el estado de pasada.
En caso de fallo: Si no se puede dar una razón específica, revisitar si el loop debería existir (Paso 1 y Paso 6).
No todo impulso de "regresar más tarde" amerita un wakeup programado. NO programar un tick cuando:
Esperado: Una elección consciente entre programar un wakeup y no loopear en absoluto. "Porque podría" no es una razón para loopear.
En caso de fallo: Si sigues programando wakeups que el usuario interrumpe antes de dispararse, el patrón es incorrecto — no el intervalo.
delaySeconds elegido cae en uno de los tres rangos de nivel (60–270, 1200–3600, o 1200–1800 para inactivo)[60, 3600] o el comportamiento con clamp se acepta explícitamentereason es concreto y bajo 200 caracteresreason opacos: "waiting" no le dice nada al usuario y hace la telemetría menos útil. Escribir la razón como si el usuario la leyera en una línea de estado.Se inició un bun build; el agente quiere revisar rápidamente para que la caché siga caliente cuando lleguen los resultados.
checking long bun buildUn agente autónomo vigila un feed de bajo volumen una vez por hora para cualquier cosa digna de actuar.
idle heartbeat — watching the feedUn agente quiere "esperar 5 minutos" mientras una API remota reintenta. La solicitud es 300 s.
manage-token-budget — techos de costo para loops de agente de larga vida; el dimensionamiento cache-aware es una palancadu-dum — patrón de separación observar/actuar; esta habilidad dimensiona el intervalo del reloj observe cuando el loop es sin cronread-continue-here — handoff cross-sesión; esta habilidad cubre wakeups dentro de la sesiónwrite-continue-here — el complemento de read-continue-here