| name | github-pr-fixup |
| description | {url} address comments left on a GitHub pull request. Use when a user wants review comments and CI failures fixed on an existing GitHub pull request without opening a new PR. |
GitHub PR Fixup
Fix review feedback and CI failures on an existing GitHub pull request. Work on
the PR's source branch. Do not open a new PR.
Required tools
Verify both tools exist before doing anything else:
gh --version
jq --version
If either command is missing, stop and tell the user to run:
brew install gh jq
Inputs
Extract the PR number from the URL:
PR_NUMBER="$(echo "$ARGUMENTS" | grep -oE '[0-9]+$')"
Stop if PR_NUMBER is empty.
Workflow
- Check out the existing PR branch.
gh pr checkout "$PR_NUMBER"
- Read PR metadata you will need later.
gh pr view "$PR_NUMBER" --json number,title,headRefName,headRepositoryOwner,headRepository,headRefOid,baseRefName,url
- Gather unresolved review feedback.
Use GraphQL so you can ignore resolved threads and outdated comments.
gh api graphql -f query='
query($owner: String!, $repo: String!, $number: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $number) {
reviewThreads(first: 100) {
nodes {
isResolved
isOutdated
path
line
comments(first: 20) {
nodes {
author { login }
body
createdAt
url
}
}
}
}
}
}
}' -F owner="$(gh pr view "$PR_NUMBER" --json headRepositoryOwner -q '.headRepositoryOwner.login')" -F repo="$(gh pr view "$PR_NUMBER" --json headRepository -q '.headRepository.name')" -F number="$PR_NUMBER"
Focus only on threads where:
isResolved == false
isOutdated == false
Read each active thread carefully. Fix the requested changes in code, tests,
docs, or config as needed. If comments conflict, prefer the most recent reviewer
guidance and note the conflict in your final summary.
- Check CI status for the PR head commit.
HEAD_SHA="$(gh pr view "$PR_NUMBER" --json headRefOid -q '.headRefOid')"
gh pr checks "$PR_NUMBER"
gh run list --commit "$HEAD_SHA" --json databaseId,status,conclusion,name,event,workflowName,headSha,url
- Investigate failed runs only.
Filter for failing runs:
gh run list --commit "$HEAD_SHA" --json databaseId,status,conclusion,name,event,workflowName,url | jq '.[] | select(.conclusion == "failure")'
For each failed run:
gh run view <run-id> --log-failed
Diagnose the underlying failure from the failed job log. Do not patch symptoms
blindly. Fix the actual issue in code or configuration.
- Verify locally.
Run the smallest relevant validation that covers the fixes you made. Prefer
repo-native lint, unit, or integration commands over broad full-suite runs when
scope is small. If full local verification is not possible, explain why and
state what you did run.
- Commit and push fixes to the existing source branch.
Do not create a new branch and do not create a new PR.
Guardrails
- Never open a new PR.
- Never resolve review threads unless the user explicitly asks.
- Ignore resolved and outdated review threads.
- Prefer the PR head repository and branch already associated with the PR.
- Keep fixes scoped to active review feedback and failing CI unless you find a
directly related root cause.
- If a CI failure depends on unavailable secrets, external services, or flaky
infrastructure, state that clearly and avoid speculative code changes.
Final response
Report:
- what unresolved review comments you addressed
- which CI failures you fixed
- what validation you ran
- any remaining blockers you could not complete