# Manage Prs

> Manage and maintain GitHub pull requests end-to-end. Use when asked to fix PR review comments, unresolved review threads, top-level PR conversation comments, requested changes, merge conflicts, or CI/CD failures; when the user says to manage, maintain, clean up, unblock, get green, finish, or prepare a PR; or when a PR must have no unresolved actionable comments and no failing checks.

- **Type:** Skill
- **Install:** `agentstack add skill-billchirico-bills-agent-skills-manage-prs`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [BillChirico](https://agentstack.voostack.com/s/billchirico)
- **Installs:** 0
- **Category:** [Developer Tools](https://agentstack.voostack.com/c/developer-tools)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [BillChirico](https://github.com/BillChirico)
- **Source:** https://github.com/BillChirico/bills-agent-skills/tree/main/manage-prs

## Install

```sh
agentstack add skill-billchirico-bills-agent-skills-manage-prs
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Manage PRs

## Operating Rule

Treat GitHub as the source of truth. Do not rely on stale browser state, old summaries, local guesses, or a previous agent's report.

Only mark review threads resolved after:

1. The related code/doc/test fix is committed.
2. The branch is pushed.
3. The live PR state is re-read and the fixed thread IDs are still the threads being resolved.

Top-level PR conversation comments do not have review-thread resolution. Address them by fixing the issue, pushing the fix, and replying only when a reply is useful or explicitly requested.

## Quick Start

From the target repo:

```bash
python3 "/scripts/inspect_pr_state.py" --repo "." --pr ""
```

If the current branch has exactly one PR, omit `--pr`.

After fixes are pushed and the live thread IDs are confirmed:

```bash
python3 "/scripts/resolve_review_threads.py" --repo "." --thread-id ""
```

## Workflow

1. Confirm the target PR.
   - Use a provided PR number/URL when present.
   - Otherwise run `gh pr view --json number,url,headRefName,headRepositoryOwner`.
   - Run `git status --short` before editing. Preserve unrelated user changes.

2. Refresh from GitHub.
   - Run `git fetch --all --prune`.
   - Inspect mergeability with `gh pr view  --json number,url,headRefName,baseRefName,mergeable,mergeStateStatus,reviewDecision`.
   - If the branch is behind or conflicted, update from the PR base using the repo's normal merge/rebase pattern before calling the PR clean.

3. Inventory every blocker.
   - Run `inspect_pr_state.py`.
   - Read unresolved review threads.
   - Read top-level PR conversation comments.
   - Read review summary bodies, especially `CHANGES_REQUESTED`.
   - Read failing and pending checks.
   - For failing GitHub Actions checks, fetch logs with `gh run view  --log` or use the existing `gh-fix-ci` skill/script if available.
   - For external CI providers, open the details URL if tooling is available; otherwise report the exact external URL and continue with local reproduction where possible.

4. Cluster comments by root cause.
   - Multiple comments often point at one bug. Fix the bug once instead of making one-off edits for each comment.
   - Separate actionable requests from stale, duplicate, or already-addressed comments.
   - Do not resolve a stale-looking thread until live code proves it is obsolete and the branch has been pushed.

5. Fix with tests.
   - Reproduce failing CI locally when feasible.
   - Add or update focused tests for review-comment fixes that affect behavior.
   - Run the narrowest meaningful verification first, then broader gates when the PR touches shared code.
   - Do not weaken lint, typecheck, tests, snapshots, coverage, security checks, or required workflows to get green.

6. Commit and push.
   - Use the repo's commit conventions.
   - If push is rejected, fetch/rebase or merge the remote branch, rerun the relevant checks, then push again.
   - Never resolve review threads before this push succeeds.

7. Re-check GitHub.
   - Re-run `inspect_pr_state.py`.
   - Re-run `gh pr checks ` or the provider-specific status command.
   - If checks are pending, wait or watch them when practical. Do not claim there are no failing checks while required checks are still red.

8. Resolve completed review threads.
   - Resolve only the exact thread IDs whose requested changes were fixed and pushed.
   - Use `resolve_review_threads.py` or the GraphQL mutation directly.
   - Re-run `inspect_pr_state.py` and confirm unresolved actionable review threads are zero.

9. Final report.
   - Include the PR URL/number.
   - List the comments fixed, top-level comments addressed, and CI failures cleared.
   - State the exact verification run.
   - If anything remains pending or externally blocked, say exactly which check/comment and link the details.

## Comment Handling Rules

- Review threads: fix, push, then resolve via GraphQL `resolveReviewThread`.
- Top-level PR conversation comments: fix the underlying issue. Reply only when a human needs a note; do not pretend they can be resolved.
- Review summary bodies: treat `CHANGES_REQUESTED` as actionable even when there is no inline thread.
- Bot comments: handle if they identify a real blocker. Ignore noise only after proving it is non-actionable.
- Duplicates: mention they are duplicates in the final report, but still verify there is no separate unresolved request.

## CI/CD Handling Rules

- Required checks must not be failing when done.
- A local green test does not replace a red GitHub check. Use logs to connect the local fix to the failing workflow.
- Treat pending checks as pending, not green.
- Treat skipped/neutral checks as their own bucket. They are not failures unless branch protection or the PR UI marks them as blockers.
- If a failure is environmental or third-party, gather the run URL, error text, and retry status before reporting it as blocked.
- If several PRs share the same failing workflow, fix the shared workflow once and verify each affected PR state separately.

## Useful GraphQL Mutation

Use this only after the fix is pushed:

```bash
gh api graphql \
  -f threadId="" \
  -f query='mutation($threadId:ID!){resolveReviewThread(input:{threadId:$threadId}){thread{id isResolved}}}'
```

## Bundled Scripts

- `scripts/inspect_pr_state.py`: prints unresolved review threads, top-level PR comments, review summaries, and status checks for a PR.
- `scripts/resolve_review_threads.py`: resolves explicit review-thread IDs after the branch has been fixed and pushed.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [BillChirico](https://github.com/BillChirico)
- **Source:** [BillChirico/bills-agent-skills](https://github.com/BillChirico/bills-agent-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-billchirico-bills-agent-skills-manage-prs
- Seller: https://agentstack.voostack.com/s/billchirico
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
