home / skills / marcelorodrigo / agent-skills / create-pr

create-pr skill

/skills/create-pr

This skill helps you create well-structured pull requests by guiding you through branch checks, precise descriptions, and proper title formats.

npx playbooks add skill marcelorodrigo/agent-skills --skill create-pr

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.9 KB
---
name: create-pr
description: Create Pull Requests following best conventions. Use when opening PRs, writing PR descriptions, or preparing changes for review.
license: MIT
compatibility: Requires GitHub CLI (gh) authenticated and available
metadata:
  version: "1.1.0"
---

# Create Pull Request

Create pull requests following the best engineering practices.

**Requires**: GitHub CLI (`gh`) authenticated and available.

## Prerequisites

Before creating a PR, ensure all changes are committed. If there are uncommitted changes, run the commit skill `skill({ name: "conventional-commit" })` first to commit them properly.

```bash
# Check for uncommitted changes
git status --porcelain
```

If the output shows any uncommitted changes (modified, added, or untracked files that should be included), invoke the commit skill `skill({ name: "conventional-commit" })` before proceeding.

## Process

### Step 1: Verify Branch State

```bash
# Detect the default branch
BASE=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name')

# Check current branch and status
git status
git log $BASE..HEAD --oneline
```

Ensure:
- All changes are committed
- Branch is up to date with remote
- Changes are rebased on the base branch if needed

### Step 2: Analyze Changes

Review what will be included in the PR:

```bash
# See all commits that will be in the PR
git log $BASE..HEAD

# See the full diff
git diff $BASE...HEAD
```

Understand the scope and purpose of all changes before writing the description.

### Step 3: Write the PR Description

Use this structure for PR descriptions (ignoring any repository PR templates):

```markdown
<brief description of what the PR does>

<why these changes are being made - the motivation>

<alternative approaches considered, if any>

<any additional context reviewers need>
```

**Do NOT include:**
- "Test plan" sections
- Checkbox lists of testing steps
- Redundant summaries of the diff

**Do include:**
- Clear explanation of what and why
- Links to relevant issues or tickets (only if available)
- Context that isn't obvious from the code
- Notes on specific areas that need careful review

### Step 4: Create the PR

```bash
gh pr create --draft --title "<type>(<scope>): <description>" --body "
<description body here>
"
```

**Title format** follows commit conventions:
- `feat(scope): Add new feature`
- `fix(scope): Fix the bug`
- `refactor(scope): Refactor something`

## PR Description Examples

### Feature PR

```markdown
Add Slack thread replies for alert notifications

When an alert is updated or resolved, we now post a reply to the original
Slack thread instead of creating a new message. This keeps related
notifications grouped and reduces channel noise.

Previously considered posting edits to the original message, but threading
better preserves the timeline of events and works when the original message
is older than Slack's edit window.
```

### Bug Fix PR

```markdown
Handle null response in user API endpoint

The user endpoint could return null for soft-deleted accounts, causing
dashboard crashes when accessing user properties. This adds a null check
and returns a proper 404 response.

```

### Refactor PR

```markdown
Extract validation logic to shared module

Moves duplicate validation code from the alerts, issues, and projects
endpoints into a shared validator class. No behavior change.

This prepares for adding new validation rules without
duplicating logic across endpoints.
```

## Guidelines

- **One PR per feature/fix** - Don't bundle unrelated changes
- **Keep PRs reviewable** - Smaller PRs get faster, better reviews
- **Explain the why** - Code shows what; description explains why
- **Mark WIP early** - Use draft PRs for early feedback

## Editing Existing PRs

When updating a PR after creation, the skill automatically selects the best approach based on your GitHub CLI version:

- **gh 2.82.1+**: Uses native `gh pr edit` (clean, full-featured)
- **gh < 2.82.1**: Falls back to `gh api` (avoids Projects classic deprecation bug)

### Check Your Version

```bash
# Check GitHub CLI version
gh --version
```

### Modern Approach (gh 2.82.1+)

```bash
# Update PR description
gh pr edit PR_NUMBER --body "Updated description here"

# Update PR title
gh pr edit PR_NUMBER --title "New Title here"

# Update both
gh pr edit PR_NUMBER --title "new: Title" --body "New description"
```

### Legacy Fallback (gh < 2.82.1)

If `gh pr edit` fails with a "Projects (classic) is being deprecated" error, use the API directly:

```bash
# Update PR description
gh api -X PATCH repos/{owner}/{repo}/pulls/PR_NUMBER -f body="
Updated description here
"

# Update PR title
gh api -X PATCH repos/{owner}/{repo}/pulls/PR_NUMBER -f title='New Title here'

# Update both
gh api -X PATCH repos/{owner}/{repo}/pulls/PR_NUMBER \
  -f title='new: Title' \
  -f body='New description'
```

**Note**: The Projects (classic) bug was fixed in gh 2.82.1 (October 2025). Upgrade with your package manager if you're on an older version.

Overview

This skill creates pull requests following established engineering conventions to make reviews fast and clear. It guides branch checks, change analysis, and writing a focused PR description, then creates or edits the PR using the GitHub CLI. Use it when opening a new PR or updating an existing one to ensure consistency and reviewer-friendly diffs.

How this skill works

The skill inspects your git working tree and the repository default branch to verify commits and branch state. It shows the commits and diff that will be included, helps you compose a clear title and body using conventional formatting, and then runs gh commands to create a draft PR or edit an existing PR. If gh lacks required features, it falls back to gh api to patch PR metadata.

When to use it

  • Opening a new feature, fix, or refactor PR
  • Preparing a branch for review after committing changes
  • Updating an existing PR title or description
  • When you want PRs to follow conventional commit/title formats
  • Before requesting reviewers to ensure context and scope are clear

Best practices

  • Commit all changes first; run git status --porcelain and use a conventional commit flow for clarity
  • Verify branch is up to date with the base and rebase if needed to avoid merge surprises
  • Review git log and git diff against the base branch to confirm scope
  • Write a concise description covering what, why, and alternatives considered; avoid test plan checklists and redundant diff summaries
  • Create small, focused PRs — one logical change per PR — and mark work-in-progress using draft PRs

Example use cases

  • Add a feature: create a draft PR titled feat(scope): short description with motivation and alternatives
  • Fix a bug: create a PR titled fix(scope): short description and explain root cause and fix rationale
  • Refactor: create a PR titled refactor(scope): describe behavioral invariants and reasons for extraction
  • Update PR metadata: edit title or body using gh pr edit or fallback to gh api if your gh version lacks features
  • Prepare repository for review: run change analysis (git log/gdiff) and produce a reviewer-oriented description

FAQ

What prerequisites are required?

You need the GitHub CLI (gh) installed and authenticated, and all changes committed locally.

How should I format PR titles?

Use commit-style titles like feat(scope): Brief description, fix(scope): Brief description, or refactor(scope): Brief description to keep consistency.

What if gh pr edit fails on my version?

The skill will fall back to gh api to patch the PR. Consider upgrading gh to a modern version to use gh pr edit natively.