ralph-loop

SKILL.md

Ralph Loop

Geoffrey Huntley의 Ralph 기법 기반 자율 반복 개발 루프.

핵심 원리: 동일한 작업을 반복 실행하되, 매 이터레이션마다 이전 결과(파일, 변경 내역)를 보고 점진적으로 개선한다.


호출 형식

/ralph-loop <작업 설명> [--max-iterations N] [--completion-promise "완료 문구"]

예시:

/ralph-loop "할 일 관리 REST API 구현해줘" --max-iterations 5
/ralph-loop "auth 버그 고쳐줘" --completion-promise "FIXED" --max-iterations 10
/ralph-loop "코드 리팩토링해줘" --max-iterations 3

기본값:

  • --max-iterations: 5
  • --completion-promise: 없음 (max-iterations까지 실행)

저장 구조

[프로젝트 루트]/.ralph/
  ├── PROMPT.md       ← 작업 목표 (고수준)
  ├── fix_plan.md     ← 구체적 작업 목록 (체크리스트)
  ├── AGENT.md        ← 빌드/테스트 명령어
  └── logs/
      └── iteration-N.md   ← 이터레이션별 진행 기록

실행 흐름

Phase 0: 인수 파싱

스킬이 호출되면 사용자 입력에서 다음을 추출한다:

  1. 작업 설명 (<작업 설명>): 수행할 작업의 핵심 목표
  2. max-iterations (--max-iterations N): 최대 반복 횟수. 없으면 기본값 5
  3. completion-promise (--completion-promise "문구"): 완료 신호 문구. 없으면 max-iterations까지만 실행

인수가 모호하면 AskUserQuestion으로 확인한다.


Phase 1: 셋업

.ralph/ 디렉토리를 생성하고 아래 파일들을 만든다.

.ralph/PROMPT.md 생성

# Ralph Loop - 작업 목표

## 작업 설명
[사용자가 입력한 작업 설명 그대로]

## 완료 조건
[--completion-promise가 있으면: "아래 문구를 출력하면 완료: <promise>문구</promise>"]
[없으면: "max-iterations 도달 시 완료"]

## 규칙
- 매 이터레이션 시작 시 .ralph/fix_plan.md를 읽고 미완료 항목을 확인한다
- 작업 후 .ralph/fix_plan.md에서 완료된 항목을 체크한다
- 이터레이션 결과를 .ralph/logs/iteration-N.md에 기록한다
- 완료 신호는 <promise>문구</promise> 형식으로 출력한다

.ralph/fix_plan.md 생성

작업 설명을 분석해서 구체적인 하위 작업으로 분해한다:

# Fix Plan

## 상태: 진행중
## 마지막 업데이트: [현재 날짜]

## 작업 목록

- [ ] [하위 작업 1]
- [ ] [하위 작업 2]
- [ ] [하위 작업 3]
...

## 완료 기록
(완료된 항목이 여기로 이동)

.ralph/AGENT.md 생성

# Agent Instructions

이 프로젝트에서 사용할 주요 명령어:
- 빌드: [감지된 빌드 명령, 없으면 "N/A"]
- 테스트: [감지된 테스트 명령, 없으면 "N/A"]
- 실행: [감지된 실행 명령, 없으면 "N/A"]

.ralph/logs/ 디렉토리도 생성한다.

셋업 완료 후 사용자에게 보고:

🔄 Ralph Loop 시작!

작업: [작업 설명]
최대 이터레이션: N회
완료 조건: [문구 or "N회 완료 후"]

.ralph/ 구조 생성 완료.
이터레이션 1 시작...

Phase 2: 이터레이션 루프

current_iteration = 1부터 시작하여 아래를 반복한다.

각 이터레이션 실행

Task 에이전트로 이터레이션을 실행한다:

Task(
  description="Ralph Loop 이터레이션 N",
  prompt="""
당신은 Ralph Loop의 이터레이션 N을 실행하는 에이전트입니다.

## 작업 목표
[PROMPT.md 내용]

## 현재 상태
[fix_plan.md 내용]

## 이전 이터레이션 요약
[iteration-(N-1).md 내용, 없으면 "첫 번째 이터레이션"]

## 지시사항

1. fix_plan.md에서 미완료 항목을 확인한다
2. 가장 중요한 미완료 항목부터 작업한다
3. 실제로 파일을 수정/생성하며 작업한다
4. 작업 완료 후 fix_plan.md에서 해당 항목을 [x]로 표시한다
5. .ralph/logs/iteration-N.md에 이터레이션 기록을 남긴다:
   - 이번에 한 작업
   - 완료된 항목
   - 남은 항목
   - 전체 진행률 (%)
   - [completion-promise가 있을 경우] 완료 조건 달성 여부

[completion-promise가 있을 경우]
완료 조건("문구")이 달성되면 반드시 다음 형식으로 출력하라:
<promise>문구</promise>

모든 작업이 완료되었다면 iteration 기록 마지막에 EXIT_SIGNAL: true를 추가하라.
"""
)

완료 조건 확인

에이전트 출력과 iteration-N.md를 확인한다:

  1. completion-promise가 있는 경우: 에이전트 출력에 <promise>문구</promise>가 있으면 → 루프 종료
  2. fix_plan.md 전체 완료: 모든 항목이 [x]면 → 루프 종료
  3. EXIT_SIGNAL: true: iteration 기록에 있으면 → 루프 종료
  4. max-iterations 도달: current_iteration >= max_iterations → 루프 종료

위 조건 중 하나도 해당 없으면 current_iteration += 1 후 다음 이터레이션 실행.


Phase 3: 완료 보고

루프 종료 후 최종 보고서를 출력한다:

✅ Ralph Loop 완료!

작업: [작업 설명]
총 이터레이션: N회
종료 이유: [완료 조건 달성 / 전체 태스크 완료 / max-iterations 도달]

## 진행 요약
[각 이터레이션별 한 줄 요약]

## 최종 fix_plan.md 상태
[완료된 항목들]
[미완료 항목들 (있다면)]

## 생성/수정된 파일
[변경된 파일 목록]

다음 단계: [미완료 항목이 있다면 제안, 없다면 "모든 작업 완료"]

중단 방법

루프 중 사용자가 중단하면:

  1. 현재 이터레이션 완료 후 종료
  2. fix_plan.md에 현재 상태 저장
  3. 중단 보고 출력

/cancel-ralph 또는 /ralph-cancel 호출 시에도 동일하게 처리.


주의사항

  • 각 이터레이션은 독립적인 Task 에이전트로 실행된다 (이전 이터레이션 파일을 통해 컨텍스트 공유)
  • .ralph/ 디렉토리가 이미 존재하면 기존 fix_plan.md를 이어받아 계속 진행
  • 작업 성격에 따라 max-iterations 추천값: 단순 구현 3-5회, 복잡한 리팩토링 5-10회, 버그 수정 3-7회
Weekly Installs
4
First Seen
10 days ago
Installed on
claude-code4
mcpjam1
kilo1
windsurf1
zencoder1
crush1