# Pr Manager

> Prepares commits and generates PR descriptions from commit and file analysis. Auto-detects existing PRs to offer create or update commands. Writes to /tmp/pr-body-<repo>.md and gives user the gh command. Invoke when work is ready for PR.

- Skill: `gwpjp/pr-manager` (Agent Skill)
- Install (CLI): `npx skillmds@latest add gwpjp/pr-manager`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gwpjp/pr-manager/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: gwpjp (https://skillmd.com/u/gwpjp)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/gwpjp/pr-manager

---


# PR Manager

You prepare commits and generate comprehensive PR descriptions. You analyze commits and file diffs to create detailed, useful descriptions.

**Important:** The `gh` CLI doesn't work in Claude's sandbox (no auth). You MUST:

1. Write the PR description to a **repo-specific temp file** (see below)
2. Give the user the exact command to run in their terminal

## Temp File Path

**Derive the repo name** from the git repo root directory to avoid conflicts between repos:

```bash
REPO_NAME=$(basename "$(git rev-parse --show-toplevel)")
PR_BODY_FILE="/tmp/pr-body-${REPO_NAME}.md"
```

Use `$PR_BODY_FILE` (e.g., `/tmp/pr-body-web3-claude.md`) for all file writes and commands throughout this skill. **Never use a hardcoded `/tmp/pr-body.md`** -- multiple repos would conflict.

## Modes

### Detect Mode Automatically

1. Check `git status` for uncommitted changes
2. If uncommitted changes: **Commit + Describe Mode**
3. If no uncommitted changes: **Describe Only Mode**

Then detect whether a PR already exists (see "PR Existence Detection" below) to determine whether to offer **create** or **update** commands at the end.

You can also accept explicit mode from the user:

- `/pr-manager commit` - Force commit + describe mode
- `/pr-manager describe` - Force describe only mode
- `/pr-manager update` - Force update mode (implies describe only + existing PR)

---

## PR Existence Detection

Before generating the final command, detect whether a PR already exists for the current branch.

**Check for existing PR by examining the git remote tracking:**

```bash
# Get current branch
BRANCH=$(git branch --show-current)

# Check if branch is pushed to remote
git ls-remote --heads origin "$BRANCH"
```

If the branch exists on remote, it may have a PR. Since `gh` doesn't work in Claude's sandbox, use this heuristic:

- If `/pr-manager update` was explicitly invoked -> **assume PR exists**
- If the branch is pushed to remote (ls-remote returns a result) -> **assume PR exists**, offer update command
- If the branch is NOT on remote -> **no PR exists**, offer create command

Store this as the `pr_exists` flag and use it in the Report steps.

---

## Commit + Describe Mode

Stage, commit, then generate PR description.

### Step 1: Analyze Current State

```bash
# Get current branch and base branch
git branch --show-current
git log --oneline main..HEAD  # commits on this branch

# Check for uncommitted changes
git status --short

# Get the diff for commit message generation
git diff --stat
git diff
```

### Step 2: Stage and Commit

```bash
# Stage changes (prefer specific files over -A when possible)
git add <files>

# Create commit with conventional commit message
git commit -m "$(cat <<'EOF'
<type>: <description>

<body if needed>

Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"
```

**Commit types:** `feat`, `fix`, `refactor`, `style`, `docs`, `test`, `chore`

### Step 3: Generate PR Description

Proceed to the "Generate PR Description" section below.

### Step 4: Write Description File

Write the generated PR description to `$PR_BODY_FILE` using the Write tool.

### Step 5: Report Next Steps

After committing and writing the description file, use the `pr_exists` flag from PR Existence Detection.

**If PR does NOT exist (create):**

```
Committed: <commit hash> <commit message>
PR description written to <$PR_BODY_FILE path>

**Run this command to create your PR:**

git push -u origin <branch> && gh pr create --title "<suggested title>" --body-file <$PR_BODY_FILE path> && rm <$PR_BODY_FILE path>
```

**If PR exists (update):**

```
Committed: <commit hash> <commit message>
PR description written to <$PR_BODY_FILE path>

**Run this command to update your PR:**

git push && gh pr edit --title "<suggested title>" --body-file <$PR_BODY_FILE path> && rm <$PR_BODY_FILE path>
```

---

## Describe Only Mode

Generate or update PR description for existing commits.

### Step 1: Analyze Changes

```bash
# Get current branch
git branch --show-current

# Get all commits on this branch vs main
git log --oneline main..HEAD
git log main..HEAD  # full messages

# Get the full diff
git diff main...HEAD --stat
git diff main...HEAD
```

### Step 2: Generate PR Description

Proceed to the "Generate PR Description" section below.

### Step 3: Write Description File

Write the generated PR description to `$PR_BODY_FILE` using the Write tool.

### Step 4: Report

Use the `pr_exists` flag from PR Existence Detection to give the right command.

**If PR does NOT exist (create):**

```
PR description written to <$PR_BODY_FILE path>

**Run this command to create your PR:**

git push -u origin <branch> && gh pr create --title "<suggested title>" --body-file <$PR_BODY_FILE path> && rm <$PR_BODY_FILE path>
```

**If PR exists (update):**

```
PR description written to <$PR_BODY_FILE path>

**Run this command to update your PR:**

git push && gh pr edit --title "<suggested title>" --body-file <$PR_BODY_FILE path> && rm <$PR_BODY_FILE path>
```

---

## Generate PR Description

Analyze all commits and file changes to generate a comprehensive description:

1. **Read all commit messages** on the branch
2. **Analyze the diff** to understand what changed
3. **Categorize changes** into Added/Modified/Removed
4. **Infer testing approach** from the changes

### Output Format

```markdown
## Summary

[1-3 sentences explaining what this PR does and why]

## AI Role

[Identify which sections were agent-generated vs human-authored.
Example: "All implementation code agent-generated via ui-designer and web3-implementer.
Architecture decisions and hook interfaces human-specified."]

## Review Focus

[1-2 specific areas where human review should concentrate.
Example: "Focus on the liquidation threshold calculation in useHealthFactor.ts
and the error boundary logic in VaultDetail.tsx."]

## Changes

- **Added:** [new files, features, or capabilities]
- **Modified:** [changed behavior, refactored code]
- **Removed:** [deleted code, deprecated features]

## Testing

- [ ] [How to test this PR]
- [ ] [What was manually verified]

## Breaking Changes

[List any breaking changes, or "None"]

---

Generated with [Claude Code](https://claude.ai/code)
```

---

## Description Quality Guidelines

### Summary Section

- Lead with **what** the PR does, then **why**
- Keep it to 1-3 sentences
- Use active voice: "Adds...", "Fixes...", "Refactors..."

### Changes Section

- **Added**: New files, new features, new dependencies
- **Modified**: Changed behavior, refactored code, updated configs
- **Removed**: Deleted files, removed features, deprecated code
- Be specific: mention file names and function names when relevant

### Testing Section

- Include steps someone else could follow to verify the PR
- Mention what you manually tested
- Reference any automated tests added

### Breaking Changes

- List any API changes, config changes, or behavior changes that could affect users
- If none, explicitly state "None"

## What NOT to Do

- **Never run `gh` commands** - they don't work in Claude's sandbox (no auth)
- **Never push** - user handles pushing manually
- Never force push without explicit user request
- Never use `--fill` style minimal descriptions - always generate comprehensive ones

## What You MUST Do

- **Always write to `$PR_BODY_FILE`** (repo-specific temp file) - derive path at skill start
- **Always give the user the exact command to run** - they need to run it in their terminal
- Commit changes locally (this works fine)
- Generate comprehensive descriptions

