pr · git:20260530.d3be4dd · 2026-05-30 · sha256 d7b6a5f11e9493a9
pr git:20260530.d3be4ddA
Immutable. This exact content never changes and is served at /api/v1/blob/d7b6a5f11e9493a9.
---
name: pr
description: >
Open a pull request via gh pr create with an auto-generated title and summary
derived from the commits on the branch, grouped by conventional-commit type.
Use when the user says "create a pull request", "open a PR", "gh pr create",
"raise a PR", or "make a PR for this branch". Assumes commits already exist and
only opens the PR. Do NOT commit changes or watch CI (use ship); do NOT
diagnose or fix a failing pipeline (use fix-and-retry / diagnose-ci).
allowed-tools: Bash(git *), Bash(gh *), Read, Grep, Glob
user-invocable: true
arguments:
- name: title
description: Optional PR title. If omitted, auto-generate from commits.
required: false
---
# PR
Create a pull request with a well-structured summary.
## Steps
1. **Gather context**:
- Detect the default branch: `gh repo view --json defaultBranchRef -q .defaultBranchRef.name`
- Get all commits since divergence: `git log <default>..HEAD --oneline`
- Get the full diff: `git diff <default>...HEAD --stat`
- Check if the branch is pushed: `git rev-list @{u}..HEAD --count 2>/dev/null`
2. **Push if needed**: If there are unpushed commits, run `git push -u origin HEAD`.
3. **Generate PR content**:
- **Title** (if not provided): Derive from commits. If single commit, use its message. If multiple, summarize the theme (under 70 chars).
- **Body**: Use this format:
```text
## Summary
- <bullet points derived from commits, grouped by type>
## Test plan
- [ ] <derived from what changed, e.g., "CI passes", "manual test of X">
```
4. **Create PR**: Run `gh pr create --title "<title>" --body "<body>"` using a HEREDOC for the body.
5. **Report**: Show the PR URL.
## Rules
- Never create a PR if there are no commits ahead of the default branch.
- If a PR already exists for this branch, show its URL instead of creating a duplicate.
- Keep the title under 70 characters.
- Group commits by type (feat, fix, chore, etc.) in the summary.
## Gotchas
- Refuse when `HEAD` is the default branch: a PR needs a non-default source branch. Detect the default with `gh repo view --json defaultBranchRef -q .defaultBranchRef.name`, compare to `git branch --show-current`, and if they match, stop and tell the user to create a feature branch first.
- For a fork-based PR, the head ref must be qualified as `owner:branch`. Pass it with `gh pr create --head <owner>:<branch>` (the owner is the fork's GitHub login), so the PR targets the upstream repo from your fork.