/auto-loop
TDD-based autonomous development loop with checkpoint recovery and observability changelog
$ npx -y skills add claude-world/director-mode-lite --skill auto-loop --agent claude-codeHow 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
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.mdname: 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
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
Showing the first part of this file.
Use Claude Code like a Director, not a Programmer. MIT toolkit with Auto-Loop, guided setup, 27 commands, 14 agents, and 32 skills.
Other skills on director-mode-lite.
- /changelog-observer
Track development session events in a daily markdown changelog, including file changes, test results, and key decisions.
Open skill - /agent-check
Validate custom agent file format and structure. Use after creating or editing an agent, before committing agent changes, or when an agent fails to load.
Open skill - /agent-template
Generate custom agent from template. Use when creating a new subagent from scratch, or scaffolding an agent file with correct frontmatter.
Open skill - /agents
List all available agents (core, expert, self-evolving). Use when the user asks what agents are available or runs /agents.
Open skill - /changelog
View and manage the runtime changelog for observability
Open skill - /check-environment
Verify Claude, Codex, and Grok availability plus Director guidance, relay, agents, and skills. Audit optional hooks only when selected. Use after installation or when a native surface misbehaves.
Open skill

