name: pr description: Create or update a pull request from current branch to origin main with auto-generated title and description argument-hint: "[base-branch]"
/pr - Smart Pull Request Creator & Updater
Usage
/pr # Create or update PR to origin/main (default)
/pr develop # Create or update PR to specified base branch
Workflow
Step 1: Check for Uncommitted Changes
git status
If there are uncommitted changes:
- Invoke the
/commitskill first to commit all pending changes - Wait for commit to complete before proceeding
Step 2: Detect Remote and Branch Info
# This is a direct repo (not a fork) — remote is always origin
git remote -v
BRANCH=$(git branch --show-current)
BASE_BRANCH=${1:-main} # Default base is main
# Get repo from origin
REPO=$(git remote get-url origin | sed 's/.*github.com[:/]\(.*\)\.git/\1/' | sed 's/.*github.com[:/]\(.*\)/\1/')
# Fetch latest
git fetch origin
Step 3: Check if PR Already Exists
# Check for existing PR from current branch
gh pr list --repo $REPO --head $BRANCH --json number,url,title,body
If PR exists: Go to UPDATE MODE (Step 4a) If no PR: Go to CREATE MODE (Step 4b)
UPDATE MODE (PR Already Exists)
Step 4a: Push New Commits
git push origin $BRANCH
Step 5a: Analyze New Commits Since PR Creation
gh pr view $PR_NUMBER --repo $REPO --json commits
git log origin/$BASE_BRANCH..HEAD --oneline
Step 6a: Update PR Description
Update the PR body to:
- Add new changes to Summary section
- Mark completed TODOs with
[x] - Add any new test plan items
gh pr edit $PR_NUMBER --repo $REPO --body "$(cat <<'EOF'
<updated-description>
EOF
)"
Step 7a: Report Update
✅ PR #123 updated successfully!
**URL:** https://github.com/owner/user-agent-parser/pull/123
**New commits pushed:** 2
**Description updated:** Yes
Step 8a: Review Updated PR
Invoke the /pr-review skill on the PR number.
CREATE MODE (No Existing PR)
Step 4b: Push Current Branch to Origin
git push -u origin $BRANCH
Step 5b: Analyze Commits for PR Content
- Review all commits between
origin/mainand HEAD - Group changes by type (feat, fix, refactor, etc.)
- Identify the primary/dominant change type for PR title
- Extract key changes for summary bullets
Step 6b: Generate PR Title
Format: <emoji> <type>(<scope>): <subject> (max 70 chars)
Same format as commit messages. If multiple types, use the dominant one. If equal, prioritize: fix > feat > refactor > test > docs > style.
Step 7b: Generate PR Description
gh pr create --repo $REPO --base $BASE_BRANCH --head $BRANCH \
--title "<emoji> <type>(<scope>): <subject>" \
--body "$(cat <<'EOF'
## Summary
- <emoji> <change 1>
- <emoji> <change 2>
- <emoji> <change 3>
## Changes
### <Category 1>
- **Component**: Description of change
## Testing
- [ ] `poetry run pytest` — all tests pass
- [ ] `poetry run pytest -q --cov=user_agent_parser --cov-report=xml` — coverage not decreased
- [ ] `poetry run ruff check && poetry run ruff format --check` — no lint issues
## Compatibility
- [ ] Python 3.8+ syntax only (no match/case, no X|Y unions)
- [ ] `parse()` returns 7-tuple — backward compatible
- [ ] Public API signatures unchanged (or documented as breaking)
- [ ] `@lru_cache` functions return immutable types
- [ ] CI matrix passes (Python 3.8–3.15)
## Test plan
- [ ] Test item 1
- [ ] Test item 2
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
Step 8b: Review the Created PR
Invoke the /pr-review skill on the new PR number.
Type Reference (same as commits)
| Type | Emoji | Use Case | |------|-------|----------| | feat | ✨ | New feature | | fix | 🐛 | Bug fix | | docs | 📝 | Documentation | | style | 💄 | Formatting only | | refactor | ♻️ | Code restructure | | perf | ⚡ | Performance | | test | ✅ | Tests | | build | 📦 | Dependencies | | ci | 🌐 | CI/CD | | chore | 🔧 | Maintenance/mixed changes | | revert | ⏪ | Revert commit | | remove | 🔥 | Remove code/files |
Scope Priority (same as commits)
| Priority | Scope | File Paths |
|----------|-------|------------|
| 1 | parser | user_agent_parser/parser.py |
| 2 | engine | user_agent_parser/advanced_engine.py |
| 3 | analytics | user_agent_parser/analytics.py |
| 4 | devices | user_agent_parser/modern_devices.py, constants device entries |
| 5 | constants | user_agent_parser/constants.py |
| 6 | api | user_agent_parser/__init__.py |
| 7 | tests | tests/* |
| 8 | ci | .github/workflows/* |
| 9 | deps | pyproject.toml, poetry.lock |
Rules
| Rule | Details |
|------|---------|
| Uncommitted Changes | Run /commit skill first |
| Existing PR | Detect and switch to UPDATE mode |
| Remote | Always origin (direct repo, not a fork) |
| Base Branch | Default main |
| Push | Push to origin before creating/updating PR |
| Title Format | <emoji> <type>(<scope>): <subject> |
| Title Length | Max 70 chars |
| TODO Updates | Mark completed items with [x] in update mode |
| Review | Invoke /pr-review skill after create/update |
Error Handling
| Error | Action |
|-------|--------|
| Uncommitted changes | Run /commit skill first |
| On main branch | Ask user to create a feature branch first |
| No commits ahead of origin/main | Report "Nothing to create PR for" |
| Push fails | Report error and stop |
| gh CLI not authenticated | Run gh auth login |
Output to User
CREATE MODE:
✅ PR created successfully!
**Title:** ✨ feat(parser): add Brave browser detection
**URL:** https://github.com/owner/user-agent-parser/pull/42
**Base:** origin/main
**Head:** feature-branch
**Commits:** 3 commits
**Files changed:** 4 files
Running /pr-review to check PR...
UPDATE MODE:
✅ PR #42 updated successfully!
**URL:** https://github.com/owner/user-agent-parser/pull/42
**New commits pushed:** 2
**Description updated:** Yes
Updates made:
- ✨ Added: "Add parametrized test cases for Brave"
- ✅ Completed: "poetry run pytest passes"
Running /pr-review to check PR...
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.