https://github.com/dingcodingco/dingco-ralph-wiggum
"Ralph is a Bash Loop" — Geoffrey Huntley의 말처럼, Claude가 작업을 완료할 때까지 같은 프롬프트를 반복해서 자기 자신에게 먹이는 자율 개발 루프입니다.
핵심 원리는 Stop Hook으로 Claude의 종료 시도를 가로채서, 동일한 프롬프트를 다시 주입하는 방식입니다. 매 반복마다 Claude는 이전에 자신이 수정한 파일들을 보면서 점진적으로 개선합니다.
[사용자가 /ralph-loop 실행]
↓
[Claude가 작업]
↓
[Claude가 종료 시도]
↓
[Stop Hook이 차단]
↓
[같은 프롬프트 다시 주입] ←─────────┐
↓ │
[Claude가 파일 변경 내용 보며 개선] ─┘
↓
[완료 조건 충족 → 종료]
/ralph-loop "프롬프트" --max-iterations N --completion-promise "완료텍스트"
| 옵션 | 설명 | 예시 |
|---|---|---|
"프롬프트" |
작업 지시문 | "메모장 앱 만들어줘" |
--max-iterations |
최대 반복 횟수 (필수!) | --max-iterations 20 |
--completion-promise |
완료 신호 텍스트 | --completion-promise "DONE" |
/cancel-ralph |
루프 강제 중단 | — |
주의: --completion-promise는 정확한 문자열 매칭을 사용하므로, 여러 완료 조건에는 사용 불가합니다. 항상 --max-iterations를 주요 안전장치로 사용하세요.
mkdir memo-app && cd memo-app
git init # ← 반드시 git 초기화! Ralph는 git 히스토리를 활용
claude # Claude Code 실행
복잡한 앱은 단계를 나눠서 실행하는 것이 효과적입니다.
/ralph-loop "
## 목표: Django 메모장 앱 Phase 1 - 프로젝트 기본 구조
### 요구사항:
- Django 5.x + PostgreSQL 프로젝트 생성
- 앱 이름: memos
- 모델: Memo (title, content, created_at, updated_at, is_pinned)
- requirements.txt 작성 (django, psycopg2-binary, python-decouple)
- .env.example 파일 작성
- settings.py PostgreSQL 연결 설정 (python-decouple 사용)
### 완료 조건:
- manage.py 존재
- memos/models.py 완성
- migrations 파일 생성됨
- 완료 시 반드시 출력: PHASE1_DONE
" --max-iterations 15 --completion-promise "PHASE1_DONE"
/ralph-loop "
## 목표: Django 메모장 앱 Phase 2 - CRUD 기능
### 요구사항:
- views.py: 목록(ListView), 상세(DetailView), 생성(CreateView), 수정(UpdateView), 삭제(DeleteView)
- urls.py 설정
- forms.py: MemoForm 작성
- 각 뷰에 로그인 필요 없음 (로그인 없는 버전)
- 핀 고정 토글 기능 (pin/unpin URL 추가)
### 완료 조건:
- 모든 URL 패턴 동작 확인
- 완료 시 반드시 출력: PHASE2_DONE
" --max-iterations 15 --completion-promise "PHASE2_DONE"
/ralph-loop "
## 목표: Django 메모장 앱 Phase 3 - UI 템플릿
### 요구사항:
- base.html: TailwindCSS CDN 포함, 반응형 레이아웃
- memos/list.html: 카드형 목록, 핀 고정 메모 상단 표시, 검색창
- memos/detail.html: 메모 내용 표시, 수정/삭제 버튼
- memos/form.html: 생성/수정 공용 폼
- 삭제 확인 모달 포함
- 빈 상태(메모 없을 때) UI 처리
### 완료 조건:
- templates/ 디렉토리에 모든 파일 존재
- 완료 시 반드시 출력: PHASE3_DONE
" --max-iterations 20 --completion-promise "PHASE3_DONE"
/ralph-loop "
## 목표: Django 메모장 앱 Phase 4 - 검색 기능 & 테스트
### 요구사항:
- 제목/내용 검색 기능 구현 (Q 객체 사용)
- tests.py: 모델 테스트, 뷰 테스트 작성
- 테스트 커버리지 70% 이상
- python manage.py test 통과
- README.md 작성 (설치법, 실행법 포함)
### 완료 조건:
- python manage.py test 실행 시 모든 테스트 통과
- 완료 시 반드시 출력: ALL_DONE
" --max-iterations 20 --completion-promise "ALL_DONE"
Ralph Loop의 성공은 프롬프트 품질에 달려 있습니다. 명확하지 않은 지시는 무한 루프나 조기 종료를 유발합니다. 이진법 성공 기준과 명시적 완료 신호가 필요합니다.
❌ 나쁜 프롬프트:
"메모장 앱 만들어줘"
✅ 좋은 프롬프트:
"## 목표: 메모 CRUD 기능
### 요구사항:
- [구체적 항목 1]
- [구체적 항목 2]
### 완료 조건:
- [검증 가능한 조건]
- 완료 시 출력: DONE"
# 긴급 중단
/cancel-ralph
# 또는
Ctrl + C
| ✅ Ralph 적합 | ❌ Ralph 부적합 |
|---|---|
| 명확한 스펙이 있는 기능 개발 | 판단이 필요한 설계 결정 |
| 대규모 리팩토링 | 짧은 단순 질문 |
| 테스트 커버리지 향상 | 실시간 피드백이 필요한 작업 |
| 반복적인 문서화 작업 | 보안에 민감한 작업 |
| 야간 자율 개발 (AFK) | 첫 아키텍처 설계 |
1. git init (필수)
2. 단계별 프롬프트 작성 (구체적 요구사항 + 완료 신호)
3. /ralph-loop "..." --max-iterations 20 --completion-promise "DONE"
4. Claude가 자율 반복 작업
5. 완료 후 코드 리뷰