finishlisted
Install: claude install-skill SONGYEONGSIN/vibe-flow
작업이 끝났다고 느낄 때 호출하는 **"이제 뭐 하지?"의 명시적 답**. /commit이 단일 커밋이라면, /finish는 작업 묶음 전체의 클로징. PR 만들어 두고 잊어버리거나, branch가 영원히 살아남거나, plan 상태가 in_progress로 영원히 남는 결손을 막는다.
## 사용 시점
- 모든 코드 변경이 끝나고 `/verify`가 통과한 후
- 활성 `/plan`의 모든 단계 완료
- 기능 브랜치 머지 직전
- 큰 작업 끝났는데 다음 단계가 막연할 때
## 호출 형태
```bash
/finish # 자동 경로 판정
/finish --path pr # PR 경로 강제
/finish --path direct # 직접 push 강제 (HARD-GATE 인라인 한정)
/finish --path release # /release로 위임
/finish --path cleanup # 머지된 branch/worktree 정리만
```
## 절차
### 1. 상태 점검 (자동)
```bash
BRANCH=$(git rev-parse --abbrev-ref HEAD)
UNCOMMITTED=$(git status --porcelain | wc -l | tr -d ' ')
AHEAD=$(git rev-list --count @{u}..HEAD 2>/dev/null || echo 0)
BEHIND=$(git rev-list --count HEAD..@{u} 2>/dev/null || echo 0)
CHANGED_FILES=$(git diff --name-only "$(git merge-base HEAD origin/main 2>/dev/null || echo HEAD~10)" HEAD 2>/dev/null | wc -l)
# /verify 결과 확인 — 마지막 verify_complete 이벤트의 overall=pass 인지 검증
# events.jsonl이 없거나 verify_complete가 없으면 → /verify 재실행 필요
LAST_VERIFY=$(jq -s 'map(select(.type=="verify_complete")) | last // empty' .claude/events.jsonl 2>/dev/null)
LAST_VERIFY_TS=$(echo "$LAST_VERIFY" | jq -r '.ts // empty' 2>/dev/null)
LAST_VERIFY_RESULT=$(echo "$LAST_VERIFY" | jq -r '.overall // "unknown"' 2>/dev/null)
# verify가 없거나, 실패했거나, 너무 오래된 경우(예: 코드 변경 후) → 재실행 권고
# 24시간 이상 경과한 verify 결과는 stale로 간주
# 활성 plan 체크
ACTIVE_PLANS=$(grep -l "^status: in_progress" .claude/plans/*.md 2>/dev/null)
PEND