Run a prompt or skill in this session on a recurring or variable interval (e.g. /loop 5m /foo).
68%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.cursor/skills-cursor/loop/SKILL.mdRun /loop on a recurring or variable interval. First decide which mechanism applies from the tools you have, then follow only that section below:
cursor-subscriptions-subscribe_timer MCP tool is available (you are a Cloud Agent), use Subscription timer (cloud). A local sleep loop does not work in cloud.Accept /loop [interval] <prompt>.
5m /foo, 30s check status, 2h run report.check deploy every 5m, run tests every 10 minutes.Usage: /loop [interval] <prompt>.Use intervals like 30s, 5m, 2h, 1d. Convert unit words to short units. If the user gives a cron-style phrase ("every weekday at 9am") and the subscription-timer mechanism is in use, pass it as a cron expression instead of a delay.
Use the cursor-subscriptions MCP timer to wake this Cloud Agent on a recurring schedule using cursor-subscriptions-subscribe_timer.
Call cursor-subscriptions-subscribe_timer with:
name: a stable handle, e.g. loop-<purpose> derived from the prompt (loop-check-deploy). The server dedupes by name and silently keeps the old config on a dedupe hit — see "Changing an existing timer" below.prompt: the literal follow-up text the agent should receive on each tick.delaySeconds (a positive integer, fixed interval between fires) or cron (a cron expression).Run the prompt once immediately so the first server tick is not a cold start. Then subscribe and confirm: the interval, that the prompt already ran once, the returned subscriptionId, and that the loop will fire on each tick until stopped.
Each subsequent tick arrives as a normal follow-up prompt. Do not arm anything client-side; the server keeps firing until you unsubscribe or the timer expires.
subscribe_timer does not update an existing timer in place. If a live timer with the same name already exists, the server returns its current subscriptionId with created: false and drops the prompt, cron, and delaySeconds you just passed. To actually change any of those, call cursor-subscriptions-unsubscribe for the current subscriptionId first, then cursor-subscriptions-subscribe_timer with the new values.
The user wants the agent to self-pace. cursor-subscriptions can watch CI checks with cursor-subscriptions-subscribe_github_ci or cursor-subscriptions-subscribe_origin_ci, but it has no event-watcher analog for arbitrary signals such as file changes or log lines. For those signals, the only knob is the time interval.
delaySeconds.cursor-subscriptions-unsubscribe with the current subscriptionId), then cursor-subscriptions-subscribe_timer with the same name and the new delaySeconds. Skipping the unsubscribe is a silent no-op: the server returns the existing subscription unchanged and ignores the new delaySeconds.cursor-subscriptions-list_subscriptions to find the row whose name matches loop-<purpose>.cursor-subscriptions-unsubscribe with that subscriptionId.If several timers match the purpose and you cannot disambiguate, surface the candidates to the user and ask which one to stop.
name per loop so unrelated timers do not collide.sleep loop or any background shell wake — they do not work in cloud.name on a live timer is a silent no-op — the new prompt / cron / delaySeconds are dropped. To change anything about a live timer, unsubscribe first.Use monitored shell output to wake the agent for recurring local work.
while true; do
sleep <seconds>
echo 'AGENT_LOOP_TICK_<purpose> {"prompt":"<prompt>"}'
donenotify_on_output.^AGENT_LOOP_TICK_<purpose>.The user wants the agent to self-pace. Decide what makes the next iteration worth running — a passage of time, or an observable event.
notify_on_output on ^AGENT_LOOP_WAKE_<purpose>. Arm once; skip on later ticks if it's still running.sleep <seconds>
echo 'AGENT_LOOP_WAKE_<purpose> {"prompt":"<prompt>"}'With a watcher armed, this is the fallback heartbeat — lean long so idle ticks aren't pure overhead. Without a watcher, this is the cadence — pick a delay based on when the result is worth checking again.
prompt, then re-arm the next heartbeat (and re-arm the watcher only if it exited). If both an output wake and a completion notification arrive, act on the output and ignore the completion.Wake notifications include an output file path, not a submitted prompt. Put the prompt beside the sentinel, preferably as JSON. On wake, read the latest matching line and act on its prompt. The prompt may vary by tick.
Loop <schedule>: <prompt> (e.g. Loop every 5m: check deploy status).while ($true) { ... Start-Sleep } on Windows). The examples above use bash.saski/arnesto
752f690
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.