pr-description-writer
Generates comprehensive, reviewer-friendly PR descriptions with visual diagrams, summary tables, collapsible sections, and structured test plans. Optimized for readability without sacrificing detail.
Best use case
pr-description-writer is best used when you need a repeatable AI agent workflow instead of a one-off prompt. It is especially useful for teams working in multi. Generates comprehensive, reviewer-friendly PR descriptions with visual diagrams, summary tables, collapsible sections, and structured test plans. Optimized for readability without sacrificing detail.
Generates comprehensive, reviewer-friendly PR descriptions with visual diagrams, summary tables, collapsible sections, and structured test plans. Optimized for readability without sacrificing detail.
Users should expect a more consistent workflow output, faster repeated execution, and less time spent rewriting prompts from scratch.
Practical example
Example input
Use the "pr-description-writer" skill to help with this workflow task. Context: Generates comprehensive, reviewer-friendly PR descriptions with visual diagrams, summary tables, collapsible sections, and structured test plans. Optimized for readability without sacrificing detail.
Example output
A structured workflow result with clearer steps, more consistent formatting, and an output that is easier to reuse in the next run.
When to use this skill
- Use this skill when you want a reusable workflow rather than writing the same prompt again and again.
When not to use this skill
- Do not use this when you only need a one-off answer and do not need a reusable workflow.
- Do not use it if you cannot install or maintain the related files, repository context, or supporting tools.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/pr-description-writer/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How pr-description-writer Compares
| Feature / Agent | pr-description-writer | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Generates comprehensive, reviewer-friendly PR descriptions with visual diagrams, summary tables, collapsible sections, and structured test plans. Optimized for readability without sacrificing detail.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
AI Agent for YouTube Script Writing
Find AI agent skills for YouTube script writing, video research, content outlining, and repeatable channel production workflows.
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
Best AI Skills for ChatGPT
Find the best AI skills to adapt into ChatGPT workflows for research, writing, summarization, planning, and repeatable assistant tasks.
SKILL.md Source
# PR Description Writer Skill
## When to Use This Skill
Use this Skill when:
- Creating or updating a PR description for a feature branch.
- The PR has multiple related changes that need clear organization.
- You want a description that helps reviewers understand the "why" and "what"
quickly while having access to detailed context.
- You're preparing a PR for review and want it to be self-documenting.
This Skill is designed to work with any repository but is especially tuned for
Django/Python backends, React frontends, and infrastructure changes.
## Example Prompts
- "Use `pr-description-writer` to create a PR description for my current branch."
- "Generate a comprehensive PR description for PR #1234 using the
`pr-description-writer` Skill."
- "Update the PR description for my feature branch to match our standard format."
---
## Workflow: Gathering Context
Before writing the PR description, **always gather the complete picture** of
all changes that will be included in the PR. This means:
1. Local uncommitted changes (staged + unstaged)
2. Local commits not yet pushed
3. Commits already pushed to the remote branch
4. Existing PR details (if a PR already exists)
### Step 1: Detect If Current Branch Has a PR
Use `gh pr view` to check if the current branch already has an associated PR:
```bash
# Check if current branch has a PR (returns 0 if PR exists, non-zero otherwise)
gh pr view --json number,title,body,url 2>/dev/null
# If you just need to know if a PR exists (boolean check):
gh pr view --json number 2>/dev/null && echo "PR exists" || echo "No PR yet"
```
**Interpretation:**
- Exit code `0` + JSON output → PR exists, use the PR number for updates
- Exit code non-zero → No PR yet, description will be for a new PR
### Step 2: Identify the Base Branch
Determine what branch the PR targets (or will target). Use this detection order:
```bash
# 1. If PR exists, get base from the PR (most reliable)
gh pr view --json baseRefName --jq '.baseRefName' 2>/dev/null
# 2. Get the repo's default branch via GitHub API
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
# 3. Fallback: check git remote HEAD
git remote show origin 2>/dev/null | grep "HEAD branch" | cut -d: -f2 | xargs
# 4. Last resort: check which common branches exist
git branch -r | grep -E "origin/(main|master|release|develop)$" | head -1 | sed 's|origin/||'
```
**Detection Priority:**
1. **Existing PR base** – If PR exists, always use its base branch
2. **GitHub default** – `gh repo view --json defaultBranchRef` is authoritative
3. **Git remote HEAD** – Works offline, reflects GitHub's default
4. **Common branch names** – Check for main/master/release/develop
**Smart Detection Script:**
```bash
detect_base_branch() {
# Try existing PR first
local pr_base=$(gh pr view --json baseRefName --jq '.baseRefName' 2>/dev/null)
if [[ -n "$pr_base" ]]; then
echo "$pr_base"
return
fi
# Try GitHub API for default branch
local gh_default=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name' 2>/dev/null)
if [[ -n "$gh_default" ]]; then
echo "$gh_default"
return
fi
# Try git remote HEAD
local remote_head=$(git remote show origin 2>/dev/null | grep "HEAD branch" | cut -d: -f2 | xargs)
if [[ -n "$remote_head" ]]; then
echo "$remote_head"
return
fi
# Fallback to checking common branches
for branch in main master release develop; do
if git rev-parse --verify "origin/$branch" &>/dev/null; then
echo "$branch"
return
fi
done
echo "main" # Ultimate fallback
}
BASE_BRANCH=$(detect_base_branch)
echo "Using base branch: $BASE_BRANCH"
```
### Step 3: Gather ALL Changes
**CRITICAL**: The PR description must account for ALL changes, not just the
latest commit. This includes:
```bash
# 1. Get the base branch (adjust as needed)
BASE_BRANCH="origin/release" # or origin/main, etc.
# 2. View ALL commits that will be in the PR
git log ${BASE_BRANCH}..HEAD --oneline
# 3. View the FULL diff of all changes (committed + uncommitted)
# This shows what reviewers will see in the PR
git diff ${BASE_BRANCH}...HEAD --stat # Files changed (committed only)
git diff ${BASE_BRANCH} --stat # Files changed (including uncommitted)
# 4. Check for uncommitted changes that should be included
git status --short
# 5. If there are uncommitted changes, include them in the diff
git diff --stat # Unstaged changes
git diff --cached --stat # Staged changes
```
### Step 4: Get Existing PR Details (If Updating)
When updating an existing PR, fetch current details to preserve/enhance:
```bash
# Get full PR details as JSON
gh pr view --json number,title,body,url,commits,files
# Get just the current body for reference
gh pr view --json body --jq '.body'
# Get list of files changed in the PR
gh pr view --json files --jq '.files[].path'
# Get commit history in the PR
gh pr view --json commits --jq '.commits[].messageHeadline'
```
### Step 5: Analyze Changes Comprehensively
```bash
# View the actual diff to understand what changed
git diff ${BASE_BRANCH}...HEAD
# For a specific file
git diff ${BASE_BRANCH}...HEAD -- path/to/file.py
# See commit messages for context on why changes were made
git log ${BASE_BRANCH}..HEAD --format="%h %s%n%b" | head -100
```
---
## Updating a PR with `gh` CLI
Once the description is generated, use `gh pr edit` to update:
```bash
# Update PR title and body
gh pr edit <number> --title "New Title" --body "$(cat <<'EOF'
## Summary
...full markdown body here...
EOF
)"
# Or update just the body
gh pr edit --body "$(cat <<'EOF'
...full markdown body here...
EOF
)"
# Update PR for current branch (no number needed if on the branch)
gh pr edit --body "..."
```
**Creating a new PR:**
```bash
gh pr create --title "Title" --body "$(cat <<'EOF'
## Summary
...
EOF
)" --base release
```
---
## Core Principles
### 1. Scannable First, Detailed Second
Reviewers should understand the PR in 30 seconds from the summary, then dive
deeper as needed. Structure content in layers:
1. **Summary table** – Quick overview of key features (30 seconds)
2. **Visual diagrams** – Understand flows without reading code (1-2 minutes)
3. **Detailed sections** – Full context for each feature (as needed)
4. **Collapsible file lists** – Reference without clutter
### 2. Visual Over Verbal
Use diagrams, tables, and structured formatting instead of prose where possible:
- Decision trees for conditional logic
- Flow diagrams for pipelines and processes
- Tables for feature summaries and comparisons
- Code blocks for commands and examples
### 3. Reviewer-Centric
Every section should answer a reviewer's question:
- "What does this PR do?" → Summary
- "Why was it done this way?" → Detailed sections with rationale
- "What files should I focus on?" → Collapsible file lists
- "How do I test this?" → Test commands + manual steps
- "Are there breaking changes?" → Explicit callouts
### 4. Complete Picture
**Never describe only the latest commit.** The PR description must reflect:
- All commits in the branch (from base to HEAD)
- Any uncommitted changes the user plans to include
- The cumulative effect of all changes together
---
## PR Description Structure
### Section 1: Summary
Start with a 1-2 sentence high-level summary, then provide a **Key Features
table** if the PR has 3+ distinct features:
```markdown
## Summary
This PR adds [brief description of the main change].
### Key Features
| Feature | Description |
|---------|-------------|
| **Feature A** | Short description of what it does |
| **Feature B** | Short description of what it does |
| **Feature C** | Short description of what it does |
```
For smaller PRs (1-2 features), a bullet list is acceptable.
### Section 2: Visual Diagrams
For any non-trivial flow, include a visual diagram. Choose the appropriate
format based on complexity:
#### ASCII Art (Simple Flows)
Use for decision trees and linear flows:
```markdown
## Feature Flow
```
First condition?
│
YES ──► Has prior state? ──► YES: Action A
│ └──► NO: Action B
│
NO ───► Action C
```
```
#### Mermaid (Complex Flows)
Use for multi-step pipelines, state machines, or architectures:
```markdown
## Architecture
```mermaid
flowchart LR
A[Step 1] --> B[Step 2]
B --> C{Decision}
C -->|Yes| D[Path A]
C -->|No| E[Path B]
```
```
#### Box Diagrams (Pipelines)
Use for showing data flow or process stages:
```markdown
## Data Pipeline
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Input Stage │────►│ Process Stage │────►│ Output Stage │
│ (description) │ │ (description) │ │ (description) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
```
### Section 3: Detailed Feature Sections
For each major feature, provide a dedicated section with:
- **What it does** – Behavior description
- **Why this approach** – Rationale for key decisions
- **Key implementation details** – Important patterns or constraints
Use horizontal rules (`---`) to separate major features.
```markdown
---
## Feature A: Title
Description of what this feature does and why.
Key implementation details:
- Point 1
- Point 2
---
## Feature B: Title
...
```
### Section 4: Files Changed
Group files by category using collapsible sections:
```markdown
## Files Changed
<details>
<summary>Core modules (click to expand)</summary>
- `path/to/file1.py` - Brief description
- `path/to/file2.py` - Brief description
</details>
<details>
<summary>Tests (click to expand)</summary>
- `tests/test_file1.py` - What it tests
- `tests/test_file2.py` - What it tests
</details>
```
Categories to consider:
- Core modules / Services
- API / Views / Routes
- Models / Migrations
- Tests
- Configuration / Settings
- Documentation
### Section 5: How to Test
Provide both automated and manual testing instructions:
```markdown
## How to Test
```bash
# Run all related tests
.bin/pytest path/to/tests/ -v
```
### Manual Testing
1. **Test scenario A**: Step-by-step instructions
2. **Test scenario B**: Step-by-step instructions
```
### Section 6: Breaking Changes / Notes
Always include a section for special considerations:
```markdown
## Notes
- **No Migrations**: This PR has no schema changes.
```
Or for PRs with important notes:
```markdown
## Breaking Changes
- **API Change**: The `/api/endpoint` now returns X instead of Y.
- **Config Required**: Set `NEW_ENV_VAR` before deploying.
## Deploy Steps
1. Add environment variable `NEW_VAR=value`
2. Run migrations
3. Deploy code
```
---
## When to Use Each Element
| Scenario | Use |
|----------|-----|
| 3+ distinct features | Summary table |
| Conditional logic | ASCII decision tree |
| Multi-step process | Box diagram or Mermaid |
| 5+ files in a category | Collapsible details |
| Test commands exist | Code block with commands |
| Manual testing needed | Numbered step list |
| Schema changes | Explicit migration section |
| Breaking changes | Dedicated callout section |
---
## Common Patterns
### Feature Flag Pattern
```markdown
## Feature Flag
Controlled by `FEATURE_FLAG_NAME` (default: `False`).
When enabled:
- Behavior A
- Behavior B
When disabled:
- Falls back to original behavior
```
### Migration Pattern
```markdown
## Migrations
| Migration | Description | Reversible |
|-----------|-------------|------------|
| `0001_add_field.py` | Adds `new_field` to Model | Yes |
| `0002_backfill.py` | Backfills existing rows | Yes (data loss) |
### Rollback Plan
1. Revert code deployment
2. Run `./manage.py migrate app_name 0000_previous`
```
### API Change Pattern
```markdown
## API Changes
### New Endpoints
| Method | Path | Description |
|--------|------|-------------|
| `GET` | `/api/v2/resource` | Fetches resource with new format |
### Modified Endpoints
| Endpoint | Change |
|----------|--------|
| `GET /api/v1/old` | Now returns `new_field` in response |
### Deprecated
- `GET /api/v1/legacy` - Use `/api/v2/resource` instead
```
---
## Anti-Patterns to Avoid
1. **Wall of text** – Use formatting (tables, lists, diagrams) instead of
paragraphs.
2. **Vague descriptions** – "Various bug fixes" tells reviewers nothing.
Be specific.
3. **Missing test instructions** – Always include how to verify the changes.
4. **Buried breaking changes** – Put them in a dedicated, visible section.
5. **Listing every file** – Use collapsible sections and group by purpose.
6. **No visual aids for flows** – If you need more than 2 sentences to explain
a flow, use a diagram.
7. **Describing only the latest commit** – The PR description should cover ALL
commits and changes in the branch.
---
## Quick Reference: `gh` CLI Commands
### PR Detection & Info
```bash
# Check if current branch has a PR
gh pr view --json number 2>/dev/null && echo "Has PR" || echo "No PR"
# Get PR number for current branch
gh pr view --json number --jq '.number'
# Get full PR details
gh pr view --json number,title,body,baseRefName,headRefName,url,state,files,commits
# Get PR URL
gh pr view --json url --jq '.url'
```
### PR Creation & Updates
```bash
# Create new PR
gh pr create --title "Title" --body "Body" --base release
# Update existing PR (current branch)
gh pr edit --title "New Title" --body "New Body"
# Update specific PR by number
gh pr edit 1234 --title "New Title" --body "New Body"
# Add reviewers
gh pr edit --add-reviewer username1,username2
# Add labels
gh pr edit --add-label "enhancement,needs-review"
```
### Viewing Changes
```bash
# View PR diff
gh pr diff
# View PR diff for specific PR
gh pr diff 1234
# View PR files
gh pr view --json files --jq '.files[].path'
# View PR commits
gh pr view --json commits --jq '.commits[] | "\(.oid[0:7]) \(.messageHeadline)"'
```
---
## Compatibility Notes
This Skill works with both **Claude Code** and **OpenAI Codex**.
For Codex users:
- Install via skill-installer with `--repo DiversioTeam/agent-skills-marketplace
--path plugins/pr-description-writer/skills/pr-description-writer`.
- Use `$skill pr-description-writer` to invoke.
For Claude Code users:
- Install via `/plugin install pr-description-writer@diversiotech`.
- Use `/pr-description-writer:write-pr` to invoke.
---
## Output
When this Skill generates a PR description, it should:
1. **Gather all context first** using the commands above.
2. **Analyze ALL changes** – not just the latest commit.
3. **Output the full markdown** for the PR description.
4. **Offer to update the PR** directly using `gh pr edit` if a PR exists, or
create one using `gh pr create` if not.
5. **Be ready to iterate** based on user feedback.
The description should be copy-paste ready for GitHub.Related Skills
prd-doc-writer
Write and iteratively refine PRD/需求文档 with a story-driven structure and strict staged confirmations (journey map alignment, per-story single-point confirmation, final generation gate). Use when the user asks to 梳理/撰写/完善 PRD、需求文档、用户故事、验收标准,并希望用 ASCII 线框图与 Mermaid(流程图/状态图/时序图)来减少歧义、共同完成文档。
svelte-code-writer
CLI tools for Svelte 5 documentation lookup and code analysis. MUST be used whenever creating, editing or analyzing any Svelte component (.svelte) or Svelte module (.svelte.ts/.svelte.js). If possible, this skill should be executed within the svelte-file-editor agent for optimal results.
writer
Document creation, format conversion (ODT/DOCX/PDF), mail merge, and automation with LibreOffice Writer.
wiki-page-writer
Generates rich technical documentation pages with dark-mode Mermaid diagrams, source code citations, and first-principles depth. Use when writing documentation, generating wiki pages, creating technical deep-dives, or documenting specific components or systems.
seo-content-writer
Writes SEO-optimized content based on provided keywords and topic briefs. Creates engaging, comprehensive content following best practices. Use PROACTIVELY for content creation tasks.
blog-writer
Write and add new blog posts for this Next.js site by matching the existing BlogPost structure in `src/lib/blog-data.ts`. Use when asked to draft a new blog article, update blog content, or produce SEO metadata/slug/image details for a new post.
code-review-digest-writer
Generates weekly code-review digest docs from PR review comments for any GitHub repository. If present, follows project-specific docs/review-digests/AGENTS.md guidelines. Use this to turn a date-bounded set of PR reviews into a structured markdown “newsletter” that captures themes, repeated issues, and concrete takeaways.
libreoffice-writer
Use when creating, editing, formatting, exporting, or extracting LibreOffice Writer (.odt) documents via UNO, including session-based edits, structured text targets, tables, images, lists, patch workflows, and snapshots.
skill-writer
Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.
content-research-writer
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
documentation-writer
Expert technical writer for Logseq Template Graph project. Generates comprehensive, accurate, and well-structured documentation for modules, features, guides, and APIs. Activates when asked to "write docs", "document this", "create README", "update documentation", or similar requests. Analyzes code/templates to extract information and writes clear, user-focused documentation following project style.
pr-description
Guide for creating comprehensive PR descriptions with proper structure, diagrams, and documentation for code reviews.