agrimsingh / ralph-wiggum

Implements the Ralph Wiggum autonomous iteration technique with deliberate context management. Use when building greenfield projects, iterating on well-defined tasks, or when continuous autonomous development is needed. Manages context like memory - tracks allocations, prevents redlining, and knows when to start fresh.

0 views
0 installs

Skill Content

---
name: ralph-wiggum
description: Implements the Ralph Wiggum autonomous iteration technique with deliberate context management. Use when building greenfield projects, iterating on well-defined tasks, or when continuous autonomous development is needed. Manages context like memory - tracks allocations, prevents redlining, and knows when to start fresh.
license: MIT
compatibility: Designed for Cursor (nightly). Requires bash, jq, git.
metadata:
  author: Based on Geoffrey Huntley's Ralph technique
  version: "1.0.0"
  original: https://ghuntley.com/ralph/
---

# Ralph Wiggum: Autonomous Iteration with Context Engineering

Ralph is a technique for autonomous AI development. In its purest form, Ralph is a loop that repeatedly feeds the same prompt to an AI agent, letting it iterate on a task until completion. The key insight is that **context is like memory** - when you `malloc()` data into the context window, it cannot be `free()`'d except by starting fresh.

## Core Philosophy

> "That's the beauty of Ralph - the technique is deterministically bad in an undeterministic world."

Ralph will make mistakes. That's expected. Each mistake is an opportunity to add a "sign" (guardrail) that prevents that mistake in the future. Like tuning a guitar, you adjust Ralph until it plays the right notes.

### The malloc/free Metaphor

- **Context is memory**: Everything loaded into the LLM's context window stays there
- **You cannot free() context**: The only way to clear context is to start a new conversation
- **One task per context**: Mixed concerns lead to autoregressive failure
- **Don't redline**: Pushing context to limits degrades performance
- **Gutter detection**: Once the bowling ball is in the gutter, start fresh

## How This Skill Works

### State Files (The Persistent Memory)

Ralph tracks state in files, NOT in context:

```
.ralph/
├── state.md           # Current iteration, task, completion criteria
├── guardrails.md      # Accumulated "signs" from observed failures  
├── context-log.md     # What's been loaded into context
├── failures.md        # Failure patterns for learning
└── progress.md        # What's been accomplished
```

### The Iteration Cycle

1. **Read state files** to understand current task and progress
2. **Check guardrails** for relevant "signs" to follow
3. **Work on the task** - implement, test, refine
4. **Update progress** in files (not just context)
5. **Commit checkpoint** via git
6. **Evaluate completion** against criteria
7. **If not complete**: Signal for next iteration
8. **If stuck**: Detect gutter, suggest fresh context

### Guardrails ("Signs")

When Ralph makes a mistake, add a sign:

```markdown
## Sign: Don't Jump Off The Slide
- **Trigger**: When implementing authentication
- **Instruction**: Always validate tokens before trusting claims
- **Added after**: Iteration 5 - security vulnerability introduced
```

Signs accumulate in `guardrails.md` and are injected into future iterations.

## Usage

### Starting a Ralph Loop

Create a `RALPH_TASK.md` file in your project root:

```markdown
---
task: Build a REST API for task management
completion_criteria:
  - All CRUD endpoints working
  - Input validation implemented
  - Tests passing with >80% coverage
  - API documentation complete
max_iterations: 50
---

## Requirements

Build a task management API with the following endpoints:
- POST /tasks - Create a task
- GET /tasks - List all tasks
- GET /tasks/:id - Get a task
- PUT /tasks/:id - Update a task
- DELETE /tasks/:id - Delete a task

## Constraints

- Use TypeScript
- Use Express.js
- Use SQLite for storage
- Follow REST conventions
```

Then tell Cursor: "Start a Ralph loop on this task"

### Monitoring Progress

Check `.ralph/progress.md` to see what's been accomplished:

```markdown
## Iteration 1
- Created project structure
- Implemented POST /tasks endpoint
- Status: Partial progress

## Iteration 2
- Added GET endpoints
- Fixed validation bug
- Status: Continuing
```

### When to Start Fresh

Ralph will detect "gutter" situations:
- Same error repeated 3+ times
- Context approaching limits
- Circular failure patterns

When detected, Ralph will suggest: "Context is polluted. Recommend starting fresh conversation."

## Best Practices

### 1. Clear Completion Criteria

❌ Bad: "Make a good API"
✅ Good: "All tests passing, coverage >80%, docs complete"

### 2. Incremental Goals

❌ Bad: "Build complete e-commerce platform"
✅ Good: Phase 1: Auth, Phase 2: Products, Phase 3: Cart

### 3. Let Failures Teach

Don't intervene too quickly. Let Ralph fail, then add signs.

### 4. Trust the Files

Progress is in files and git, not in your head or the context.

### 5. Fresh Context is Cheap

Don't hesitate to start fresh. State persists in files.

## Integration with Cursor Hooks

This skill uses Cursor hooks for:

- **beforeSubmitPrompt**: Inject guardrails and context awareness
- **beforeReadFile**: Track context allocations
- **afterFileEdit**: Update progress tracking
- **stop**: Evaluate completion, trigger next iteration or fresh start

See `scripts/` for hook implementations.

## Learn More

- Original technique: https://ghuntley.com/ralph/
- Context engineering: https://ghuntley.com/gutter/
- malloc/free metaphor: https://ghuntley.com/allocations/