Free SKILL.md scraped from GitHub. Clone the repo or copy the file directly into your Claude Code skills directory.
npx versuz@latest install ralph-eats-beadsgit clone https://github.com/rawwerks/ralph-eats-beads.gitcp -r ralph-eats-beads/ ~/.claude/skills/ralph-eats-beads/---
name: ralph-eats-beads
description: Autonomous AI coding loop using bd for task management with parallel tmux subagents. Ships features while you sleep.
license: MIT
---
# Ralph BD - Parallel Autonomous Coding Loop
**Contract**: `skills-lib-lkv` (Ralph Contract v1)
Ralph runs Claude agents in a loop, picking tasks from `bd ready`, implementing them, and closing them on success. This version uses tmux for observability and supports parallel subagents.
## Architecture
```
ralph (tmux session)
├── parent (window 0) - orchestrator Claude
├── watchdog (window 1) - health monitor Claude (optional)
├── BD-001 (window 2) - subagent
├── BD-002 (window 3) - subagent
└── BD-003 (window 4) - subagent
```
## Prerequisites
- **bd** initialized with issues/epic
- **tmux** installed
- **Claude CLI** (`claude` command available)
## Quick Start
### Option A: Manual Plan (you create issues)
```bash
# 1. Create your epic and issues
bd create --type epic "Feature: User Authentication"
bd create "Add login form" --parent BD-001 --priority 1
bd create "Add email validation" --parent BD-001 --priority 2
bd create "Add auth server action" --parent BD-001 --priority 3
# 2. Start Ralph (25 max iterations)
scripts/ralph.sh 25
# 3. Attach to watch
tmux attach -t ralph
```
### Option B: AI-Generated Plan (planner creates issues)
```bash
# 1. Let Claude create the plan from requirements
scripts/planner.sh requirements.md
# Or inline:
scripts/planner.sh <<< "Add OAuth2 authentication with Google and GitHub providers"
# Or pipe from anywhere:
cat feature-spec.md | scripts/planner.sh
# 2. Watch the planner
tmux attach -t ralph-plan
# 3. Once plan is created, implement it
scripts/ralph.sh 25
```
## Planning vs Implementation
| Script | Session | Purpose |
|--------|---------|---------|
| `planner.sh` | ralph-plan | **Recursive loop** - creates/refines bd issues until plan is complete |
| `ralph.sh` | ralph | **Parallel loop** - implements issues from `bd ready` |
**Workflow:**
```
Requirements → planner.sh (iterates) → bd issues → ralph.sh (parallel) → Implemented code
```
Both loops support `MAX_ITERATIONS` - planner defaults to 3, implementation defaults to 10.
## How It Works
**Key principle**: Bash manages the iteration loop, each iteration gets fresh Claude context.
```
ralph.sh (bash loop)
├── Iteration 1
│ ├── Spawn fresh Claude parent
│ ├── Parent spawns subagents, then exits
│ ├── Bash waits for subagent windows to close
│ ├── bd sync
│ └── Check bd ready → continue or done
├── Iteration 2
│ └── (repeat with fresh context)
└── ...
```
1. Bash checks `bd ready` for available work
2. Bash spawns fresh Claude parent for this iteration
3. Parent runs `bd prime`, analyzes parallelizability
4. Parent spawns subagent tmux windows (3-5 concurrent), then exits
5. Bash waits for all subagent windows to close
6. Each subagent implements ONE issue, commits, closes issue
7. Bash syncs bd and loops until no work remains
## Observer Commands
```bash
# Attach to see everything
tmux attach -t ralph
# Tile all panes
tmux select-layout -t ralph tiled
# Watch specific agent
tmux select-window -t ralph:BD-123
# Capture agent output
tmux capture-pane -t ralph:BD-123 -p -S -1000 > agent.log
# Kill stuck agent
tmux kill-window -t ralph:BD-123
# Kill entire session
tmux kill-session -t ralph
```
## Planner Details
The planner (`scripts/planner.sh`) runs a **recursive loop** that iterates until the bd plan fully covers the input requirements:
```
while iteration < MAX_ITERATIONS:
1. Read input plan file
2. Check current bd state (existing issues)
3. Compare: what's in the plan but missing from bd?
4. If nothing missing → exit with summary
5. Create missing issues with dependencies
6. Repeat
```
Each iteration the planner:
1. **Re-reads the plan** - Keeps the source of truth in focus
2. **Audits bd state** - What stories exist? What's missing?
3. **Fills gaps** - Creates issues for uncovered sections
4. **Sets dependencies** - Ensures correct build order
This ensures complex plans with many sections get fully decomposed into implementable stories.
### Input Formats
```bash
# From file
scripts/planner.sh requirements.md
scripts/planner.sh feature-spec.txt
# Inline (heredoc)
scripts/planner.sh << 'EOF'
Add user authentication:
- OAuth2 with Google and GitHub
- Session management with JWT
- Protected routes middleware
EOF
# One-liner
scripts/planner.sh <<< "Add dark mode with system preference detection"
# Pipe from anywhere
curl -s https://example.com/spec.md | scripts/planner.sh
gh issue view 123 --json body -q .body | scripts/planner.sh
```
### What the Planner Creates
```
Epic: AUTH-001 "Feature: OAuth2 Authentication"
├── AUTH-002 "Add OAuth2 configuration" [ready]
├── AUTH-003 "Create Google provider" [depends: AUTH-002]
├── AUTH-004 "Create GitHub provider" [depends: AUTH-002]
├── AUTH-005 "Add callback handlers" [depends: AUTH-003, AUTH-004]
└── AUTH-006 "Add protected route middleware" [depends: AUTH-005]
```
Stories include:
- Clear acceptance criteria
- File paths to modify
- References to existing patterns
- Testing requirements
## Watchdog (Active Health Monitor)
The watchdog is a separate Claude agent that monitors Ralph sessions and unsticks them automatically. Unlike the passive monitor, it takes action:
```bash
# Start watchdog for a ralph session (30 second check interval)
scripts/watchdog.sh ralph-myproject 30
# It runs in its own tmux window within the session
tmux select-window -t ralph-myproject:watchdog
```
The watchdog:
- **Detects idle agents** - Looks for Claude CLI prompts indicating waiting state
- **Checks issue status** - Queries bd to see if work is complete
- **Nudges stuck agents** - Sends tmux keystrokes to prompt them to continue
- **Kills completed windows** - Cleans up windows where the issue is closed
- **Kicks the parent** - Sends Enter if parent is idle with work remaining
This keeps Ralph flowing autonomously without human intervention.
## Passive Monitor (Logging Only)
For unattended runs where you just want logging without intervention:
```bash
# Start monitor (checks every 20 min, logs to /tmp/ralph-monitor.log)
nohup scripts/monitor.sh 20 &
# Check status
tail -f /tmp/ralph-monitor.log
```
The passive monitor detects:
- **STOPPED**: Ralph session died unexpectedly
- **STUCK**: Only parent window but work remains (2 consecutive checks)
- **COMPLETE**: No ready work and only parent window
- **RUNNING**: Normal operation with active subagents
## bd Workflow
### Setup Work
```bash
# Create epic
bd create --type epic "Feature: Dark Mode" # → BD-001
# Create stories
bd create "Add theme toggle" --parent BD-001 --priority 1
bd create "Add theme context" --parent BD-001 --priority 2
bd create "Update components" --parent BD-001 --priority 3
# Add dependencies (bd ready respects these)
bd dep add BD-004 BD-003 # BD-004 depends on BD-003
```
### Monitor Progress
```bash
bd ready # What's workable?
bd epic status BD-001 # Epic completion
bd blocked # What's stuck?
bd activity # Recent changes
```
### After Completion
```bash
bd list --state closed --parent BD-001 # All closed?
bd show BD-002 --comments # Review learnings
bd epic close-eligible # Close the epic
```
## Best Practices
### Right-Sized Stories
```
BAD: "Build authentication system"
GOOD: "Add login form with email/password fields"
"Add client-side email validation"
"Create auth server action"
```
### Clear Acceptance Criteria
In issue body:
```
Acceptance Criteria:
- [ ] Email field with validation
- [ ] Password field with show/hide
- [ ] typecheck passes
- [ ] tests pass
```
### Learnings Accumulate
Agents add learnings via `bd comments`. Future iterations benefit:
```bash
bd show BD-005 --comments
bd search "migration pattern"
```
## Not Suitable For
- Exploratory work without clear criteria
- Major refactors spanning entire codebase
- Security-critical code
- Anything needing human review before commit