agentleFS
eai-orgeai-org/agent-toolkit/skills/maintainer-review/SKILL.md

maintainer-review

Skill85 starsChanged 21 days agoMITView on GitHub

Review someone else's pull request as the maintainer deciding whether it merges.

5 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

8 rules. 0 are common, 7 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 5 edited versions we read keep these.

  • 7

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Distinctive:

    Before the first text addressed to the user, the report included, actually invoke explain-in-simple-language and follow it — reciting its …

    line 19
  2. Distinctive:

    Before the gather: git fetch.

    line 29
  3. Distinctive:

    When the update touched the repo's agent-governing docs or anything they reference, re-reading them now does not replace what already …

    line 34
  4. Distinctive:

    Never skip one for looking resolved, old or minor, and never batch them away.

    line 89
  5. Very specific:

    Detail first: Every finding with its path:line and evidence, then the comment walk.

    line 129
  6. Distinctive:

    Never rebase, never force-push, never amend a pushed commit: rewriting a contributor's published history takes another force push to undo, …

    line 170
  7. Distinctive:

    Leave the target unmerged unless the fix itself needs it: the push fast-forwards either way, and a merge commit on a linear-history branch …

    line 173
  8. Distinctive:

    Read-only git plus git fetch, and no writes to the working tree.

    line 180

“Common” is measured: kept by at least 6 in 10 of the 5 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

Maintainer review

You are the merge gate, not the author's assistant: the question is whether this ships, and the contributor will argue back. Your own PR belongs to self-review. Review in this session, not a subagent. A session opened for the PR is fresh already, and staying in it keeps the diff, the comments and your findings in hand for the argument that follows. Session already loaded with unrelated work, say so and offer a fresh one first.

Before the first text addressed to the user, the report included, actually invoke explain-in-simple-language and follow it — reciting its rules from memory does not count. Not installed: plain words, one idea per sentence, and nothing named only by a stand-in the reader hasn't seen.

1. Start clean and current

A stale checkout reviews against yesterday's rules: the convention docs the diff pass runs as a checklist come from it, and so did whatever auto-loaded at session start.

Before the gather: git fetch. Fetch failed, say so and ask rather than compare against a stale ref. Then compare the checkout against the freshest ref of the branch it tracks, the repo's default branch when it tracks none. Behind it, say so and offer to fast-forward; the update is a write, so it waits for a go-ahead. A dirty tree does not cancel the offer; git refusing it, or a diverged tree, is reported, never resolved for the user. When the update touched the repo's agent-governing docs or anything they reference, re-reading them now does not replace what already loaded: recommend reopening the session on the new tip and re-invoking.

The checkout's position never decides the diff base: step 2 pins that from the PR. A PR targeting a branch other than the one checked out leaves the wrong docs on disk: say so and leave the call to the user, never switch the checkout yourself.

Done when the checkout is clean and on its freshly fetched tip, or you named what stands in the way (drift, a failed fetch, a base elsewhere) and the user chose to proceed.

2. Gather

Take a PR reference on any forge and pull, through whatever tooling is connected, all of it before judging: metadata (title, description, author, base and head refs, draft state, labels, mergeability, required-check results), the diff, and every comment stream — conversation comments, review verdicts with their bodies, and inline threads with their replies. A single "view PR" call typically misses the review bodies and the inline threads; expect one request per stream.

Fetch here, never via fetch-pr-review: it writes the author's triage file and takes thread status from the forge, which step 4 re-derives against the current head.

Fetch, then diff the merge base — <base>...<head>, three-dot — so the target's own commits don't read as the author's. A fork's head has no local ref; fetch the forge's PR ref for it. A fetch failing here, or a ref not resolving, say so and ask rather than judge a stale or wrong head.

Done when the head SHA, the base, the diff, the check results and all comment streams are in hand.

3. Follow every reference

Extract every issue and PR reference, commit sha, external link and domain identifier (a ticket key or product entity id) from the title, the description and every comment, then open each, including its own comments and the references it carries in turn, as far as the trail stays on this PR's subject. A linked issue's description is part of the requirement; a linked PR may already have fixed or superseded this one.

Never take a claim as fact, the author's no more than a reviewer's. "This breaks X" and "fixed in the latest push" are hypotheses until the code, the data, the cited source or the current target says otherwise.

An unticked box in the PR template is hygiene, not evidence: the sources are whatever the PR and the opened references actually hold, and weak or off-target evidence is named as such, never called absent.

Done when every reference on the PR, and every on-subject one it led to, has been opened or recorded as unreachable.

4. Walk every comment

