What it does
Fixes unresolved automated code review comments on GitHub pull requests.
- Fetch review comments
- Triage findings
- Apply code fixes
- Update PR status
Fix Bugbot PR Comments
Use this workflow to make a PR merge-ready after Cursor Bugbot or other automated review comments appear.
Core Rules
- Use
ghfor all GitHub operations. - Fetch unresolved review threads first; filter out resolved threads before reading comment bodies.
- Read only each comment body plus the minimum path, line, and URL needed to act.
- Fix only clear, correct, in-scope feedback.
- Keep changes minimal and scoped to the PR.
- Do not modify CI workflows or config just to make checks pass.
- Do not include unrelated files or generated artifacts in commits.
- If a branch requires signed commits and this environment cannot produce a verified signature, stop and report the exact blocker instead of force-pushing or bypassing rules.
Resolve PR Context
Start from the current branch:
git status --short --branch
gh pr view --json number,url,title,headRefName,baseRefName,mergeStateStatus,reviewDecision,isDraft
gh pr checks --json name,bucket,state,workflow,linkIf there are local changes, determine whether they are yours and relevant before touching them.
Fetch Unresolved Comments
Use GraphQL so resolved threads are filtered before reading bodies. If a PR may have more than 100 review threads or 50 reviews, paginate with pageInfo { hasNextPage endCursor } and repeat until complete; do not silently assume first:100 covers everything:
OWNER_REPO="$(gh repo view --json owner,name -q '.owner.login + "/" + .name')"
OWNER="${OWNER_REPO%/*}"
REPO="${OWNER_REPO#*/}"
PR="$(gh pr view --json number -q .number)"
gh api graphql \
-f owner="$OWNER" \
-f repo="$REPO" \
-F number="$PR" \
-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:10) {
nodes {
author { login }
body
url
}
}
}
}
reviews(first:50) {
nodes {
author { login }
state
body
url
}
}
}
}
}' \
--jq '.data.repository.pullRequest as $pr |
{
unresolvedThreads: [
$pr.reviewThreads.nodes[]
| select(.isResolved == false)
| {path,line,isOutdated,comments:[.comments.nodes[] | {author:.author.login, body, url}]}
],
reviews: [$pr.reviews.nodes[] | {author:.author.login, state, body, url}]
}'Classify each unresolved thread:
- Fix now: Clear, correct, in-scope bug or missing test.
- Needs human: Product decision, ambiguous requested behavior, or tradeoff.
- Won't fix: Incorrect, stale, or out of PR scope. Reply with a short rationale if appropriate.
Fix Loop
For each clear in-scope issue:
- Read the referenced file and the smallest surrounding context needed.
- Make the smallest safe fix.
- Add or update focused tests when behavior changes.
- Run scoped tests first.
- Run broader checks only when scoped checks pass or when the change touches shared behavior.
- Re-check generated files and unrelated artifacts before staging.
Common generated-file guard:
git status --shortIf a build rewrites a tracked binary or generated artifact unrelated to the fix, restore it before committing.
Reviewer Filtering and Follow-up
Separate automated review findings from human review. Filter Cursor Bugbot and other bots by author login/body patterns, but keep human comments visible for product or maintainer decisions. After a fix, reply with a concise rationale and evidence when useful; resolve the thread only when the platform and repository convention allow it. For GitHub GraphQL thread resolution, use resolveReviewThread with the thread ID after verifying the fix is pushed.
Before chasing CI, fetch the base branch and check freshness:
git fetch origin
git merge-base --is-ancestor origin/main HEAD || echo "branch may need update/rebase"Do not blame Bugbot for stale-base CI failures until the failing logs prove the PR change caused them.
CI Loop
Use PR checks as the source of truth:
gh pr checks --json name,bucket,state,workflow,linkIf checks are pending:
gh pr checks --watch --fail-fastIf checks fail:
- Inspect the failing check link or GitHub Actions failed logs.
- Extract the first actionable error.
- Fix only failures caused by this PR.
- If the failure is unrelated and likely already fixed upstream, fetch and merge latest
origin/main. - If fixing would require changing CI itself, stop and report.
Commit And Push
Before committing:
git status --short --branch
git diff --check
git diff --cached --statStage only files changed for the Bugbot fixes. Use a concise message:
git commit -m "fix(scope): concise summary"
git pushAfter pushing, re-run:
gh pr checks --json name,bucket,state,workflow,linkThen fetch unresolved threads again. Continue until CI is green and all actionable comments are resolved or clearly reported.
Final Report
Keep the report short:
- Issues fixed.
- Tests/checks run.
- Current CI status.
- Remaining blockers, if any, with URLs.
Developer & API
curl -sL https://agentvouch.xyz
/api/skills/8969aa89-981e-40dd-8f40-bbec454617d1/raw -o SKILL.mdGET /api/skills/8969aa89-981e-40dd-8f40-bbec454617d1/rawAuth: Authorization: Bearer sk_... or wallet signature. Get API key →
Synced from dirtybits/agent-skills
Synced from dirtybits/agent-skills
Initial release