pr-comment
Skill1 starsChanged 5 months agoMITView on GitHub
Merge the review files already sitting in the repo (REVIEWED.md, SCOPE_REVIEW_*.md, PLAN_REVIEW_*.md, pre-merge-review notes) into one standalone PR-comment.md you can paste straight into a GitHub PR. Use when the user says "create PR comment", "PR comment", "/pr-comment", "write pr comment", or "consolidate reviews into a comment".
6 other projects use a version of this.
Adopted by
Most recently taken up by
- warrisk-no/claude-skillstheir own version, first seen Oct 20, 2026
- 8starlabs/uitheir own version, first seen Oct 17, 2026
- sd0xdev/sd0x-dev-flowtheir own version, first seen Oct 8, 2026
- sd0xdev/sd0x-harnesstheir own version, first seen Oct 6, 2026
- MadAppGang/claudishtheir own version, first seen Aug 4, 2026
- BenjaminG/ai-skillstheir own version, first seen Jun 2, 2026
Other versions6 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 6
- MadAppGang/claudish★ 1ksame name
- sd0xdev/sd0x-dev-flow★ 192same name
- sd0xdev/sd0x-harness★ 192same name
- 8starlabs/ui★ 143same name
- BenjaminG/ai-skills★ 4same name
- warrisk-no/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository24 other files it gives its agents.
- authorship-validatorSkill
- auth-setupSkill
- code-reviewSkill
- design-reviewSkill
- design-systemSkill
- devex-reviewSkill
- diagram-siteSkill
- doc-syncSkill
- file-followup-issuesSkill
- handoffSkill
- idea-reviewSkill
- investigate-bugSkill
- plan-reviewSkill
- pre-merge-reviewSkill
- qa-fixSkill
- qa-reportSkill
- qaSkill
- scope-reviewSkill
- semantic-compressorSkill
- shipSkill
- sql-performanceSkill
- team-retroSkill
- ui-polishSkill
- weekly-planSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
23 rules. 0 are common, 12 are distinctive, and 11 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
12
Distinctive
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 30
When a PR number is supplied, you may fetch gh pr view <n> --json title,author,url,headRefName,baseRefName to fill in the header.
- Distinctive: line 37
When none of those files exist, say there is nothing to consolidate and stop.
- Distinctive: line 45
MUST FIX / CRITICAL / BLOCKER → 🔴 MUST FIX
- Distinctive: line 46
SHOULD FIX / HIGH → 🟡 SHOULD FIX
- Distinctive: line 47
FOLLOW-UP / LOW / INFORMATIONAL → 🟢 FOLLOW-UP
- Distinctive: line 49
Leave out meta commentary about the review process, agent names, or which file a finding came from.
- Distinctive: line 54
No Latin abbreviations: Write "for example" not "e.g.", "that is" not "i.e.", "and so on" not "etc."
- Distinctive: line 57
Define jargon on first use: when you cannot avoid it. "TOCTOU (time-of-check vs.
- Very specific: line 68
### N. <Topic> — STILL OPEN: when no answer exists yet. - Distinctive: line 71
Severity can move between iterations: When the user re-runs the skill after the author answers a question, an existing finding may need a …
- Distinctive: line 74
Keep the issue number stable across iterations even as severity changes.
- Very specific: line 77
Do a structural scan (for example grep -n "^### \|^## 🔴\|^## 🟡\|^## 🟢" PR-comment.md) and walk the output.
- Very specific: line 79
When they disagree, move the finding body.
- Distinctive: line 80
Never leave a "Severity note: this is actually MUST FIX, ignore the SHOULD FIX header above it" workaround.
- Distinctive: line 81
When a section's numbers run out of order because of moves (for example MUST FIX holds 1, 2, 3, 4, 5, 6, 9, 20, 21, 22), add a one-line …
- Distinctive: line 183
Read each file in full. Read large files in chunks.
- Very specific: line 186
Sort the ship-gate items: When SCOPE_REVIEW_*.md (or any source) carries a separate "ship gate" / "rollout conditions" / "pre-merge …
- Very specific: line 199
Write PR-comment.md at the repo root (or the path the user prefers).
- Very specific: line 202
Every finding's section header matches the severity in the summary table.
- Very specific: line 203
Iteration handling: When PR-comment.md already exists as the skill runs, the user is iterating — usually because the PR author answered a …
- Very specific: line 212
When the user wants to POST the comment to GitHub, run gh pr comment <n> --body-file PR-comment.md as a follow-up step — but only when the …
- Very specific: line 213
When the user wants a fresh review rather than a consolidation, use the code-review skill instead.
- Very specific: line 214
When no review files exist yet, tell the user to run /code-review first.
“Common” is measured: kept by at least 6 in 10 of the 6 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.
Files
PR Comment Skill
Build one self-contained PR-comment.md at the project root. It rolls every earlier review output into a single document a reviewer can paste directly into a GitHub PR.
Gather context first
This skill ships standalone, so it can't assume your project's conventions, house style, or preferences the way it could for its author. Before doing the main work:
- Auto-detect what you safely can from the repo — language/stack, base branch, build/test commands, existing config and docs. Never ask for something you can read for yourself.
- Ask, don't assume, for the rest. Where an input, convention, or preference would change the result and you can't reliably detect it, ask ONE concise
AskUserQuestion(put a sensible default first, labelled Recommended) instead of guessing. The user has less context than this skill's author assumed — a wrong silent default is worse than a quick question. Don't ask about things you can detect, and don't ask more than you need.
For this skill, confirm up front (only the items you can't already detect):
- Which review files to consolidate — auto-detect
REVIEWED.md,SCOPE_REVIEW_*.md,PLAN_REVIEW_*.md, and*_REVIEW_*.mdat the repo root; ask only when none are found or the reviews live in another folder. - The PR reference (number / title / URL) for the header — detect it from the open PR on the current branch with
ghwhen you can; otherwise ask, or confirm there is no PR yet. - Output target — default is
PR-comment.mdat the repo root; confirm if the user wants a different path, and whether to also post it to the PR withgh pr commentor just write the file. - Tone and audience — this skill rewrites every finding into plain, B1-level English for teams whose first language is not English; confirm that fits, or keep the source reviews' existing wording instead.
- Severity labels — the
🔴 MUST FIX / 🟡 SHOULD FIX / 🟢 FOLLOW-UPscheme; confirm if the team uses different severity names.
Inputs
Usually the user hands you a PR reference (such as PR #658) or nothing at all. Work out the scope first:
- When a PR number is supplied, you may fetch
gh pr view <n> --json title,author,url,headRefName,baseRefNameto fill in the header. When none is supplied, trygh pr view --json ...for the open PR on the current branch before asking; only ask for the reference when detection fails. - Hunt for review source files at the repo root (confirm with the user when none turn up there, in case the reviews live in another folder):
REVIEWED.md— line-level code review (MUST FIX / SHOULD FIX / FOLLOW-UP, with before/after blocks)SCOPE_REVIEW_<ref>.md— strategic review (scope, architecture)PLAN_REVIEW_<ref>.md— execution review (tests, performance, failure modes)- any other
*_REVIEW_*.mdfile
When none of those files exist, say there is nothing to consolidate and stop.
Rules
- Stand on its own.
PR-comment.mdmust never point at another file by name ("see REVIEWED.md", "per the scope review"). Copy every finding in, complete with its file path, line numbers, and fix. - Each issue carries a real before/after code block AND a "Required test" line — never just a description. Take the code from the source review files; when it is missing, Read the source file directly to capture accurate line context. The required test must name one specific test (function name plus what it checks) that would have caught the bug, so the fix cannot silently break again.
- Remove duplicates across the review files. When
REVIEWED.mdandPLAN_REVIEW_*.mdraise the same issue, fold them into one entry and keep the most actionable fix. - Map severity like this (use the team's own severity names instead when they differ — confirm if it is not the default three):
- MUST FIX / CRITICAL / BLOCKER → 🔴 MUST FIX
- SHOULD FIX / HIGH → 🟡 SHOULD FIX
- FOLLOW-UP / LOW / INFORMATIONAL → 🟢 FOLLOW-UP
- Pick the verdict: any MUST FIX → REQUEST_CHANGES; only SHOULD FIX → NEEDS_REVISION; only FOLLOW-UP → APPROVE WITH FOLLOW-UPS; nothing → APPROVE.
- Leave out meta commentary about the review process, agent names, or which file a finding came from.
- Tone: plain English. The readers are developers whose first language is not English. Write so a B1-level reader follows along without reaching for a dictionary. Rules:
- One idea per sentence. Aim for 20 words or fewer. Split long sentences in two.
- Common words only. Choose "fix" over "remediate", "use" over "leverage", "run" over "invoke", "before" over "prior to", "because" over "due to the fact that", "old" over "pre-existing", "so" over "accordingly".
- No idioms, metaphors, or figures of speech. Skip "blast radius", "boil the ocean", "land this", "ship it", "low-hanging fruit", "on the fence", "gotcha", "bake in", "punt on". State exactly what you mean.
- No Latin abbreviations. Write "for example" not "e.g.", "that is" not "i.e.", "and so on" not "etc."
- Active voice. "This deletes the row" beats "The row is deleted".
- Name the thing. Say "the
UploadDocumentsfunction", not "this function" or "it", once you are 2+ sentences away from the last mention. - Define jargon on first use when you cannot avoid it. "TOCTOU (time-of-check vs. time-of-use — reading a value, then writing based on that read, with a gap where another writer can change it)".
- Stay direct and actionable. Plain does not mean vague — "this wipes the DB column" is both simpler and more exact than "this may have unintended downstream effects on persisted state".
- One numbering scheme. No parallel structures. Source reviews —
SCOPE_REVIEW_*.mdespecially — often hold a separate "ship gate" or "rollout conditions" section with items like "add a feature flag", "set up an audit log", "run a canary", "file a deletion ticket". Do not copy that split into the PR comment. Sort each ship-gate item by what it actually is:- Code-level merge blockers (add a feature flag, add structured logging, add a config field) → fold into the MUST FIX list with a real before/after code block. Give it the next sequential issue number.
- Pre-merge process steps an existing finding already covers (file a deletion ticket → already covered by the "old code path is still wired" finding) → drop the duplicate and reference the existing finding instead.
- True post-merge operational steps that are not code changes (run an SQL audit, canary with a dev mailbox for 48h, verify the kill switch, schedule deletion after N clean days) → gather them in one small
📦 Post-merge rollout checklistsection after the findings list. Use checkbox format (- [ ] step). Keep it to 5–7 lines. - The reader should see one numbered list of issues, then one short checklist of operational steps. No "ship gate" header in PR-comment.md.
- Premise / product questions sit at the top. When the PR body is empty, or the source reviews raise unanswered product questions (common when
SCOPE_REVIEW_*.mdhas "Unresolved decisions"), place them in a❓ Product questionssection right under the verdict block, before the issue list. Give every question a status:### N. <Topic> — ANSWEREDonce the author has confirmed an answer in the conversation. Quote the answer in one line, then add a short "implication" paragraph that names the findings it creates, downgrades, or upgrades.### N. <Topic> — STILL OPENwhen no answer exists yet. State the question and what each possible answer would mean for the code. Once every question is answered, rename the header to❓ Product questions — all answered, so a reader scanning the document sees that the premise is locked.
- Severity can move between iterations. When the user re-runs the skill after the author answers a question, an existing finding may need a new severity:
- Promotion (for example SHOULD FIX → MUST FIX): when the answer confirms the worst case. Example: "is
SendToone email or a list?" was a SHOULD FIX "decide later". Once the author says "list, comma-separated", the single-email code becomes a real bug — promote it to MUST FIX. Tag the finding title with[⚠️ PROMOTED TO MUST FIX]so a reader who saw the earlier version notices. - Demotion (for example MUST FIX → FOLLOW-UP): when the answer shows the behavior was intended. Example: "insurances without
SendToget no email" looked like a regression against the always-fired global list. Once the author says "emptySendTomeans do nothing — this is intended", demote it to FOLLOW-UP and reframe it as observability (log a warning so operators can see the silent skips). - Keep the issue number stable across iterations even as severity changes. Physically move the issue body to the right section (MUST FIX / SHOULD FIX / FOLLOW-UP), but do not renumber — people may have referred to "issue 9" in conversation, and renumbering breaks those references.
- Promotion (for example SHOULD FIX → MUST FIX): when the answer confirms the worst case. Example: "is
- Physical position must always match the section header. No exceptions. A MUST FIX finding belongs under the
🔴 MUST FIXheader. A SHOULD FIX belongs under🟡 SHOULD FIX. A FOLLOW-UP belongs under🟢 FOLLOW-UP. After every Edit that promotes, demotes, or adds a finding, run this check before you return:- Do a structural scan (for example
grep -n "^### \|^## 🔴\|^## 🟡\|^## 🟢" PR-comment.md) and walk the output. - For each
### N.line, look up its severity in the summary table at the bottom. The section header above it must agree. - When they disagree, move the finding body. Cut from
### N.through the trailing---(include both ends) and paste it under the right section header. - Never leave a "Severity note: this is actually MUST FIX, ignore the SHOULD FIX header above it" workaround. That defeats scanning by section.
- When a section's numbers run out of order because of moves (for example MUST FIX holds 1, 2, 3, 4, 5, 6, 9, 20, 21, 22), add a one-line italic note under the first out-of-order finding's title:
_(Number N is kept stable from when this finding sat under <section>. <One-line reason>.)_This tells the reader the gap is on purpose.
- Do a structural scan (for example
- New answers can spawn new findings. When the author resolves a question, the answer often exposes a missing piece of work. Example: "applies to every hospital" reveals THG is not wired up today. Add the new finding with the next free number, place it under the correct severity header from the start, and update the summary table, the counts, and the "before re-review" list.
Output format
# PR #<num> Review — <PR title>
**Verdict: <VERDICT>**
<1-3 sentence summary of what the PR does and the headline risk.>
---
## ❓ Product questions
<Only when the source reviews include unanswered or just-answered premise questions. Omit this section when there are none.>
### 1. <Topic> — ANSWERED | STILL OPEN
**Author confirms:** <one-line quote of the answer, when ANSWERED>
<Implication paragraph: which findings does this answer create, upgrade, downgrade, or close?>
<Repeat for each question. When all are answered, rename the section header to "❓ Product questions — all answered".>
---
## 🔴 MUST FIX (blockers)
### N. <Short title — plain English, no jargon>
**File:** `path/to/file.ts:LINE_START–LINE_END`
**What is wrong:** <1 short sentence.>
**Why it matters:** <1 short sentence — user impact in concrete terms, not abstract risk.>
**How to fix:** <1 short sentence pointing at the code change.>
**Current:**
```lang
// problematic codeFix:
// corrected codeRequired test: path/to/file_test.ext
func TestName_Scenario(t *testing.T) {
// seed
// call the code under test
// assert the failure mode is locked down
}🟡 SHOULD FIX
<same structure>🟢 FOLLOW-UP
<same structure>🧪 Tests required before merge
<Only if the source reviews mention test gaps. Table with ID | File | What it covers.>
📦 Post-merge rollout checklist
<Only when the source reviews list true post-merge operational steps that are not code changes for this PR. Use checkbox format. Keep to 5–7 lines. Examples: SQL audits, canary recipients, kill-switch verification, scheduled deletions. Code-level merge blockers like feature flags and audit logs do NOT belong here — they go in MUST FIX. Omit this section when there are no post-merge steps.>
- <Operational step 1>
- <Operational step 2>
📋 Summary table
| # | Severity | File | Line(s) | Issue |
| 1 | MUST FIX | file.ts | 10–20 | Short description |
<Counts: N MUST FIX, N SHOULD FIX, N FOLLOW-UP = N issues.>
Before re-review, please:
- <Concrete next step 1>
- <Concrete next step 2>
## Process
1. Glob for review files at the repo root: `REVIEWED.md`, `SCOPE_REVIEW_*.md`, `PLAN_REVIEW_*.md`, `*_REVIEW_*.md`. Also check whether `PR-comment.md` already exists — step 11 covers iteration.
2. Read each file in full. Read large files in chunks.
3. Build one consolidated issue list. Remove duplicates by file + line range + concern.
4. For any issue missing a concrete fix snippet, Read the source file to pull the exact current code.
5. **Sort the ship-gate items.** When `SCOPE_REVIEW_*.md` (or any source) carries a separate "ship gate" / "rollout conditions" / "pre-merge checklist" section, walk it item by item:
- Is it a code change for this PR? → MUST FIX finding (next sequential number).
- Does an existing finding already cover it? → drop the duplicate and reference that finding number.
- Is it a true post-merge operational step (canary, kill switch, SQL audit, scheduled deletion)? → place it under the `📦 Post-merge rollout checklist` checkbox section after the findings list. Do not number it.
6. **Pull out the premise questions.** Scan the source reviews for "Unresolved decisions", "Premise questions", "Open questions", or anything similar. Lift them to the top under `❓ Product questions`. For each one: status (ANSWERED or STILL OPEN), the answer if known, and the implication for findings.
7. Assign a single sequential numbering across every severity.
8. **Translate to plain English.** Source reviews often lean on complex sentences, idioms, and Latin abbreviations. Rewrite each finding with the Rule 7 checklist before you write the file. Common swaps:
- "introduces a regression" → "breaks existing behavior"
- "the blast radius is bounded" → "this only affects X"
- "pre-existing, deferred" → "this bug was already there before this PR. Fix it in a later PR."
- "TOCTOU" → "race condition between a read and a write"
- "non-atomic" → "not wrapped in a transaction, so a failure in step 2 leaves step 1's changes in the database"
- "orphaned records" → "database rows that point to deleted files"
9. Write `PR-comment.md` at the repo root (or the path the user prefers). When the user asked to post it, follow up with `gh pr comment <n> --body-file <path>`; otherwise just write the file.
10. **Self-check before returning.** Re-read the file. For each paragraph, ask: would a B1 English reader get this on the first pass? If not, rewrite it. Flag any sentence over 25 words and split it. Then confirm two structural checks:
- No `🚦 Ship gate` section is left (those items belong in MUST FIX or `📦 Post-merge rollout checklist`).
- Every finding's section header matches the severity in the summary table. Run `grep -n "^### \|^## 🔴\|^## 🟡\|^## 🟢" PR-comment.md` and walk the output. When a finding the table calls MUST FIX sits under `🟡 SHOULD FIX`, move it. See rule 11.
11. **Iteration handling.** When `PR-comment.md` already exists as the skill runs, the user is iterating — usually because the PR author answered a premise question or the source reviews changed. Use Edit, not Write, so the issue numbers stay stable across iterations. Specifically:
- For a question that just got answered: switch its `STILL OPEN` to `ANSWERED`, add the quoted answer, and write the implication paragraph that names any new, promoted, or demoted findings.
- For a finding whose severity changed: move its body to the right section header but keep its number. Add `[⚠️ PROMOTED TO MUST FIX]` or `[ℹ️ DEMOTED TO FOLLOW-UP]` to the title.
- For a new finding an answer triggered: add it with the next sequential number, and never reuse a number from a removed finding.
- Re-tally the counts and the "Before re-review" list at the bottom on every iteration.
12. Report back: path, verdict, and counts by severity. Under 100 words.
## When not to use
- When the user wants to POST the comment to GitHub, run `gh pr comment <n> --body-file PR-comment.md` as a follow-up step — but only when the user explicitly asks.
- When the user wants a fresh review rather than a consolidation, use the `code-review` skill instead.
- When no review files exist yet, tell the user to run `/code-review` first.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
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.

