Part 2: Hands-On Guide
2.6 Ralph Loop
요약
AI 코딩 에이전트를 무한 루프에 넣고, 자는 동안 코드를 배포하는 기법입니다.
| 항목 | 내용 |
|---|---|
| 고안자 | Geoffrey Huntley (ghuntley.com/ralph) |
| 구현체 | 1. Clayton Farr (ralph-playbook): Bash 스크립트 기반, 3단계 프로세스 2. Ryan Carson (snarktank/ralph): prd.json 기반, Claude Code / Amp 모두 지원 |
| 공식 플러그인 | anthropics/claude-code/plugins/ralph-wiggum |
| 지원 에이전트 | Claude Code, Codex CLI 등 CLI 기반 에이전트 |
| 핵심 원리 | 매 반복마다 새 컨텍스트로 시작, 상태는 git과 파일에 저장 (공식 플러그인: 컨텍스트 유지하며 반복) |
| 해결하는 문제 | 컨텍스트 오염(context rot) |
| 적합한 작업 | 잘 정의된 TDD 작업, 기계로 검증 가능한 성공 기준이 있는 작업 |
| 적합하지 않은 작업 | 대규모 코드베이스 심층 이해, 미묘한 판단/주관적 판단(예: "더 이쁘게")이 필요한 작업, 인간의 안내가 필요한 작업 |
| 한 줄 요약 | while :; do cat PROMPT.md | agent ; done |
고안자
내용: Geoffrey Huntley (ghuntley.com/ralph)
구현체
내용: 1. Clayton Farr (ralph-playbook): Bash 스크립트 기반, 3단계 프로세스
2. Ryan Carson (snarktank/ralph): prd.json 기반, Claude Code / Amp 모두 지원
2. Ryan Carson (snarktank/ralph): prd.json 기반, Claude Code / Amp 모두 지원
공식 플러그인
지원 에이전트
내용: Claude Code, Codex CLI 등 CLI 기반 에이전트
핵심 원리
내용: 매 반복마다 새 컨텍스트로 시작, 상태는 git과 파일에 저장
(공식 플러그인: 컨텍스트 유지하며 반복)
(공식 플러그인: 컨텍스트 유지하며 반복)
해결하는 문제
내용: 컨텍스트 오염(context rot)
적합한 작업
내용: 잘 정의된 TDD 작업, 기계로 검증 가능한 성공 기준이 있는 작업
적합하지 않은 작업
내용: 대규모 코드베이스 심층 이해, 미묘한 판단/주관적 판단(예: "더 이쁘게")이 필요한 작업, 인간의 안내가 필요한 작업
한 줄 요약
내용:
while :; do cat PROMPT.md | agent ; done Ralph Wiggum
ℹ️ 이름의 유래
심슨 가족의 캐릭터. "I'm helping!"이라며 열정적이지만 종종 엉뚱한 행동을 합니다.
LLM도 마찬가지: 지치지 않는 열정과 방대한 지식은 있으나, 명확한 제약 없이는 환각을 만들어내거나 맥락을 잊고 엉뚱한 코드를 작성합니다.
Ralph Loop는 이 특성을 역이용: 실패해도 굴하지 않고 반복하면 결국 정답에 도달합니다.
"Brute force meets persistence."
-- Geoffrey Huntley
핵심 메커니즘
- 매 반복마다 새 컨텍스트(빈 머리)로 시작 -- 컨텍스트 오염 원천 차단
- 실패한 시도, 관련 없는 코드, 혼합된 관심사가 축적 → 컨텍스트 오염
- 오염이 쌓이기 전에 의도적으로 새 컨텍스트로 교체
- 상태(State)는 LLM 메모리가 아닌 파일 시스템과 git에 저장
- 파일과 git 히스토리를 보고 "여기까지 했구나"를 스스로 파악
- 마치 매일 아침 새로 출근하지만, 어제 커밋한 코드를 보고 이어서 일하는 개발자와 같음
"In the loop" vs "On the loop"
- 기존 방식 (In the loop): 개발자가 AI와 채팅하며 일일이 지시 → 개발자가 병목
- Ralph 방식 (On the loop): 개발자가 시스템을 설계하고 AI가 스스로 실행 → 개발자는 감독자
- AI를 단순한 코딩 조수가 아닌, 엄격한 테스트를 통과해야만 완료되는 주니어 엔지니어처럼 취급
핵심 철학: "deterministically bad in an undeterministic world"
Ralph Playbook 철학
| 철학 | 내용 |
|---|---|
| 컨텍스트는 소모품이다 (Context is Disposable) | 대화가 길어질수록 모델 주의력 분산. 매 작업마다 컨텍스트를 버리고 현재 작업에 필요한 파일과 명세서만 새로 로드 |
| 계획은 부패한다 (Plans Rot) | 거대한 장기 계획은 코드 한 줄이 바뀌는 순간 낡은 것이 됨. 매번 현재 코드 상태를 분석해 당장 실행 가능한 짧은 계획만 수립하고 폐기 |
| 지시보다 압력이 강하다 (Backpressure beats Direction) | "버그 만들지 마세요"라는 프롬프트는 효과 없음. 컴파일 에러/린트/타입체크/테스트 실패가 진짜 압력. 통과하지 못하면 커밋 불가 |
컨텍스트는 소모품이다
(Context is Disposable)
(Context is Disposable)
내용: 대화가 길어질수록 모델 주의력 분산. 매 작업마다 컨텍스트를 버리고 현재 작업에 필요한 파일과 명세서만 새로 로드
계획은 부패한다
(Plans Rot)
(Plans Rot)
내용: 거대한 장기 계획은 코드 한 줄이 바뀌는 순간 낡은 것이 됨. 매번 현재 코드 상태를 분석해 당장 실행 가능한 짧은 계획만 수립하고 폐기
지시보다 압력이 강하다
(Backpressure beats Direction)
(Backpressure beats Direction)
내용: "버그 만들지 마세요"라는 프롬프트는 효과 없음. 컴파일 에러/린트/타입체크/테스트 실패가 진짜 압력. 통과하지 못하면 커밋 불가
Anthropic 플러그인 철학
- Iteration > Perfection
- Failures Are Data (Deterministically bad)
- Operator Skill Matters (good prompts)
- Persistence Wins
Anthropic 공식 플러그인
1
Step 1 / 4
플러그인 설치
Claude Code를 실행한 뒤 아래 명령어를 입력합니다.
bash
# 방법 1: 직접 설치
/plugin install ralph-loop@claude-plugins-official
# 방법 2: /plugin 입력 후 직접 찾아서 설치
/plugin 2
Step 2 / 4
Ralph Loop 실행
PROMPT는 별도의 md 파일로 작성합니다.
bash
/ralph-loop:ralph-loop PROMPT [--max-iterations N] [--completion-promise TEXT] 3
Step 3 / 4
병렬 실행 (기능별 브랜치 분리)
기능별로 branch를 분리하고 병렬로 Ralph Loop를 실행할 수 있습니다.
bash
터미널 1: feat/auth 브랜치 → /ralph-loop:ralph-loop PROMPT
터미널 2: feat/payment 브랜치 → /ralph-loop:ralph-loop PROMPT
터미널 3: feat/notification 브랜치 → /ralph-loop:ralph-loop PROMPT 4
Step 4 / 4
결과 확인 및 병합
각 브랜치의 결과를 확인하고 메인 브랜치에 병합합니다.
bash
git checkout main
git merge feat/auth
git merge feat/payment
git merge feat/notification 주의 사항
--dangerously-skip-permissions플래그 사용 시 AI가 파일 삭제/외부 API 호출 등을 자유롭게 수행할 수 있음- 반드시 격리된 git 브랜치에서 실행할 것
- 루프 시작 전 명세서(spec)가 충분히 구체적인지 검토 필수: 모호한 명세는 모호한 코드로 이어짐 (
/spec-review) - 테스트 코드가 없으면 Ralph는 반쪽짜리: Backpressure가 없으면 아무 코드나 커밋
Ralph Loop vs. Planning with Files
| Ralph Loop | Planning with Files | |
|---|---|---|
| 주 사용자 | 테스트 자동화에 익숙한 개발자 | 일반 개발자, 비개발자도 포함 |
| 전제 조건 | TDD, 빌드 파이프라인 필수 | 없음 |
| 작업 성격 | 기계 검증 가능한 코딩 작업 | 리서치, 멀티스텝 작업 전반 |
| 접근 방식 | 컨텍스트가 오염되기 전에 리셋 | 리셋 후에도 맥락 복원 |
주 사용자
Ralph Loop: 테스트 자동화에 익숙한 개발자
Planning with Files: 일반 개발자, 비개발자도 포함
전제 조건
Ralph Loop: TDD, 빌드 파이프라인 필수
Planning with Files: 없음
작업 성격
Ralph Loop: 기계 검증 가능한 코딩 작업
Planning with Files: 리서치, 멀티스텝 작업 전반
접근 방식
Ralph Loop: 컨텍스트가 오염되기 전에 리셋
Planning with Files: 리셋 후에도 맥락 복원
충돌 주의사항
둘 다 설치된 상태에서 Stop 이벤트가 발생하면 양쪽 훅이 모두 실행됩니다.
Stop 훅 경합
| 플러그인 | Stop 훅 역할 |
|---|---|
| ralph-wiggum | 루프 계속 실행 여부 판단 |
| planning-with-files | 모든 단계 완료 여부 검증 |
ralph-wiggum
Stop 훅 역할: 루프 계속 실행 여부 판단
planning-with-files
Stop 훅 역할: 모든 단계 완료 여부 검증
ralph-loop를 돌리는 프로젝트 폴더에 task_plan.md가 함께 있는 경우:
- 루프 종료 시점에 planning-with-files가 "아직 미완료 단계 있음"을 출력할 수 있음
- ralph 루프가 의도한 것보다 더 오래 실행될 수 있음
planning-with-files 비활성화
ralph loop 프로젝트 루트에 설정합니다.
.claude/settings.json
// {프로젝트}/.claude/settings.json
{
"enabledPlugins": {
"planning-with-files": false
}
} 선택 가이드
| 요구사항 | 기법 |
|---|---|
| 코딩 작업 + TDD 가능 + 자동화 하고 싶다 | Ralph Loop |
| 리서치/기획/장기 프로젝트 + 세션 끊겨도 이어가고 싶다 | Planning with Files |
| 둘 다 아니다 (빠른 단발성 작업) | 그냥 Claude Code 그대로 |
코딩 작업 + TDD 가능 + 자동화 하고 싶다
기법: Ralph Loop
리서치/기획/장기 프로젝트 + 세션 끊겨도 이어가고 싶다
기법: Planning with Files
둘 다 아니다 (빠른 단발성 작업)
기법: 그냥 Claude Code 그대로