agentleFS
mmurakarummurakaru/skills/pr-feedback/SKILL.md

pr-feedback

Skill0 starsChanged 6 days agoMITView on GitHub

Address reviewer feedback on a PR end-to-end: verify each claim, fix, test, then wait for explicit approval before pushing and posting replies. Inverse of `pr-review`. Use when the user says "/pr-feedback", "address PR feedback", or pastes a PR link to handle the review.

  • Commits and pushes

14 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use commit and code-review.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • SentrySkill

    commit

    Create commit messages following Sentry conventions. Use when committing code changes, writing commit messages, or formatting git history. Follows conventional commits with Sentry-specific issue references.

    Also in 3 projects that use this

  • GoogleSkill

    code-review

    Adversarial systems, concurrency, memory-model, and architecture code review protocol. Use this skill whenever asked to review code, PRs, diffs, or branches in Filament.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

7 rules. 0 are common, 5 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 14 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    One reply per thread, concise: Default to addressed: <short-sha>.

    line 36
  2. Distinctive:

    If a claim doesn't hold up after verification, the right reply is *"investigated, here's what the code actually does, keeping current …

    line 85
  3. Very specific:

    Run npm run lint && npm run typecheck (or repo equivalent) after each meaningful chunk - catch issues before the user reviews.

    line 90
  4. Distinctive:

    Run targeted tests for the changed files.

    line 91
  5. Distinctive:

    Inventing justifications: Don't write "Lupo signed off" if you don't have a link.

    line 151
  6. Distinctive:

    Silently dismissing claims: If you disagree, say so with one line of reasoning.

    line 154
  7. Distinctive:

    Commit message style + branch hygiene during the loop: per the global CLAUDE.md conventions.

    line 162

“Common” is measured: kept by at least 6 in 10 of the 14 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

PR feedback

End-to-end loop for addressing reviewer feedback on a PR. The author runs this when reviewers have left comments and they want to close them in one focused pass.

This skill is the symmetrical counterpart to pr-review: that one writes feedback, this one addresses it.

When to invoke

  • /pr-feedback <number> or /pr-feedback <github-url> or /pr-feedback (current branch).
  • User pastes a PR URL and says "address comments", "handle the feedback", "respond to the review".
  • User explicitly says "/pr-feedback" or asks to triage and address review threads on a PR.

When NOT to invoke

  • Reviewing a PR (writing feedback): use pr-review instead.
  • Pre-PR self-review (no reviewer comments yet): out of scope - this skill addresses existing reviewer feedback.
  • One trivial comment the user already knows how to fix: skip the skill, just fix it.

Argument parsing

Accepts:

  • /pr-feedback <number> - PR number in the current repo.
  • /pr-feedback <github-url> - any GitHub PR URL.
  • /pr-feedback - no arg, defaults to the PR for the current branch via gh pr list --head $(git branch --show-current) --json number,url.

Hard rules

  • Never push without explicit user approval in the same conversation turn. Push is gated on the user's "ok push", "ship it", "go ahead" after seeing the diff summary.
  • Never reply or resolve threads before pushing. Replies that reference an unpushed SHA confuse reviewers. Order is: commit → user approval → push → reply → resolve.
  • One reply per thread, concise. Default to addressed: <short-sha>. Add a one-line "why" only when (a) the user picked an option among alternatives, (b) the comment was rejected/deferred, or (c) the reviewer asked a question that needs a textual answer.
  • Only resolve threads the user authored a code change for, or where the discussion is genuinely closed. Deferred / open-question threads stay unresolved.
  • Verify claims before acting. A reviewer saying "X is wrong" is a hypothesis, not a fact. See Phase 2.
  • Trust but verify reviewer-attributed bot output. Comments labelled "Claude", "CodeRabbit", etc. are AI-generated and can be plausibly wrong - run the same verification as for any other claim.

Phase 1: Pull the conversation

# PR meta
gh pr view <pr> --json number,title,headRefName,headRefOid,state,url

# All review comments (inline + replies)
gh api repos/<owner>/<repo>/pulls/<pr>/comments --paginate

# Top-level conversation comments
gh api repos/<owner>/<repo>/issues/<pr>/comments --paginate

# Review summaries (state-of-review messages)
gh pr view <pr> --json reviews

Filter to open threads only. A thread is open when:

  • The latest comment in the chain is not from the PR author dismissing it.
  • The thread isn't marked resolved via GraphQL.

To check resolved state:

gh api graphql -f query='
query { repository(owner:"<owner>", name:"<repo>") { pullRequest(number:<pr>) {
  reviewThreads(first:100) { nodes { id isResolved comments(first:1) { nodes { databaseId } } } }
} } }'

