핵심 원칙
사람의 개입 없이 실제로 동작하는 프로젝트를 완성한다. 빌드 오류, 타입 오류, 린트 오류가 남은 프로젝트는 "완성"이 아니다. 사람은 완성된 결과물만 받는다.
Phase -0.5: OMC/ECC 환경 감지
이 단계는 모든 Phase보다 먼저 자동으로 실행된다. 사용자에게는 별도로 고지하지 않는다.
감지 로직
현재 세션에서 사용 가능한 스킬 목록을 확인한다:
if "oh-my-claudecode:" in available_skills:
OMC_MODE = "omc"
elif "everything-claude-code:" in available_skills:
OMC_MODE = "ecc"
else:
OMC_MODE = "none"
OMC_MODE 값에 따라 이후 모든 Phase에서 Agent 위임 전략이 달라진다.
OMC_MODE = "omc" 일 때 가장 풍부한 스킬 조합을 활용한다.
Phase -1: 체크포인트 확인 + 인터랙티브 설정
0단계 — 이전 실행 체크포인트 확인
스킬 시작 직후 체크포인트 파일을 탐색한다:
ls .auto-project-builder-checkpoint.json 2>/dev/null
파일이 존재하면 내용을 읽어 아래 정보를 추출한다:
- 실행 날짜, 플랫폼, 스택, 총 프로젝트 수
- 완료된 프로젝트 목록
- 남은 프로젝트 목록
그 후 AskUserQuestion 도구로 확인:
이전 실행에서 중단된 작업이 있습니다.
실행일: {날짜} / 플랫폼: {PLATFORM} / 스택: {TECH_STACK}
완료: {완료 목록} / 남은 것: {미완료 목록}
이어서 진행할까요, 아니면 새로 시작할까요?
1. 이어서 진행 — 완료된 프로젝트는 건너뛰고 남은 것부터 시작
2. 새로 시작 — 이전 체크포인트 삭제 후 처음부터
- 이어서 진행 선택: 저장된 변수를 복원하고 Phase 2 루프로 바로 진입
- 새로 시작 선택: 체크포인트 삭제 후 아래 질문 1로 진행
체크포인트 파일이 없으면 질문 1로 바로 진행.
질문 1 — 플랫폼
어떤 플랫폼의 프로젝트를 만들고 싶으신가요?
1. 웹 (Web) — 브라우저에서 동작하는 웹 앱
2. 앱 (Mobile App) — iOS / Android 모바일 앱
3. CLI — 터미널에서 동작하는 커맨드라인 도구
4. 알아서 — 트렌드·서비스 유형 기반으로 자율 선택
5. 자유롭게 — 직접 설명해 주세요
"알아서" 선택 시: Phase 0-B 트렌드 조사 결과와 SERVICE_CATEGORIES를 바탕으로
가장 적합한 플랫폼을 자율 결정하고 이유와 함께 고지한 뒤 진행한다.
예: 알아서 선택: 웹 — 생산성 SaaS는 브라우저 접근성이 전환율에 직결되므로
→ 선택 결과를 PLATFORM에 저장.
질문 1.5 — 아이디어 유무
생각하고 계신 아이디어가 있으신가요?
1. 알아서 — 트렌드·카테고리 기반으로 아이디어를 자율 기획합니다
2. 직접 입력 — 만들고 싶은 서비스를 설명해 주세요
"직접 입력" 선택 시:
- 사용자로부터 아이디어 설명을 자유 텍스트로 입력받는다
- 입력 내용을
USER_IDEA에 저장 - 사용자가 원하는 서비스가 명확하므로 PROJECT_COUNT = 1로 자동 설정
- 서비스 유형(Q3)과 프로젝트 개수(Q4)는 물어보지 않는다 → 질문 2로 바로 진행
- 기술 스택(Q2)은 선호 여부만 확인 (없어도 Phase 1에서 아이디어에 맞게 자율 결정)
"알아서" 선택 시:
USER_IDEA = null로 저장- 기존 흐름대로 Q2 → Q3 → Q4 순서로 진행
→ 선택 결과를 USER_IDEA에 저장 (직접 입력 텍스트 또는 null).
질문 2 — 선호하는 기술 스택 (PLATFORM 및 USER_IDEA 기반 추천)
이 질문은 항상 표시된다. 단, USER_IDEA가 있을 경우 추천 스택이 아이디어 내용을 반영한다.
PLATFORM = 웹 (또는 USER_IDEA가 웹 서비스인 경우):
선호하는 기술 스택이 있으신가요?
1. Next.js 14+ · shadcn/ui · Drizzle + SQLite (추천)
2. Nuxt 3 · Tailwind CSS · PGlite
3. SvelteKit · shadcn-svelte · Drizzle + SQLite
4. Remix · shadcn/ui · Drizzle + SQLite
5. 없음 — 아이디어가 정해지면 각 프로젝트에 맞는 스택을 자율 선택
6. 직접 입력 — 원하는 스택을 설명해 주세요
PLATFORM = 앱 (또는 USER_IDEA가 모바일 앱인 경우):
선호하는 기술 스택이 있으신가요?
1. React Native + Expo · SQLite (expo-sqlite) (추천)
2. Flutter · Dart · sqflite
3. 없음 — 아이디어가 정해지면 각 프로젝트에 맞는 스택을 자율 선택
4. 직접 입력 — 원하는 스택을 설명해 주세요
PLATFORM = CLI (또는 USER_IDEA가 CLI 도구인 경우):
선호하는 기술 스택이 있으신가요?
1. Node.js · TypeScript · Commander.js · SQLite (추천)
2. Python · Typer · Click · SQLite
3. Go · Cobra · SQLite
4. Rust · Clap · SQLite
5. 없음 — 아이디어가 정해지면 각 프로젝트에 맞는 스택을 자율 선택
6. 직접 입력 — 원하는 스택을 설명해 주세요
PLATFORM = 알아서 / 자유롭게:
선호하는 기술 스택이 있으신가요?
(예: "Electron + React + SQLite", "FastAPI + HTMX + PostgreSQL" 등)
1. 없음 — 아이디어가 정해지면 각 프로젝트에 맞는 스택을 자율 선택
2. 직접 입력 — 원하는 스택을 설명해 주세요
"없음" 선택 시: TECH_STACK = "auto-per-idea"로 저장.
Phase 1에서 각 아이디어의 특성(플랫폼, 규모, 복잡도)을 고려해 프로젝트별로
최적 스택을 독립적으로 결정하고, PRD 작성 전 선택 이유와 함께 고지한다.
예: 스택 선택: Flutter — 크로스플랫폼 네이티브 UI가 이 앱의 핵심 경험에 적합하므로
복수 프로젝트일 경우 아이디어마다 다른 스택이 선택될 수 있다. 예: 아이디어 1 → Next.js, 아이디어 2 → SvelteKit, 아이디어 3 → Remix
→ 선택/입력 결과를 TECH_STACK에 저장.
질문 3 — 서비스 유형
이 질문은
USER_IDEA = null(알아서 경로)일 때만 표시된다. USER_IDEA가 있으면 서비스 유형은 Phase 1에서 아이디어 내용을 기반으로 자율 결정한다.
어떤 유형의 서비스를 만들고 싶으신가요?
(복수 선택 가능)
1. 생산성 — 할 일 관리, 시간 추적, 노트, 자동화
2. 콘텐츠 — 블로그, 미디어, 뉴스레터, 크리에이터 도구
3. 팀·협업 — 팀 관리, 소통, 프로젝트 추적
4. 커머스 — 쇼핑, 마켓플레이스, 구독
5. 교육 — 학습, 퀴즈, 튜터링, 플래시카드
6. 헬스·라이프 — 건강 추적, 피트니스, 웰빙, 식단
7. 파이낸스 — 예산 관리, 투자, 가계부
8. 개발자 도구 — 유틸리티, API 도구, 코드 분석
9. 커뮤니티 — 소셜, 포럼, 네트워킹
10. 알아서 — 트렌드 조사 기반으로 유망 카테고리 자율 선택
11. 자유롭게 — 직접 설명해 주세요
"알아서" 선택 시: Phase 0-B 트렌드 조사 결과(TREND_DATA.market_gaps, TREND_DATA.trending_categories)를
기반으로 현재 가장 유망한 카테고리를 자율 선택하고 이유와 함께 고지한 뒤 진행한다.
예: 알아서 선택: 개발자 도구 — GitHub Trending에서 AI 코드 도구 수요가 급증 중이므로
→ 선택 결과(복수 가능)를 SERVICE_CATEGORIES[]에 저장.
질문 4 — 프로젝트 개수
이 질문은
USER_IDEA = null(알아서 경로)일 때만 표시된다. USER_IDEA가 있으면 PROJECT_COUNT = 1로 자동 설정하고 이 질문은 건너뛴다.
총 몇 개의 서비스를 만들까요? (기본값: 5, 최대: 10)
숫자 입력, 또는:
- 알아서 — 선택한 카테고리 수와 트렌드 밀도를 기반으로 자율 결정
"알아서" 선택 시: SERVICE_CATEGORIES 수와 TREND_DATA.competitive_density를 기반으로
적정 개수를 결정한다. 카테고리 1개당 2–3개, 최대 10개를 초과하지 않는다.
예: 알아서 선택: 6개 — 카테고리 2개 × 3개씩
→ 입력값을 PROJECT_COUNT에 저장. 빈 입력이면 5. "알아서"이면 위 공식으로 계산.
설정 요약 출력
USER_IDEA가 있는 경우 (직접 입력 경로):
━━━ 설정 요약 ━━━
플랫폼: {PLATFORM}
아이디어: {USER_IDEA}
선호 스택: {TECH_STACK | "아이디어 기반 자율 선택"}
서비스 유형: 아이디어 기반 자율 결정
프로젝트 수: 1개
━━━━━━━━━━━━━━━━━
진행할까요? (yes / 취소)
USER_IDEA가 없는 경우 (알아서 경로):
━━━ 설정 요약 ━━━
플랫폼: {PLATFORM}
선호 스택: {TECH_STACK | "아이디어별 자율 선택"}
서비스 유형: {SERVICE_CATEGORIES}
프로젝트 수: {PROJECT_COUNT}개
━━━━━━━━━━━━━━━━━
진행할까요? (yes / 취소)
사용자가 yes가 아닌 경우 Phase -1 처음으로 돌아간다.
Phase 0: 환경 조사
Context7 조사와 트렌드 조사를 병렬로 실행한다.
0-A. Context7 스택 조사 (병렬 레인 1)
TECH_STACK에 포함된 라이브러리/프레임워크의 최신 버전과 권장 사용 패턴 조사.
# 공통
mcp__context7__resolve-library-id("drizzle-orm")
# 웹 — Next.js 선택 시
mcp__context7__resolve-library-id("next.js")
mcp__context7__resolve-library-id("shadcn/ui")
mcp__context7__resolve-library-id("better-sqlite3")
mcp__context7__resolve-library-id("next-auth")
# 앱 — React Native 선택 시
mcp__context7__resolve-library-id("react-native")
mcp__context7__resolve-library-id("expo")
# CLI — Node.js 선택 시
mcp__context7__resolve-library-id("commander")
mcp__context7__resolve-library-id("inquirer")
# ... 선택 스택에 맞게 동적으로 조사
조사 결과를 STACK_VERSIONS에 저장.
0-B. 트렌드 조사 (병렬 레인 2)
OMC_MODE == "omc" 일 때도 WebSearch 또는 Exa로 직접 조사 (autoresearch는 웹 조사 도구가 아닌 반복 개선 루프이므로 사용하지 않는다):
그 외 모드에서도 동일하게 WebSearch 또는 Exa로 직접 조사:
# Product Hunt 최근 인기 서비스
WebSearch("site:producthunt.com {SERVICE_CATEGORIES} {PLATFORM} app 2025 2026")
# GitHub Trending 조사
WebSearch("github trending {TECH_STACK_KEYWORD} repositories 2025")
# 해당 카테고리 인기 앱/서비스 현황
WebSearch("{SERVICE_CATEGORIES} best apps 2025 market trends")
조사 결과를 TREND_DATA에 저장:
{
"trending_categories": ["현재 뜨는 세부 카테고리"],
"popular_features": ["사용자들이 원하는 기능"],
"market_gaps": ["아직 해결 안 된 문제"],
"competitive_density": "high | medium | low"
}
두 레인 완료 후 Phase 1로 진행.
변수 추적 (Variable Flow)
| 변수명 | 초기화 위치 | 타입/범위 |
|---|---|---|
OMC_MODE | Phase -0.5 | string: "omc" / "ecc" / "none" |
PLATFORM | Phase -1 Q1 | string: 웹/앱/CLI/auto/자유 |
USER_IDEA | Phase -1 Q1.5 | string(사용자 입력 텍스트) 또는 null; null이면 알아서 경로 |
TECH_STACK | Phase -1 Q2 | string: 선택 스택 명칭 또는 "auto-per-idea" (아이디어별 자율 결정) |
SERVICE_CATEGORIES[] | Phase -1 Q3 (USER_IDEA=null 시만) | string[]; "auto" 이면 트렌드 기반 자율 결정; USER_IDEA 있으면 Phase 1에서 자율 결정 |
PROJECT_COUNT | Phase -1 Q4 (USER_IDEA=null 시만) | 정수 1–10, 기본 5; USER_IDEA 있으면 1로 고정; "알아서" 이면 공식 계산 |
STACK_VERSIONS | Phase 0-A | 라이브러리 버전 맵 |
TREND_DATA | Phase 0-B | 트렌드 조사 결과 객체 |
IDEAS[] | Phase 1 | PROJECT_COUNT개 객체 배열 |
IDEA_SCORES[] | Phase 1.3 | idea-generator 출력: {idea, pain, market, originality, feasibility, flaw_penalty, total/15, verdict}[] |
GITHUB_REPOS[] | Phase 1.5 | {name, description, url}[] |
REJECTED_IDEAS[] | Phase 1.3 + 1.5 | 탈락 아이디어 + 사유 |
APPROVED_IDEAS[] | Phase 1.5 | 최종 승인 아이디어 |
REPLACEMENT_ATTEMPTS | Phase 1.3 + 1.5 | 정수, 최대 PROJECT_COUNT×3 |
PROJECT_LOG[] | Phase 2 | 완료 프로젝트 로그 |
QA_ATTEMPTS | Phase 2-4 | 프로젝트별 QA 재시도 횟수 |
RUN_DATE | Phase 3 시작 | YYYYMMDDHHmm 형식 (년월일시분, 예: 202605242157) |
CHECKPOINT_FILE | Phase -1 | .auto-project-builder-checkpoint.json |