Iterative development loops for Claude Code
npx claudepluginhub Ilm-Alan/claude-devloopIterative development loops for Claude Code - run Claude in a while-true loop with the same prompt until task completion, allowing self-referential improvement through file and git history.
Official prompts.chat marketplace - AI prompts, skills, and tools for Claude Code
Behavioral guidelines to reduce common LLM coding mistakes, derived from Andrej Karpathy's observations
Claude Code plugins for the Slidev presentation framework
An iterative development loop plugin for Claude Code. Evolved from ralph-loop with significant improvements for reliability, multi-session support, and anti-cheat enforcement.
Ralph-loop pioneered the concept of self-referential Claude loops, but had limitations. Loop improves on it with:
-m, -c) alongside long forms/plugin marketplace add Ilm-Alan/claude-loop
/plugin install loop@claude-loop
# Basic loop with iteration limit
/loop:start Build a REST API for todos -m 10
# Loop with completion promise (exits when genuinely true)
/loop:start Fix all type errors -c 'Zero TypeScript errors in build'
# Both options
/loop:start Implement auth -m 20 -c 'Login and logout working with tests'
| Flag | Long form | Description |
|---|---|---|
-m N | --max-iterations N | Stop after N iterations (default: unlimited) |
-c 'text' | --completion-promise 'text' | Exit early when statement is true |
/loop:start <prompt> [options] - Start a loop/loop:stop - Stop the active loop (user-only, not exposed to Claude)Each iteration, Claude must:
Short responses, summaries, or "complete" without changes are explicitly prohibited.
Set a completion promise for goal-oriented loops:
/loop:start Implement user registration -c 'Registration flow complete with validation'
Claude exits by outputting: <promise>Registration flow complete with validation</promise>
Claude is explicitly instructed:
The stop hook reminds Claude each iteration:
Loop iteration 3 | To exit: output <promise>TEXT</promise> (ONLY when statement is TRUE - do not lie to exit!)
Unlike ralph-loop's global state file, loop creates unique state files per session:
.claude/loop-1704067200-12345-9876.local.md
.claude/loop-1704067300-12346-5432.local.md
Each session is isolated via transcript path matching, so multiple Claude instances can run loops in the same directory without conflicts.
This prevents the race conditions and cross-session interference that plague global state approaches.
claude-loop/
├── .claude-plugin/
│ └── marketplace.json # Marketplace manifest
├── README.md # This file
└── loop/ # The plugin
├── .claude-plugin/
│ └── plugin.json # Plugin manifest
├── commands/
│ ├── start.md # /loop:start - comprehensive workflow instructions
│ └── stop.md # /loop:stop - user-initiated stop
├── hooks/
│ ├── hooks.json # Hook configuration (claim + stop)
│ ├── claim-hook.sh # Claims state files on UserPromptSubmit
│ └── stop-hook.sh # Intercepts exit, feeds prompt back
└── scripts/
├── setup-loop.sh # Argument parsing, state file creation
└── stop-loop.sh # Removes state file for current session
---
active: true
iteration: 3
max_iterations: 10
completion_promise: "All tests passing"
transcript_path: "/path/to/session/transcript.jsonl"
term_session_id: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
started_at: "2024-01-01T12:00:00Z"
---
Your task prompt here