Package the four core skills into the repo under skills/ so users can install them via `npx skills add getpaseo/paseo`. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.4 KiB
name, description, user-invocable
| name | description | user-invocable |
|---|---|---|
| loop | Run a task in a worker→judge loop until acceptance criteria are met. Use when the user says "loop", "loop this", "keep trying until", or wants iterative autonomous execution. | true |
Loop Skill
You are setting up an autonomous worker→judge loop. A worker agent implements the plan, then a judge agent independently verifies the plan was implemented to the letter.
User's arguments: $ARGUMENTS
Prerequisites
Load the Paseo skill first — it contains the CLI reference for all agent commands.
What Is a Loop
A loop is two roles — worker and judge — running in alternation:
- Worker receives the plan and implements it (fresh agent each iteration)
- Judge receives the same plan and independently verifies it was implemented correctly, emitting a structured verdict:
{ criteria_met: boolean, reason: string } - If
criteria_metis false, a new worker is launched with the latest judge failure reason (latest only, not full history) - Loop exits when the judge says
criteria_met: trueor max iterations are reached
The judge verifies the entire plan — every step, every file change, every acceptance criterion. It does NOT suggest fixes or provide guidance. It only reports facts.
Live Steering
Each loop run persists state in:
~/.paseo/loops/<loop-id>/
plan.md
last_reason.md
history.log
Behavior:
plan.mdis read immediately before launching each worker and each judge.last_reason.mdstores only the latest judge failure reason (not accumulated history).history.logappends per-iteration operational records.
Edits to plan.md are picked up on the next worker/judge launch without restarting the loop.
Parsing Arguments
Parse $ARGUMENTS to determine:
- Plan — the full implementation plan (context, steps, acceptance criteria, constraints — all in one document)
- Worker model — who does the work (default: Codex
gpt-5.4) - Judge model — who verifies (default: Claude
sonnet) - Name — a short name for tracking iterations
- Max iterations — safety cap (default: 10)
- Worktree — whether to run in an isolated git worktree
Examples
/loop
→ Agent derives plan from conversation context
/loop the provider list bug
→ Plan: full context about the bug, steps to fix, acceptance criteria
Name: provider-list-fix
/loop until tests pass
→ Plan: make the failing tests pass, acceptance criteria: all tests pass
Name: fix-tests
/loop in a worktree
→ Same as above but all agents run in a shared worktree
Using the Script
The loop is implemented as a bash script at ~/.agents/skills/loop/bin/loop.sh.
~/.agents/skills/loop/bin/loop.sh \
--plan "The full implementation plan" \
--name "short-name" \
--max-iterations 10 \
--worker-provider codex \
--worker-model gpt-5.4 \
--judge-provider claude \
--judge-model sonnet
Arguments
| Flag | Required | Default | Description |
|---|---|---|---|
--plan |
Yes* | — | Full implementation plan (given to both worker and judge) |
--plan-file |
Yes* | — | Read the plan from a file |
--name |
Yes | — | Name prefix for agents (name-work-N, name-verify-N) |
--max-iterations |
No | 10 | Safety cap on iterations |
--worktree |
No | — | Worktree name. Created on first use, reused for all subsequent agents. |
--worker-provider |
No | codex |
codex or claude |
--worker-model |
No | provider default | Model for worker |
--judge-provider |
No | claude |
codex or claude |
--judge-model |
No | provider default | Model for judge |
--thinking |
No | medium |
Thinking level for worker |
* Provide exactly one of --plan or --plan-file.
How the Plan Is Used
The same plan is given to both the worker and the judge, wrapped in XML tags:
Worker receives:
Implement the following plan exactly as specified.
<plan>
[your plan here]
</plan>
If a previous iteration failed, the worker also receives:
<previous-verification-failure>
[judge's failure reason from last iteration]
</previous-verification-failure>
Judge receives:
Verify that every step of the plan has been implemented to the letter.
<plan>
[your plan here]
</plan>
Agent Naming
Agents are named {name}-work-{N} and {name}-verify-{N} so the caller can track iterations:
fix-bug-work-1 # First worker attempt
fix-bug-verify-1 # First judge check
fix-bug-work-2 # Second worker attempt (with failure context)
fix-bug-verify-2 # Second judge check
Worktree Support
When --worktree is passed, all workers and judges run in the same git worktree. The worktree is created on the first agent launch and reused for all subsequent agents (the --worktree flag on paseo run is idempotent — if the worktree exists, the agent runs in it without creating a new one).
No --base is needed in the loop script — it automatically uses the current branch as the base.
~/.agents/skills/loop/bin/loop.sh \
--plan-file /tmp/my-plan.md \
--name "feature-x" \
--worktree "feature-x"
Your Job
- Understand the task from the conversation context and
$ARGUMENTS - Write the plan — comprehensive, self-contained (the worker has zero context). The plan should include:
- Task description and context
- Relevant files and what they do
- Implementation steps (ordered, concrete)
- Acceptance criteria (factual, verifiable)
- Constraints (what NOT to do)
- Choose models — default: Codex worker + Claude sonnet judge
- Choose a name — short, descriptive
- Run the script — call
loop.shwith all the arguments
Steering Guidance
- Prefer tightening or clarifying the plan when important requirements are missing.
- Rework acceptance criteria when they are causing dead loops or are not independently verifiable.
- Avoid weakening user-defined criteria unless the user explicitly asks for that change.
- Keep the plan self-contained so the loop can succeed without relying on iterative reasoning context.
Writing a Good Plan
The plan is the single source of truth for both the worker and the judge. It must be:
- Self-contained — The worker starts with zero context. Everything needed is in the plan.
- Specific — Name files, functions, types. "Update the handler" is useless. "In
src/handlers/auth.ts, modify thehandleLoginfunction to..." is useful. - Ordered — Steps should be in implementation order.
- Verifiable — Every step and criterion must be independently checkable by the judge.
Good plan elements:
- "File
src/utils.tsexports a function namedformatDate" - "Running
npm testexits with code 0" - "The component at
src/ProviderList.tsxrenders a list of providers from the API response" - "Typecheck passes (
npm run typecheck)" - "
npm run typecheckpasses"
Bad plan elements:
- "The code is clean" (subjective)
- "The implementation is correct" (vague)
- "It works" (unverifiable)
Skill Stacking
You can instruct the worker to use other skills in the plan:
~/.agents/skills/loop/bin/loop.sh \
--plan "Use the /committee skill to plan and then fix the provider list bug. The bug is..." \
--name "provider-fix"
Composing with Handoff
A handoff can launch a loop in a worktree:
/handoff a loop in a worktree
The handoff skill writes a prompt telling the new agent to use /loop, and the loop runs inside the worktree.