Ralph loop
Carinya Parc Agent Skills
npx -y skills add carinyaparc/skills --skill ralph-loopAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use to start, inspect, or stop a Ralph loop: an autonomous self-referential loop where a stop hook re-feeds the same prompt every turn until a completion promise is emitted or a safety rail fires (ralph-loop start, ralph-loop status, ralph-loop cancel). Works for any repeating multi-step job via presets, including full epic delivery through implement, review, validate, and merge request. Do NOT use to seed or configure a loop (ralph-loop-setup), implement a single task once (implement), review a diff (code-review), or sign off an epic (validate) — the loop orchestrates those skills.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.6 KB, as published. Nobody here has run it
Ralph loop
Run an autonomous loop. The plugin's stop hook re-feeds the loop prompt after every turn, the agent executes exactly one step per iteration, and the loop ends only when the completion promise is genuinely true or a safety rail fires.
Seeding is a separate skill: ralph-loop-setup. This skill assumes a seeded loop, except for a quick inline ad-hoc start.
How the loop works
/ralph-loop-setupresolves configuration and runsscripts/seed-ralph-loop.sh, which writes{base}/active.mdplus a run directory.{base}is.claude/loopor.cursor/loop, resolved from the agent, with no pointer file./ralph-loop startverifies the seeded files and executes iteration 1.- The plugin hooks take over. After every turn the stop hook re-feeds the body
of
active.md; the agent reads its own state and runs the next step. - The loop ends when the agent emits
<promise>TEXT</promise>matching the configured promise,max_iterationsis reached, the 200-iteration hard ceiling is hit, or the stall guard sees no state change for 3 consecutive iterations.
Safety rails
| Rail | Default | Enforced by |
|---|---|---|
| max_iterations | 50 | stop hook, from frontmatter |
| hard ceiling | 200 | stop hook, applies even when unlimited |
| stall guard | 3 unchanged iterations | stop hook, watches the state file |
| session isolation | owning session only | stop hook, from session_id |
| fix budgets | per preset | loop state counters |
Exhausting a budget never fails the loop: the step advances and the unresolved
findings are recorded under ## Notes so a human sees them.
References
- references/loop-protocol.md — the step machine, budgets, guardrails, and why one step per iteration
- references/preset-authoring.md — how to write a preset, with a worked non-engineering example
- references/prompt-authoring.md — completion promises, iteration budgets, escape hatches
Assets
- assets/loop.core.template.md — generic loop body, preset-agnostic
- assets/loop-state.core.template.md — per-run mutable state
- assets/context.core.template.md — per-run static context
- assets/presets/ —
engineering-delivery,ad-hoc,custom
Router
Mode is start, status, or cancel. If no mode is given: a seeded
{base}/active.md implies start; otherwise say the loop needs seeding and
point at /ralph-loop-setup.
start — prompts/start.prompt.md. Verify the seeded loop, confirm the branch where the preset needs one, execute iteration
- With
--prompt "..."and no seeded loop, seed an ad-hoc loop first.
status — prompts/status.prompt.md. Report iteration, current step, budgets used, completed items, and artefacts. Read-only.
cancel — prompts/cancel.prompt.md. Stop the loop and archive the run directory as a record.
Ground rules
- Only output
<promise>TEXT</promise>when the statement is completely and genuinely true. Never to escape the loop, never because progress is slow. - Exactly ONE step per iteration. State lives in files, not in memory.
- Every skill step runs in a fresh sub-agent. Context isolation per step is what keeps a long run sharp.
- Where a preset commits, verify the branch with
git branch --show-currentfirst. NoCo-authored-bytrailers, no emojis in commits. - If the external
ralph-loop-pluginis installed, disable it. This plugin ships its own hooks and running both double-fires the stop hook.