# New Project

> 코드베이스에 새 프로젝트를 추가하는 skill. "새 프로젝트 만들어줘", "프로젝트 추가", "프로젝트 생성", "new project" 등 프로젝트 생성 관련 요청에 트리거된다. 프로젝트 목적과 담당자(DRI)를 포함한 자연어 프롬프트를 받아 처리한다.

- Skill: `greatsumini/new-project` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add greatsumini/new-project`
- Raw SKILL.md: https://api.skillmd.com/api/skills/greatsumini/new-project/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: greatsumini (https://skillmd.com/u/greatsumini)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/greatsumini/new-project

---


# New Project — 프로젝트 생성

사용자의 자연어 프롬프트에서 프로젝트 목적과 담당자를 파악하여, 프로젝트 디렉토리를 생성한다.

## 디렉토리 구조

```
new-project/
├── SKILL.md
└── scripts/
    ├── preflight.py      # 사전 정보 수집 (read-only)
    └── create_project.py # 프로젝트 생성 (write)
```

모든 스크립트는 `<skill-directory>/scripts/` 경로에 있다. 실행 시 skill 디렉토리의 절대 경로를 확인하여 사용한다.

## Invariants

- DRI는 반드시 `org-info/crew.json`에 존재하는 멤버여야 한다 — 검증 없이 생성하지 않는다
- project ID는 kebab-case이며 기존 프로젝트와 중복되지 않아야 한다
- 프로젝트 생성 시 `projects/{project-id}/AGENTS.md`를 반드시 함께 생성한다
- `org-info/crew.json`의 DRI `driProjects` 필드를 반드시 업데이트한다
- 디렉토리 유형(contents/sessions/logs)은 사용자에게 확인받은 뒤 결정한다

## 플로우

### Step 1. 프롬프트 파싱

사용자 프롬프트에서 다음을 추출한다:

| 필드 | 예시 | 필수 |
|---|---|---|
| 프로젝트 목적/설명 | 뉴스레터에 발행될 컨텐츠들을 관리 | Y |
| 담당자 (DRI) | 홍길동 | Y |
| project_id | newsletter-contents | N (자동 생성) |
| 일회성 여부 | 세미나, 외부 강연, 단발성 이벤트 등 | N (기본: 일반 프로젝트) |

일회성 프로젝트(세미나, 외부 강연, 단발 이벤트 등)는 `one-time-projects/` 하위에 생성한다.
일반 프로젝트(지속 운영)는 기존처럼 `projects/` 하위에 생성한다.

누락된 필수 정보가 있으면 사용자에게 물어본다.

### Step 2. Preflight — 사전 정보 수집

```bash
python3 <skill-dir>/scripts/preflight.py \
    --project-root <project-root> \
    --crew-query "<담당자 이름 또는 별칭>" \
    [--project-id "<project-id>"] \
    [--base-dir "one-time-projects"]
```

출력 JSON에서 세 가지를 확인한다:

#### 2-1. DRI 검증 (`crew`)

- `found: true` → 확정. 사용자에게 "DRI: {name} ({id})" 표시
- `found: false` → candidates 목록을 보여주고 선택 요청

#### 2-2. Project ID 검증 (`project_id`)

- 사용자가 project_id를 지정하지 않은 경우: 프로젝트 설명에서 영문 kebab-case ID를 생성하여 제안한다. 기존 목록(`existing`)과 중복되지 않아야 한다.
- `available: true` → 사용 가능
- `available: false` → 다른 ID를 제안

#### 2-3. Principles 목록 (`principles`)

사용 가능한 원칙 문서 목록이 반환된다. 생성하려는 프로젝트의 성격에 맞는 것들을 골라 사용자에게 제안한다.

### Step 3. 프로젝트 유형 결정

프로젝트 설명을 분석하여 디렉토리 유형을 판별한다:

| dir-type | 패턴 | 적합한 프로젝트 |
|---|---|---|
| `contents` | `contents/{YYMMDD}_{title}/draft.md` | 컨텐츠 제작 (SNS, 뉴스레터, 영상 등) |
| `sessions` | `sessions/{YYMMDD}_{title}/draft.md` | 모임/세션 기록 (스터디, 독서모임 등) |
| `logs` | `logs/{YYMMDD}_{title}.md` | 미팅/인터뷰/기록 중심 |

판별한 유형을 사용자에게 확인받는다.

### Step 4. 추가 Frontmatter 필드 제안

모든 프로젝트는 root의 document frontmatter 규칙을 자동 상속한다 (author_id, created_at, status, project, project_docs_id).

프로젝트 성격에 맞는 추가 필드를 제안한다. 예시:

- **뉴스레터 프로젝트**: `published_url`, `published_at`, `issue_number`
- **이벤트/모임 프로젝트**: `participants`, `event_date`
- **외부 플랫폼 컨텐츠**: `published_url`, `published_at`

### Step 5. 최종 확인

생성될 내용을 요약하여 사용자에게 보여주고 확인받는다.

### Step 6. 프로젝트 생성

```bash
python3 <skill-dir>/scripts/create_project.py \
    --project-root <project-root> \
    --id "<project-id>" \
    --description "<한 줄 설명>" \
    --dir-type "<contents|sessions|logs>" \
    --dri-id "<crew-id>" \
    [--base-dir "one-time-projects"] \
    [--frontmatter-fields '<JSON object>'] \
    [--principles '<JSON array>']
```

이 스크립트가 한 번에 처리하는 작업:
1. `{base-dir}/{project-id}/` 디렉토리 생성 (기본: `projects/`, 일회성: `one-time-projects/`)
2. `{base-dir}/{project-id}/AGENTS.md` 작성
3. 컨텐츠 하위 디렉토리 생성
4. `org-info/crew.json`의 DRI `driProjects`에 project-id 추가

### Step 7. 결과 보고

생성된 파일 목록과 AGENTS.md 내용을 사용자에게 보여준다.

