SkillAgentSearch skills...

pr-create

Creates a pull request from current changes, monitors GitHub CI, and debugs any failures until CI passes. Activate when the user says "create pr", "make a pr", "open pull request", "submit pr", "pr for these changes", or wants to get their current work into a reviewable PR.

Install / Use

npx skills add posit-dev/skills --skill pr-create

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

92/100

Category

Automation

Supported Platforms

Claude Code

Our assessment of pr-create

pr-create scores 92/100 on our quality scale, 961st of 2,870 Automation skills we index (top 34%).

Its SKILL.md is 17 KB long, well organised into 30 sections with 23 code examples: a thorough specification that gives an agent plenty to work with.

It has 521 GitHub stars, a meaningful sign that others use it.

Substance
30/30
Structure
20/20
Description
15/15
Adoption
12/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 15 days ago, so pr-create is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

pr-create compared with similar skills

All 4 of these similar skills score higher than pr-create; compare them before choosing.

SkillScoreStarsUpdatedFormat
pr-create (this skill)by posit-dev9252115d agoSKILL.md
Agent-Reachby Panniantong10090.5k19d agoCLAUDE.md
Scraplingby D4Vinci10085.6ktodayMCP Server
rufloby ruvnet10073.8ktodayMCP Server
algorithmic-artby anthropics100177.9k12d agoSKILL.md

Frequently asked questions

How do I install pr-create?
Run npx skills add posit-dev/skills --skill pr-create. The install tabs above show the steps for each supported agent.
Which AI agents does pr-create work with?
It is written for Claude Code, as a SKILL.md file. Other agents that read the same format can often use it too.
Is pr-create safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is pr-create still maintained?
The repository was last updated 15 days ago, so pr-create is actively maintained.

name: pr-create description: Creates a pull request from current changes, monitors GitHub CI, and debugs any failures until CI passes. Activate when the user says "create pr", "make a pr", "open pull request", "submit pr", "pr for these changes", or wants to get their current work into a reviewable PR. Assumes the project uses git, is hosted on GitHub, and has GitHub Actions CI with automated checks (lint, build, tests, etc.). Does NOT merge - stops when CI passes and provides the PR link. compatibility: Designed for Claude Code; requires TaskCreate, TaskUpdate, and TaskList tools metadata: author: Garrick Aden-Buie (@gadenbuie) version: "1.5" license: MIT

PR Creator Skill

Get changes into a PR, monitor CI, fix any failures, and notify the user when the PR is ready for review.

The user may already have commits ready on a feature branch, or may have uncommitted changes, or both. Adapt the workflow to the current state.

Task List Integration

CRITICAL: Use Claude Code's task list system for progress tracking and session recovery. Use TaskCreate, TaskUpdate, and TaskList tools throughout execution.

Task Hierarchy

[Main Task] "Create PR: [branch-name]"
  └── [CI Task] "CI Run #1" (status: failed, reason: lint)
      └── [Fix Task] "Fix: lint"
  └── [CI Task] "CI Run #2" (status: failed, reason: test failures)
      └── [Fix Task] "Fix: test failures"
  └── [CI Task] "CI Run #3" (status: passed)

At the start, always call TaskList to check for existing PR tasks. If a "Create PR" task exists with status in_progress, resume using the Session Recovery section below.

Process

Step 1: Assess Current State

Check for a --reviewer argument in the user's message. If present, store the value for use in Step 5. It may be a GitHub handle (@username) or a name (Jane Doe).

Create the main PR task:

TaskCreate:
- subject: "Create PR: [branch-name or 'pending']"
- description: "Create pull request from current changes."
- activeForm: "Checking git status"

TaskUpdate:
- taskId: [pr task ID]
- status: "in_progress"

Determine the base branch and current state:

git status
git diff --stat
# Detect the default branch (main, master, develop, etc.)
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
git log --oneline <base-branch>..HEAD
gh pr view 2>/dev/null

Determine the starting point:

| State | Next Step | |-------|-----------| | On base branch with uncommitted changes | Step 2 (create branch) | | On feature branch with uncommitted changes | Step 3 (commit) | | On feature branch with commits, nothing uncommitted | Step 4 (sync) | | PR already exists for this branch | Inform user, ask whether to update or monitor CI | | No changes anywhere | Inform user "No changes detected. Nothing to do." and stop |

