래리 위검 접근법: AI 코딩 에이전트를 몇 분이 아니라 몇 시간 동안 실행
Source: Dev.to
We’ve all been there. You fire up Claude Code, drop in a prompt like “build me a REST API for todos,” and hope for the best. Maybe it works. Maybe it doesn’t. Either way, you’re staring at your screen, watching tokens burn, wondering if the agent is making progress or just spinning its wheels.
The fundamental issue? Traditional AI coding is a one‑shot deal. You get one context window, one shot at the problem, and then you’re either done or you’re not.
더 나은 아이디어: 같은 에이전트를 여러 번 실행하기
같은 프롬프트에 대해 10번 연속으로 같은 에이전트를 실행한다면 어떨까요?
- 각 반복은 이전 단계가 끝난 지점부터 이어집니다.
- 에이전트는 이전에 수행한 작업을 (git 히스토리와 수정된 파일을 통해) 확인합니다.
- 반복하면서 개선하고, 매번 “완료”에 더 가까워집니다.
이것이 Ralph Wiggum 접근법이며, 실제로 게임 체인저입니다.
지금 바로 Ralph 사용해 보기
1. 플러그인 설치
/plugin install ralph-wiggum@claude-plugins-official
2. 첫 번째 루프 실행
/ralph-loop "Add JSDoc comments to all exported functions in src/utils/" \
--max-iterations 10
3. 완료되면 git diff 확인
그게 전부입니다. 이제 첫 번째 자동 루프를 실행했습니다. Claude는 같은 작업을 10 번 반복하면서 매번 작업을 개선했고, 작업이 완료될 때까지 진행했습니다.
핵심 통찰
반복이 완벽을 이긴다.
이 기법은 Geoffrey Huntley가 제안했으며, 그는 간단히 이렇게 설명했습니다:
while :; do
cat PROMPT.md | claude
done
이름은 심슨의 Ralph Wiggum에서 따왔습니다 – 항상 혼란스럽고, 실수를 연발하지만 절대 멈추지 않죠. 그게 분위기입니다.
핵심은 Ralph가 같은 프롬프트를 AI 에이전트에 반복해서 제공하며 중지 조건이 충족될 때까지 진행한다는 것입니다. 에이전트는 이전 작업을 (git 히스토리와 수정된 파일을 통해) 확인하고, 이를 학습해 반복적으로 개선합니다.
“이 기법은 불확정적인 세계에서 결정론적으로 나쁩니다.
예측 가능하게 실패하는 것이 예측 불가능하게 성공하는 것보다 낫습니다.”
Matt Pocock도 팬입니다:
“Ralph Wiggum + Opus 4.5는 정말, 정말 좋습니다.”
플러그인 작동 방식
- Invoke
/ralph-loop와 프롬프트 및 완료 기준을 입력합니다. - Claude가 작업을 수행합니다.
- Claude가 종료하려 할 때(작업이 끝났다고 판단될 때) Stop hook이 exit code 2를 사용해 이를 가로챕니다.
- 훅은 여러분이 지정한 completion promise(예:
COMPLETE)를 확인합니다. - 약속이 발견되지 않으면 원래 프롬프트가 다시 전달되고 Claude는 계속 진행합니다.
- 각 반복마다 이전 실행에서 수정된 파일과 git 히스토리를 확인합니다.
예시 명령
/ralph-loop "Migrate all tests from Jest to Vitest" \
--max-iterations 50 \
--completion-promise "All tests migrated"
Claude가 완료 약속을 출력하거나 반복 제한에 도달할 때까지 루프가 계속됩니다.
Source: …
단계별 예시: Jest → Vitest 마이그레이션
Prompt
Migrate all tests from Jest to Vitest.
- Update all test files to use Vitest syntax
- Update package.json scripts
- Remove Jest dependencies
- Add Vitest dependencies
- Run tests after migration
Output MIGRATED when all tests pass.
무슨 일이 일어나는가
| 반복 | Claude가 수행하는 작업 |
|---|---|
| 1 | 테스트 파일을 Vitest 구문으로 업데이트; 테스트 실패 |
| 2 | 구문 오류 수정; 테스트 여전히 실패 |
| 3 | package.json을 업데이트하고 Jest를 제거, Vitest를 추가 |
| 4 | 테스트 실행, 통과, MIGRATED 출력 |
완전히 마이그레이션된 테스트 스위트를 눈앞에서 확인합니다. 중간에 수동으로 재프롬프트하거나 디버깅할 필요 없이 설정하고 실행하기만 하면 됩니다.
실제 성공 사례
| 프로젝트 | 결과 |
|---|---|
| Cursed programming language | 단일 Ralph 루프 하나로 3 개월 동안 구축: 함수형 컴파일러, LLVM 백엔드, stdlib, 부분적인 에디터 지원. 키워드에는 slay(함수), sus(변수), based(true)가 포함됩니다. |
| 6+ repositories overnight | Y Combinator 해커톤 팀이 $297 의 API 비용으로 여러 저장소를 배포 – 계약자 인건비 $50 K 가 소요됐을 작업. |
| 4‑minute → 2‑second tests | 한 개발자가 잠자는 동안 통합 테스트를 단위 테스트로 마이그레이션; 루프가 기계적인 변환을 자동으로 처리했습니다. |
| Full APIs with TDD | 기능을 반복적으로 구축하고, 테스트를 실행하고, 실패를 수정하고, 모든 테스트가 통과할 때까지 반복했습니다. |
이것들은 엄선된 성공 사례입니다. 하룻밤에 이룬 승리마다 수렴하지 못하고 반복만 소모된 루프가 있습니다. 실패한 시도도 여전히 비용이 듭니다. 하지만 작동할 때는 놀라울 정도로 잘 작동합니다.
Ideal Use‑Cases
| Use‑Case | Example Prompt |
|---|---|
| Large refactors | "Convert all class components to functional components with hooks. Output MIGRATED when npm run typecheck passes." |
| Framework migrations | "Migrate all tests from Jest to Vitest. Output COMPLETE when all tests pass." |
| TDD workflows | "Implement the checkout flow to make all tests in checkout.test.ts pass. Output TESTS_PASS when done." |
| Test coverage | "Add tests for all uncovered functions in src/." |
| TypeScript adoption | "Add type annotations to all functions in src/utils/." |
| Greenfield builds | "Build a REST API with CRUD operations. Output COMPLETE when all endpoints work and tests pass." |
The common thread: well‑defined success metrics. If you can describe “done” precisely, Ralph can iterate toward it.
When Not to Use Ralph
- 모호한 요구사항 – “완료”를 정확히 정의할 수 없으면 루프가 수렴하지 않습니다.
- 아키텍처 결정 – 새로운 추상화는 인간의 사고가 필요하며, 맹목적인 반복으로는 안 됩니다.
- 보안에 민감한 코드 – 인증, 결제, 데이터 처리 등은 각 단계마다 인간 검토가 필요합니다.
- 탐색적 디버깅 – “앱이 왜 느린지 파악하기”는 Ralph에게 적합한 작업이 아닙니다.
Ralph는 기계적인 실행을 자동화하지만, 무엇을 구축할 가치가 있는지에 대한 의사결정은 자동화하지 않습니다.
Common Pitfalls (and How to Avoid Them)
| ❌ 실수 | ✅ 해결책 |
|---|---|
| 첫 실행에서 너무 야심 차게 설정 | 작고 명확히 경계가 정해진 하위 작업부터 시작하세요. |
| 불명확한 완료 기준 | 신뢰할 수 있게 감지 가능한 명시적인 “ 토큰을 사용하세요. |
| CI 상태를 초록색으로 유지하는 것을 잊음 | 각 반복 후에 CI를 실행하세요(또는 루프에 통합하세요). |
| 비용을 모니터링하지 않음 | 합리적인 --max-iterations를 설정하고 토큰 사용량을 확인하세요. |
| 비결정론적 작업에 사용 | Ralph는 결정론적이고 기계적인 작업에만 사용하세요. |
TL;DR
전통적인 AI 코딩은 한 번에 끝나는 작업입니다. Ralph Wiggum은 이를 구체적인 성공 신호가 나타날 때까지 반복되는 반복 가능한 루프로 바꿉니다.
- 설치 플러그인.
- 정의 명확한 “ completion token.
- 실행
/ralph-loop를 합리적인 반복 제한과 함께. - 모니터링 비용, CI 상태, 그리고 프라미스 출력.
잘 정의되고 기계적으로 구동되는 작업에 사용하면, Ralph는 단일 프롬프트를 완전 자동화된 개발 파이프라인으로 전환할 수 있습니다. 즐거운 루프 되세요!
판단‑무거운 작업
에이전트는 각 반복마다 작업을 커밋하고 progress.txt 파일에 진행 상황을 추가합니다. 이는 다음과 같은 용도로 사용됩니다:
- 로그: 향후 반복에서 읽을 수 있도록
- 문서화: 시도한 내용에 대한 기록
- 에이전트가 실수를 반복하는 것을 방지하는 방법
이것은 매우 중요합니다. 각 반복은 테스트와 타입 검사를 통과해야 합니다. 깨진 코드를 커밋하면 향후 반복이 제약을 받고 디버깅 악몽을 초래합니다.
규칙: 테스트가 실패하면, 에이전트는 계속하기 전에 이를 수정해야 합니다.
정확한 종료 기준
대부분의 사람들은 성공 기준이 모호하기 때문에 실수를 합니다.
| ❌ Bad Prompt | ✅ Good Prompt |
|---|---|
| “todo API를 만들고 잘 만들어라.” | “REST API를 CRUD 작업과 함께 구축하십시오. 입력 검증이 필요합니다. 테스트는 통과해야 합니다 (> 80 % 커버리지). API 문서가 포함된 README. 완료되면 COMPLETE를 출력하십시오.” |
Note:
--completion-promise플래그는 정확한 문자열 매칭을 사용하므로 신뢰할 수 없습니다. 실제 안전망으로--max‑iterations를 사용하십시오.
반복 제한이 중요한 이유
자동 루프는 토큰을 소모합니다. 큰 코드베이스에서 50회 반복 루프는 컨텍스트 크기에 따라 $50‑100+ 이상의 API 크레딧을 쉽게 소모할 수 있습니다. Claude Code 구독에서는 사용 제한에 더 빨리 도달합니다.
모범 사례
--max-iterations를 보수적으로 설정하세요 (10‑20부터 시작).- 토큰 소비 패턴을 파악한 뒤 점차 늘리세요.
- 완료 기준은 테스트 / 빌드 성공으로 삼고, Claude의 자체 평가에 의존하지 마세요.
- 장시간 실행 중에는 사용량을 모니터링하세요.
일반적인 증상 및 빠른 해결책
| 증상 | 빠른 해결책 |
|---|---|
| 루프가 무한히 반복되고 있나요? | --max-iterations와 progress.txt를 확인해 차단 요소를 찾으세요. |
| 테스트가 계속 실패하나요? | 다음 반복 전에 실패한 테스트를 수정하세요. |
| 비용이 너무 많이 들나요? | --max-iterations를 낮추거나 작업 범위를 좁히세요. |
| Claude가 “완료”라고 하지만 실제로는 아니죠? | 테스트 결과와 CI 상태를 확인하세요. |
장점 및 단점
| ✅ 장점 | ❌ 단점 |
|---|---|
| 잠자는 동안 코드를 배포한다 | 토큰을 빠르게 소모할 수 있다 |
| 기계적인 작업에 적합 | 판단이 많이 필요한 작업에는 적합하지 않다 |
| 스스로 교정하는 피드백 루프 | 우수한 프롬프트 엔지니어링이 필요 |
| 수동 재프롬프트를 줄인다 | 조건이 모호하면 멈출 수 있다 |
| git 히스토리를 기반으로 함 | Windows 설정에 jq 의존성이 있다 |
| 도구들의 생태계가 성장 중 | 효과적인 프롬프트를 위한 학습 곡선 |
에코시스템 하이라이트
ralph-claude-code– 364 ⭐. 레이트 리미팅, tmux 대시보드, 장애 복구를 위한 서킷 브레이커, 그리고 지능형 종료 감지를 추가합니다.ralph-orchestrator– 토큰 추적, 지출 한도, git 체크포인팅, 다중 AI 지원을 추가합니다.
이 도구들은 운영상의 과제인 비용 제어, 상태 복구 및 모니터링을 해결합니다. 공식 플러그인은 핵심 메커니즘을 제공하고, 에코시스템은 프로덕션 래퍼를 구축합니다.
자주 묻는 질문
-
다른 AI 도구와 함께 사용할 수 있나요?
예 – 패턴은 도구에 구애받지 않으며, 루프 로직만 적절히 조정하면 됩니다. -
Claude가 멈추면 어떻게 하나요?
보수적인--max-iterations를 사용하세요. 루프는 자동으로 중지됩니다. -
한 번에 여러 루프를 실행할 수 있나요?
기술적으로 가능하지만, 토큰 사용량과 git 충돌을 주의하세요. -
대규모 코드베이스에서도 작동하나요?
작동하지만, 더 높은 반복 제한과 토큰 예산 관리를 해야 합니다. -
루프를 일시 중지하고 재개할 수 있나요?
/cancel-ralph를 사용해 중지합니다. 재개하려면 동일한 명령을 다시 실행하면 Claude가 git 기록에서 이어서 진행합니다.
시작하기
-
공식 플러그인 설치
/plugin install ralph-wiggum@claude-plugins-official -
Windows 사용자: 플러그인에 Windows/Git Bash에서 깨지는 undocumented
jq의존성이 있습니다. 먼저jq를 설치하거나 WSL을 사용하세요. -
사용 가능한 명령
/ralph-loop "" --max-iterations N /ralph-loop "" --max-iterations N --completion-promise "text" /cancel-ralph # 현재 루프 종료 -
작게 시작 – 성공 기준이 명확한 기계적 작업을 선택하세요:
- 플러그인 설치 (≈ 30 초)
- 프롬프트:
Add JSDoc comments to all exported functions in src/utils/ --max-iterations 10옵션으로 실행
-
완료되면 git diff를 검토하세요.
첫 시도가 수렴하지 않으면 성공 기준을 다듬고 다시 시도하세요.
Community & Contribution
- 직접 해보세요 – 작고 안전한 작업부터 시작하세요.
- 커뮤니티에 참여하세요 – GitHub 저장소와 Discord를 확인하세요.
- 결과를 공유하세요 – Ralph로 만든 것을 게시하세요.
- 기여하세요 – 생태계가 성장하고 있으며 새로운 도구를 위한 공간이 있습니다.
- 업데이트를 받아보세요 – Geoffrey Huntley와 Claude Code 팀을 팔로우하세요.
사고방식 전환
| 전통적인 AI 코딩 | Ralph 접근법 |
|---|---|
| 한 번에 완벽함 | 완벽함보다 반복 |
| 실패는 좌절이다 | 실패는 데이터다 |
| 한 번 프롬프트 | 프롬프트, 관찰, 반복 |
| 운영자 기대 | 운영자는 루프를 설계한다 |
| 직접 단계별 | 수렴하는 프롬프트 작성 |
기술은 “Claude를 단계별로 직접 지시하는 것”에서 “정답에 수렴하는 프롬프트를 작성하는 것”으로 전환됩니다. 당신의 역할은 다음과 같습니다: 반복이 성공으로 이어지도록 조건을 어떻게 설정할까요?
TL;DR
AI 코딩 에이전트에게 한 번에 완벽함을 기대하는 것을 멈추세요. 루프에서 실행하고, 진행 상황을 추적하며, CI를 녹색 상태로 유지하고, 반복이 무거운 작업을 대신하게 하세요. 잠자는 동안에도 배포하세요.
Ralph나 유사한 접근 방식을 시도해 보셨나요? 경험은 어떠셨나요? 아래에 댓글을 남겨 주세요.
출처
- Ralph에 대한 Geoffrey Huntley
- 공식 Claude Code 플러그인
- Claude Code용 Ralph (커뮤니티 포크)
- Ralph 오케스트레이터
- BetterStack YouTube 영상 (6만 조회)
- Paddo.dev 심층 분석