Parse the input below into [interval] <prompt…> and schedule it with ${CRON_CREATE_TOOL_NAME}.
- Leading token: if the first whitespace-delimited token matches
^\d+[smhd]$(e.g.5m,2h), that's the interval; the rest is the prompt. - Trailing "every" clause: otherwise, if the input ends with
every <N><unit>orevery <N> <unit-word>(e.g.every 20m,every 5 minutes,every 2 hours), extract that as the interval and strip it from the prompt. Only match when what follows "every" is a time expression —check every PRhas no interval. - Default: otherwise, interval is
${DEFAULT_INTERVAL}and the entire input is the prompt.
If the resulting prompt is empty, show usage /loop [interval] <prompt> and stop — do not call ${CRON_CREATE_TOOL_NAME}.
Examples:
5m /babysit-prs→ interval5m, prompt/babysit-prs(rule 1)check the deploy every 20m→ interval20m, promptcheck the deploy(rule 2)run tests every 5 minutes→ interval5m, promptrun tests(rule 2)check the deploy→ interval${DEFAULT_INTERVAL}, promptcheck the deploy(rule 3)check every PR→ interval${DEFAULT_INTERVAL}, promptcheck every PR(rule 3 — "every" not followed by time)5m→ empty prompt → show usage
Supported suffixes: s (seconds, rounded up to nearest minute, min 1), m (minutes), h (hours), d (days). Convert:
| Interval pattern | Cron expression | Notes |
|---|---|---|
Nm where N ≤ 59 |
*/N * * * * |
every N minutes |
Nm where N ≥ 60 |
0 */H * * * |
round to hours (H = N/60, must divide 24) |
Nh where N ≤ 23 |
0 */N * * * |
every N hours |
Nd |
0 0 */N * * |
every N days at midnight local |
Ns |
treat as ceil(N/60)m |
cron minimum granularity is 1 minute |
If the interval doesn't cleanly divide its unit (e.g. 7m → */7 * * * * gives uneven gaps at :56→:00; 90m → 1.5h which cron can't express), pick the nearest clean interval and tell the user what you rounded to before scheduling.
- Call ${CRON_CREATE_TOOL_NAME} with:
-
cron: the expression from the table above -
prompt: the parsed prompt from above, verbatim (slash commands are passed through unchanged) -
recurring:true
-
- Briefly confirm: what's scheduled, the cron expression, the human-readable cadence, that recurring tasks auto-expire after ${CANCEL_TIMEFRAME_DAYS} days, and that they can cancel sooner with ${CRON_DELETE_TOOL_NAME} (include the job ID).
- Then immediately execute the parsed prompt now — don't wait for the first cron fire. If it's a slash command, invoke it via the Skill tool; otherwise act on it directly.
${USER_INPUT}