/ralph-loop과 /loop, 어떻게 다른가
이름은 비슷하지만 목적이 전혀 다른 두 가지 루프 기능. 기원부터 실제 사용법까지 정리했다.
Ralph의 기원 — 구토하는 심슨 캐릭터
모든 것은 오픈소스 개발자 Geoffrey Huntley가 작성한 단 세 줄의 셸 스크립트에서 시작됐다.
while :; do
cat PROMPT.md | claude-code
done
AI에게 프롬프트를 던지고, 결과(에러 포함)를 다시 AI에게 먹이고, 답이 나올 때까지 반복한다. Huntley는 이 기법을 Ralph라고 불렀다.
"브루트 포스와 끈질김의 결합. AI가 에러를 뱉어내도 계속 시도한다."
— Geoffrey Huntley
이름의 유래는 두 가지다. 첫째는 1980년대 미국 속어로 "ralph" = 구토하다 — AI가 에러를 쏟아내도 개의치 않는다는 의미다. 둘째는 심슨의 캐릭터 Ralph Wiggum — 무지하지만 포기하지 않고 끈질기게 시도하는 그 아이.
이 단순한 아이디어는 삽시간에 퍼졌다. 커뮤니티에서 Stop Hook 기반의 구현체가 만들어졌고, 결국 Anthropic이 공식 플러그인으로 패키징해 claude.com/plugins/ralph-loop에 올렸다.
/ralph-loop — 완성될 때까지 반복
핵심 원리는 하나다. Claude Code가 작업을 마치고 종료하려 할 때, Stop Hook이 그 종료를 가로막는다. 그리고 동일한 프롬프트를 다시 투입한다. 변경된 파일은 그대로 남아있으므로 다음 이터레이션은 이전 결과를 보고 개선한다.
프롬프트 투입 → Claude 작업 → 종료 시도 → Stop Hook 차단 → 재투입 (파일 유지) → ...종료 조건: completion-promise 출력 + EXIT_SIGNAL 둘 다 만족해야 루프가 멈춘다.
설치
# Anthropic 공식 마켓플레이스 추가
/plugin marketplace add anthropics/claude-code
# ralph-loop 설치
/plugin install ralph-loop
실제 예시 — TDD로 기능 구현
테스트가 모두 통과할 때까지 스스로 고쳐가며 반복하게 만드는 예시다.
/ralph-loop:ralph-loop "Kafka consumer lag 모니터링 API를 TDD로 구현.
1. 실패하는 테스트 먼저 작성
2. 최소한의 코드로 테스트 통과
3. ./gradlew test 실행
4. 실패한 테스트가 있으면 수정 후 재실행
5. 전체 통과 확인 후 완료 신호 출력:
<promise>COMPLETE</promise>" --max-iterations 20
--max-iterations는 생략하면 안 된다. 완성 기준이 모호한 프롬프트는 영원히 루프를 돈다. 반드시 git 커밋 이후에 실행할 것 — 롤백 포인트가 없으면 리스크가 크다.
/loop — 정해진 시간마다 반복
2026년 3월, Anthropic은 Claude Code v2.1.71에 네이티브 /loop 커맨드를 추가했다. 이름은 비슷하지만 ralph-loop와 목적이 완전히 다르다.
/loop는 세션 레벨 cron이다. 인터벌과 태스크를 주면 Claude가 내부적으로 cron 표현식을 생성하고, 세션이 살아있는 동안 주기적으로 그 작업을 실행한다. cron 문법을 몰라도 된다. "5분마다", "매시간"처럼 자연어로 설명하면 된다.
인터벌 + 태스크 등록 → cron 생성 (내부) → N분 대기 → Claude 실행 → N분 대기 → ...종료 조건: 세션 종료 또는 3일 후 자동 만료.
실제 예시 — 배포 모니터링
배포 중에 5분마다 서버 상태를 자동으로 체크하게 만드는 예시다.
# 5분마다 스테이징 서버 상태 확인
/loop 5m check if staging at port 8080 is responding, report HTTP status
# 1시간마다 PR 리뷰 재실행 (기존 skill 조합)
/loop 1h /review-pr 1234
# 등록된 루프 목록 확인
/loop list
# ID: a3f8c1b2 interval: */5 * * * * prompt: check if staging...
# 특정 루프 취소
/loop cancel a3f8c1b2
주의: /loop는 세션이 종료되면 같이 끝난다. 터미널을 닫으면 루프도 사라진다. 세션을 넘어서 유지하고 싶다면 Desktop의 Scheduled Tasks 기능을 사용해야 한다.
둘의 차이를 한눈에
| /ralph-loop | /loop | |
|---|---|---|
| 목적 | 태스크를 완성시킴 | 주기적으로 반복 실행 |
| 트리거 | 이전 결과를 보고 재시도 | 시간 인터벌 (cron) |
| 종료 | completion-promise 달성 | 세션 종료 or 3일 만료 |
| 컨텍스트 | 파일 변경 누적 | 매 실행마다 독립 |
| 유스케이스 | 테스트 통과, 기능 완성 | 모니터링, 상태 체크 |
한 문장으로 정리하면 이렇다. /ralph-loop는 "완성될 때까지 계속 고쳐", /loop는 "5분마다 확인해줘".
둘은 경쟁 관계가 아니다. 배포를 /loop로 모니터링하면서, 동시에 /ralph-loop:ralph-loop로 다음 기능을 개발하는 식으로 함께 쓸 수 있다.
TL;DR
- /ralph-loop — 작업을 completion-promise에 도달할 때까지 자율 반복. 기원은 Geoff Huntley의 bash while loop.
- /loop — 지정한 인터벌마다 동일 프롬프트를 반복 실행하는 세션 레벨 cron. 세션 종료 시 같이 끝남.
'AI > Claude code' 카테고리의 다른 글
| [Claude Code] btw (0) | 2026.03.13 |
|---|---|
| [Claude Code] rtk-ai (token-killer) (0) | 2026.03.13 |
| Claude 2월 업데이트 정리 (0) | 2026.03.06 |
| [Claude Code] Claude Remote Control (0) | 2026.02.25 |
| [Claude Code] Claude Code 실행 직후 종료되는 문제 (0) | 2026.02.09 |