작업 순서
0. 레포 소유자·visibility 확인 (STOP 생략 여부 판단용)
gh repo view --json owner,visibility -q '.owner.login + " " + .visibility'
gh api user -q .login
레포 소유자가 위 gh api user로 확인한 내 개인 계정과 같고 visibility가 PRIVATE이면 "개인 private 레포"로 판단한다 — 3단계 STOP을 생략한다 (아래 3단계 참고). 그 외(공개 레포이거나 소유자가 다른 계정/조직)에는 기존대로 STOP을 지킨다.
1. 변경사항 수집
base 브랜치 감지:
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||'
감지 실패 시 main을 기본값으로 사용.
변경사항 확인 (감지한 base 브랜치로 대체):
git log <base>..<HEAD> --oneline
git diff <base>...<HEAD> --stat
필요시 주요 파일 diff 상세 확인.
2. remote push 확인
git status -sb
현재 브랜치가 remote에 없으면 PR 생성 전에 push:
git push -u origin HEAD
3. PR 본문 초안 작성 후 대기 [STOP]
아래 템플릿으로 작성:
## Summary
<!-- 1-2문장 요약 -->
## Key Changes
<!-- 주요 변경사항 목록 -->
-
## Technical Details
<!-- 구현 방식·아키텍처 변경·핵심 로직 -->
## Rationale
<!-- 이 방식을 선택한 이유·검토한 대안 -->
- 개조식으로 작성
- 초안 작성 후 사용자에게 출력한다
- 0단계에서 "개인 private 레포"로 판단된 경우: 대기하지 않고 바로 4단계로 진행한다
- 그 외의 경우: 반드시 여기서 멈출 것. 수정 요청이 오면 본문을 수정한 뒤 다시 대기할 것. 사용자가 명시적으로 생성을 지시("올려줘", "생성해줘", "만들어줘" 등)하기 전까지 4단계를 실행하지 말 것. 스킬 호출 자체를 PR 생성 승인으로 간주하지 말 것
4. PR 생성 또는 업데이트 [사용자 승인 후에만 실행]
PR 존재 여부 확인:
gh pr view --json number,url 2>/dev/null
PR이 없는 경우 — 생성 (기본 ready):
gh pr create --title "<PR 제목>" --body "$(cat <<'EOF'
<PR 본문>
EOF
)"
사용자가 "draft로", "리뷰 준비 안 됐어" 등 명시적으로 요청한 경우에만 --draft 옵션을 추가한다.
PR이 이미 있는 경우 — 업데이트:
기존 본문을 먼저 읽어 내용을 보존한다:
gh pr view --json body --jq '.body'
기존 본문을 기반으로 필요한 부분만 수정하여 업데이트:
gh pr edit --title "<PR 제목>" --body "$(cat <<'EOF'
<PR 본문>
EOF
)"
기존 본문의 구조와 내용을 최대한 유지하고, 변경된 부분만 반영한다
draft/ready for review 상태는 변경하지 않는다
필요시
--reviewer,--label옵션 추가완료 후 PR URL 사용자에게 전달
행동 원칙
- 스킬 호출 자체를 PR 생성 승인으로 간주하지 않는다 — 반드시 사용자 명시적 지시 후에만 생성한다 (단, 0단계에서 판단한 개인 private 레포는 예외 — 초안만 보여주고 바로 생성까지 진행)
- PR 제목은
<type>: <요약>형식을 따른다 (commit-guidelines.md의 커밋 타입 기준) - remote push는 PR 생성에 필요한 경우에만 자동으로 수행한다
- PR은 기본적으로 ready(non-draft)로 생성한다 — 사용자가 명시적으로 draft를 요청한 경우에만
--draft옵션을 추가한다 - PR 업데이트 시 draft/ready for review 상태는 변경하지 않는다
- PR 본문 업데이트 시 기존 본문을 먼저 읽고 내용을 기반으로 필요한 부분만 수정한다 — 전체를 새로 작성하지 않는다
- PR 본문에는 외부 협업자가 알 필요 없거나 이해할 수 없는 private·내부 전용 정보를 넣지 않는다 — 로컬 계획서(
.private/plans) 내용, 개인 메모, 로컬 경로·내부 IP, 내부 임시 분석/디버깅 흔적 등. 공유 가능한 형태로 요약하거나 제외한다