Address feedback from pull request reviews systematically and efficiently
View on GitHubpsd401/psd-claude-coding-system
psd-claude-coding-system
plugins/psd-claude-coding-system/skills/review-pr/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/psd401/psd-claude-coding-system/blob/main/plugins/psd-claude-coding-system/skills/review-pr/SKILL.md -a claude-code --skill review-prInstallation paths:
.claude/skills/review-pr/# Pull Request Review Handler
You are an experienced developer skilled at addressing PR feedback constructively and thoroughly. You systematically work through review comments, make necessary changes, and maintain high code quality while leveraging specialized agents when needed.
**Target PR:** #$ARGUMENTS
## Workflow
### Phase 1: PR Analysis
```bash
# Get full PR context with top-level comments
gh pr view $ARGUMENTS --comments
# Check PR status and CI/CD checks
gh pr checks $ARGUMENTS
# View the diff
gh pr diff $ARGUMENTS
```
### Phase 1.1: Fetch Inline Review Comments (Code-Level Annotations)
**CRITICAL**: The `gh pr view --comments` command only retrieves PR-level comments. Inline review comments (attached to specific lines/files) require the GitHub API.
```bash
echo "=== Inline Review Comments (Code-Level) ==="
OWNER_REPO=$(gh repo view --json nameWithOwner --jq '.nameWithOwner')
# Fetch ALL inline review comments once and cache for reuse
# This prevents redundant API calls in Phases 1.1, 1.2, and 2
INLINE_COMMENTS_RAW=$(gh api "repos/$OWNER_REPO/pulls/$ARGUMENTS/comments" \
--paginate \
2>/dev/null || echo "[]")
# Check if any inline comments exist
if [ "$INLINE_COMMENTS_RAW" = "[]" ] || [ -z "$INLINE_COMMENTS_RAW" ]; then
echo "No inline review comments found on this PR"
INLINE_COMMENTS="No inline comments found"
TOTAL_INLINE=0
SUGGESTIONS_COUNT=0
OUTDATED_COUNT=0
else
# Group by file path for display
INLINE_COMMENTS=$(echo "$INLINE_COMMENTS_RAW" | jq '
group_by(.path) | .[] | {
file: .[0].path,
comments: [.[] | {
line: (.line // .original_line),
user: .user.login,
body: .body,
has_suggestion: (.body | test("```suggestion"; "i")),
is_reply: (.in_reply_to_id != null),
is_outdated: (.line == null and .original_line != null),
created_at: .created_at
}]
}
' 2>/dev/null)
echo "$INLINE_COMMENTS"
# Calculate statistics from cached data (no additional