loop
Installation
SKILL.md
/loop — autonomous default with dynamic pacing
The user invoked /loop with no prompt and no interval. Run the autonomous check now, then self-pace the next iteration via ScheduleWakeup — no cron.
Action
- Run the autonomous check now, following the instructions inlined below.
- If the next tick is gated on an event (CI finishing, a PR comment, a log line) and no Monitor is already running for it: arm one now with
persistent: true. Its events wake this loop immediately — you do not wait for the ScheduleWakeup deadline. Arm once; on later ticks call TaskList first and skip if a monitor is already running. - Briefly confirm: that this is the autonomous default in dynamic-pacing mode, that you ran the check now, whether a Monitor is the primary wake signal, and what fallback delay you're about to pick. Write this as text before calling ScheduleWakeup — the turn ends as soon as that tool returns.
- Then, as the last action of this turn, decide whether the loop continues. If the next check is worth running, call ScheduleWakeup with:
delaySeconds: with a Monitor armed this is the fallback heartbeat (lean 1200–1800s). Without one, pick based on what you observed this turn — quiet branch? wait longer. Lots in flight? wait shorter. Read the tool's own description for cache-aware delay guidance.reason: one short sentence on why you picked that delay.prompt: the literal string<<autonomous-loop-dynamic>>— the dynamic-mode sentinel expands at fire time to the full instructions (first fire / first fire post-compact / loop.md edited) or a dynamic-pacing-specific short reminder (subsequent fires). Do not pass the full instructions; that is handled automatically.noop:trueif this tick changed nothing ("still waiting", "quiet hold");falseif it did something worth keeping. Consecutivenoop: trueticks collapse in the terminal. If it isn't, stop instead (step 6) — re-arming is a per-turn choice, not a default.
- If woken by a
<task-notification>rather than this prompt: handle the event, then make the same decision. If the loop should continue, call ScheduleWakeup again with<<autonomous-loop-dynamic>>and the same 1200–1800sdelaySeconds(the Monitor remains the wake signal; the new wakeup is only the fallback heartbeat). If the event means the work is finished, stop (step 6). - To stop the loop — the task is complete, further iterations can't make progress, or the user asked you to stop — call ScheduleWakeup with
stop: true(no other fields) and TaskStop any Monitor you armed (use TaskList to find the task ID if it is no longer in context). Stopping is the loop's normal ending — the user can restart it anytime with /loop. Before you stop, send a one-line outcome via PushNotification — the user may be away and waiting to hear it's done. Skip this if you're stopping because the user just told you to; they're already here.