Claude-skill-registry check-existing-pr
Check if pull request already exists for current branch to support workflow resumption and prevent duplicate PR creation
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/check-existing-pr" ~/.claude/skills/majiayu000-claude-skill-registry-check-existing-pr && rm -rf "$T"
manifest:
skills/data/check-existing-pr/SKILL.mdsource content
Check Existing PR
Purpose
Determine if a pull request already exists for the current feature branch to support smart workflow resumption and prevent duplicate PR creation.
When to Use
- Conductor Phase 4 (before PR creation)
- Workflow resumption checks
- Before deciding to create new PR
skillload-resumption-state
Instructions
Step 1: Get Current Branch
CURRENT_BRANCH=$(git branch --show-current) if [ -z "$CURRENT_BRANCH" ]; then echo "❌ Error: Not in a git repository or detached HEAD" exit 1 fi echo "Checking for PR on branch: $CURRENT_BRANCH"
Step 2: Query GitHub for PRs
# Check for PR with current branch as head PR_DATA=$(gh pr list --head "$CURRENT_BRANCH" --json number,title,url,state,isDraft 2>&1) if [ $? -ne 0 ]; then echo "❌ Error: gh CLI failed" echo "$PR_DATA" exit 1 fi
Step 3: Parse PR Data
# Check if any PRs returned PR_COUNT=$(echo "$PR_DATA" | jq '. | length') if [ "$PR_COUNT" -eq 0 ]; then # No PR exists PR_EXISTS=false echo "ℹ️ No PR found for branch: $CURRENT_BRANCH" else # PR exists PR_EXISTS=true # Extract PR details (take first if multiple) PR_NUMBER=$(echo "$PR_DATA" | jq -r '.[0].number') PR_TITLE=$(echo "$PR_DATA" | jq -r '.[0].title') PR_URL=$(echo "$PR_DATA" | jq -r '.[0].url') PR_STATE=$(echo "$PR_DATA" | jq -r '.[0].state') PR_IS_DRAFT=$(echo "$PR_DATA" | jq -r '.[0].isDraft') echo "✅ Found PR #$PR_NUMBER: $PR_TITLE" echo " State: $PR_STATE" echo " Draft: $PR_IS_DRAFT" echo " URL: $PR_URL" # Warn if multiple PRs if [ "$PR_COUNT" -gt 1 ]; then echo "⚠️ Multiple PRs found for this branch ($PR_COUNT total)" fi fi
Step 4: Check PR Checks Status (if exists)
if [ "$PR_EXISTS" = true ]; then # Get CI checks status CHECKS_DATA=$(gh pr checks $PR_NUMBER --json name,status,conclusion 2>/dev/null) if [ -n "$CHECKS_DATA" ]; then TOTAL_CHECKS=$(echo "$CHECKS_DATA" | jq '. | length') PASSING_CHECKS=$(echo "$CHECKS_DATA" | jq '[.[] | select(.conclusion == "success")] | length') FAILING_CHECKS=$(echo "$CHECKS_DATA" | jq '[.[] | select(.conclusion == "failure")] | length') PENDING_CHECKS=$(echo "$CHECKS_DATA" | jq '[.[] | select(.status == "in_progress" or .status == "queued")] | length') echo " Checks: $PASSING_CHECKS passing, $FAILING_CHECKS failing, $PENDING_CHECKS pending" if [ "$FAILING_CHECKS" -gt 0 ]; then CHECKS_PASSING=false elif [ "$PENDING_CHECKS" -gt 0 ]; then CHECKS_PASSING="pending" else CHECKS_PASSING=true fi else CHECKS_PASSING="unknown" fi fi
Step 5: Determine Resumption Action
if [ "$PR_EXISTS" = true ]; then # Recommend resumption phase based on PR state case "$PR_STATE" in OPEN) if [ "$CHECKS_PASSING" = true ]; then RESUME_PHASE=6 RESUME_ACTION="Final validation and merge" elif [ "$CHECKS_PASSING" = "pending" ]; then RESUME_PHASE=5 RESUME_ACTION="Monitor CI checks" else RESUME_PHASE=5 RESUME_ACTION="Fix failing CI checks" fi ;; MERGED) RESUME_PHASE="complete" RESUME_ACTION="Workflow already complete" ;; CLOSED) RESUME_PHASE="manual" RESUME_ACTION="PR closed - manual review needed" ;; esac else RESUME_PHASE=4 RESUME_ACTION="Create pull request" fi
Output Format
PR Exists
{ "status": "success", "prExists": true, "pr": { "number": 45, "title": "feat: Add user dark mode preference toggle", "url": "https://github.com/user/repo/pull/45", "state": "OPEN", "isDraft": false, "checks": { "total": 5, "passing": 4, "failing": 1, "pending": 0, "status": false } }, "resumption": { "phase": 5, "action": "Fix failing CI checks" } }
No PR
{ "status": "success", "prExists": false, "branch": "feature/issue-137-dark-mode", "resumption": { "phase": 4, "action": "Create pull request" } }
PR Merged
{ "status": "success", "prExists": true, "pr": { "number": 45, "state": "MERGED" }, "resumption": { "phase": "complete", "action": "Workflow already complete" } }
Integration with Load Resumption State
Used by
load-resumption-state skill:
### Step 2: Analyze Git State If feature branch exists: Use `check-existing-pr` skill: - Input: (uses current branch) - Output: PR status and resumption recommendation If PR exists: - State OPEN + checks passing → Resume Phase 6 - State OPEN + checks pending → Resume Phase 5 (monitor) - State OPEN + checks failing → Resume Phase 5 (fix) - State MERGED → Workflow complete - State CLOSED → Manual review needed If no PR: → Resume Phase 4 (create PR)
Integration with Conductor Phase 4
### Phase 4: PR Creation **RESUMPTION CHECK**: Before creating PR Use `check-existing-pr` skill to verify no PR exists: If PR exists: ⚠️ Skip PR creation → Jump to Phase 5 (Gemini Review) If no PR: ✅ Proceed with PR creation
Related Skills
- Uses this for resumption logicload-resumption-state
- Creates PR if none existscreate-pull-request
Error Handling
gh CLI Not Available
{ "status": "error", "error": "GitHub CLI (gh) not installed or not authenticated" }
Branch Not Found
{ "status": "error", "error": "Branch not found on remote", "branch": "feature/issue-137-dark-mode" }
Notes
- Prevents duplicate PR creation
- Critical for workflow resumption
- Returns structured data for decision-making
- Handles edge cases (closed, merged, multiple PRs)