{"slug":"schedule","title":"schedule","summary":"Create, change or cancel a prompt that runs on a schedule, in whatever language the user asks. Use when the user says things like \"every weekday at 8:30\", \"în fiecare zi lucrătoare la 8:30\", \"each morning\", \"remind me at noon\", or wants to reschedule, edit or stop a scheduled tas","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-10-17T09:13:10.70581Z","repo":{"url":"https://github.com/invergent-ai/surogates","stars":28,"forks":1,"license":"AGPL-3.0","updatedAt":"2026-10-16T18:37:14Z"},"bodyHtml":"<hr>\n<h2>name: schedule\ndescription: \"Create, change or cancel a prompt that runs on a schedule, in whatever language the user asks. Use when the user says things like \"every weekday at 8:30\", \"în fiecare zi lucrătoare la 8:30\", \"each morning\", \"remind me at noon\", or wants to reschedule, edit or stop a scheduled task.\"</h2>\n<p>You make the schedule yourself with <code>cron_create</code>, once the user has confirmed it. Never ask the user to type a command or a cron expression. Never look for cron, crontab, systemd timers or any other scheduler in the sandbox or terminal: none is there, and nothing started there outlives this session.</p>\n<p>If <code>cron_create</code> is not among your tools, this session cannot make schedules. If it is itself a scheduled run, its schedule already exists: do this run's work and nothing else. Otherwise tell the user plainly that schedules cannot be made from here.</p>\n<h2>Changing or stopping a schedule</h2>\n<p>Call <code>cron_list</code> to find it — each entry has an <code>id</code>, <code>name</code>, <code>prompt</code>, <code>schedule</code>, <code>timezone</code>, <code>next_run_at</code> and <code>expires_at</code>. There is no in-place edit: make the replacement as below (confirmed like any new one), then <code>cron_delete</code> the old <code>id</code>, and tell the user you replaced it. To stop one, <code>cron_delete</code> it; if it is unclear which one they mean, ask. The user can also see their schedules with <code>/loop list</code> and cancel one with <code>/loop cancel &lt;id&gt;</code>.</p>\n<h2>Creating a new schedule</h2>\n<p>The user may ask in any language. You turn the request into a 5-field cron and an IANA timezone, and you speak to them about it in their language.</p>\n<h3>1. Write the prompt</h3>\n<p>It runs later as a fresh session that cannot see this conversation, so it must be entirely self-contained. Never refer to \"the current conversation\", \"the above\", or anything said only here. Write it in the user's language unless they ask otherwise.</p>\n<p>Include:</p>\n<ul>\n<li>A clear objective (what to accomplish)</li>\n<li>The steps to take</li>\n<li>Any file paths, URLs, repositories, sources or tool names it needs</li>\n<li>The expected output (for example \"exactly five bullets, each with a title and link\")</li>\n<li>Constraints or preferences the user gave</li>\n</ul>\n<p>Write it as an imperative, concise but complete enough to run cold. It cannot itself be a <code>/loop</code> command.</p>\n<h3>2. Translate the schedule</h3>\n<ul>\n<li><strong>Cron</strong>, 5 fields: <code>minute hour day-of-month month day-of-week</code>, day-of-week <code>0</code>–<code>6</code> from Sunday. \"Every weekday at 8:30\" / \"în fiecare zi lucrătoare la 8:30\" is <code>30 8 * * 1-5</code>; \"Mondays and Thursdays at 17:00\" is <code>0 17 * * 1,4</code>; \"the 1st of every month at 09:00\" is <code>0 9 1 * *</code>.</li>\n<li><strong>Timezone</strong>: an IANA name (<code>Europe/Bucharest</code>, <code>America/New_York</code>) or <code>UTC</code>. Use the one the user gave or that memory records; if you don't know it, ask in the confirmation — \"8:30\" almost never means UTC.</li>\n<li>A one-time run (\"remind me at 15:00 today\") is <code>recurring: false</code> with a cron that matches the moment (<code>0 15 14 10 *</code>).</li>\n</ul>\n<h3>3. Preview, confirm, create</h3>\n<ol>\n<li>Call <code>cron_create</code> with <code>cron</code>, <code>timezone</code>, <code>prompt</code>, a short kebab-case <code>name</code> and <code>recurring</code>. Until the user has confirmed in this turn it makes nothing and returns <code>would_create</code>, with the schedule's <code>next_run_at</code> on its own clock (<code>2026-10-14T08:30:00+03:00</code>).</li>\n<li>Ask with <code>ask_user_question</code>, in the user's language: the cadence in plain words, the timezone, the next run from <code>would_create</code>, a one-line summary of the prompt, and that it runs until they cancel it (or once). Offer to confirm or to change something. For example:\n<blockquote>\n<p>Programez asta: de luni până vineri la 08:30, ora României (Europe/Bucharest). Prima rulare: miercuri, 14 octombrie, la 08:30. Ce face: un rezumat în cinci puncte al articolelor noi de pe arXiv despre agenți AI. Rulează până când îl anulezi. Confirmi?</p>\n</blockquote>\n</li>\n<li>If they confirm, call <code>cron_create</code> again with the same arguments and tell them, in their language, that it is set and when it next runs. If they change something, adjust and ask again. If they don't answer or decline, make nothing.</li>\n</ol>\n<p>If it refuses the prompt, tell the user why and rephrase only the part it names.</p>\n<h2>Limits to state plainly</h2>\n<ul>\n<li>Each run's answer appears in this chat, or is posted to the channel the schedule was made in. It reaches email or anywhere else only through a tool this agent has.</li>\n<li>A schedule runs until the user cancels it (or once, when not recurring), however often its cron fires: for something that should stop on its own (\"until the deploy is green\"), say so in the prompt, and the run ends its schedule when that is true.</li>\n<li>Cron cannot say \"the first Monday of the month\" or \"every other week\".</li>\n<li>If the user wants a short polling loop and to set it up themselves, <code>/loop 5m &lt;prompt&gt;</code> runs every 5 minutes and stops by itself after 3 days.</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":4680,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-10-17T09:13:46.91898Z","sha256":"2F15E65C7A434EF370A14959B4BD5628223B2A579771E04653A2F6A05529286E","sizeBytes":2376},"review":null,"source":{"repositoryUrl":"https://github.com/invergent-ai/surogates","path":"skills/productivity/schedule","license":"AGPL-3.0","commit":"f423b85eed3b230f0085ed007adc86e8aa639d02","subtreeSha":"B2D6D0A3C655AA6BA821A8ECE5DFC575589545BF30B4F2523905744DAE0995A1","lastSyncedAt":"2026-10-17T09:13:07.689271Z"},"reviewedAt":"2026-10-17T09:18:43.528795Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/invergent-ai/surogates/tree/master/skills/productivity/schedule"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install invergent-ai-surogates@llmmart"},{"target":"git","command":"git clone https://github.com/invergent-ai/surogates.git"}]}