github-pr-review
Skill167 starsChanged 16 days agoMITView on GitHub
Post PR review comments using the GitHub API with inline comments, suggestions, and priority labels.
- Reads credentials
- Sends data out
We split this skill into the rules it gives an agent
17 rules. 0 are common, 9 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 15 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 19
Use the GitHub CLI (gh) with a JSON input file.
- Very specific: line 21
Important: Always use --input with a JSON file instead of -F flags.
- Very specific: line 74
Default to
APPROVE: when the code is correct and merge-ready. - Distinctive: line 94
Start each comment with a priority label.
- Distinctive: line 102
Do NOT post 🟢 Nit or 🟢 Acceptable comments: If code is fine, simply don't comment on it.
- Distinctive: line 124
Use suggestions for: renaming, typos, small refactors (1-5 lines), type hints, docstrings.
- Distinctive: line 126
Avoid for: large refactors, architectural changes, ambiguous improvements.
- Very specific: line 159
Read the actual file lines that will be replaced: sed -n '<start_line>,<line>p' <path> (or sed -n '<line>p' <path> for a single-line …
- Distinctive: line 162
If the change cannot be expressed cleanly as a contiguous replacement (e.g., it touches non-adjacent lines, or it depends on edits …
- Very specific: line 164
If you are not 100% sure the suggestion will produce the exact code you described, drop the
suggestionblock and leave a regular inline … - Very specific: line 178
If gh is unavailable, use curl with the JSON file:
- Very specific: line 191
Write review data to a JSON file (e.g., /tmp/review.json)
- Distinctive: line 193
Use priority labels (🔴🟠🟡) on every comment
- Distinctive: line 194
Do NOT post comments for code that is acceptable — only comment when action is needed
- Distinctive: line 195
Use suggestion syntax for concrete code changes, but only after verifying the resulting code matches your description (see "How Suggestions …
- Distinctive: line 196
Keep the review body brief (details go in inline comments)
- Very specific: line 197
If no issues: use "event": "APPROVE" with a short approval message and no inline comments
“Common” is measured: kept by at least 6 in 10 of the 15 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
GitHub PR Review
Post structured code review feedback using the GitHub API with inline comments on specific lines.
Windows PowerShell equivalents for JSON file creation, temp paths, line lookup, and fallback curl are in references/windows.md.
Key Rule: One API Call
Bundle ALL comments into a single review API call. Do not post comments individually.
Posting a Review
Use the GitHub CLI (gh) with a JSON input file. The GITHUB_TOKEN is automatically available.
Important: Always use --input with a JSON file instead of -F flags. This avoids shell quoting issues with special characters in comment bodies (quotes, backticks, newlines, etc.) and eliminates the need for complex heredoc scripts.
Step 1: Create a JSON file
cat > /tmp/review.json << 'EOF'
{
"commit_id": "{commit_sha}",
"event": "COMMENT",
"body": "Brief 1-3 sentence summary.",
"comments": [
{
"path": "path/to/file.py",
"line": 42,
"side": "RIGHT",
"body": "🟠 Important: Your comment here."
},
{
"path": "another/file.js",
"line": 15,
"side": "RIGHT",
"body": "🟡 Suggestion: Another comment."
}
]
}
EOFStep 2: Post the review
gh api -X POST repos/{owner}/{repo}/pulls/{pr_number}/reviews --input /tmp/review.jsonParameters
| Parameter | Description |
commit_id | Commit SHA to comment on (use git rev-parse HEAD) |
event | APPROVE, COMMENT, or REQUEST_CHANGES (see below) |
path | File path as shown in the diff |
line | Line number in the NEW version (right side of diff) |
side | RIGHT for new/added lines, LEFT for deleted lines |
body | Comment text with priority label |
Choosing the event Value
| Event | When to use |
APPROVE | No issues found, or only 🟡 suggestions that are non-blocking |
COMMENT | You have 🟠 Important feedback but it's not a hard blocker |
REQUEST_CHANGES | There are 🔴 Critical issues that must be fixed before merge |
Default to APPROVE when the code is correct and merge-ready. Use COMMENT or REQUEST_CHANGES only when there are actionable issues that warrant it.
Multi-Line Comments
For comments spanning multiple lines, add start_line to specify the range:
{
"path": "path/to/file.py",
"start_line": 10,
"line": 12,
"side": "RIGHT",
"body": "🟡 Suggestion: Refactor this block:\n\n```suggestion\nline_one = \"new\"\nline_two = \"code\"\nline_three = \"here\"\n```"
}start_line/line define the range that will be REPLACED. The suggestion block may have any number of lines — it does not have to match the range size. See the next section for the exact semantics; getting this wrong is how suggestions silently delete or duplicate code.
Priority Labels
Start each comment with a priority label. Minimize nits - leave minor style issues to linters.
| Label | When to Use |
| 🔴 Critical | Must fix: security vulnerabilities, bugs, data loss risks |
| 🟠 Important | Should fix: logic errors, performance issues, missing error handling |
| 🟡 Suggestion | Worth considering: significant improvements to clarity or maintainability |
Do NOT post 🟢 Nit or 🟢 Acceptable comments. If code is fine, simply don't comment on it. Inline comments that say "this looks good" or "acceptable trade-off" are noise — they create review threads that must be resolved without providing actionable value.
Example:
🟠 Important: This function doesn't handle None, which could cause an AttributeError.
```suggestion
if user is None:
raise ValueError("User cannot be None")
## GitHub Suggestions
For small code changes, use the suggestion syntax for one-click apply:
~~~
```suggestion
improved_code_here()
Use suggestions for: renaming, typos, small refactors (1-5 lines), type hints, docstrings.
Avoid for: large refactors, architectural changes, ambiguous improvements.
### How Suggestions Actually Work (READ THIS BEFORE WRITING ONE)
A suggestion block **replaces** the targeted range with its contents. The replaced range is:
- `line` only → the single line `line` (replaces 1 line)
- `start_line` + `line` → the inclusive range `start_line..line` (replaces `line - start_line + 1` lines)
The suggestion content can be **any number of lines** — 0 (deletion), 1, or many. It does not have to match the range size. Whatever is between the ` ```suggestion ` and closing ` ``` ` fences becomes the new content of those lines.
Writing the wrong combination of `start_line`/`line` and suggestion body is what causes accepted suggestions to **duplicate** or **delete** code. Use the table below as your contract:
| Intent | `start_line` | `line` | Suggestion body must contain |
|--------|--------------|--------|-------------------------------|
| Change line N | omit | N | the new content for line N |
| Change lines N..M | N | M | the new content for the whole block |
| **Add** a line **after** line N (keep line N) | omit | N | line N's exact current text, then the new line(s) |
| **Add** a line **before** line N (keep line N) | omit | N | the new line(s), then line N's exact current text |
| **Insert** lines inside range N..M (keep N..M) | N | M | every original line in N..M plus the new lines, in the final desired order |
| **Delete** line N | omit | N | empty body (just an empty ` ```suggestion ``` ` block) |
| **Delete** lines N..M | N | M | empty body |
### Common Mistakes That Break Code
1. **Duplicated lines.** You copy a neighboring line (N-1 or N+1) into the suggestion body as context — that line is still present in the file outside the replaced range, so accepting the suggestion inserts a second copy of it. Fix: only include lines that fall within the targeted range, plus any genuinely new content.
2. **Disappearing lines.** You target `start_line=10, line=12` to comment on a 3-line block, but your suggestion body only contains 1 line because you "only want to change line 11". Accepting that suggestion deletes lines 10 and 12. Fix: either narrow the range to just line 11, or include lines 10 and 12 verbatim in the body.
3. **Description does not match the suggestion.** The prose says "rename this variable" but the suggestion replaces an entire function. Or the prose says "add a None check" but the suggestion only contains the check (deleting the original code). Fix: after writing the suggestion, re-read the prose and confirm the resulting file would match it line-for-line.
### Mandatory Verification Before Posting
For every comment that contains a ` ```suggestion ``` ` block, do this check before adding it to the review JSON:
1. Read the actual file lines that will be replaced: `sed -n '<start_line>,<line>p' <path>` (or `sed -n '<line>p' <path>` for a single-line target).
2. Mentally apply the suggestion: drop those lines, splice in the suggestion body, and look at the result in context.
3. Confirm the resulting code matches **exactly** what your prose description promises — no extra duplicated line above/below, no original line accidentally dropped, no off-by-one.
4. If the change cannot be expressed cleanly as a contiguous replacement (e.g., it touches non-adjacent lines, or it depends on edits elsewhere in the file), do **not** use a suggestion block — describe the change in prose instead.
If you are not 100% sure the suggestion will produce the exact code you described, drop the ` ```suggestion ``` ` block and leave a regular inline comment. A correct prose comment is always better than a one-click suggestion that silently corrupts the file.
## Finding Line Numbers
```bash
# From diff header: @@ -old_start,old_count +new_start,new_count @@
# Count from new_start for added/modified lines
grep -n "pattern" filename # Find line number
head -n 42 filename | tail -1 # Verify line content
```
## Fallback: curl
If `gh` is unavailable, use curl with the JSON file:
```bash
curl -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{owner}/{repo}/pulls/{pr_number}/reviews" \
-d @/tmp/review.json
```
## Summary
1. Analyze the code and identify important issues (minimize nits)
2. Write review data to a JSON file (e.g., `/tmp/review.json`)
3. Post **ONE** review using `gh api --input /tmp/review.json`
4. Use priority labels (🔴🟠🟡) on every comment
5. Do NOT post comments for code that is acceptable — only comment when action is needed
6. Use suggestion syntax for concrete code changes, but only after verifying the resulting code matches your description (see "How Suggestions Actually Work")
7. Keep the review body brief (details go in inline comments)
8. If no issues: use `"event": "APPROVE"` with a short approval message and no inline commentsOther versions17 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 17
- google/adk-recipes★ 11ksame name
- google/adk-samples★ 11ksame name
- runxhq/runx★ 97same name
- myths-labs/muse★ 35same name
- ricoberger/dotfiles★ 19same name
- amirbena/code-review-skill★ 8same name
- Cogni-AI-OU/cogni-ai-agent-skills★ 4same name
- megandmartin/agent-skills-repo★ 3same name
- 17-sss/agent-skills★ 2same name
- frontier159/skills★ 1same name
7 more not listed
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.
Used alongsideProjects with it also use git-commit.
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.
GitHubSkillgit-commit
Use this skill when the user wants to make a Git commit or split changes into more than one commit. Also use it when the user types "/commit" or asks for a conventional commit. The skill examines the diff, stages the related files, writes a Conventional Commits message, and runs git commit. Do not use it when the user wants only a commit message and no commit. Do not use it to push, open a pull request, rebase, or change the commit history.
Also in 4 projects that use this
In this repository68 other files it gives its agents.
- AGENTS.mdAGENTS.md
- add-javadocSkill
- add-skillSkill
- agent-canvas-environmentSkill
- agent-creatorSkill
- agent-memorySkill
- agent-sdk-builderSkill
- azure-devopsSkill
- bitbucket-cloudSkill
- bitbucket-data-centerSkill
- bitbucketSkill
- canvas-extension-apiSkill
- code-reviewSkill
- code-simplifierSkill
- datadogSkill
- denoSkill
- discordSkill
- dockerSkill
- evidence-based-citationsSkill
- flarglebargleSkill
- frontend-designSkill
- github-actionsSkill
- github-agents-md-maintainerSkill
- github-delivery-watchdogSkill
- github-issue-to-prSkill
- github-issue-triageSkill
- github-pr-reviewerSkill
- github-repo-monitorSkill
- githubSkill
- github-stale-ci-pr-closerSkill
- gitlab-issue-to-mrSkill
- gitlabSkill
- incident-retrospectiveSkill
- iterateSkill
- jira-issue-to-prSkill
- jupyterSkill
- kubernetesSkill
- learn-from-code-reviewSkill
- linearSkill
- linear-triageSkill
- news-digestSkill
- notionSkill
- npmSkill
- openhands-apiSkill
- openhands-automationSkill
- openhands-enterprise-troubleshootingSkill
- openhands-sdkSkill
- pdflatexSkill
- plain-english-contentSkill
- prdSkill
- qa-changesSkill
- release-notesSkill
- research-briefSkill
- securitySkill
- simplified-technical-englishSkill
- skill-creatorSkill
- slack-channel-monitorSkill
- slack-standup-digestSkill
- spark-version-upgradeSkill
- sshSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
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.

