| name | reply-comments |
| description | Reply to PR review comments after addressing them. Resolves conversations where changes were made. Uses polite tone for humans, terse factual responses for AI bots. Use when this capability is needed. |
| metadata | {"author":"flurdy"} |
Reply to Review Comments
Reply to PR review comments after addressing the feedback. Use this after /review-comments to close the feedback loop.
Usage
/reply-comments
/reply-comments 123 # Specific PR number
Instructions
1. Find the PR
If no PR number provided, get it from the current branch:
~/.claude/skills/reply-comments/scripts/gh-pr-current-info.sh
If the script is unavailable, fall back to:
gh pr view --json number,url,title,headRepositoryOwner,headRepository \
--jq '{number, url, title, owner: .headRepositoryOwner.login, repo: .headRepository.name}'
2. Fetch Review Comments
Get all review comments with their thread/resolution status:
~/.claude/skills/reply-comments/scripts/gh-pr-comments.sh {owner} {repo} {pr_number}
If the script is unavailable, fall back to:
gh api "repos/{owner}/{repo}/pulls/{pr_number}/comments" \
--jq '.[] | {id, path, line, body, user: .user.login, in_reply_to_id, created_at}'
3. Get Recent Commits
Check what was recently committed to understand which comments were addressed:
git log --oneline -10
git diff HEAD~1 --name-only
4. Identify Addressed Comments
For each review comment, determine if it was addressed by:
- Checking if the file/line was modified in recent commits
- Matching commit messages to comment content (e.g., "address review feedback")
- Looking for code changes that match suggested fixes
5. Compose Replies
Use different tones based on the reviewer:
AI Bots (amazon-q-developer[bot], copilot[bot], github-actions[bot], etc.):
- Terse, factual responses
- Just state what was done
- Examples:
- "Fixed."
- "Done."
- "Changed to use
const."
- "Added null check."
- "Not applicable - already handled by X."
Human Reviewers (anyone without [bot] suffix):
- Short but polite responses
- Acknowledge their feedback
- Examples:
- "Good catch, fixed!"
- "Thanks - updated."
- "Done, good suggestion."
- "Makes sense, changed it."
- "Addressed in latest commit."
For comments NOT addressed (intentionally skipped):
- "Keeping as-is because {brief reason}."
- "Intentional - {brief explanation}."
6. Post Replies
Reply to each comment:
~/.claude/skills/reply-comments/scripts/gh-pr-reply-comment.sh {owner} {repo} {pr_number} {comment_id} "{reply_text}"
If the script is unavailable, fall back to:
gh api "repos/{owner}/{repo}/pulls/{pr_number}/comments/{comment_id}/replies" \
-f body="{reply_text}"
7. Resolve Threads (if addressed)
First, get the thread IDs:
~/.claude/skills/reply-comments/scripts/gh-pr-review-threads.sh {owner} {repo} {pr_number}
If the script is unavailable, fall back to:
gh api graphql -f query='
query($owner: String!, $repo: String!, $pr: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $pr) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 1) { nodes { databaseId body } }
}
}
}
}
}
' -f owner="{owner}" -f repo="{repo}" -F pr={pr_number}
Then resolve each thread that was addressed:
~/.claude/skills/reply-comments/scripts/gh-pr-resolve-thread.sh {thread_id}
If the script is unavailable, fall back to:
gh api graphql -f query='
mutation($threadId: ID!) {
resolveReviewThread(input: {threadId: $threadId}) {
thread { isResolved }
}
}
' -f threadId="{thread_id}"
8. Summary
Report what was done:
Replied to 6 comments:
- amazon-q-developer[bot]: 3 (all resolved)
- @username: 2 (2 resolved, 1 kept as-is)
- copilot[bot]: 1 (resolved)
Converted and distributed by TomeVault — claim your Tome and manage your conversions.