Best for
- Use when user says "create PR", "open pull request", or "submit for review".
laurigates/claude-plugins/git-plugin/skills/git-pr/SKILL.md
Create pull requests with descriptions, labels, and issue references. Use when user says "create PR", "open pull request", or "submit for review". From pushed branches.
Decision brief
Create pull requests with comprehensive descriptions and proper issue linkage.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/laurigates/claude-plugins --skill "git-plugin/skills/git-pr"Inspect the Agent Skill "git-pr" from https://github.com/laurigates/claude-plugins/blob/c056e44b978db58648ad20440dc1515cb09af09d/git-plugin/skills/git-pr/SKILL.md at commit c056e44b978db58648ad20440dc1515cb09af09d. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Before creating the PR, check whether any post-merge follow-up actions are needed (migrations, deployments, config changes, runbook updates). Create a GitHub issue for each and link them in the PR description. See Post-Merge Follow-up Issues.
Review the “When to Use This Skill” section in the pinned source before continuing.
Review the “PR Description Format” section in the pinned source before continuing.
Review the “Standard Template” section in the pinned source before continuing.
Brief description of what this PR does.
Permission review
The documentation asks the agent to run terminal commands or scripts.
Run the data-gathering script. It fetches the base ref, computes the ahead-countThe documentation asks the agent to run terminal commands or scripts.
bash "${CLAUDE_SKILL_DIR}/scripts/git-pr.sh" --home-dir "$HOME" --project-dir "$(pwd)" --base origin/mainThe documentation includes network, browsing, or remote request actions.
# Fetch latest remote stateThe documentation includes network, browsing, or remote request actions.
# Returns: https://github.com/org/repo/issues/456The documentation asks the agent to create, modify, or delete local files.
Write the PR body to a tempfile with the `Write` tool, then pass it via `--body-file`. This sidesteps shell quoting entirely — backticks, code fences, and shell metacharacters are preserved byte-for-byte. See the **Body content** rule in `gThe documentation asks the agent to create, modify, or delete local files.
# 2) gh pr create --body-fileEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 92/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 54 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Create pull requests with comprehensive descriptions and proper issue linkage.
| Use this skill when... | Use the alternative when... |
|---|---|
| Opening a PR from a pushed branch with description, labels, and issue refs | Use github-pr-title if you only need to author or fix the conventional title |
| Selecting a base branch, draft mode, or reviewers as part of PR creation | Use git-push first if the branch has not been pushed to remote yet |
| Going from a pushed branch to an open pull request | Use git-commit first if there are uncommitted changes locally |
Inserting Fixes #N / Closes #N issue references into the PR body | Use git-commit-push-pr for the consolidated commit + push + PR macro |
## Summary
Brief description of what this PR does.
## Motivation
Why this change is needed. Link to issue if applicable.
## Changes
- Key change 1
- Key change 2
- Key change 3
## Pre-merge Checklist
- [ ] Tests pass locally
- [ ] Code reviewed
- [ ] Documentation updated (if needed)
## Follow-up Issues
<!-- Post-merge actions tracked as separate issues so they survive PR closure -->
- Closes #456 after merge: database migration for new schema
- Refs #457: update deployment runbook
## Related Issues
Fixes #123
Related: #124, #125
| Section | Purpose | Required |
|---|---|---|
| Summary | What the PR does (1-2 sentences) | Yes |
| Motivation | Why this change is needed | Yes |
| Changes | Key changes as bullet points | Yes |
| Pre-merge Checklist | Actions before merge only — never post-merge steps | If applicable |
| Follow-up Issues | Links to issues tracking post-merge actions | If post-merge work exists |
| Related Issues | Issue links at bottom | Yes |
Place at the bottom of the PR description:
## Related Issues
Fixes #123 <!-- Auto-closes on merge -->
Closes #456 <!-- Auto-closes on merge -->
Resolves #789 <!-- Auto-closes on merge -->
Related: #124, #125 <!-- Links without closing -->
Rules:
Fixes, Closes, or Resolves for issues this PR solvesRelated: for issues that are related but not solvedDo NOT use markdown tables to track linked issues. GitHub's auto-close machinery only fires on
Fixes #N/Closes #N/Resolves #Nkeywords in the PR body or commits. A| Issue | Status |table is decorative — linked issues will not auto-close on merge, even if every row says "fixed". Always include the closing keyword as a bare line at the bottom of the body (or in a commit message).
Before creating the PR, check whether any post-merge follow-up actions are needed (migrations, deployments, config changes, runbook updates). Create a GitHub issue for each and link them in the PR description. See Post-Merge Follow-up Issues.
Run the data-gathering script. It fetches the base ref, computes the ahead-count
against origin/main, probes for an existing PR (via the state field — never
merged), scans for stacked dependents, and audits closing keywords:
bash "${CLAUDE_SKILL_DIR}/scripts/git-pr.sh" --home-dir "$HOME" --project-dir "$(pwd)" --base origin/main
Parse STATUS= and ISSUES: from the output. Read PR_READY (false when
AHEAD_COUNT=0 — nothing to PR), EXISTING_PR (a number means gh pr view /
gh pr edit instead of creating), CURRENT_BRANCH, STACK_PARENT /
DEPENDENT_PR=<n> (see Stacked PRs below), and BODY_NOT_AUTOCLOSING (see
Step 5). Authoring the PR body remains your job.
CRITICAL: Always compare against origin/main (not local main) to avoid including commits that haven't been merged to the remote. Local main may be ahead of origin/main with unrelated commits.
# Fetch latest remote state
git fetch origin main
# Always use origin/main as base reference
base_ref="origin/main"
git log $base_ref..HEAD --format='%H %s'
# Extract issue references
git log $base_ref..HEAD --format='%B' | grep -oE '#[0-9]+' | sort -u
# Get diff stats
git diff $base_ref...HEAD --stat
Before creating the PR, scan for any actions required after the PR is merged (deployments, migrations, config changes, external docs). For each:
# Create a follow-up issue
gh issue create \
--title "[Chore] DB: Run migration for new schema" \
--body "Follow-up to PR that adds user_preferences.\n\nRun: rake db:migrate in production after deploy."
# Returns: https://github.com/org/repo/issues/456
Keep a list of created issue numbers to link in the PR body.
Write the PR body to a tempfile with the Write tool, then pass it via --body-file. This sidesteps shell quoting entirely — backticks, code fences, and shell metacharacters are preserved byte-for-byte. See the Body content rule in github-issue-writing for the canonical guidance and the threshold for when bare --body "..." is still acceptable.
# 1) Write tool → /tmp/pr-body.md (no shell escaping involved)
# 2) gh pr create --body-file
gh pr create \
--title "feat(scope): add feature" \
--body-file /tmp/pr-body.md
For a short body you can skip the tempfile and stream it over stdin with --body-file - and a quoted heredoc:
gh pr create --title "feat(scope): add feature" --body-file - <<'EOF'
## Summary
Use `code`, ${vars}, and $shell syntax freely — they render verbatim.
EOF
Inside <<'EOF' (quoted delimiter), backticks, $, and \ are already literal — never backslash-escape them. A reflexive \`` survives into the rendered PR description and needs a follow-up gh pr edit --body-fileto clean up. (TheWritetool →--body-file` path above sidesteps the question entirely and stays the default for non-trivial bodies.)
Body content of /tmp/pr-body.md:
## Summary
Brief description of what this PR does.
## Motivation
Why this change is needed.
## Changes
- Change 1
- Change 2
## Pre-merge Checklist
- [ ] Tests pass locally
- [ ] Code reviewed
## Follow-up Issues
- #456: run database migration after deploy
- #457: update production config
## Related Issues
Fixes #123
Related: #456
After the PR is created, audit the body: every issue referenced by number must
have a matching Fixes / Closes / Resolves keyword. Issues mentioned only
in a markdown table or prose will not auto-close on merge.
Re-run the data-gathering script against the just-created PR's body (write it to
a tempfile first, or pass the fetched body) — it emits BODY_REFERENCED,
BODY_CLOSING, and BODY_NOT_AUTOCLOSING:
gh pr view --json body --jq .body > /tmp/pr-body-check.md
bash "${CLAUDE_SKILL_DIR}/scripts/git-pr.sh" --home-dir "$HOME" --project-dir "$(pwd)" --body-file /tmp/pr-body-check.md
If BODY_NOT_AUTOCLOSING is non-empty, edit the PR body with gh pr edit <num> --body-file ...
to add Fixes #N / Closes #N lines for any issue this PR is meant to close.
Related: #N is correct for issues the PR references but does not close —
those should not appear in the warning if you re-run the check.
Use conventional commits format (see github-pr-title skill):
<type>(<scope>): <subject>
Examples:
feat(auth): add OAuth2 supportfix(api): handle null responsedocs(readme): update installation| Option | Command |
|---|---|
| Draft | gh pr create --draft |
| Labels | gh pr create --label "enhancement" |
| Reviewers | gh pr create --reviewer user1,user2 |
| Base branch | gh pr create --base develop |
| Assignee | gh pr create --assignee @me |
When on main, push to remote feature branch:
# Push main to remote feature branch
git push origin main:feat/feature-name
# Create PR with --head
gh pr create --head feat/feature-name --base main --title "..." --body-file /tmp/pr-body.md
When merging a PR whose head branch is the base of one or more open
downstream PRs, deleting the head branch on merge will close every dependent
PR. gh pr merge --delete-branch and the matching UI checkbox both delete
the head branch — safe for leaf PRs, destructive for stack parents.
The data-gathering script (Step 1) already scanned for open PRs targeting the
current branch as their base — read STACK_PARENT and the DEPENDENT_PR=<n> HEAD=<branch> lines from its output. If STACK_PARENT=true, this PR is the
parent of a stack. To re-probe on demand:
bash "${CLAUDE_SKILL_DIR}/scripts/git-pr.sh" --home-dir "$HOME" --project-dir "$(pwd)" --base origin/main
| Situation | Merge command |
|---|---|
| No dependents (leaf PR) | gh pr merge --squash --delete-branch (default) |
| Has dependents | gh pr merge --squash — omit --delete-branch |
| Has dependents, want to clean up | Re-target dependents first (see below), then merge with --delete-branch |
Before merging the parent, point each dependent at the parent's base so they don't auto-close when the parent's branch disappears:
# For each dependent PR returned above:
gh pr edit <dep-pr-num> --base "$(gh pr view --json baseRefName --jq .baseRefName)"
Once every dependent has been re-targeted (or you have explicitly chosen
not to), it is safe to merge the parent with --delete-branch.
Re-targeting alone keeps the dependent open, but its diff is still wrong. When the parent is squash-merged (the release-please / conventional-commit default), its commits collapse into one new commit on the base with a fresh SHA — so a re-targeted dependent still carries the parent's original commits in its history and now double-counts the parent's work. Drop them by replaying only the dependent's own commits onto the updated base:
git fetch origin
git rebase --onto origin/main <old-parent-tip> <dependent-branch>
git push --force-with-lease origin <dependent-branch>
git log --oneline origin/main..HEAD # verify: only the dependent's own commits
Capture <old-parent-tip> with git rev-parse <parent-branch> before
merging the parent (the branch is deleted on merge, so grab the SHA first). A
merge-merged parent keeps its patch-ids, so a plain git rebase origin/main
auto-skips the duplicates instead — but squash is the common default, so assume
the --onto form. If the dependent and the parent edited the same lines, expect
a conflict here: resolve it once and let git rerere replay it across this and
any sibling dependent (see the git-conflicts skill).
CI configured with on: pull_request: branches: [main] only runs for PRs
targeting main. A dependent PR based on a feature branch therefore shows
no checks at all until it is re-targeted — its pre-merge verification falls
to a local build/test run in the meantime. Retarget early (or verify locally);
don't wait on a green check that will never appear while the PR's base is a
feature branch.
Include only actions before merging:
Do NOT include post-merge steps in the checklist. PR descriptions are closed and buried after merge — checklists embedded there are easily missed. Post-merge actions must be tracked as GitHub issues.
When a PR requires actions after it is merged, create a separate GitHub issue for each follow-up. Link all follow-up issues in the PR description under a Follow-up Issues section.
Why issues, not PR checklists: Once a PR is merged and closed, its description is rarely revisited. A GitHub issue stays open and assignable until explicitly closed, ensuring the follow-up is not lost.
| Type | Example follow-up issue title |
|---|---|
| Database migration | [Chore] DB: Run schema migration for user_preferences table |
| Deployment | [Chore] Ops: Deploy feature-flag config to production |
| Manual configuration | [Chore] Config: Enable new OAuth provider in admin panel |
| External documentation | [Docs] Wiki: Update runbook for new deploy process |
| Communication | [Chore] Comms: Announce deprecation of /v1 API to customers |
| Dependent PR | [Feature] Next: Implement follow-on X after Y lands |
gh issue create \
--title "[Chore] DB: Run migration for new schema" \
--body "After #42 merges, run: \`rake db:migrate\` in production.\n\nSee PR #42 for context." \
--label "chore"
gh pr edit <pr-number> --body "$(gh pr view <pr-number> --json body -q '.body')
## Follow-up Issues
- #<issue-num>: run database migration
- #<issue-num>: update deployment runbook"
## Follow-up Issues
<!-- These issues track post-merge work and will stay open until completed -->
- #456: run database migration for user_preferences table
- #457: update production feature-flag config
On success, report:
Created PR #42: feat(auth): add OAuth2 support
URL: https://github.com/org/repo/pull/42
Related Issues:
Fixes #123
Related: #456
Status: Open
| Error | Solution |
|---|---|
| Branch not pushed | Push first or use main-branch pattern |
| PR exists | gh pr view or gh pr edit |
| No commits | Commit changes first |
| Action | Command |
|---|---|
| Create PR | gh pr create --title "..." --body-file /tmp/pr-body.md |
| Draft PR | gh pr create --draft |
| View PR | gh pr view |
| Edit PR | gh pr edit --title "..." --body-file /tmp/pr-body.md |
| List PRs | gh pr list |
| Check status | gh pr checks |
| Verify closing keywords | gh pr view <num> --json body --jq .body | grep -oiE '(closes|fixes|resolves)[[:space:]]+#[0-9]+' |
| Check for stacked dependents | gh pr list --base <head> --state open --json number,title |
| Merge stacked parent | gh pr merge --squash (omit --delete-branch) |
| Create follow-up issue | gh issue create --title "[Chore] ..." --body-file /tmp/issue-body.md |
| Context | Command |
|---|---|
| PR readiness | gh pr view --json number,state 2>/dev/null |
| Commits | git log origin/main..HEAD --format='%s' |
| Issue refs | git log origin/main..HEAD --format='%B' | grep -oE '#[0-9]+' |
| Verify auto-close | gh pr view <num> --json body --jq .body | grep -oiE '(closes|fixes|resolves)[[:space:]]+#[0-9]+' |
| Stacked-PR safety check | gh pr list --base <head> --state open --json number,title,headRefName |
| Create follow-up issue | gh issue create --title "[Chore] ..." --body-file /tmp/follow-up.md |
| Create PR | gh pr create --title "..." --body-file /tmp/pr-body.md |
Frequently asked questions
Create pull requests with comprehensive descriptions and proper issue linkage.
The source record exposes this install command: npx skills add https://github.com/laurigates/claude-plugins --skill "git-plugin/skills/git-pr". Inspect the command and pinned source before running it.
Static rules flagged exec-script, network, write-files in the source; the page lists the matching lines and excerpts.
Alternatives
magnus919/agent-skills
Use this skill to reverse-engineer an existing software system, map its architecture, data flow, privacy posture, coupling, quality characteristics, and feature surface, then produce an evidence-grounded clean-room design document, PRD, or migration plan under new constraints. Use for codebase archaeology, implicit contract extraction, architecture health assessment, or decomposition-readiness analysis. Do not use for greenfield architecture design, direct code review, bug hunting, security audi
VincentChuWaiChow/vanguard-frontier-agentic
Retrieves and analyzes Apex debug logs from a connected Salesforce org to identify governor-limit hits, SOQL N+1 patterns, unhandled exceptions, and async job failures. T1 read-only runtime — retrieves logs only, never executes code or mutates data. TRIGGER when: user asks to analyze an Apex log, debug a trigger failure, diagnose a governor limit hit, interpret a stack trace from a Salesforce org, or review a DEBUG log for performance issues. Trigger phrases: analyze apex log, debug this trigger
ruvnet/RuView
Comprehensive GitHub code review with AI-powered swarm coordination
dotnet/skills
Grade specified test methods individually and produce a concise PR-ready table with each fully qualified test name, an A-F grade, score band, and one-line note. USE FOR per-test feedback on a curated list such as new or modified tests in a pull request, not a suite-wide audit. Polyglot: .NET, Python, TS/JS, Java, Go, Ruby, Rust, Swift, Kotlin, PowerShell, C++. Inputs may be test methods, method bodies, or file-and-line spans. DO NOT USE FOR: full suite audits (use test-quality-auditor agent or t