Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Scaffold a well-designed agent loop with best-practice coaching and a cross-model review council. Use when the user wants to design, build, or set up an agent loop, iterative agent workflow, self-review loop, LLM-as-judge loop, multi-model council, reviewer/judge gate, or /goal-style looping process. Start from a named pattern template (security-scan, code-review, bug-hunt, docs-sync, research-synthesis) or from a blank interview. Guide goal refinement, typed verification criteria, reviewer and
.claude/skills/ksimback-looper/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 93% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 164% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 83% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 18% | 0% |
Use Looper as a loop design coach and scaffolder. During design, interview, critique, validate, and write files. After emission, offer to run the loop in the current session using RUN_IN_SESSION.md; keep run-loop.py as the advanced external runner.
--template <name> from the/looper arguments. If no target is given, use ./looper-output. If the target contains an existing loop.yaml, treat the task as an edit/resume instead of a fresh scaffold. If a template was requested, follow Template Mode below instead of the blank-slate interview in step 3.
references/goal-rubric.md.references/verification-rubric.md.references/council-rubric.md.references/control-rubric.md.references/model-detection.md.gates/control, confirmation flow preview, emit/run option. In the control stage, cover execution boundary, isolation, no-progress signals, state, and run logging.
vague warnings. Push weak goals toward outcome, scope, context, and done state. Push weak verification toward programmatic checks first, then judge rubrics, then human signoff.
returns a structured verdict. revise_until_clean must name a judge member or human as verdict_source.
max_iterations, a revision cap oneach gate, a no-progress stop, and either a budget cap or an explicit human stop point.
leave the user's machine, which CLI receives it, which redaction globs apply, and that both execution paths require first-send consent.
before final emission. Optimize for Claude Code CLI readability.
loop.yamlloop.resolved.jsonLOOP.mdRUN_IN_SESSION.mdrun-loop.pyloop-workspace/README.mdloop.yaml, resolve the helper Python (see Helper Pythonbelow) and run: "$LOOPER_PYTHON" ${CLAUDE_SKILL_DIR}/scripts/looper.py compile <target>/loop.yaml --out <target>/loop.resolved.json --render <target>/LOOP.md --session-prompt <target>/RUN_IN_SESSION.md Then run "$LOOPER_PYTHON" ${CLAUDE_SKILL_DIR}/scripts/looper.py lint <target>/loop.yaml and relay the findings: fix any error[...] before continuing (the spec would not behave as written), and surface warning[...] lines to the user as design coaching they may accept or address.
follow RUN_IN_SESSION.md directly as the active task. If no, explain that the same file is the easy restart path and run-loop.py is available for advanced external execution.
The pattern library lives at ${CLAUDE_SKILL_DIR}/templates/loops/ — one directory per template containing a complete, compilable loop.yaml (with {{PLACEHOLDER}} tokens marking project-specific slots), a README.md (use-when, placeholder table, customization notes), and optionally scripts/ with helper checkers. The catalog index is templates/loops/README.md.
A template is a pre-answered interview, not a bypass of design review:
loop.yaml, the edit/resumerule in step 1 wins: do not overwrite it with a template. Say the directory already has a loop and ask the user to pick an empty target or confirm they want it replaced before continuing.
--template has no name, an unknown name, or the user asks what isavailable, show the catalog table (template + use-when) and let them pick.
loop.yaml and README.md. Use the template as theseed instead of a blank spec.
ask for each {{PLACEHOLDER}} slot named in the template README, run the host-model stage against detected CLIs (detect-models) and swap host / council invocations to what is actually installed and authed, then confirm target and workspace paths.
pre-filled stage against its rubric (step 4), the structural rules (steps 5–8) including the cross-vendor egress statement, the ASCII flow preview, confirmation, emission, and compile.
{{ token remains in loop.yaml. The compilerprints looper: warning: unresolved template placeholders remain ... for this case — treat that warning as a blocker, not advice.
scripts/ directory (when present)into <target>/scripts/ alongside the standard emitted files, before running compile.
invocations.
loop.yaml, loop.resolved.json, or model registries.
.env, .env.*, secrets/**, and **/*.key.loop.yaml human-readable and commented where useful. The emittedrunner reads only loop.resolved.json.
RUN_IN_SESSION.md as the default/easy execution handoff. It is meantfor the current LLM session or a future pasted prompt.
templates/run-loop.py exactly unless the user explicitly asks to editthe external runner contract.
The installer creates a private venv inside the skill directory. Its Python lives at .venv/bin/python on macOS/Linux and .venv/Scripts/python.exe on Windows. Shell state does not persist between commands, so prefix every helper invocation below with this resolution (works in POSIX shells and Git Bash on Windows):
bashLOOPER_PYTHON="${CLAUDE_SKILL_DIR}/.venv/bin/python"; [ -x "$LOOPER_PYTHON" ] || LOOPER_PYTHON="${CLAUDE_SKILL_DIR}/.venv/Scripts/python.exe"; [ -x "$LOOPER_PYTHON" ] || { LOOPER_PYTHON=python3; "$LOOPER_PYTHON" -c "" >/dev/null 2>&1 || LOOPER_PYTHON=python; }
The final fallback executes the candidate rather than just locating it: on Windows, python3 on PATH is often the Microsoft Store alias stub, which exists but cannot run scripts. If no candidate can execute -c "", tell the user to rerun the Looper installer (it creates the venv).
Each command below assumes the Helper Python resolution is prefixed in the same shell invocation:
"$LOOPER_PYTHON" ${CLAUDE_SKILL_DIR}/scripts/looper.py detect-models --write
"$LOOPER_PYTHON" ${CLAUDE_SKILL_DIR}/scripts/looper.py register-model <id> --invoke "<cmd> [args...]"
"$LOOPER_PYTHON" ${CLAUDE_SKILL_DIR}/scripts/looper.py compile <target>/loop.yaml --out <target>/loop.resolved.json --render <target>/LOOP.md --session-prompt <target>/RUN_IN_SESSION.md
--strict to fail on warnings, --json for tooling):"$LOOPER_PYTHON" ${CLAUDE_SKILL_DIR}/scripts/looper.py lint <target>/loop.yaml
"$LOOPER_PYTHON" ${CLAUDE_SKILL_DIR}/scripts/looper.py session-prompt <target>/loop.resolved.json --out <target>/RUN_IN_SESSION.md
Use this shape and customize labels:
text+--------------------------------+ | 1. Goal + context | | read sources | +--------------------------------+ | v +--------------------------------+ | 2. Draft plan.md | | state -> state.json | +--------------------------------+ | v +--------------------------------+ | 3. Plan gate | | verdict: reviewer-1 | +--------------------------------+ | needs work -> revise <= 3 -> step 2 | pass v +--------------------------------+ | 4. Write delivery-N.md | | log -> run-log.md | +--------------------------------+ | v +--------------------------------+ | 5. Delivery gate | | verdict: reviewer-1 | +--------------------------------+ | needs work -> revise <= 3 -> step 4 | pass v +--------------------------------+ | 6. Final output | | all gates clean | +--------------------------------+ Stops: pass gates | max 12 iterations | no progress x2 | budget 30m, $5.0, 2000000 tokens
programmatic, judge, or human.accepts that risk.
revise_until_clean gate has a valid verdict_source.loop_control has iteration, revision, no-progress, and wall-clock or budgetcaps.
current workspace.
run-log.md and state.json path.loop.resolved.json, LOOP.md, and RUN_IN_SESSION.md compilesuccessfully before handoff.
Other measured skills in the registry, with their headline benchmark lift.