aiwg
Version:
Cognitive architecture for AI-augmented software development with structured memory, ensemble validation, and closed-loop correction. FAIR-aligned artifacts, 84% cost reduction via human-in-the-loop, standards adopted by 100+ organizations.
314 lines (223 loc) • 6.78 kB
Markdown
# Ralph Loop Best Practices
Master iterative AI task execution with these guidelines.
## Writing Effective Tasks
### Be Specific and Actionable
| Vague (Avoid) | Specific (Good) |
|---------------|-----------------|
| "Fix the code" | "Fix failing tests in src/auth/" |
| "Improve performance" | "Reduce p95 latency below 100ms" |
| "Add tests" | "Add unit tests for UserService class" |
| "Clean up" | "Remove unused imports from src/" |
### Provide Context
Good task descriptions include:
- **What** needs to be done
- **Where** (which files/modules)
- **Constraints** (if any)
```
/ralph "Migrate src/utils/*.js files to TypeScript, maintaining existing function signatures and adding explicit return types" --completion "npx tsc --noEmit passes"
```
### Scope Appropriately
| Scope | Example | Risk |
|-------|---------|------|
| Too broad | "Refactor entire codebase" | Will hit limits |
| Too narrow | "Add semicolon to line 42" | Overkill for Ralph |
| Just right | "Convert CommonJS to ESM in src/lib/" | Achievable |
## Writing Effective Completion Criteria
### Rule: Must Be Verifiable
The completion criteria MUST be checkable by running a command. If you can't verify it programmatically, Ralph can't either.
| Subjective (Bad) | Verifiable (Good) |
|------------------|-------------------|
| "Code is clean" | "npm run lint passes" |
| "Tests are good" | "npm test exits with code 0" |
| "Performance is fast" | "lighthouse score >90" |
| "Types are correct" | "npx tsc --noEmit passes" |
### Common Verification Patterns
#### Testing
```bash
# All tests pass
--completion "npm test passes"
# Specific test file
--completion "npm test -- auth.test.ts passes"
# With coverage threshold
--completion "npm test -- --coverage --coverageThreshold='{\"global\":{\"lines\":80}}'"
# Specific framework
--completion "jest passes"
--completion "pytest exits with code 0"
--completion "go test ./... passes"
```
#### Type Checking
```bash
# TypeScript
--completion "npx tsc --noEmit exits with code 0"
# Python
--completion "mypy . passes"
# Rust
--completion "cargo check passes"
```
#### Linting
```bash
# ESLint
--completion "npm run lint passes"
--completion "eslint src/ --max-warnings 0"
# Python
--completion "ruff check . passes"
--completion "black --check . passes"
```
#### Building
```bash
# Node
--completion "npm run build succeeds"
# Rust
--completion "cargo build --release passes"
# Go
--completion "go build ./... passes"
```
### Compound Criteria
Combine multiple checks with AND:
```bash
--completion "npm test passes AND npm run lint passes AND npx tsc --noEmit passes"
```
Ralph will verify ALL conditions are met.
## Setting Iteration Limits
### Choosing Max Iterations
| Task Type | Typical Iterations | Recommended Max |
|-----------|-------------------|-----------------|
| Fix 1-3 test failures | 2-4 | 10 |
| Fix lint errors | 2-3 | 10 |
| Fix type errors | 3-8 | 15 |
| Small migration | 5-10 | 15 |
| Large migration | 10-20 | 25 |
| Coverage improvement | 5-15 | 20 |
| Greenfield scaffold | 10-30 | 40 |
### When to Increase Limits
Increase `--max-iterations` if:
- Task was making steady progress when it hit the limit
- Each iteration fixes some issues but reveals more
- Task is inherently iterative (like improving coverage)
```bash
/ralph-resume --max-iterations 25
```
### When to Split Tasks
Split into smaller tasks if:
- Hitting limits without meaningful progress
- Errors are in unrelated areas
- Task scope is too broad
```bash
# Instead of
/ralph "Fix all tests" --completion "npm test passes"
# Split into
/ralph "Fix auth tests" --completion "npm test -- auth passes"
/ralph "Fix utils tests" --completion "npm test -- utils passes"
```
## Git Workflow
### Auto-Commit (Default)
Ralph commits after each iteration:
```
ralph: iteration 1 - initial implementation
ralph: iteration 2 - fix auth test
ralph: iteration 3 - fix edge case
```
**Benefits**:
- Easy rollback to any iteration
- Clear progress history
- Supports `/ralph-resume`
- Blame-able history
### Using Branches
For larger changes, use a branch:
```bash
/ralph "big refactor" --completion "..." --branch "refactor-auth"
```
Creates `ralph/refactor-auth` branch, preserving main.
### Final Squash (Optional)
After successful completion, you can squash the commits:
```bash
git rebase -i HEAD~{N}
# Squash all "ralph: iteration" commits into one
```
### Disabling Auto-Commit
If you prefer manual commits:
```bash
/ralph "task" --completion "..." --no-commit
```
## Common Patterns
### Test Fix Loop
```bash
/ralph "Fix all failing tests" --completion "npm test passes"
```
### Migration Loop
```bash
/ralph "Migrate src/ from CommonJS to ESM" \
--completion "node --experimental-vm-modules src/index.mjs runs" \
--max-iterations 20
```
### Coverage Loop
```bash
/ralph "Add tests to reach 80% coverage" \
--completion "npm run coverage -- --coverageThreshold='{\"global\":{\"lines\":80}}'" \
--max-iterations 30
```
### Lint Cleanup Loop
```bash
/ralph "Fix all ESLint errors and warnings" \
--completion "eslint src/ --max-warnings 0"
```
### Type Safety Loop
```bash
/ralph "Add TypeScript types to all exported functions" \
--completion "npx tsc --noEmit && npm run lint:types"
```
### Dependency Update Loop
```bash
/ralph "Update all dependencies and fix breaking changes" \
--completion "npm test passes && npm run build succeeds"
```
## Anti-Patterns to Avoid
### Subjective Criteria
```bash
# BAD - cannot verify
/ralph "Make the code better" --completion "code looks good"
```
### Missing Completion Criteria
```bash
# BAD - no way to know when done
/ralph "Fix things"
```
### Infinite Scope
```bash
# BAD - will never complete
/ralph "Add all missing features" --completion "product is complete"
```
### Ignoring Limits
```bash
# BAD - if 10 didn't work, 100 probably won't either
/ralph "..." --completion "..." --max-iterations 100
```
### External Dependencies
```bash
# RISKY - depends on external service
/ralph "Fix API integration" --completion "curl api.example.com/health returns 200"
```
## Debugging Failed Loops
### Check Iteration History
```bash
/ralph-status --verbose
```
Look for:
- Is the same error repeating?
- Is there progress between iterations?
- Are learnings actionable?
### Manual Verification
Run the verification command yourself:
```bash
npm test
echo $? # Should be 0 for success
```
### Examine Learnings
Read `.aiwg/ralph/current-loop.json` to see accumulated learnings.
### Start Fresh with More Context
If stuck, abort and restart with more specific guidance:
```bash
/ralph-abort
/ralph "Fix auth tests - the mock for getUserById needs to return user with 'admin' role" \
--completion "npm test -- auth passes"
```