running-agent-loops · git:20260625.6520aec · 2026-06-25 · sha256 9eeeef8e0ee75353

running-agent-loops git:20260625.6520aecA

Immutable. This exact content is served forever at /api/v1/blob/9eeeef8e0ee75353.

---
name: running-agent-loops
description: Run a multi-step or unattended agent loop safely — sequential pipelines, implement→review→fix (PR) loops, parallel fan-out, and RFC→DAG orchestration. Use when the user wants to "loop", "run autonomously", "iterate until it's done", chain `claude -p` calls, fan out parallel agents on a spec, or set up an implement→verify→commit cycle. Covers the cross-iteration context bridge and the de-sloppify pass. Not for a single one-shot task.
license: MIT
---

# Running agent loops

Patterns for driving work across **many steps or iterations** — possibly unattended — without the run drifting, looping, or shipping slop. The core trade is **isolation vs. continuity**: a fresh context per step avoids bleed, but you must deliberately carry forward what matters.

## Read first (always)

List `learnings/` and read anything relevant. Project-specific loop conventions, budgets, and stop signals live there and override this file.

## Principles (apply to every loop)

- **Fresh context per step beats one long context.** Each `claude -p` / subagent call starts clean — no bleed, no drift. The cost: it forgets. Bridge it deliberately (below).
- **The reviewer is never the author.** Put review/verify in a separate step/context so it isn't anchored to the implementation.
- **Two focused passes beat one constrained pass.** Don't pile negative instructions onto the implementer — add a separate **de-sloppify** pass (below). Quality from constraints decays; quality from a dedicated cleanup step doesn't.
- **Every loop has an explicit stop condition.** Bound it by max-runs, max-cost, max-duration, or a completion signal — never "until it feels done".

## The patterns (pick the simplest that fits)

| Pattern | Use when | Shape |
|---|---|---|
| **Sequential pipeline** | A known series of steps on one unit of work | implement → de-sloppify → verify → commit, each a fresh context |
| **PR loop** | Iterate a branch toward green | branch → implement → review → fix → run checks → repeat until checks pass or budget hits |
| **Parallel fan-out** | N independent variations/units of the same spec | an orchestrator **assigns** each agent a distinct direction + index (don't rely on agents to self-differentiate); run in waves of 3–5 |
| **RFC → DAG** | A large feature with dependencies | decompose into work units + a dependency DAG; run each in an isolated worktree; land via a merge queue; deeper review tier for riskier units |

## The cross-iteration context bridge

Independent steps lose memory. Persist a single **`SHARED_TASK_NOTES.md`** (or the project's plan file): the agent **reads it at the start of each iteration and updates it at the end** — current objective, what's done, what's next, decisions, and gotchas. This is what turns isolated calls into a coherent run.

## The de-sloppify pass

After each implement step, run a **dedicated cleanup pass** (separate agent/context) whose only job is to remove slop: dead code, stray comments, debug prints, half-finished branches, inconsistent naming, over-engineering. Keep it separate from the implementer so neither job is diluted.

## Safety before you launch an unattended loop

- Baseline **tests pass** before iteration 1.
- An explicit **stop condition** and a **budget** (runs / cost / time).
- **Rollback** ready: work on a branch or in a worktree, commit per green step.
- **Checkpoints** so you can diff now-vs-then.
- **Escalate to the human** when: no progress across two consecutive checkpoints, the same error/stack repeats, the diff drifts off-objective, or the budget is exceeded. Stalling silently is the failure mode.

If a loop is wedged (looping, repeating an identical failed action, burning budget), switch to `skills/debugging-agent-runs`.

## Capture a learning

If you hit a loop convention, stop-signal, or trap not covered here, append a `learnings/YYYY-MM-DD-slug.md` (or use `/learn`).

## See also

- `/dual-review` command — the adversarial two-reviewer convergence step for a PR loop.
- `skills/debugging-agent-runs` — recover a wedged run.
- `skills/reviewing-code`, `skills/writing-pull-requests` — the review/PR steps a loop calls.