Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Schedule AI agent runs with cron, loops, or external clocks while avoiding unsafe tight autonomous timers.
.claude/skills/sickn33-agent-self-scheduling/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -28% | 0% |
First question: does the agent have a built-in scheduler (Hermes → Camp B), or do you own the clock (everything else → Camp A)?
Universal floor: cron is 1 minute minimum (5-field expr, no seconds) — every camp. For sub-minute you MUST use a while ...; sleep N; done loop, a TS extension, or an event hook. Never put an LLM on a tight timer.
These run once and exit (amnesiac unless resumed). Schedule them externally.
bashclaude -p "PROMPT" --output-format json --allowedTools "Read,Edit,Bash" # Claude Code codex exec --json "PROMPT" # Codex pi run "PROMPT" # Pi
Wrap in a clock:
bash# 1. cron (>= 1 min floor) */10 * * * * cd /path/to/project && pi run "check X and report" >> ~/agent.log 2>&1 # 2. systemd timer (Linux, survives reboot, better logging) — OnUnitActiveSec=10min # 3. dumb loop (sub-minute, or no cron available) while true; do pi run "check X"; sleep 30; done
Gotchas (each breaks unattended runs if ignored):
--allowedTools (Claude) or sandbox/auto-approve flags (Codex), or the run blocks on a prompt.--output-format json / --json) so the wrapper parses results deterministically.codex exec resume --last) or persist state to a file the next run reads.Pi has NO built-in scheduler/loop/heartbeat by design — external clock only (or a TS extension for agent-side timers).
cmux has no timer/watch/cron. Three ways to loop it: orchestrator-driven (send → sleep → read-screen on your own clock), a dumb while-sleep wrapper, or — preferred — event-driven via cmux notify + OSC terminal hooks, which is cheaper and more responsive than polling. read-screen is non-interruptive, safe to poll.
If a loop checks another agent, send the user a one-line status each check: what the agent is doing, on track or not. (Claude Code may prefill a predicted next user message after finishing — that's Claude, not the user.)
Hermes' gateway ticks every 60s and runs due jobs in fresh isolated sessions. State-check first:
bashhermes gateway install # user-level ( --system to survive reboot) hermes cron create "every 1h" "summarize new emails and report" --skill himalaya hermes cron create "0 9 * * *" "post daily standup" # cron expr hermes cron create "30m" "one-shot reminder in 30 min" # one-shot delay
Hermes-unique: zero-token mode (run a script, deliver stdout verbatim — use for watchdogs), chaining (context_from pipes one job's output into the next), self-terminating loops, and loop safety (scheduled sessions cannot create more cron jobs — don't schedule from inside a scheduled job). Each run is a fresh session: the prompt must carry all context.
One fast recurring tick gates many slower per-task checks: the tick reads a task list + per-task last_run timestamps and only acts on tasks that are due. In Hermes use a recurring job (zero-token mode when nothing's due); in Camp A use a while-sleep loop. Define active-hours, and stay silent when nothing is due — no empty noise.
hermes cron list shows the job + sane next_run; trigger a run-now to confirm delivery.davidondrej/skills; verify local paths, tools, credentials, and agent features before acting.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | fail→pass | 13,718 | 13,145 | -4% | 1 | 1 | 0% | 2,579 | 3,262 | +26% | 0 | 0 | — |
case-01 | fail→pass | 14,091 | 14,246 | +1% | 1 | 1 | 0% | 2,954 | 3,440 | +16% | 0 | 0 | — |
case-02 | fail→pass | 8,218 | 4,304 | -48% | 1 | 1 | 0% | 1,467 | 1,979 | +35% | 0 | 0 | — |
case-03 | fail→pass | 16,084 | 14,198 | -12% | 1 | 1 | 0% | 2,733 | 3,580 | +31% | 0 | 0 | — |
case-04 | pass→pass | 10,280 | 5,844 | -43% | 1 | 1 | 0% | 1,751 | 2,175 | +24% | 0 | 0 | — |
case-05 | pass→pass | 10,814 | 6,631 | -39% | 1 | 1 | 0% | 1,898 | 2,168 | +14% | 0 | 0 | — |
case-06 | pass→pass | 11,037 | 4,193 | -62% | 1 | 1 | 0% | 1,758 | 1,734 | -1% | 0 | 0 | — |
case-07 | pass→pass | 9,170 | 4,048 | -56% | 1 | 1 | 0% | 1,331 | 1,675 | +26% | 0 | 0 | — |
case-08 | fail→pass | 13,775 | 2,694 | -80% | 1 | 1 | 0% | 2,201 | 1,585 | -28% | 0 | 0 | — |
case-09 | fail→pass | 13,022 | 5,086 | -61% | 1 | 1 | 0% | 2,229 | 2,060 | -8% | 0 | 0 | — |
case-10 | pass→pass | 15,897 | 10,824 | -32% | 1 | 1 | 0% | 2,615 | 2,774 | +6% | 0 | 0 | — |
case-12 | fail→pass | 18,283 | 9,330 | -49% | 1 | 1 | 0% | 2,724 | 2,639 | -3% | 0 | 0 | — |
case-13 | pass→pass | 7,710 | 4,551 | -41% | 1 | 1 | 0% | 1,559 | 1,801 | +16% | 0 | 0 | — |
case-14 | fail→pass | 16,167 | 9,910 | -39% | 1 | 1 | 0% | 2,447 | 2,690 | +10% | 0 | 0 | — |
case-15 | fail→pass | 9,930 | 5,062 | -49% | 1 | 1 | 0% | 1,675 | 1,881 | +12% | 0 | 0 | — |
case-16 | pass→pass | 12,751 | 9,763 | -23% | 1 | 1 | 0% | 2,396 | 2,683 | +12% | 0 | 0 | — |
case-17 | pass→pass | 12,555 | 5,159 | -59% | 1 | 1 | 0% | 2,053 | 1,919 | -7% | 0 | 0 | — |
case-18 | fail→pass | 11,699 | 2,484 | -79% | 1 | 1 | 0% | 1,931 | 1,479 | -23% | 0 | 0 | — |
case-19 | fail→pass | 12,992 | 5,337 | -59% | 1 | 1 | 0% | 2,312 | 1,979 | -14% | 0 | 0 | — |
case-20 | pass→pass | 7,799 | 3,524 | -55% | 1 | 1 | 0% | 1,407 | 1,745 | +24% | 0 | 0 | — |
case-21 | pass→pass | 9,496 | 6,301 | -34% | 1 | 1 | 0% | 1,914 | 2,370 | +24% | 0 | 0 | — |
case-22 | pass→pass | 9,976 | 7,222 | -28% | 1 | 1 | 0% | 2,033 | 2,586 | +27% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +50 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.