---
name: setup-project-context
description: 프로젝트 전용 플레이스홀더가 있는 파일들을 인터뷰 방식으로 채우는 스킬. 대상 파일은 `.claude/CLAUDE.md`, `docs/PRD.md`, `docs/backend/README.md`, `docs/frontend/README.md`이며, 비어 있는 항목만 선택적으로 채운다. 새 프로젝트를 처음 세팅하거나, CLAUDE.md·PRD.md에 {프로젝트명}·{비즈니스 목표}·{배경 및 해결하려는 문제} 같은 미완성 플레이스홀더가 남아 있을 때 사용한다. "프로젝트 설정", "CLAUDE.md 채워줘", "PRD.md 채워줘", "프로젝트 초기화", "문서 설정해줘" 같은 요청에도 이 스킬을 사용한다.
model: opus
---

# 프로젝트 컨텍스트 설정

## 목적

프로젝트 전용 플레이스홀더가 있는 파일들을 실제 프로젝트 정보로 채운다.

**대상 파일**:

| 파일 | 채워야 할 플레이스홀더 |
|------|----------------------|
| `.claude/CLAUDE.md` | `{프로젝트명}` · `{프로젝트 한 줄 설명}` · `{비즈니스 목표 및 핵심 기능 설명}` · `{사용자 유형 · 인터페이스 · 진입점}` · `{디렉토리 구조 및 각 디렉토리 역할}` |
| `docs/backend/README.md` | `{프로젝트명}` |
| `docs/frontend/README.md` | `{프로젝트명}` |
| `docs/PRD.md` | `{PRD 한 줄 요약}` · `{배경 및 해결하려는 문제}` · `{비즈니스 목표 목록}` · `{핵심 성과 지표(KPI) 목록}` · `{이번 범위에서 제외하는 항목}` · `{사용자 유형}` · `{인터페이스명}` · `{진입점}` · `{기능별 요구사항 목록}` · `{성능, 보안, 가용성 등 비기능 요구사항}` · `{기술적·비즈니스적 제약}` · `{주요 마일스톤 및 일정}` |

---

## Step 1. 현재 상태 파악

작업 전 아래 파일들을 읽어 어떤 플레이스홀더가 아직 비어 있는지 확인한다.
이미 채워진 항목은 건너뛴다.

- `.claude/CLAUDE.md`
- `docs/backend/README.md`
- `docs/frontend/README.md`
- `docs/PRD.md`

---

## Step 2. 인터뷰

비어 있는 플레이스홀더에 대해서만 질문한다. **한 번에 모든 질문을 던지지 않고**, 항목별로 하나씩 묻되 사용자가 여러 정보를 한꺼번에 제공했다면 해당 항목들을 묶어서 처리한다.

### 질문 순서

1. **프로젝트명 · 한 줄 설명**
   > "프로젝트 이름과 한 줄 설명을 알려주세요."

2. **비즈니스 목표**
   > "핵심 기능이나 비즈니스 목표를 bullet point로 나열해 주세요."

3. **사용자 · 인터페이스 · 진입점**
   > "사용자 유형과 각 인터페이스, 진입점(모듈명, URL 등)을 알려주세요."
   >
   > 예시: "샵 방문 고객 / Storefront / :app:storefront"

4. **디렉토리 구조**
   > "주요 디렉토리 구조를 알려주세요. 모르면 생략해도 됩니다."

   사용자가 생략하거나 "알아서 해줘"라고 하면, **탐색보다 먼저 아래 질문을 한다**:

   > "기존 코드베이스가 있는 프로젝트인가요, 아니면 새로 시작하는 프로젝트인가요?"

   - **기존 코드베이스 있음**: `ls` · `find`로 실제 프로젝트 최상위 디렉토리를 탐색하고, 발견한 구조를 사용자에게 보여준 뒤 확인 후 사용한다.
   - **새 프로젝트**: 프로젝트 성격(백엔드 API, 풀스택, 프론트엔드 전용 등)을 파악하여 아래 기본 템플릿 중 적합한 것을 제안하고, 사용자가 수락하면 그대로 사용한다.

   | 성격 | 제안 구조 |
   |------|----------|
   | 백엔드 API | `backend/ docs/ sql/` |
   | 풀스택 | `backend/ frontend/ sql/ docs/` |
   | 프론트엔드 전용 | `src/ public/ docs/` |
   | 모노레포 | `apps/ packages/ docs/` |

5. **PRD — 배경 및 문제 정의** (`docs/PRD.md`에 비어 있을 때)
   > "이 제품이 해결하려는 문제나 배경을 설명해 주세요."

6. **PRD — 성공 지표 · Non-Goals** (`docs/PRD.md`에 비어 있을 때)
   > "핵심 성과 지표(KPI)와 이번 범위에서 제외할 항목(Non-Goals)을 알려주세요."

7. **PRD — 기능 요구사항** (`docs/PRD.md`에 비어 있을 때)
   > "주요 기능 요구사항을 항목별로 나열해 주세요."

8. **PRD — 비기능 요구사항 · 제약 · 타임라인** (`docs/PRD.md`에 비어 있을 때)
   > "성능·보안 등 비기능 요구사항, 기술적 제약, 주요 마일스톤을 알려주세요. 없으면 생략해도 됩니다."

---

## Step 3. 파일 작성

수집한 정보를 아래 포맷에 맞게 변환하여 각 파일의 플레이스홀더를 교체한다.

### CLAUDE.md 포맷

**비즈니스 목표** (`{비즈니스 목표 및 핵심 기능 설명}` 자리):
```
- {목표 1}
- {목표 2}
...
```

**사용자와 인터페이스** (`{사용자 유형 · 인터페이스 · 진입점}` 자리):
```
| 사용자 | 인터페이스 | 진입점 |
|--------|-----------|--------|
| {사용자 유형} | {인터페이스명} | {진입점} |
```

**프로젝트 구조:**
````
```
{디렉토리}/    # {역할 설명}
{디렉토리}/    # {역할 설명}
...
```
````

### docs/backend/README.md · docs/frontend/README.md

`{프로젝트명}` 플레이스홀더를 CLAUDE.md에서 수집한 프로젝트명으로 교체한다.

### docs/PRD.md 포맷

- **사용자 테이블**: CLAUDE.md의 `사용자 · 인터페이스 · 진입점`과 동일한 내용으로 채운다.
- **비즈니스 목표 목록**: CLAUDE.md의 비즈니스 목표와 동일한 내용을 재사용한다.
- 나머지 항목은 인터뷰에서 수집한 내용을 그대로 사용한다.

---

## Step 4. 완료 확인

모든 파일 수정 후, 변경된 섹션만 사용자에게 보여주고 내용이 맞는지 확인을 요청한다.
수정이 필요하면 해당 항목만 다시 받아 교체한다.
