Shell scheduler
Install the CLI, add a loops.yaml, run it once or leave the watcher open. Any command with an exit code — and it keeps running after the agent closes.
bun add -g github:acoyfellow/loops-yaml Where loops run
A loop is an interval and a thing to do. That works the same whether the “thing” is a shell command on a schedule or a prompt to a coding agent while you work. Everything here ships today — install from the public repository, nothing hosted, no account.
Install the CLI, add a loops.yaml, run it once or leave the watcher open. Any command with an exit code — and it keeps running after the agent closes.
bun add -g github:acoyfellow/loops-yaml Install the Pi package, reload the session, then describe the interval and the condition that ends the loop.
pi install git:github.com/acoyfellow/loops-yaml /loop every 30s check MR !38955; stop when it merges Pi-family CLI, so the same extension loads directly. Install it as a plugin, then use /loop exactly as in Pi.
omp install github:acoyfellow/loops-yaml /loop every 30s check MR !38955; stop when it merges Point OpenCode at the plugin in opencode.json, restart, then describe the interval and the stop condition.
{ "plugin": ["/ABSOLUTE/PATH/TO/loops-yaml/extensions/opencode/index.ts"] } every 30s check MR !38955; stop when it merges Any other agent?
Most agents can already loop themselves — the shell scheduler runs any command, and any agent with a shell can re-prompt on a timer. The native extensions above just make the loop session-aware: idle-only, with a real stop condition, instead of a blunt cron tick.
See how the two modes differ →