Update task with branch info:

TaskUpdate:
- taskId: [pr task ID]
- subject: "Create PR: [actual-branch-name]"
- metadata: {"branch": "[branch-name]", "baseBranch": "[base-branch]"}

Step 2: Create Branch (if needed)

If currently on the base branch:

git checkout -b <descriptive-branch-name>

Use the project's branch naming conventions if documented in CLAUDE.md or AGENTS.md. Otherwise use:

  • feat/short-description for features
  • fix/short-description for bug fixes
  • refactor/short-description for refactoring
  • docs/short-description for documentation

Step 3: Stage and Commit Changes (if needed)

Skip this step entirely if there are no uncommitted changes.

Stage specific files rather than using git add -A:

git status
git add <file1> <file2> ...
git diff --cached --stat
git commit -m "$(cat <<'EOF'
<type>: <short summary>

<optional longer description>
EOF
)"

Follow the project's commit conventions if documented in CLAUDE.md or AGENTS.md. Otherwise use conventional commits: feat:, fix:, refactor:, docs:, test:, chore:.

If the commit fails due to a pre-commit hook:

  1. Read the error output to understand what the hook requires
  2. Fix the flagged issues
  3. Stage the fixed files
  4. Create a new commit (do NOT amend the previous commit)

Step 4: Sync with Base Branch (if needed)

git fetch origin
git log --oneline HEAD..origin/<base-branch> | head -20

If up to date (no output), proceed to Step 5.

If behind, inform the user how many commits behind and offer options using AskUserQuestion:

  1. Rebase (recommended when no PR exists yet)
  2. Merge (safer with many commits or shared branches)
  3. Skip (proceed without syncing)

Do NOT rebase or merge without user confirmation.

If conflicts arise, inform the user and help resolve them.

Step 5: Draft PR Title and Body

Get user approval on the PR content now, before running pre-flight checks. This keeps the user engaged while they're focused on the task.

5a. Gather context:

git log --oneline <base-branch>..HEAD
git diff <base-branch>...HEAD --stat

5b. Draft the PR title and body:

