자율 루프 스킬
호환성 참고 (v1.8.0):
autonomous-loops는 한 번의 릴리스 동안 유지됩니다. 표준 스킬 이름은 이제continuous-agent-loop입니다. 새로운 루프 지침은 해당 스킬에서 작성해야 하며, 이 스킬은 기존 워크플로우를 중단하지 않기 위해 유지됩니다.
Claude Code를 자율적으로 루프에서 실행하기 위한 패턴, 아키텍처 및 참조 구현입니다. 간단한 claude -p 파이프라인부터 완전한 RFC 기반 다중 에이전트 DAG 오케스트레이션까지 모든 것을 다룹니다.
사용 시기
- 사람의 개입 없이 실행되는 자율 개발 워크플로우 설정
- 문제에 맞는 올바른 루프 아키텍처 선택 (단순 vs 복잡)
- CI/CD 스타일의 지속적 개발 파이프라인 구축
- 병합 조정을 통한 병렬 에이전트 실행
- 루프 반복 간 컨텍스트 유지 구현
- 자율 워크플로우에 품질 게이트 및 정리 패스 추가
루프 패턴 스펙트럼
가장 단순한 것부터 가장 정교한 것까지:
| 패턴 | 복잡도 | 최적 사용 사례 |
|---|---|---|
| 순차 파이프라인 | 낮음 | 일일 개발 단계, 스크립트 기반 워크플로우 |
| NanoClaw REPL | 낮음 | 대화형 지속 세션 |
| 무한 에이전트 루프 | 중간 | 병렬 콘텐츠 생성, 사양 기반 작업 |
| 지속적 Claude PR 루프 | 중간 | CI 게이트가 있는 다일 반복 프로젝트 |
| De-Sloppify 패턴 | 추가 기능 | 구현자 단계 후 품질 정리 |
| Ralphinho / RFC 기반 DAG | 높음 | 대규모 기능, 병합 대기열이 있는 다중 유닛 병렬 작업 |
1. 순차 파이프라인 (claude -p)
가장 간단한 루프. 일일 개발을 비대화형 claude -p 호출 순서로 나눕니다. 각 호출은 명확한 프롬프트가 있는 집중된 단계입니다.
핵심 통찰
이런 루프조차 구상할 수 없다면, 대화형 모드에서도 LLM을 이용해 코드를 수정할 수 없다는 뜻입니다.
claude -p 플래그는 Claude Code를 프롬프트와 함께 비대화형으로 실행하고 완료되면 종료합니다. 호출을 연결하여 파이프라인을 구축하세요:
#!/bin/bash
# daily-dev.sh — 기능 브랜치를 위한 순차 파이프라인
set -e
# 1단계: 기능 구현
claude -p "docs/auth-spec.md에 있는 스펙을 읽으세요. src/auth/에 OAuth2 로그인을 구현하세요. 먼저 테스트를 작성하세요(TDD). 새로운 문서 파일을 생성하지 마세요."
# 2단계: De-sloppify (정리 패스)
claude -p "이전 커밋에서 변경된 모든 파일을 검토하세요. 불필요한 타입 테스트, 지나치게 방어적인 검사, 또는 언어 기능(예: TypeScript 제네릭이 작동하는지 테스트) 테스트를 제거하세요. 실제 비즈니스 로직 테스트는 유지하세요. 정리 후 테스트 스위트를 실행하세요."
# 3단계: 확인
claude -p "전체 빌드, 린트, 타입 검사 및 테스트 스위트를 실행하세요. 실패를 수정하세요. 새로운 기능을 추가하지 마세요."
# 4단계: 커밋
claude -p "스테이징된 모든 변경 사항에 대해 컨벤셔널 커밋을 생성하세요. 메시지로 'feat: add OAuth2 login flow'를 사용하세요."
핵심 설계 원칙
- 각 단계는 격리됩니다 —
claude -p호출마다 새로운 컨텍스트 창이므로 단계 간 컨텍스트가 누출되지 않습니다. - 순서가 중요합니다 — 단계는 순차적으로 실행됩니다. 각 단계는 이전 단계가 남긴 파일 시스템 상태를 기반으로 합니다.
- 부정 명령은 위험합니다 — "타입 시스템을 테스트하지 마세요"라고 말하지 마세요. 대신 별도의 정리 단계를 추가하세요 (De-Sloppify 패턴 참조).
- 종료 코드가 전파됩니다 —
set -e는 실패 시 파이프라인을 중단합니다.
변형
모델 라우팅 사용:
# Opus로 연구 (심층 추론)
claude -p --model opus "코드베이스 아키텍처를 분석하고 캐싱 추가를 위한 계획을 작성하세요..."
# Sonnet으로 구현 (빠르고 유능함)
claude -p "docs/caching-plan.md의 계획에 따라 캐싱 계층을 구현하세요..."
# Opus로 검토 (철저함)
claude -p --model opus "보안 문제, 경쟁 조건 및 엣지 케이스에 대한 모든 변경 사항을 검토하세요..."
환경 컨텍스트 사용:
# 프롬프트 길이가 아닌 파일을 통해 컨텍스트 전달
echo "집중 영역: auth 모듈, API 속도 제한" > .claude-context.md
claude -p ".claude-context.md를 읽고 우선순위를 확인하세요. 순서대로 작업하세요."
rm .claude-context.md
--allowedTools 제한 사용:
# 읽기 전용 분석 패스
claude -p --allowedTools "Read,Grep,Glob" "이 코드베이스에서 보안 취약점을 감사하세요..."
# 쓰기 전용 구현 패스
claude -p --allowedTools "Read,Write,Edit,Bash" "security-audit.md의 수정 사항을 구현하세요..."
2. NanoClaw REPL
ECC의 내장 지속 루프. 전체 대화 기록과 함께 동기식으로 claude -p를 호출하는 세션 인식 REPL입니다.
# 기본 세션 시작
node scripts/claw.js
# 스킬 컨텍스트가 있는 명명된 세션
CLAW_SESSION=my-project CLAW_SKILLS=tdd-workflow,security-review node scripts/claw.js
작동 방식
~/.claude/claw/{session}.md에서 대화 기록 로드- 각 사용자 메시지는 전체 기록을 컨텍스트로
claude -p에 전송 - 응답이 세션 파일에 추가됨 (데이터베이스로서의 마크다운)
- 세션은 재시작 후에도 유지됨
NanoClaw vs 순차 파이프라인 사용 시기
| 사용 사례 | NanoClaw | 순차 파이프라인 |
|---|---|---|
| 대화형 탐색 | 예 | 아니오 |
| 스크립트 기반 자동화 | 아니오 | 예 |
| 세션 지속성 | 내장 | 수동 |
| 컨텍스트 누적 | 턴마다 증가 | 각 단계마다 새로 고침 |
| CI/CD 통합 | 낮음 | 우수 |
전체 내용은 /claw 명령 문서를 참조하세요.
3. 무한 에이전트 루프
두 개의 프롬프트 시스템으로, 사양 기반 생성을 위해 병렬 하위 에이전트를 오케스트레이션합니다. disler에 의해 개발됨 (크레딧: @disler).
아키텍처: 두 개의 프롬프트 시스템
프롬프트 1 (오케스트레이터) 프롬프트 2 (하위 에이전트)
┌─────────────────────┐ ┌──────────────────────┐
│ 사양 파일 파싱 │ │ 전체 컨텍스트 수신 │
│ 출력 디렉토리 스캔 │ 배포 │ 할당된 번호 읽기 │
│ 반복 계획 수립 │────────────│ 사양을 정확히 따름 │
│ 창의적 방향 할당 │ N 에이전트 │ 고유한 출력 생성 │
│ 웨이브 관리 │ │ 출력 디렉토리에 저장 │
└─────────────────────┘ └──────────────────────┘
패턴
- 사양 분석 — 오케스트레이터가 생성할 내용을 정의하는 사양 파일(Markdown)을 읽습니다.
- 디렉토리 정찰 — 기존 출력을 스캔하여 가장 높은 반복 번호를 찾습니다.
- 병렬 배포 — 각각 다음을 포함하는 N개의 하위 에이전트를 시작합니다:
- 전체 사양
- 고유한 창의적 방향
- 특정 반복 번호 (충돌 없음)
- 기존 반복 스냅샷 (고유성 보장)
- 웨이브 관리 — 무한 모드의 경우 컨텍스트가 소진될 때까지 3-5개의 에이전트 웨이브를 배포합니다.
Claude Code 명령을 통한 구현
.claude/commands/infinite.md 생성:
$ARGUMENTS에서 다음 인수를 파싱하세요:
1. spec_file — 사양 마크다운 파일 경로
2. output_dir — 반복이 저장되는 디렉토리
3. count — 정수 1-N 또는 "infinite"
1단계: 사양을 읽고 깊이 이해하세요.
2단계: output_dir를 나열하고 가장 높은 반복 번호를 찾으세요. N+1부터 시작하세요.
3단계: 창의적 방향을 계획하세요 — 각 에이전트는 다른 테마/접근 방식을 받습니다.
4단계: 하위 에이전트를 병렬로 배포하세요 (Task 도구 사용). 각 에이전트는 다음을 받습니다:
- 전체 사양 텍스트
- 현재 디렉토리 스냅샷
- 할당된 반복 번호
- 고유한 창의적 방향
5단계 (무한 모드): 컨텍스트가 부족할 때까지 3-5개의 웨이브로 반복하세요.
호출:
/project:infinite specs/component-spec.md src/ 5
/project:infinite specs/component-spec.md src/ infinite
배치 전략
| 개수 | 전략 |
|---|---|
| 1-5 | 모든 에이전트 동시에 |
| 6-20 | 5개씩 배치 |
| 무한 | 3-5개 웨이브, 점진적 정교화 |
핵심 통찰: 할당을 통한 고유성
에이전트가 스스로 차별화하도록 의존하지 마세요. 오케스트레이터가 각 에이전트에 할당하는 고유한 창의적 방향과 반복 번호가 있어야 합니다. 이는 병렬 에이전트 간 중복 개념을 방지합니다.
4. 지속적 Claude PR 루프
프로덕션 등급 셸 스크립트로, Claude Code를 지속적 루프로 실행하여 PR을 생성하고 CI를 기다린 후 자동으로 병합합니다. AnandChowdhary가 제작 (크레딧: @AnandChowdhary).
핵심 루프
┌─────────────────────────────────────────────────────┐
│ 지속적 CLAUDE 반복 │
│ │
│ 1. 브랜치 생성 (continuous-claude/iteration-N) │
│ 2. 개선된 프롬프트로 claude -p 실행 │
│ 3. (선택 사항) 검토자 패스 — 별도의 claude -p │
│ 4. 변경 사항 커밋 (claude가 메시지 생성) │
│ 5. 푸시 + PR 생성 (gh pr create) │
│ 6. CI 검사 대기 (gh pr checks 폴링) │
│ 7. CI 실패? → 자동 수정 패스 (claude -p) │
│ 8. PR 병합 (squash/merge/rebase) │
│ 9. main으로 복귀 → 반복 │
│ │
│ 제한: --max-runs N | --max-cost $X │
│ --max-duration 2h | 완료 신호 │
└─────────────────────────────────────────────────────┘
설치
경고: 코드를 검토한 후 저장소에서 continuous-claude를 설치하세요. 외부 스크립트를 bash에 직접 파이프하지 마세요.
사용법
# 기본: 10회 반복
continuous-claude --prompt "테스트되지 않은 모든 함수에 단위 테스트 추가" --max-runs 10
# 비용 제한
continuous-claude --prompt "모든 린터 오류 수정" --max-cost 5.00
# 시간 제한
continuous-claude --prompt "테스트 범위 개선" --max-duration 8h
# 코드 리뷰 패스 포함
continuous-claude \
--prompt "인증 기능 추가" \
--max-runs 10 \
--review-prompt "npm test && npm run lint 실행, 실패 수정"
# 워크트리를 통한 병렬 실행
continuous-claude --prompt "테스트 추가" --max-runs 5 --worktree tests-worker &
continuous-claude --prompt "코드 리팩토링" --max-runs 5 --worktree refactor-worker &
wait
반복 간 컨텍스트: SHARED_TASK_NOTES.md
핵심 혁신: 반복 간에 유지되는 SHARED_TASK_NOTES.md 파일:
## 진행 상황
- [x] auth 모듈 테스트 추가 (반복 1)
- [x] 토큰 갱신 엣지 케이스 수정 (반복 2)
- [ ] 아직 필요: 속도 제한 테스트, 에러 경계 테스트
## 다음 단계
- 다음에는 속도 제한 모듈에 집중
- tests/helpers.ts의 목업 설정을 재사용 가능
Claude는 반복 시작 시 이 파일을 읽고 반복 종료 시 업데이트합니다. 이는 독립적인 claude -p 호출 간의 컨텍스트 격차를 해소합니다.
CI 실패 복구
PR 검사가 실패하면 Continuous Claude는 자동으로:
gh run list를 통해 실패한 실행 ID를 가져옴- CI 수정 컨텍스트로 새
claude -p를 생성 - Claude가
gh run view를 통해 로그를 검사하고 코드를 수정, 커밋, 푸시 - 검사를 다시 기다림 (최대
--ci-retry-max시도)
완료 신호
Claude는 매직 문구를 출력하여 "완료"를 알릴 수 있습니다:
continuous-claude \
--prompt "이슈 트래커의 모든 버그 수정" \
--completion-signal "CONTINUOUS_CLAUDE_PROJECT_COMPLETE" \
--completion-threshold 3 # 연속 3번 신호 후 중지
3번의 연속 반복이 완료를 알리면 루프가 중지되어 완료된 작업에 대한 불필요한 실행을 방지합니다.
주요 설정
| 플래그 | 목적 |
|---|---|
--max-runs N | 성공적인 N회 반복 후 중지 |
--max-cost $X | $X 지출 후 중지 |
--max-duration 2h | 경과 시간 후 중지 |
--merge-strategy squash | squash, merge 또는 rebase |
--worktree <name> | git 워크트리를 통한 병렬 실행 |
--disable-commits | 드라이런 모드 (git 작업 없음) |
--review-prompt "..." | 반복당 검토자 패스 추가 |
--ci-retry-max N | CI 실패 자동 수정 (기본값: 1) |
5. De-Sloppify 패턴
모든 루프에 대한 추가 패턴. 각 구현자 단계 후 전용 정리/리팩토링 단계를 추가합니다.
문제
LLM에게 TDD로 구현하라고 요청하면 "테스트 작성"을 너무 문자 그대로 받아들입니다:
- TypeScript의 타입 시스템이 작동하는지 확인하는 테스트 (
typeof x === 'string'테스트) - 타입 시스템이 이미 보장하는 것에 대한 지나치게 방어적인 런타임 검사
- 비즈니스 로직보다는 프레임워크 동작에 대한 테스트
- 실제 코드를 모호하게 만드는 과도한 오류 처리
왜 부정 명령이 아닌가?
구현자 프롬프트에 "타입 시스템을 테스트하지 마세요" 또는 "불필요한 검사를 추가하지 마세요"를 추가하면 다음과 같은 하류 효과가 있습니다:
- 모델이 모든 테스트에 대해 주저하게 됨
- 합법적인 엣지 케이스 테스트를 건너뜀
- 품질이 예측 불가능하게 저하됨
해결책: 별도의 패스
구현자를 제한하는 대신 철저하게 두세요. 그런 다음 집중된 정리 에이전트를 추가하세요:
# 1단계: 구현 (철저하게 두기)
claude -p "완전한 TDD로 기능을 구현하세요. 테스트를 철저히 작성하세요."
# 2단계: De-sloppify (별도의 컨텍스트, 집중된 정리)
claude -p "작업 트리의 모든 변경 사항을 검토하세요. 다음을 제거하세요:
- 비즈니스 로직이 아닌 언어/프레임워크 동작을 확인하는 테스트
- 타입 시스템이 이미 적용하는 중복 타입 검사
- 불가능한 상태에 대한 지나치게 방어적인 오류 처리
- Console.log 문
- 주석 처리된 코드
모든 비즈니스 로직 테스트는 유지하세요. 정리 후 테스트 스위트를 실행하여 아무것도 깨지지 않았는지 확인하세요."
루프 컨텍스트에서
for feature in "${features[@]}"; do
# 구현
claude -p "$feature를 TDD로 구현하세요."
# De-sloppify
claude -p "정리 패스: 변경 사항 검토, 테스트/코드 슬롭 제거, 테스트 실행."
# 확인
claude -p "빌드 + 린트 + 테스트를 실행하세요. 실패를 수정하세요."
# 커밋
claude -p "메시지로 커밋: feat: add $feature"
done
핵심 통찰
하류 품질 영향을 주는 부정 명령을 추가하는 대신, 별도의 de-sloppify 패스를 추가하세요. 두 개의 집중된 에이전트가 하나의 제약된 에이전트보다 더 나은 성과를 냅니다.
6. Ralphinho / RFC 기반 DAG 오케스트레이션
가장 정교한 패턴. RFC 기반의 다중 에이전트 파이프라인입니다.