Runs Codex tasks repeatedly on a set interval via terminal.
Install
mkdir -p .claude/skills/loop-mineru98 && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/18787" && unzip -o skill.zip -d .claude/skills/loop-mineru98 && rm skill.zipInstalls to .claude/skills/loop-mineru98
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Run a Codex prompt repeatedly on a fixed interval. Use for "/loop", "run this every N minutes/hours", "poll X every 5 minutes", "repeat this Codex prompt", or any recurring interval-based Codex job. This is the interval-repeat companion to the separate `schedule` skill (cron / specific-time). For a durable, always-on alternative that survives reboots and terminal exits, prefer Codex app Automations; this local CLI is a terminal fallback that only fires while its daemon process is running.Key capabilities
- →Add a loop task with a specified interval and prompt
- →List all active loop tasks
- →Cancel individual or all active loop tasks
- →Start the daemon process to run due tasks
- →Verify setup with a doctor command
- →Record task run evidence
How it works
The skill registers and fires `codex exec` jobs on a fixed interval using a Node ESM runner, managing task state and providing subcommands for adding, listing, canceling, and running tasks via a daemon process.
Inputs & outputs
When to use loop
- →Poll API for status
- →Run recurring CI checks
- →Schedule repeated terminal jobs
About this skill
Overview
loop.mjs is a dependency-free Node ESM runner that registers and fires codex exec jobs on a fixed interval. It manages task state in .codex/loop/ and exposes 8 subcommands: parse-loop, add, list, cancel, status, run-due, daemon, doctor.
It supports only the interval-repeat (loop) task kind. For cron schedules or a one-shot run at a specific time, use the separate schedule skill instead.
Durable Always-On: Use Automations First
Codex app Automations is the official, always-on surface for durable recurring runs — recommend it first. It persists across reboots and terminal exits without a running process.
The bundled local CLI is a terminal fallback only: nothing fires unless the daemon process is running. It is NOT an OS service and does not survive terminal exits.
Local Fallback Usage
All state-mutating commands require --state-root <dir>. Conventional path: --state-root .codex/loop.
Add a loop task
User says /loop 1m check CI status:
node scripts/loop.mjs add \
--state-root .codex/loop \
--interval 1m \
--prompt "check CI status" \
--cwd "$PWD"
addis loop-only:--kindis optional and, if given, must beloop.parse-loopvalidates a/loop [interval] <prompt>spec and returns JSON without writing state.- Default interval when omitted: 10m. Units:
s(rounds up to nearest minute, min 1m),m,h,d. - Optional
--next-run-at <ISO>overrides the first computed run time (testing/backfill).
Manage tasks
# list all tasks (append --json for machine-readable output)
node scripts/loop.mjs list --state-root .codex/loop
# cancel one task
node scripts/loop.mjs cancel <id> --state-root .codex/loop
# cancel all active tasks
node scripts/loop.mjs cancel --all --state-root .codex/loop
# show task counts and lock state (append --json for JSON output)
node scripts/loop.mjs status --state-root .codex/loop
Start the runner
node scripts/loop.mjs daemon \
--state-root .codex/loop \
[--poll-ms 5000] # check interval in ms, default 5000
[--once] # run one poll pass then exit
[--max-runs N] # exit after N total task fires
[--codex-bin /path/to/codex]
The daemon holds a single-runner lock (scheduled_tasks.lock/). A second daemon against the same state root fails while the first is alive and reclaims only a provably stale lock (dead PID).
run-due does one on-demand due-check pass without occupying the daemon lock continuously — useful for CI triggers or manual testing. It accepts the same --codex-bin and repeatable --codex-arg flags.
Verify setup
node scripts/loop.mjs doctor --state-root .codex/loop
Checks state-root writeability, task count, lock state, and codex binary reachability. It is read-only and never creates the state root.
Daemon Requirement
Nothing fires unless daemon (or run-due) is running. Keep the daemon in a persistent terminal or tmux session. It exits cleanly on SIGINT/SIGTERM, releasing the lock.
After each run, a loop task's next run is recomputed as finishedAt + intervalMs, so the interval is measured from run completion and never drifts.
Run Evidence
Each task run is recorded under .codex/loop/runs/<taskId>/ with timestamped .jsonl (full codex stdout), .last.txt (last Codex message), and optionally .stderr.txt files.
Safety Defaults
--codex-argpass-through uses a default-deny allowlist: only a small, vetted set of flags that cannot weaken the sandbox, approval policy, or config is permitted — currently--model/-m(with its value). Every other flag is rejected with aValidationErrornaming the arg. This explicitly rejects sandbox/approval/config overrides such as--sandbox/-s danger-full-access,--config/-c ...,--ask-for-approval/-a never,--full-auto,--profile,--dangerously-bypass-approvals-and-sandbox, and--yolo(in both space- and=-joined forms). Args are additionally constrained to the[-A-Za-z0-9_.,:=/@+]character set.- Allowed pass-through args are inserted before the
-stdin sentinel so codex parses them as flags and still reads the prompt from stdin. - The script never emits approval- or sandbox-bypassing flags to
codex exec. - Does not install OS cron, launchd, or any system service.
Reference
Read references/loop-contract.md for the full state/lock schema, interval grammar specification, and complete per-command contracts.
When not to use it
- →For cron schedules or one-shot runs at a specific time
- →For durable, always-on tasks that survive reboots and terminal exits
- →When needing to bypass sandbox, approval policy, or config with `--codex-arg`
Limitations
- →Nothing fires unless the `daemon` process is running
- →Does not survive terminal exits
- →Does not install OS cron, launchd, or any system service
How it compares
This skill provides a local CLI for interval-based task repetition with explicit daemon management and safety defaults, distinct from OS-level scheduling or always-on automation services.
Compared to similar skills
loop side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| loop (this skill) | 0 | 26d | Review | Intermediate |
| resources | 1 | 1mo | Review | Intermediate |
| swarm-advanced | 7 | 4mo | Review | Advanced |
| replit-deploy-integration | 0 | 10d | Caution | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by Mineru98
View all by Mineru98 →You might also like
resources
windmill-labs
MUST use when managing resources.
swarm-advanced
ruvnet
Advanced swarm orchestration patterns for research, development, testing, and complex distributed workflows
replit-deploy-integration
jeremylongshore
Deploy Replit integrations to Vercel, Fly.io, and Cloud Run platforms. Use when deploying Replit-powered applications to production, configuring platform-specific secrets, or setting up deployment pipelines. Trigger with phrases like "deploy replit", "replit Vercel", "replit production deploy", "replit Cloud Run", "replit Fly.io".
dev
serithemage
Development workflow guide. Covers build, test, lint, format commands, package structure, Git hooks, TDD methodology, and coding conventions. Use when setting up dev environment, running tests, or following project conventions.
armorer
ArmorerLabs
Act as the Armorer agent for end-to-end app setup and operations. Use Armorer commands first and verify before reporting success.
pnpm
valibali
Use when managing Node.js dependencies with pnpm - provides workspace setup, catalogs, CLI commands, overrides, and CI configuration