Follow the project's PR conventions if documented in CLAUDE.md or AGENTS.md. Otherwise:

  • Title: Under 70 characters, describes the change
  • Body: Start with issue references on the first line (e.g. Closes #45), then a structured description:
[issue references: Fixes #...]

## Summary
<summary>

## Verification
<how to verify>

Summary: Give an overview of the changes in the PR. The target audience is an experienced developer who works in this code base and needs to be informed about design or architectural changes. Highlight key decisions, structures and patterns.

Write PR descriptions with one physical line per paragraph and list item. Do not hard-wrap Markdown prose. Internal references to list items should be phrased "item N" and not "#N" to avoid creating links to unrelated issues on GitHub.

Verification: include an example that demonstrates the changes in the PR as seen or used by the intended audience. For code packages, include a small, reproducible example. For apps and interfaces, describe the steps required to see the new behavior.

5c. Preview and get user approval:

CRITICAL: Use AskUserQuestion to show the user the proposed PR title and body. Also include a reviewer question in this same interaction:

  • If a --reviewer was provided, resolve and confirm the GitHub handle (see below), then show it as part of the preview.
  • If no reviewer was given, ask in the same AskUserQuestion call whether they want to request a review from anyone (free-text, optional).

Resolving a reviewer by name (not handle): If the reviewer value doesn't look like a GitHub handle (no @, not clearly a username), look up the correct handle from collaborators with push access:

scripts/find-collaborator.sh {owner}/{repo} "<name>"

Confirm the resolved handle with the user before storing it.

Store the confirmed reviewer handle in task metadata:

TaskUpdate:
- taskId: [pr task ID]
- metadata: {"reviewer": "<github-handle>"}

Present the PR draft to the user for review. If the plannotator-annotate skill is available, write the PR draft to a temporary file and use the skill to request feedback from the user on the title, body, and reviewer.

Follow up with an AskUserQuestion call to confirm before moving forward.

  1. Are you ready to create the PR with the drafted title and description?
  2. "Looks good, proceed" (default) — approve and immediately continue to Step 6
  3. "Looks good, tell me what you'll do next" — approve but show the plan outline before continuing
  4. Do you want to request a review from anyone? (free-text, optional)

Do NOT create the PR until the user has explicitly confirmed you should proceed.

5d. Show plan outline (only if user selected option 2):

Present the following before continuing:

Here's what I'll do next:

  1. Run local checks (if available for this project)
  2. Push the branch to origin
  3. Create the PR as a draft with the approved title and body
  4. Monitor CI and fix any failures
  5. Publish the PR (remove draft status) once CI passes
  6. Request a review from @<reviewer> (if applicable)

I'll auto-fix small issues (formatting, lint, type errors, test failures). If anything bigger comes up, I'll check with you first.

After showing the outline, ask one more AskUserQuestion to confirm before proceeding to Step 6.

Step 6: Run Local Pre-flight Checks

This step catches most CI failures before pushing.

Determine the project's local check commands by consulting (in priority order):

  1. CLAUDE.md or AGENTS.md in the project root (may specify lint, test, build commands)
  2. Project config files: package.json (scripts), Makefile, pyproject.toml, DESCRIPTION, Justfile, Taskfile.yml, etc.
  3. CI workflow files in .github/workflows/ to understand what CI will run

Run the checks that are available locally. Common patterns:

  • Lint/format: npm run lint, ruff check, air format, biome check, etc.
  • Build: npm run build, pip install -e ., devtools::check(), etc.
  • Type check: npm run check-types, mypy, pyright, etc.
  • Tests: npm test, pytest, devtools::test(), cargo test, etc.

If no local check commands are discoverable, skip this step and rely on CI.

Fixing failures:

  • Obvious, mechanical fixes — fix autonomously:

    • Running an auto-formatter that the project already configures (e.g., prettier, black, air)
    • Lint errors where the linter's message specifies the exact fix (unused import, trailing whitespace)
    • Type errors with a single unambiguous correction (missing return type, wrong argument type)
    • Test failures caused by your own earlier changes in this session (e.g., a renamed function)
    • Stage the fixed files and commit the fix (specific files, not git add -A)
    • Re-run the failing check to confirm it passes
    • ALWAYS call out changes made in this step in the final summary
    • Never change application logic, add dependencies, modify API behavior, or alter test assertions as an "obvious" fix
  • Non-obvious failures — use AskUserQuestion to present the issue and offer resolution options

Step 7: Push Branch

git push -u origin <branch-name>

Step 8: Create Pull Request

Create the PR as a draft so it is not prematurely sent for review while CI is still running.

GitHub's markdown parser renders every newline literally — do not wrap long lines in the PR body. Write each paragraph as a single unbroken line.

gh pr create --draft --title "<approved-title>" --body "$(cat <<'EOF'
<approved-body>
EOF
)"

Capture the PR URL and store in task metadata:

TaskUpdate:
- taskId: [pr task ID]
- metadata: {"prUrl": "<url>", "prNumber": <N>, "prTitle": "<title>", "commits": <count>}

Step 9: Monitor CI

Create a CI run task:

TaskCreate:
- subject: "CI Run #[N]: monitoring"
- description: "Monitoring CI run for PR #[number]"
- activeForm: "Monitoring CI Run #[N]"

TaskUpdate:
- taskId: [ci task ID]
- addBlockedBy: [pr task ID]
- status: "in_progress"

Wait for CI to start, then monitor:

# List workflow runs for this PR
gh run list --branch <branch-name> --limit 5

# Watch a specific run silently until completion
# --exit-status returns exit code 0 on success, non-zero on failure
gh run watch <run-id> --exit-status > /dev/null 2>&1
echo "Exit: $?"

# Or check status without blocking
gh run view <run-id>

IMPORTANT: Do NOT run gh run watch without redirecting output. It generates thousands of lines of repeated status updates. Always redirect to /dev/null and rely on the exit code.

Store run ID in task:

TaskUpdate:
- taskId: [ci task ID]
- metadata: {"runId": "[run-id]", "status": "running"}

Step 10: Handle CI Results

If CI Passes:

TaskUpdate:
- taskId: [ci task ID]
- subject: "CI Run #[N]: passe

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars521
CategoryAutomation
Updated15d ago
Forks53

Languages

R

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions