GAN-Style Harness 스킬
Anthropic의 장기 실행 애플리케이션 개발을 위한 하네스 설계에서 영감을 받음 (2026년 3월 24일)
생성과 평가를 분리하는 다중 에이전트 하네스입니다. 이는 적대적 피드백 루프를 생성하여 단일 에이전트가 달성할 수 있는 것보다 훨씬 뛰어난 품질을 제공합니다.
핵심 통찰
에이전트가 자신의 작업을 평가하도록 요청받으면, 병적인 낙관론자가 됩니다. 형편없는 결과물을 칭찬하고, 정당한 문제를 스스로 합리화합니다. 그러나 별도의 평가기를 가차 없이 엄격하게 만드는 것은 생성기에게 자기 비판을 가르치는 것보다 훨씬 다루기 쉽습니다.
이는 GAN(생성적 적대 신경망)과 동일한 역학입니다. 생성기는 결과물을 만들고, 평가기는 이를 비판하며, 그 피드백이 다음 반복을 주도합니다.
사용 시기
- 한 줄 프롬프트로 완전한 애플리케이션 구축
- 높은 시각적 품질이 필요한 프론트엔드 디자인 작업
- 코드뿐만 아니라 작동하는 기능이 필요한 풀스택 프로젝트
- "AI 슬롭" 미학이 용납되지 않는 모든 작업
- 프로덕션 품질의 결과물을 위해 $50-200을 투자할 의향이 있는 프로젝트
사용하지 말아야 할 때
- 빠른 단일 파일 수정 (표준
claude -p사용) - 예산이 빡빡한 작업 (<$10)
- 간단한 리팩토링 (대신 de-sloppify 패턴 사용)
- 이미 테스트와 함께 잘 명세된 작업 (TDD 워크플로우 사용)
아키텍처
┌─────────────┐
│ 플래너 │
│ (Sonnet) │
└──────┬──────┘
│ 제품 사양
│ (기능, 스프린트, 디자인 방향)
▼
┌────────────────────────┐
│ │
│ 생성기-평가기 │
│ 피드백 루프 │
│ │
│ ┌──────────┐ │
│ │ 생성기 │--구축-->│──┐
│ │ (Sonnet) │ │ │
│ └────▲─────┘ │ │
│ │ │ │ 실제 앱
│ 피드백 │ │
│ │ │ │
│ ┌────┴─────┐ │ │
│ │ 평가기 │<-테스트--│──┘
│ │ (Sonnet) │ │
│ │+Playwright│ │
│ └──────────┘ │
│ │
│ 5-15회 반복 │
└────────────────────────┘
세 가지 에이전트
1. 플래너 에이전트
역할: 제품 관리자 — 간단한 프롬프트를 완전한 제품 사양으로 확장합니다.
주요 동작:
- 한 줄 프롬프트를 받아 16개 기능, 다중 스프린트 사양을 생성
- 사용자 스토리, 기술 요구사항, 시각적 디자인 방향 정의
- 의도적으로 야심차게 설계 — 보수적인 계획은 실망스러운 결과를 초래
- 평가기가 나중에 사용할 평가 기준 생성
모델: 기본값 Sonnet; GAN_PLANNER_MODEL=opus로 설정하면 더 깊은 사양 확장 가능
2. 생성기 에이전트
역할: 개발자 — 사양에 따라 기능을 구현합니다.
주요 동작:
- 구조화된 스프린트(또는 최신 모델의 경우 연속 모드)로 작업
- 코드를 작성하기 전에 평가기와 "스프린트 계약" 협상
- 풀스택 도구 사용: React, FastAPI/Express, 데이터베이스, CSS
- 반복 간 버전 관리를 위해 git 관리
- 평가기 피드백을 읽고 다음 반복에 반영
모델: 기본값 Sonnet; GAN_GENERATOR_MODEL=opus로 설정하면 최대 코딩 능력 발휘
3. 평가기 에이전트
역할: QA 엔지니어 — 코드뿐만 아니라 실제 실행 중인 애플리케이션을 테스트합니다.
주요 동작:
- Playwright MCP를 사용하여 실제 애플리케이션과 상호작용
- 기능을 클릭하고, 양식을 작성하고, API 엔드포인트 테스트
- 네 가지 기준(구성 가능)으로 점수 평가:
- 디자인 품질 — 일관된 전체로 느껴지는가?
- 독창성 — 템플릿/AI 패턴 대비 사용자 정의 결정?
- 장인정신 — 타이포그래피, 간격, 애니메이션, 미세 상호작용?
- 기능성 — 모든 기능이 실제로 작동하는가?
- 점수와 특정 문제점이 포함된 구조화된 피드백 반환
- 가차없이 엄격하게 설계 — 평범한 작업을 결코 칭찬하지 않음
모델: 기본값 Sonnet; GAN_EVALUATOR_MODEL=opus로 설정하면 더 강력한 판단력과 도구 사용 가능
평가 기준
기본 네 가지 기준, 각각 1-10점:
## 평가 루브릭
### 디자인 품질 (가중치: 0.3)
- 1-3: 일반적, 템플릿 같음, "AI 슬롭" 미학
- 4-6: 준수하지만 눈에 띄지 않음, 관례를 따름
- 7-8: 독특하고 일관된 시각적 정체성
- 9-10: 전문 디자이너의 작품으로 오해될 수 있음
### 독창성 (가중치: 0.2)
- 1-3: 기본 색상, 표준 레이아웃, 개성 없음
- 4-6: 일부 사용자 정의 선택, 대부분 표준 패턴
- 7-8: 명확한 창의적 비전, 독특한 접근 방식
- 9-10: 놀랍고, 즐겁고, 진정으로 참신함
### 장인정신 (가중치: 0.3)
- 1-3: 깨진 레이아웃, 누락된 상태, 애니메이션 없음
- 4-6: 작동하지만 거친 느낌, 일관성 없는 간격
- 7-8: 세련되고, 부드러운 전환, 반응형
- 9-10: 픽셀 완벽, 매력적인 미세 상호작용
### 기능성 (가중치: 0.2)
- 1-3: 핵심 기능이 깨졌거나 누락됨
- 4-6: 해피 패스는 작동하지만, 에지 케이스는 실패
- 7-8: 모든 기능 작동, 우수한 오류 처리
- 9-10: 무적, 모든 에지 케이스 처리
점수 산정
- 가중 점수 = 합계(기준_점수 * 가중치)
- 통과 임계값 = 7.0 (구성 가능)
- 최대 반복 = 15 (구성 가능, 일반적으로 5-15면 충분)
사용법
명령어를 통해
# 전체 세 에이전트 하네스
/project:gan-build "칸반 보드, 팀 협업, 다크 모드가 있는 프로젝트 관리 앱 구축"
# 사용자 정의 구성 사용
/project:gan-build "레시피 공유 플랫폼 구축" --max-iterations 10 --pass-threshold 7.5
# 프론트엔드 디자인 모드 (플래너 없이 생성기 + 평가기만)
/project:gan-design "암호화폐 포트폴리오 트래커를 위한 랜딩 페이지 만들기"
셸 스크립트를 통해
# 기본 사용법
./scripts/gan-harness.sh "음악 스트리밍 대시보드 구축"
# 옵션 사용
GAN_MAX_ITERATIONS=10 \
GAN_PASS_THRESHOLD=7.5 \
GAN_EVAL_CRITERIA="functionality,performance,security" \
./scripts/gan-harness.sh "작업 관리를 위한 REST API 구축"
Claude Code를 통해 (수동)
# 1단계: 계획
claude -p --model sonnet "당신은 제품 플래너입니다. PLANNER_PROMPT.md를 읽으십시오. 이 간단한 설명을 완전한 제품 사양으로 확장하십시오: '칸반 보드 앱 구축'. 사양을 spec.md에 작성하십시오."
# 2단계: 생성 (1회차)
claude -p --model sonnet "당신은 생성기입니다. spec.md를 읽으십시오. 스프린트 1을 구현하십시오. 포트 3000에서 개발 서버를 시작하십시오."
# 3단계: 평가 (1회차)
claude -p --model sonnet --allowedTools "Read,Bash,mcp__playwright__*" "당신은 평가기입니다. EVALUATOR_PROMPT.md를 읽으십시오. http://localhost:3000에서 실제 앱을 테스트하십시오. 루브릭에 따라 점수를 매기십시오. 피드백을 feedback-001.md에 작성하십시오."
# 4단계: 생성 (2회차 — 피드백 읽기)
claude -p --model sonnet "당신은 생성기입니다. spec.md와 feedback-001.md를 읽으십시오. 모든 문제를 해결하십시오. 점수를 향상시키십시오."
# 통과 임계값에 도달할 때까지 3-4단계 반복
모델 역량에 따른 진화
모델이 개선됨에 따라 하네스는 단순화되어야 합니다. Anthropic의 진화 방식을 따릅니다:
1단계 — 약한 모델 (Sonnet급)
- 전체 스프린트 분해 필요
- 스프린트 간 컨텍스트 재설정 (컨텍스트 불안 방지)
- 최소 2개 에이전트: 초기화 + 코딩 에이전트
- 무거운 스캐폴딩이 모델의 한계를 보완
2단계 — 유능한 모델 (Opus 4.5급)
- 전체 3개 에이전트 하네스: 플래너 + 생성기 + 평가기
- 각 구현 단계 전 스프린트 계약
- 복잡한 앱을 위한 10개 스프린트 분해
- 컨텍스트 재설정이 여전히 유용하지만 덜 중요
3단계 — 최첨단 모델 (Opus 4.6급)
- 단순화된 하네스: 단일 계획 패스, 연속 생성
- 평가가 단일 최종 패스로 축소 (모델이 더 똑똑함)
- 스프린트 구조 불필요
- 자동 압축이 컨텍스트 성장 처리
핵심 원칙: 모든 하네스 구성 요소는 모델이 단독으로 할 수 없는 것에 대한 가정을 인코딩합니다. 모델이 개선되면 그 가정을 다시 테스트하십시오. 더 이상 필요하지 않은 것은 제거하십시오.
구성
환경 변수
| 변수 | 기본값 | 설명 |
|---|---|---|
GAN_MAX_ITERATIONS | 15 | 최대 생성기-평가기 주기 |
GAN_PASS_THRESHOLD | 7.0 | 통과를 위한 가중 점수 (1-10) |
GAN_PLANNER_MODEL | sonnet | 플래닝 에이전트용 모델 |
GAN_GENERATOR_MODEL | sonnet | 생성기 에이전트용 모델 |
GAN_EVALUATOR_MODEL | sonnet | 평가기 에이전트용 모델 |
GAN_EVAL_CRITERIA | design,originality,craft,functionality | 쉼표로 구분된 기준 |
GAN_DEV_SERVER_PORT | 3000 | 실제 앱용 포트 |
GAN_DEV_SERVER_CMD | npm run dev | 개발 서버 시작 명령어 |
GAN_PROJECT_DIR | . | 프로젝트 작업 디렉토리 |
GAN_SKIP_PLANNER | false | 플래너 건너뛰기, 사양 직접 사용 |
GAN_EVAL_MODE | playwright | playwright, screenshot, 또는 code-only |
평가 모드
| 모드 | 도구 | 최적 대상 |
|---|---|---|
playwright | 브라우저 MCP + 실제 상호작용 | UI가 있는 풀스택 앱 |
screenshot | 스크린샷 + 시각적 분석 | 정적 사이트, 디자인 전용 |
code-only | 테스트 + 린팅 + 빌드 | API, 라이브러리, CLI 도구 |
안티패턴
-
평가기가 너무 관대함 — 평가기가 1회차에 모든 것을 통과시킨다면, 루브릭이 너그러운 것입니다. 점수 기준을 강화하고 일반적인 AI 패턴에 대한 명시적 패널티를 추가하십시오.
-
생성기가 피드백을 무시함 — 피드백이 인라인이 아닌 파일로 전달되는지 확인하십시오. 생성기는 각 반복 시작 시
feedback-NNN.md를 읽어야 합니다. -
무한 루프 — 항상
GAN_MAX_ITERATIONS를 설정하십시오. 생성기가 3회 반복 후에도 점수 정체를 넘어 개선할 수 없다면 중단하고 인간 검토를 위해 플래그를 지정하십시오. -
평가기가 피상적으로 테스트함 — 평가기는 Playwright를 사용하여 실제 앱과 상호작용해야 하며, 단순히 스크린샷만 찍어서는 안 됩니다. 버튼을 클릭하고, 양식을 작성하고, 오류 상태를 테스트하십시오.
-
평가기가 자신의 수정 사항을 칭찬함 — 평가기가 수정 사항을 제안한 다음 그 수정 사항을 평가하도록 절대 허용하지 마십시오. 평가기는 비판만 하고; 생성기가 수정합니다.
-
컨텍스트 소진 — 긴 세션의 경우 Claude Agent SDK의 자동 압축을 사용하거나 주요 단계 사이에 컨텍스트를 재설정하십시오.
결과: 기대할 수 있는 것
Anthropic의 발표된 결과에 기반:
| 지표 | 단일 에이전트 | GAN 하네스 | 개선 |
|---|---|---|---|
| 시간 | 20분 | 4-6시간 | 12-18배 증가 |
| 비용 | $9 | $125-200 | 14-22배 증가 |
| 품질 | 간신히 작동 | 프로덕션 준비 | 단계적 변화 |
| 핵심 기능 | 깨짐 | 모두 작동 | N/A |
| 디자인 | 일반적 AI 슬롭 | 독특하고 세련됨 | N/A |
트레이드오프는 명확합니다: 출력 품질의 질적 도약을 위해 약 20배의 시간과 비용이 더 듭니다. 이것은 품질이 중요한 프로젝트를 위한 것입니다.
참고 자료
- Anthropic: 장기 실행 앱을 위한 하네스 설계 — Prithvi Rajasekaran의 원본 논문
- Epsilla: GAN 스타일 에이전트 루프 — 아키텍처 분석
- Martin Fowler: 하네스 엔지니어링 — 더 넓은 산업 맥락
- OpenAI: 하네스 엔지니어링 — OpenAI의 병렬 연구