skills/reply/SKILL.md
Reply to unresolved PR review comments that clearly relate to the current conversation. Use when the user asks to respond to PR review feedback without resolving threads or editing code.
npx skillsauth add derogab/agent-kit replyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
git branch --show-currentgh pr view --json number,url 2>/dev/null || echo "NO_PR"Reply to unresolved review comments on the current PR that relate to what we have been discussing in this conversation. Skip every other comment.
NO_PR, stop and tell the user there is no PR for this branch. Do nothing else.Get owner, repo, and PR number for the API calls below:
OWNER=$(gh repo view --json owner -q .owner.login)
REPO=$(gh repo view --json name -q .name)
PR=$(gh pr view --json number -q .number)
CURRENT_USER=$(gh api user -q .login)
Use the GraphQL API to list every review thread page on the PR with its resolution status and the comments inside. Run the first request with -F threadsCursor=null:
gh api graphql \
-F owner="$OWNER" \
-F repo="$REPO" \
-F pr="$PR" \
-F threadsCursor=null \
-f query='
query($owner: String!, $repo: String!, $pr: Int!, $threadsCursor: String) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $pr) {
reviewThreads(first: 100, after: $threadsCursor) {
pageInfo {
hasNextPage
endCursor
}
nodes {
id
isResolved
comments(first: 100) {
pageInfo {
hasNextPage
endCursor
}
nodes {
databaseId
author { login }
body
path
line
url
createdAt
}
}
}
}
}
}
}'
If reviewThreads.pageInfo.hasNextPage is true, rerun the same query with -F threadsCursor="<endCursor>" until hasNextPage is false. Combine all returned thread nodes before filtering.
If any unresolved thread has comments.pageInfo.hasNextPage set to true, fetch the remaining comments before deciding whether to reply:
gh api graphql \
-F thread="$THREAD_ID" \
-F commentsCursor="<endCursor>" \
-f query='
query($thread: ID!, $commentsCursor: String) {
node(id: $thread) {
... on PullRequestReviewThread {
comments(first: 100, after: $commentsCursor) {
pageInfo {
hasNextPage
endCursor
}
nodes {
databaseId
author { login }
body
path
line
url
createdAt
}
}
}
}
}'
Repeat comment pagination until hasNextPage is false.
Filter the combined result to threads where isResolved is false. For each unresolved thread, the first comment's databaseId is the one you reply to.
For each unresolved thread:
CURRENT_USER, skip the thread. A reply is only needed when someone else has added the latest comment.<commit-sha>."<approach> because <reason discussed>."<reason>."For each matching thread, post a threaded reply to the first comment of that thread:
gh api repos/$OWNER/$REPO/pulls/$PR/comments/<first_comment_databaseId>/replies \
-X POST \
-f body="$(cat <<'EOF'
<your reply here>
EOF
)"
isResolved is false.CURRENT_USER.tools
Run code review tools in parallel, validate findings with a second-opinion agent, and aggregate a comprehensive review report.
documentation
Read the Redis Patterns for Coding Agents documentation before answering Redis questions or making Redis changes.
tools
Create or update a pull request for the current branch with a summary of all changes. Use when the user asks to open, create, update, or refresh a PR/pull request.
testing
Create a git commit following the Conventional Commits specification. Use when the user asks to commit staged changes or create a commit message.