implement
CommandImplement features based on PRD specifications. Trigger keywords: - Commands: "/implement", "구현해줘", "만들어줘", "바로 구현" - Natural…
Analyze changes, run quality gate, and auto-commit with PR-based workflow. Trigger on "/auto-commit", "git 푸시", "git push", "자동 커밋", "커밋해줘", "변경사항 커밋", "PR 올려줘", "PR 만들어줘", or when user asks to commit their work after completing a task.
> /plugin marketplace add wigtn/wigtn-plugins> /plugin install wigtn-plugins@wigtn-plugins
description: Analyze changes, run quality gate, and auto-commit with PR-based workflow. Trigger on "/auto-commit", "git 푸시", "git push", "자동 커밋", "커밋해줘", "변경사항 커밋", "PR 올려줘", "PR 만들어줘", or when user asks to commit their work after completing a task.
작업 완료 후 변경사항을 분석하고, 품질 검사를 거쳐 피처 브랜치에 커밋하고 PR을 생성합니다.
| 이전 단계 | 현재 | 다음 단계 | |----------|------|----------| | `/implement` - 구현 완료 | `/auto-commit` - 품질 검사 & PR | `/review-pr` - 동료 리뷰 |
/auto-commit # 품질 검사 + 브랜치 생성 + PR (기본) /auto-commit --direct # main에 직접 커밋 (이전 방식) /auto-commit --no-push # 커밋만, 푸시/PR 안함 /auto-commit --no-review # 품질 검사 스킵 (권장하지 않음) /auto-commit --message "메시지" # 수동 메시지 지정 /auto-commit --branch "이름" # 브랜치명 직접 지정 /auto-commit --no-parallel-review # 순차 리뷰 강제 (병렬 비활성화) /auto-commit --draft # Draft PR로 생성
> **원칙**: 브랜치는 "작업 단위(feature/fix)" 당 1개만 생성한다. 무분별한 브랜치 생성을 방지한다.
1. **현재 피처 브랜치(main/master 아님)에 있음** → 먼저 Stale 검사 (`gh pr list --head <branch> --state all`):
2. **main/master에 있음** → 파이프라인 여부 판단:
| 상황 | 동작 | |------|------| | 피처 브랜치 + Open PR 존재 | 현재 브랜치 재사용 (PR에 커밋 추가) | | 피처 브랜치 + Merged/Closed PR ⚠️ | **Stale 처리** — origin/main에서 새 브랜치 분기, 변경사항 carry-over | | 피처 브랜치 + PR 없음 | 현재 브랜치 사용, 새 PR 생성 | | main에서 같은 feature 반복 호출 | 첫 호출 시 만든 open PR 브랜치 재사용 | | `--branch` 옵션으로 명시 | 해당 이름 사용 (이미 있고 stale이면 새로 분기) | | 이전 /implement에서 생성된 브랜치 | 해당 브랜치로 checkout (stale 검사 후) |
# 1. 현재 브랜치의 PR 상태 확인 (Stale 판정 핵심)
current_branch=$(git branch --show-current)
gh pr list --head "$current_branch" --state all --json number,state,title --limit 1
# state: OPEN→재사용 / MERGED·CLOSED→STALE(새 브랜치 필요) / 없음→새 PR 생성
# 2. 변경된 파일이 기존 open PR 브랜치와 겹치는지 확인
gh pr list --state open --json number,title,headRefName
# 3. PRD/PLAN(PLAN_{feature}.md, PRD.md)의 feature name과 매칭되는 브랜치 존재 여부 확인> **왜 필요한가**: GitHub에서 PR이 squash-merge / closed 처리되면, 같은 브랜치에 추가 push를 해도 자동으로 새 PR이 열리지 않는다. 같은 피처 브랜치를 계속 재사용하면 후속 커밋들이 어느 PR에도 보이지 않는 "orphan" 상태가 된다. 사용자 입장에선 "왜 PR이 안 뜨지?"가 되는 핵심 버그.
**감지:**
PR_STATE=$(gh pr list \ --head "$current_branch" \ --state all \ --json state \ --jq '.[0].state // empty' \ --limit 1) case "$PR_STATE" in MERGED|CLOSED) is_stale=true ;; *) is_stale=false ;; esac
**처리 절차 (자동, 사용자 확인 없이 안전한 경로 선택):**
if [ "$is_stale" = true ]; then
# 1. 사용자에게 알림 (안내만, 차단 아님)
echo "⚠️ Current branch '$current_branch' has a $PR_STATE PR (#$PR_NUMBER)."
echo " The branch is stale — pushing here will not reopen the PR."
echo " Creating a fresh branch from origin/main and carrying over your changes."
# 2. 변경사항 임시 stash (working tree 보존)
git stash push -u -m "auto-commit-stale-carryover-$(date +%s)"
# 3. 최신 main 동기화
git fetch origin
default_branch=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')
# 4. 새 브랜치명 결정 (기존 이름에 -followup, 충돌 시 suffix 추가)
new_branch="${current_branch%-followup}-followup"
while git show-ref --verify --quiet "refs/heads/$new_branch"; do
new_branch="${new_branch}-$(date +%s | tail -c 4)"
done
# 5. origin/main 위에서 새 브랜치 생성
git checkout -b "$new_branch" "origin/$default_branch"
# 6. stash 적용 (변경사항 carry-over)
git stash pop
fi**경계 사례:**
| 커밋 타입 | 브랜치 접두사 | 예시 | |----------|-------------|------| | `feat` | `feat/` | `feat/user-auth` | | `fix` | `fix/` | `fix/login-error` | | `refactor` | `refactor/` | `refactor/api-cleanup` | | `docs` | `docs/` | `docs/api-guide` | | `test` | `test/` | `test/auth-coverage` | | `chore` | `chore/` | `chore/deps-update` |
**이름 생성 규칙:**
상태 조회는 스크립트가 한 번에 처리한다. **개별 `git`/`gh` 명령을 따로 실행하지 말 것.**
bash "${CLAUDE_PLUGIN_ROOT}/scripts/repo-state.sh"반환 JSON 필드:
| 필드 | 쓰임 | |---|---| | `branch` · `on_main` | 브랜치 판단 | | `staged_stat` · `unstaged_stat` | 변경 규모 | | `file_count` | 전체 변경 파일 수 (staged + unstaged + untracked) | | `changed_files` · `files_truncated` | 변경 파일 목록. 50개를 넘으면 잘리고 `files_truncated`가 true | | `staged_files` · `unstaged_files` · `untracked_files` | 스테이징 상태별 분류 | | `remotes` | remote 여러 개인지 | | `head_pr` | 현재 브랜치의 PR (Stale 검사) | | `stale_branch` | **머지/닫힌 PR이면 `true`** — 새 브랜치 분기 필요 | | `open_prs` | 다른 브랜치 재사용 판단용 | | `plan_files` | PRD/PLAN 경로 (feature name 추출) |
`git fetch origin`은 스크립트가 이미 실행한다. 파일 내용이 더 필요하면 그때 Read 한다.
**브랜치 판단:** 1. `--direct` → Direct 모드, 브랜치 판단 스킵 2. 피처 브랜치
Implement features based on PRD specifications. Trigger keywords: - Commands: "/implement", "구현해줘", "만들어줘", "바로 구현" - Natural…
Generate structured PRD documents from vague feature requests. Trigger keywords: - Commands: "/prd", "PRD 작성해줘", "기능 정의서", "요구사항…
`/prd` Phase 3에서 선택한 API 유형의 상세 템플릿. REST / GraphQL / gRPC / WebSocket / OpenAPI 템플릿과 로그인 API 예시를 담고 있다. 필요한 유형 섹션만 참고하여 PRD §5.1…
GitHub PR을 터미널에서 리뷰합니다. PR diff를 분석하고, 코드 리뷰 점수를 매기고, 리뷰 코멘트를 남깁니다. Trigger on "/review-pr", "PR 리뷰해줘", "리뷰해줘", "PR 봐줘", "코드 리뷰",…
Generate screen specifications (IA / User Flow / Screen Spec / Wireframe / Dev Handoff) from an existing PRD. Trigger keywords: -…
Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.