--- name: init-project description: 팀 표준 워크플로우로 프로젝트를 초기화합니다 allowed-tools: "Bash, Read, Write, Edit, Glob, Grep" argument-hint: "[project-type: java-maven|java-gradle|react-ts|auto]" --- 팀 표준 워크플로우에 따라 프로젝트를 초기화합니다. 프로젝트 타입: $ARGUMENTS (기본: auto — 자동 감지) ## 프로젝트 타입 자동 감지 $ARGUMENTS가 "auto"이거나 비어있으면 다음 순서로 감지: 1. `pom.xml` 존재 → **java-maven** 2. `build.gradle` 또는 `build.gradle.kts` 존재 → **java-gradle** 3. `package.json` + `tsconfig.json` 존재 → **react-ts** 4. 감지 실패 → 사용자에게 타입 선택 요청 ## 수행 단계 ### 1. 프로젝트 분석 - 빌드 파일, 설정 파일, 디렉토리 구조 파악 - 사용 중인 프레임워크, 라이브러리 감지 - 기존 `.claude/` 디렉토리 존재 여부 확인 - eslint, prettier, checkstyle, spotless 등 lint 도구 설치 여부 확인 ### 2. CLAUDE.md 생성 프로젝트 루트에 CLAUDE.md를 생성하고 다음 내용 포함: - 프로젝트 개요 (이름, 타입, 주요 기술 스택) - 빌드/실행 명령어 (감지된 빌드 도구 기반) - 테스트 실행 명령어 - lint 실행 명령어 (감지된 도구 기반) - 프로젝트 디렉토리 구조 요약 - 팀 컨벤션 참조 (`.claude/rules/` 안내) ### 3. .claude/ 디렉토리 구성 이미 팀 표준 파일이 존재하면 건너뜀. 없는 경우: - `.claude/settings.json` — 프로젝트 타입별 표준 권한 설정 + hooks 섹션 (4단계 참조) - `.claude/rules/` — 팀 규칙 파일 (team-policy, git-workflow, code-style, naming, testing) - `.claude/skills/` — 팀 스킬 (create-mr, fix-issue, sync-team-workflow, init-project) ### 4. Hook 스크립트 생성 `.claude/scripts/` 디렉토리를 생성하고 다음 스크립트 파일 생성 (chmod +x): - `.claude/scripts/on-pre-compact.sh`: ```bash #!/bin/bash # PreCompact hook: systemMessage만 지원 (hookSpecificOutput 사용 불가) INPUT=$(cat) cat </dev/null || echo "") if [ -z "$CWD" ]; then CWD=$(pwd) fi PROJECT_HASH=$(echo "$CWD" | sed 's|/|-|g') MEMORY_DIR="$HOME/.claude/projects/$PROJECT_HASH/memory" CONTEXT="" if [ -f "$MEMORY_DIR/MEMORY.md" ]; then SUMMARY=$(head -100 "$MEMORY_DIR/MEMORY.md" | python3 -c "import sys;print(sys.stdin.read().replace('\\\\','\\\\\\\\').replace('\"','\\\\\"').replace('\n','\\\\n'))" 2>/dev/null) CONTEXT="컨텍스트가 압축되었습니다.\\n\\n[세션 요약]\\n${SUMMARY}" fi if [ -f "$MEMORY_DIR/project-snapshot.md" ]; then SNAP=$(head -50 "$MEMORY_DIR/project-snapshot.md" | python3 -c "import sys;print(sys.stdin.read().replace('\\\\','\\\\\\\\').replace('\"','\\\\\"').replace('\n','\\\\n'))" 2>/dev/null) CONTEXT="${CONTEXT}\\n\\n[프로젝트 최신 상태]\\n${SNAP}" fi if [ -n "$CONTEXT" ]; then CONTEXT="${CONTEXT}\\n\\n위 내용을 참고하여 작업을 이어가세요. 상세 내용은 memory/ 디렉토리의 각 파일을 참조하세요." echo "{\"hookSpecificOutput\":{\"additionalContext\":\"${CONTEXT}\"}}" else echo "{\"hookSpecificOutput\":{\"additionalContext\":\"컨텍스트가 압축되었습니다. memory 파일이 없으므로 사용자에게 이전 작업 내용을 확인하세요.\"}}" fi ``` - `.claude/scripts/on-commit.sh`: ```bash #!/bin/bash INPUT=$(cat) COMMAND=$(echo "$INPUT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('tool_input',{}).get('command',''))" 2>/dev/null || echo "") if echo "$COMMAND" | grep -qE 'git commit'; then cat </memory/`) 다음 파일들을 생성: - `memory/MEMORY.md` — 프로젝트 분석 결과 기반 핵심 요약 (200줄 이내) - 현재 상태, 프로젝트 개요, 기술 스택, 주요 패키지 구조, 상세 참조 링크 - `memory/project-snapshot.md` — 디렉토리 구조, 패키지 구성, 주요 의존성, API 엔드포인트 - `memory/project-history.md` — "초기 팀 워크플로우 구성" 항목으로 시작 - `memory/api-types.md` — 주요 인터페이스/DTO/Entity 타입 요약 - `memory/decisions.md` — 빈 템플릿 (# 의사결정 기록) - `memory/debugging.md` — 빈 템플릿 (# 디버깅 경험 & 패턴) ### 10. Lint 도구 확인 - TypeScript: eslint, prettier 설치 여부 확인. 미설치 시 사용자에게 설치 제안 - Java: checkstyle, spotless 등 설정 확인 - CLAUDE.md에 lint 실행 명령어가 이미 기록되었는지 확인 ### 11. workflow-version.json 생성 Gitea API로 최신 팀 워크플로우 버전을 조회: ```bash curl -sf --max-time 5 "https://gitea.gc-si.dev/api/v1/repos/gc/template-common/raw/workflow-version.json" ``` 조회 성공 시 해당 `version` 값 사용, 실패 시 "1.0.0" 기본값 사용. `.claude/workflow-version.json` 파일 생성: ```json { "applied_global_version": "<조회된 버전>", "applied_date": "<현재날짜>", "project_type": "<감지된타입>", "gitea_url": "https://gitea.gc-si.dev" } ``` ### 12. 검증 및 요약 - 생성/수정된 파일 목록 출력 - `git config core.hooksPath` 확인 - 빌드 명령 실행 가능 확인 - Hook 스크립트 실행 권한 확인 - 다음 단계 안내: - 개발 시작, 첫 커밋 방법 - 범용 스킬: `/api-registry`, `/changelog`, `/swagger-spec`