Claude Code Plugins

Community-maintained marketplace

Feedback

Automate creating pull requests - fork repos, create branches, commit changes, and submit PRs. Works in current directory or creates new clone. Idempotent and safe to re-run. Keywords - PR, pull request, fork, contribute, upstream.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name pr
description Automate creating pull requests - fork repos, create branches, commit changes, and submit PRs. Works in current directory or creates new clone. Idempotent and safe to re-run. Keywords - PR, pull request, fork, contribute, upstream.
allowed-tools Bash, Read, Write, Edit, Glob, Grep

PR - Pull Request Automation

Automate creating pull requests from start to finish.

What This Does

  1. Fork the repository (if needed)
  2. Clone or use existing local repo
  3. Create feature branch from upstream
  4. Auto-commit your changes
  5. Push and create PR

Quick Start

Basic workflow:

# 1. Fork, clone, and create branch
bash ~/.claude/skills/pr/scripts/01-fork-and-setup.sh \
  owner/repo \
  ~/code \
  1 \
  main \
  my-feature

# 2. Make your changes (use Edit tool)...

# 3. Auto-commit and create PR
bash ~/.claude/skills/pr/scripts/03-create-pr.sh \
  main \
  "PR title" \
  "PR description"

Current directory mode:

cd /path/to/your/repo
bash ~/.claude/skills/pr/scripts/01-fork-and-setup.sh owner/repo . "" main my-feature
# Make changes...
bash ~/.claude/skills/pr/scripts/03-create-pr.sh main "Fix bug"

Scripts

01-fork-and-setup.sh - Setup repo and branch

01-fork-and-setup.sh <repo> [work_dir] [depth] [base_branch] [feature_branch]

Parameters:

  • repo - Repository to fork (e.g., owner/repo)
  • work_dir - Where to clone (default: ~/tmp/contribute, use . for current dir)
  • depth - Clone depth (default: full, use 1 for 10x faster shallow clone)
  • base_branch - Branch to base work on (e.g., main)
  • feature_branch - Your new branch name (e.g., fix/bug-123)

What it does:

  • Creates fork if needed (detects existing forks, even with different names)
  • Clones repo or uses existing local copy
  • Sets up upstream (original) and origin (fork) remotes
  • Creates feature branch from latest upstream
  • Idempotent - Safe to re-run multiple times

03-create-pr.sh - Commit and create PR

03-create-pr.sh <base_branch> <pr_title> [pr_body] [commit_message]

Parameters:

  • base_branch - Target branch for PR (e.g., main)
  • pr_title - PR title
  • pr_body - PR description (optional)
  • commit_message - Commit message (optional, defaults to PR title)

What it does:

  • Auto-commits any uncommitted changes with DCO sign-off
  • Pushes branch to your fork
  • Checks for existing PRs (avoids duplicates)
  • Creates PR to upstream
  • Returns PR URL
  • Idempotent - Won't create duplicate PRs

Examples

Example 1: Fix bug in upstream repo

# User request: "Fix version 2.9 to 2.15 in stolostron/multicluster-global-hub"

# Step 1: Setup
bash ~/.claude/skills/pr/scripts/01-fork-and-setup.sh \
  stolostron/multicluster-global-hub \
  ~/tmp/contribute \
  1 \
  main \
  docs/fix-version

# Step 2: Make changes (using Edit tool to modify files)
# ... Edit files to change 2.9 to 2.15 ...

# Step 3: Create PR
bash ~/.claude/skills/pr/scripts/03-create-pr.sh \
  main \
  "docs: update version from 2.9 to 2.15" \
  "Update documentation links to point to 2.15 instead of 2.9"

Example 2: Work in current directory

# User is already in a git repo and wants to work there

cd /path/to/existing/repo

bash ~/.claude/skills/pr/scripts/01-fork-and-setup.sh \
  owner/repo \
  . \
  "" \
  main \
  fix/issue-123

# Make changes...

bash ~/.claude/skills/pr/scripts/03-create-pr.sh \
  main \
  "Fix issue #123"

Example 3: Handles fork name mismatches

# Scenario: Your fork is named "hub-of-hubs" but upstream is "multicluster-global-hub"
# The script automatically detects this and handles it

bash ~/.claude/skills/pr/scripts/01-fork-and-setup.sh \
  stolostron/multicluster-global-hub \
  ~/code \
  1 \
  main \
  fix/bug

# Output: "Found existing fork with different name: yanmxa/hub-of-hubs"
# Script uses the correct fork name automatically

Key Features

Idempotent - Safe to re-run, won't duplicate work ✅ Smart fork detection - Finds forks even with different names ✅ Auto-fork - Creates fork if it doesn't exist ✅ Auto-commit - Commits changes with DCO sign-off ✅ No duplicates - Checks for existing PRs before creating ✅ Current dir mode - Can work in existing repos (use . as work_dir) ✅ Fast clone - Shallow clone by default (10x faster) ✅ Proper remotes - Sets up upstream (HTTPS) and origin (SSH)

Performance

Clone speed with depth=1:

Repository Full Clone Shallow (depth=1) Speedup
kubernetes ~3GB ~300MB 10x
Linux kernel ~4GB ~400MB 10x
Typical repo ~500MB ~50MB 10x

Prerequisites

  • GitHub CLI (gh) - Must be installed and authenticated

    brew install gh
    gh auth login
    
  • Git - Configured with name and email

    git config --global user.name "Your Name"
    git config --global user.email "your.email@example.com"
    
  • SSH Keys - Setup for GitHub (for cloning via SSH)

Troubleshooting

Fork already exists → Script handles automatically, uses existing fork

Repository already cloned → Script verifies and updates remotes

PR already exists → Script shows existing PR URL instead of creating duplicate

Fork has different name → Script detects via GitHub API and uses correct name

Current directory not a git repo → Don't use . as work_dir, or cd to a git repo first

Notes

  • All commits are signed with DCO (-s flag)
  • Uses git add -u (only modified/deleted files, not new untracked files)
  • Creates PRs with proper username:branch format
  • Handles both HTTPS (upstream) and SSH (origin) remotes
  • Color-coded output for easy reading