Skip to content

/auto-loop

TDD-based autonomous development loop with checkpoint recovery and observability changelog

shell
$ npx -y skills add claude-world/director-mode-lite --skill auto-loop --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/auto-loop
How auto-invocation works

Context preview

The summary Claude sees to decide when to auto-load this skill.

TDD-based autonomous development loop with checkpoint recovery and observability changelog

SKILL.md

auto-loop.SKILL.md
name: auto-loop
description: TDD-based autonomous development loop with checkpoint recovery and observability changelog
user-invocable: true

Auto-Loop

Execute a TDD-based autonomous development loop with full observability.

---

Usage

# Start new task
/auto-loop "Implement user login"

# With acceptance criteria
/auto-loop "Implement authentication

Acceptance Criteria:
- [ ] Login form (email + password)
- [ ] JWT token generation
- [ ] Error handling
"

# Resume interrupted session
/auto-loop --resume

# Force restart (clear old state)
/auto-loop --force "New task"

# Check status
/auto-loop --status

# With iteration limit
/auto-loop "Task" --max-iterations 15

---

How It Works

┌───────────────────────────────────────────────────────────────┐
│                      TDD Iteration                            │
├───────────┬───────────────────────────────────────────────────┤
│  RED      │ Write failing test for next AC                    │
│           │ → Auto-logged: file_write, test_fail              │
├───────────┼───────────────────────────────────────────────────┤
│  GREEN    │ Write implementation to make test pass            │
│           │ → Auto-logged: file_write/edit, test_pass         │
├───────────┼───────────────────────────────────────────────────┤
│  REFACTOR │ Improve code quality (no behavior change)         │
│           │ → Use code-reviewer agent for suggestions         │
├───────────┼───────────────────────────────────────────────────┤
│  VALIDATE │ Run full test suite + linter                      │
│           │ → Auto-logged: test_pass/fail                     │
├───────────┼───────────────────────────────────────────────────┤
│  COMMIT   │ Commit changes with descriptive message           │
│           │ → Auto-logged: commit                             │
├───────────┼───────────────────────────────────────────────────┤
│  DECIDE   │ Check AC completion → continue or complete        │
└───────────┴───────────────────────────────────────────────────┘

---

Execution

When user runs `/auto-loop "<request>"`:

1. State Detection (Conflict Prevention)

STATE_DIR=".auto-loop"
CHECKPOINT="$STATE_DIR/checkpoint.json"

# Check for existing in-progress session
if [ -f "$CHECKPOINT" ]; then
    status=$(jq -r '.status // "unknown"' "$CHECKPOINT" 2>/dev/null || echo "unknown")
    iteration=$(jq -r '.current_iteration // 0' "$CHECKPOINT" 2>/dev/null || echo "0")

    if [ "$status" == "in_progress" ]; then
        echo "⚠️  Found interrupted session at iteration #$iteration"
        echo "Options:"
        echo "  /auto-loop --resume        → Continue"
        echo "  /auto-loop --force \"...\"  → Start fresh"
        exit 1
    fi
fi

**Behavior Matrix:**

| Existing State | Command | Action | |----------------|---------|--------| | None | `/auto-loop "task"` | Start new | | `completed` | `/auto-loop "task"` | Archive & start new | | `in_progress` | `/auto-loop "task"` | **Block** - prompt user | | `in_progress` | `/auto-loop --resume` | Continue | | `in_progress` | `/auto-loop --force "task"` | Archive & start new |

2. Initialize

# Archive old changelog if > 100 lines
CHANGELOG_DIR=".director-mode"
CHANGELOG="$CHANGELOG_DIR/changelog.jsonl"

if [ -f "$CHANGELOG" ] && [ $(wc -l < "$CHANGELOG") -gt 100 ]; then
    mv "$CHANGELOG" "$CHANGELOG_DIR/changelog.$(date +%Y%m%d_%H%M%S).jsonl"
fi

# Create state directories
mkdir -p "$STATE_DIR" "$CHANGELOG_DIR"

# Initialize checkpoint
# Build with jq so multiline requests or embedded double quotes stay valid JSON
# (a raw heredoc would break on the quoted acceptance-criteria usage above).
jq -n --arg req "$ARGUMENTS" \
  '{request: $req, current_iteration: 0, max_iterations: 20, status: "in_progress", started_at: (now | todate), acceptance_criteria: [], last_test_result: null, files_changed: []}' \
  > "$CHECKPOINT"

# acceptance_criteria stays empty here; the parse step below fills it in.

3. Parse Acceptance Criteria

Input:
  "Implement authentication

  Acceptance Criteria:
  - [ ] Login form
  - [ ] JWT token
  "

Parsed:
{
  "acceptance_criteria": [
    { "id": 1, "description": "Login form", "done": false },
    { "id": 2, "description": "JWT token", "done": false }
  ]
}

4. DECIDE - Completion Check

┌─────────────────────────────────────────────────────────────┐
│  DECIDE - Iteration #3                                      │
├─────────────────────────────────────────────────────────────┤
│  [x] 1. Login form            ← test passing               │
│  [x] 2. JWT token             ← test passing               │
│  [ ] 3. Error handling        ← NO TEST YET                │
├─────────────────────────────────────────────────────────────┤
│  Decision: 2/3 complete → CONTINUE                          │
└─────────────────────────────────────────────────────────────┘

**Complete when:**

  • All AC marked `done: true`
  • All tests passing

**Stop when:**

  • `max_iterations` reached
  • `.auto-loop/stop` file exists

---

Flags

| Flag | Description | |------|-------------| | `--resume` | Continue interrupted session | | `--force` | Clear old state, start fresh | | `--status` | Show current session status | | `--max-iterations N` | Set iteration limit (default: 20) |

---

Observability

All events are automatically logged via PostToolUse hooks:

| Event | Trigger | Hook | |-------|---------|------| | `file_write` | Write tool | `log-file-change.sh` | | `file_edit` | Edit tool | `log-file-change.sh` | | `test_pass/fail` | Bash (test) | `log-bash-event.sh` | | `commit` | Bash (git commit) | `log-bash-event.sh` |

Query with `/changelog`:

/changelog              # Recent events
/changelog --summary    # Statistics
/changelog --type test  # Filter by type

---

Stop / Resume

# Interrupt (stop after current iteration)
touch .auto-loop/stop

# Check status
/auto-loop --status

# Resume
/auto-loop --resume
Read more
Read it on GitHub ↗

Showing the first part of this file.

Ships withdirector-mode-lite

Use Claude Code like a Director, not a Programmer. MIT toolkit with Auto-Loop, guided setup, 27 commands, 14 agents, and 32 skills.

Get the whole plugin, auto-invoked
Stats
81
Stars
0
Views
11
Forks
Active
Maintenance
Shell
Language
MIT
License
7d ago
Last commit
6mo ago
Created

Repo: claude-world/director-mode-lite