Skip to content

Projects

Drill 9 · Rehearse a Routine for Free

⚠️ Throwaway repo. Set a limit first. Routines can run unattended overnight — that's the whole point of this drill, and the whole reason it stays a dry…

⚠️ Throwaway repo. Set a limit first. Routines can run unattended overnight — that's the whole point of this drill, and the whole reason it stays a dry run until you've watched it once.

DifficultyTimeConceptsLoop type
Drill (T3)20–30 minRoutines, the creation form, dry-run vs. liveunattended schedule (Routine), dry-run only

The scenario

Routines are the unattended, cloud-run cousin of /loop — they fire on their own schedule whether or not you're at the keyboard, which makes the first one you ever create the highest-stakes button you'll press in this whole course. This drill lets you fill in every field of the creation form, on a real repository, without ever letting the routine's body actually execute against anything live.

What you'll do

Using a real repo you control, fill out a Routine's creation form completely (see A2 in the Routines appendix for every field), but set its prompt to a dry-run instruction: describe, in prose, exactly what it would do this beat — which files it would read, what it would write, what it would skip — without writing anything. Let it fire on its real schedule for at least 3 beats.

# Claude Code — Routine prompt, deliberately a dry run
Describe what this beat WOULD do: which files you'd read, what you'd compute, what
you'd write to <target file>, and why. Do not write anything. Log this description
as one line to loop-run-log.md tagged "dry-run".
# OpenCode — cron-triggered dry run
opencode run "DRY RUN ONLY. Describe the beat's intended reads/writes without
  performing them. Append one 'dry-run' line to loop-run-log.md." # via cron

Done when (provable stop)

  • The creation form is filled in completely — repo, connectors, trigger, prompt — and you can name what every field does, not just what you typed into it.
  • The Routine fired on its own schedule at least 3 times, unattended.
  • Every fired beat produced a dry-run description and zero real writes — verified by git status showing no changes each time.
  • You've read A5 — reading the runs and can point to where each run's evidence lives.

When it goes wrong

SymptomCauseFix
The dry run actually wrote a filePrompt described "don't write" but permissions still allowed itMove the guarantee to the harness (read-only permission grant for this Routine), not just prose
Routine never firedTrigger misconfigured, or daily cap already exhausted by another RoutineCheck A3 (the three triggers) and the account-wide daily cap together
You can't tell if a run happenedNo log line, no visible evidenceA dry run is still a beat — it still owes exactly one log line

Sources: Routines and the creation form come from Scheduled Tasks: The Loop Skill & Cron Tools (S4) and Panaversity's Loop Engineering: A Crash Course (S1), §19. Full attribution: resources/sources.md.