skills/loop/SKILL.md
Schedule recurring Codex prompts as fresh background runs using user-scope scheduler backends. Use when the user wants cron-like repeated checks, reminders, status polling, or periodic command execution outside the active TUI session. Do not use this for same-session continuation.
npx skillsauth add karlorz/agent-skills loopInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill for a separate scheduler lane. Each execution starts a fresh
codex exec run from an OS scheduler. It does not re-enter the currently open
interactive Codex TUI session.
It is not a same-session continuation tool, and it should never install or modify Stop hooks.
If the user asks for "Claude Code /loop but in the same live session", be
explicit: Codex does not expose that primitive here. Do not pretend this skill
provides same-session scheduled-task behavior.
Use $loop or /loop when the user wants:
check the deploy every 10m/standup or /babysit-prsDo not use this skill when the user wants:
Those cases are not handled by this skill.
Install the skill bundle into ~/.codex/skills/loop with:
bash scripts/install-user-scope.sh
Optional flags:
--codex-home /absolute/path/to/.codex--mode copy|symlinkThis installs the skill bundle only. It does not register any scheduled jobs and does not touch Stop hooks.
The implementation is now user-scope and backend-aware:
~/.codex/loop-scheduler/~/.codex/loop-scheduler/jobs.json~/.codex/loop-scheduler/launchers/~/.codex/loop-scheduler/logs/LOOP_COMMAND_TEMPLATE for other agent CLIslaunchdcronschtasks--dry-run and LOOP_* env overridestest-parse-request.sh, test-scheduler.sh,
test-install-user-scope.shShorthand schedule mode:
$loop 5m check the deploy
$loop /standup 1
$loop check the deploy every 20m
/loop 5m check the deploy
These examples create scheduled jobs outside the current interactive session. They do not keep the same TUI conversation alive.
Management mode:
$loop list
$loop remove loop-1742562000-a1b2c3
$loop run loop-1742562000-a1b2c3
$loop logs loop-1742562000-a1b2c3
$loop status
Parser helper:
python3 scripts/parse-request.py --request "RAW REQUEST" --pretty
python3 scripts/parse-request.py --request "RAW REQUEST"
actionintervalpromptjob_idrun_nowdry_runaction:
add -> schedule-add.shlist -> schedule-list.shremove -> schedule-remove.shrun -> schedule-run.shlogs -> schedule-logs.shstatus -> schedule-status.shadd, trust the parser output instead of re-deriving the interval by hand.
The parser currently supports:
5m /babysit-prsevery ... clauses such as check the deploy every 20mevery 5 minutes/loop and $loop prefixes10mlist, status, remove <job-id>, run <job-id>, and logs <job-id>dry-run and do not run now--dry-run when validating or when working in a temp environment.
It previews the generated job metadata without mutating scheduler state.Add a recurring job:
bash scripts/schedule-add.sh \
--workspace "/absolute/path/to/workspace" \
--interval "10m" \
--prompt "check the deploy"
Recommended parse-and-add flow:
PARSED="$(python3 scripts/parse-request.py --request "check the deploy every 20m")"
INTERVAL="$(jq -r '.interval' <<<"$PARSED")"
PROMPT="$(jq -r '.prompt' <<<"$PARSED")"
RUN_NOW="$(jq -r '.run_now' <<<"$PARSED")"
DRY_RUN="$(jq -r '.dry_run' <<<"$PARSED")"
CMD=(bash scripts/schedule-add.sh --workspace "/absolute/path/to/workspace" --interval "$INTERVAL" --prompt "$PROMPT")
if [[ "$RUN_NOW" == "false" ]]; then
CMD+=(--no-run-now)
fi
if [[ "$DRY_RUN" == "true" ]]; then
CMD+=(--dry-run)
fi
"${CMD[@]}"
Management:
bash scripts/schedule-list.sh
bash scripts/schedule-remove.sh --job-id "loop-..."
bash scripts/schedule-run.sh --job-id "loop-..."
bash scripts/schedule-logs.sh --job-id "loop-..."
bash scripts/schedule-status.sh
The scripts support these overrides for testing and isolation:
LOOP_STATE_DIRLOOP_LOG_DIRLOOP_LAUNCHERS_DIRLOOP_PLIST_DIRLOOP_JOBS_FILELOOP_BACKENDLOOP_COMMAND_TEMPLATELOOP_AGENT_BINLOOP_AGENT_EXEC_ARGSLOOP_CODEX_BINLOOP_CODEX_EXEC_ARGSLOOP_DISPATCH_INTERVAL_SECONDSLOOP_LOCK_TIMEOUT_SECONDSLOOP_LOCK_STALE_SECONDSThese are especially useful for dry-run tests in a temp directory.
$loop is a scheduler surface, not a Stop-hook continuation surface.$loop$loop is not
equivalent to Claude's session-scoped scheduled tasksloop must stay separate from that
channel.jobs.json.parse-request.py first and inspect the JSON before scheduling anything live.$loop separate from repo-local autopilot and other Stop-hook designs.development
Review and simplify recently changed code for reuse, clarity, and efficiency while preserving behavior. Use when the user asks to simplify, refine, polish, clean up, or make code clearer, or after finishing a logical chunk of implementation that should be tightened before commit.
tools
Use this skill when the user asks to open a browser, browse a website, scrape a page, automate Chrome, take a screenshot, fill out a form, click a button, or otherwise interact with a website. Includes a browser-worker agent (model: sonnet) for mechanical Chrome lifecycle and interaction tasks.
development
Host-level backup and restore with profile system (presets + custom YAML profiles), model-aware agents (sonnet worker for mechanical tasks), post-discovery research, and skillwiki infrastructure capture. Uses rsync with partial-dir for resumable WAN transfers. Use when backing up or restoring Caddy reverse-proxy domains, databases (postgres, mysql, redis, mongodb, sqlite), systemd services, full SSH identity/config, Tailscale state/config, and Hermes agent state on remote Linux hosts.
tools
Hermes Agent CLI commands reference. Use when the user asks about hermes-agent CLI usage, commands, flags, or subcommands. Covers the full hermes terminal command surface.