Build an explicit list of every conversation comment, review body and inline thread including replies. For each, record what was raised, whether it was answered, and whether it still applies at the current head and the current target. A thread the target has since fixed counts as answered, by the commit and file that fixed it; an anchor that merely drifted onto changed lines has not been answered by anything.

Never skip one for looking resolved, old or minor, and never batch them away. Bot reviewers count: their findings are often the only ones on record, and an author's "no, addressed above" is a claim like any other.

An approval predating the current head approved a different changeset — say so rather than counting it.

Done when every item carries, with its evidence, whether it was answered and whether the concern still stands or no longer applies — answering one never settles the other.

5. Read the diff

Load review-code-assistant on the pinned changeset, its mandate reframed as the merge gate — does anything here block the merge. Take from it only Review lenses (the convention-docs checklist included), Grounded, not speculative and the list of what an explanation holds under Output, each explanation kept to step 7's short paragraph. Everything else there, comment handling and the Output section included, is superseded by steps 1 to 4 and 7 and by Boundaries: the changeset stays the step-2 head SHA, so the diff pass and the comment walk judge the same code, and the findings stay unprinted drafts until step 7.

Done when the diff pass has returned its findings, possibly none.

6. Fresh eyes over the findings

Load fresh-eyes-review, giving it the step-2 range <base>...<head SHA> as the changeset, the title, description and linked issue as the intent, and your draft findings as the artifact to check. A clean verdict is an artifact too, and the one most worth checking. Its mandate here: is each finding grounded in the diff, is anything claimed that the code does not support, is anything obvious missed. A cheaper or faster model is enough for this pass when the harness offers one.

Drop what it refutes, fix what it corrects, and report what it raised that you chose not to adopt.

Done when every draft finding was kept, dropped, or knowingly kept against the reviewer's objection — with none, when the clean verdict came back unchallenged or gained a finding.

7. Report

In chat, no file. The reader sees the tail first, so the scannable part goes last.

Detail first. Every finding with its path:line and evidence, then the comment walk. Facts, not restatement; no item outgrows a short paragraph. Name what was checked against what, and what wasn't and who closes it: a review that never ran the code says so, and names what the author should test, including the side effects a fix for X reaches in Y.

Summary last — it has to survive a glance, in this order:

  • the verdict: does it block the merge, and what stands in the way;
  • one line per finding and per walked comment, mirroring the detail's order, each with its path:line (or the comment's author and date), the claim in a clause, and its position — blocking, non-blocking, answered, no longer applies;
  • anything still unverified and who closes it, named not restated;
  • the one recommended next action and what it waits on.

A table is usually tightest for that list; evidence stays above, never repeated here.

Done when the closing summary carries every item above, in order, each finding and walked comment among them with a stated position.

Acting on the PR

Nothing is posted, approved, labelled, merged or pushed without a separate go-ahead naming that action, and re-read the head SHA then: moved since the review, the verdict covers a changeset nobody reviewed, so say so rather than act. Drafting is not posting, and a request to act is not approval of the wording: show the text, then wait. Project etiquette — which labels, which checks, who may merge — comes from the repo's own governing docs, not from here.

  • Comments — the concern, the location, the suggested change, and whether it blocks the merge when that is not obvious from the concern (a leading nit: for a non-blocking one is the usual signal), and nothing else beyond one opening line on the round's first comment, naming what the author fixed since the last round, which is acknowledgment, not padding. No recap of the PR, no praise padding. Invoke use-conversational-language for the wording. Not installed: write plain prose instead, no dashes and no AI tells.
  • Approvals — plain, with an empty body. Anything worth saying is a separate comment.
  • Fixes, only when asked — on the contributor's own branch, never a local copy nobody sees. The go-ahead reaches that branch's push and no further on the PR; putting your own checkout back belongs to the fix, not to a new go-ahead. A clean working tree first: uncommitted work follows the checkout and ships to the contributor under their name. Stash what doesn't belong, or confirm it as local-only and let the by-path commit below leave it out. Then add the head's remote when it is a fork (a same-repo head needs none), fetch, check out the branch, write the fix, commit its files by path, push fast-forward only, and return to the branch you started on, popping the stash. Never rebase, never force-push, never amend a pushed commit: rewriting a contributor's published history takes another force push to undo, and it is not yours to rewrite.

    Leave the target unmerged unless the fix itself needs it: the push fast-forwards either way, and a merge commit on a linear-history branch takes the force push just forbidden to remove. Needed and conflicting, hand back rather than resolve someone else's conflicts — mid-merge the by-path commit is refused anyway.

Boundaries

Read-only git plus git fetch, and no writes to the working tree; the step-1 fast-forward and a fix are the exceptions, each on its own explicit go-ahead. Output is chat text; write a file only if asked.

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.