Group comments by reviewer. Within each reviewer, sort by file path so related concerns cluster. Note thread IDs alongside comment IDs - you'll need both later.

Phase 2: Verify each claim

For every open thread, before changing code, classify the claim and verify:

Claim typeVerification
"Library X behaves like Y"WebSearch for the library's current docs / changelog; Read the installed node_modules/<lib>/dist/index.d.ts or .js to confirm.
"Codebase convention is Z"Grep for the pattern across the repo. Cite a permalink to a canonical example in your reply.
"This is unsafe / a regression"Reproduce with a focused test or a grep for the precise pre-condition. Don't assume the reviewer ran the path.
"Nit: X duplicated"Confirm the duplication is real (literal duplication, not coincidental similarity).
"Question: do we need X?"Investigate the usage; come back with "yes - here's why" or "no - dropping". Don't punt.
Bot-attributed claims (Claude, CodeRabbit)Same verification as human claims. Bots hallucinate; assume nothing.

If a claim doesn't hold up after verification, the right reply is "investigated, here's what the code actually does, keeping current shape" — not silent compliance. The reviewer learns more from a "no, because..." than a no-op fix.

Phase 3: Apply changes

  • Group fixes by file so the diff reads coherently.
  • Run npm run lint && npm run typecheck (or repo equivalent) after each meaningful chunk - catch issues before the user reviews.
  • Run targeted tests for the changed files. Full suite at the end if the project has a fast-enough one.
  • For behavior changes (vs pure refactors), add or amend a unit test that locks the new behavior in. Mention these in the summary.
  • For e2e tests: scan tests/e2e/ for assertions that touch the affected flow. Note explicitly whether they need amendment or already pass with the new behavior.

Phase 4: Summary to user (before push)

Output a punch list, one line per thread:

Comments (N open):
  ✓ #<id>  <reviewer>:<file>:<line>  <one-line summary of what changed>
  ✓ #<id>  <reviewer>:<file>:<line>  <kept current, here's why>
  ⏸ #<id>  <reviewer>:<file>:<line>  <deferred to follow-up - reason>

Then:

Commit: <short-sha> (local only, not pushed)
Tests: <X> passed, <Y> failed
Lint:  clean | <count> errors
Type:  clean | <count> errors

Ready to push when you approve. Manual QA path: <suggest one minimal smoke test against the feature being reviewed>.

Stop here. Wait for the user's explicit "ok push" or equivalent. Do not push, do not reply, do not resolve.

Phase 5: After approval

In order:

  1. git push.
  2. Capture the pushed SHA from git rev-parse HEAD. Use the short form (10 chars) for replies.
  3. Post one reply per thread:
    • Default: addressed: <short-sha>
    • With one-line context only when:
      • You rejected/deferred the comment (cite reason)
      • You picked among options (cite which and why)
      • The reviewer asked a question with no code change (answer it)
    • Use gh api repos/<owner>/<repo>/pulls/<pr>/comments/<comment-id>/replies -f body=...
  4. Resolve threads where the work is fully done. Open-question threads, deferred work, threads the user wants to discuss further — leave unresolved.
    gh api graphql -f query='mutation { resolveReviewThread(input: {threadId: "<thread-id>"}) { thread { isResolved } } }'
  5. Report back: which threads got pushed/replied/resolved, which are still open and why.

Concise replies - examples

Comment kindReply
Nit, fixedaddressed: 4c90913705
Bug, fixed + testaddressed: 4c90913705
Picked one of reviewer's optionsaddressed: 4c90913705 - went with option B (ring) per <reason>
Verified false alarm, no changeLooked into this - <one-line: what the code actually does>. Keeping current shape.
Deferred to follow-upFiled as follow-up <issue-url>; out of scope for this PR.
Reviewer asked a question<one-line answer, no commit hash needed if no code changed>

Anti-patterns to avoid

  • Inventing justifications. Don't write "Lupo signed off" if you don't have a link. If you don't know, say "no sign-off yet, holding".
  • Massive paragraph replies. Reviewers re-read the comment, they don't need a re-explanation.
  • Replying before push. Comments with addressed: <sha> where the SHA isn't on the remote yet are noise.
  • Silently dismissing claims. If you disagree, say so with one line of reasoning. Don't just leave the thread.
  • Resolving threads with open questions. Resolution = "no further discussion intended". If the reviewer might want to push back, leave it.
  • Bulk-resolving without per-thread reasoning. Each resolve should map to a specific addressed: hash or a stated rationale.

Composes with

  • pr-review - the inverse: writes feedback. This skill addresses what that one (or a human) wrote.
  • octocat / gh - underlying mechanics for fetching PR data and posting replies.
  • Commit message style + branch hygiene during the loop: per the global CLAUDE.md conventions.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.