github-code-review
Skill2 starsChanged 2 months agoMITView on GitHub
Review PRs: diffs, inline comments via gh or REST.
- Reads credentials
- Sends data out
52 other projects use a version of this, 17 of them edited.
Adopted by
Most recently taken up by
- delorenj/skillsedited, first seen Nov 7, 2026
- ethosagent/ethostheir own version, first seen Nov 3, 2026
- poizoncoded/skillstheir own version, first seen Nov 1, 2026
- OpenxIntelligence/Coding-Agent-Skillstheir own version, first seen Nov 1, 2026
- proffesor-for-testing/agentic-qetheir own version, first seen Oct 25, 2026
- I-Onlabs/claude-code-skillstheir own version, first seen Oct 25, 2026
Used with
Projects with it also use V3 CLI Modernization, V3 Core Implementation and 9 more.
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.
ruvnetSkillV3 CLI Modernization
CLI modernization and hooks system enhancement for claude-flow v3. Implements interactive prompts, command decomposition, enhanced hooks integration, and intelligent workflow automation.
Also in 16 projects that use this
ruvnetSkillV3 Core Implementation
Core module implementation for claude-flow v3. Implements DDD domains, clean architecture patterns, dependency injection, and modular TypeScript codebase with comprehensive testing.
Also in 16 projects that use this
chatman-mediaSkillagentic-jujutsu
Quantum-resistant, self-learning version control for AI agents with ReasoningBank intelligence and multi-agent coordination
Also in 6 projects that use this
MicrosoftSkillgithub-pr-workflow
Prepare a GitHub pull request from a feature branch — branch hygiene, commit shape, title/body, verification notes, screenshots for UI work, and replies to review comments.
Also in 5 projects that use this
- +7 more from ruvnet
Other versions52 projects use a version of this.
Word for word · 0
None found.
Edited · 17
- math-inc/OpenGauss★ 1.3k94% same
- Tommy-yw/RunbookHermes★ 54696% same
- aivrar/portable-hermes-agent★ 23996% same
- RedWoodOG/Hermes-Desktop★ 17796% same
- AtlasOmnia/donna-starter★ 13685% same
- AtlasOmnia/hermes-custom-pack★ 7585% same
- delorenj/skills★ 1798% same
- gquthier/CLAWG★ 1694% same
- Samin12/skills★ 896% same
- Martin-Hausleitner/martins-awesome-skills★ 395% same
7 more not listed
Wrote their own version · 35
- ruvnet/wifi-densepose★ 103ksame name
- ruvnet/RuView★ 103ksame name
- ruvnet/claude-flow★ 80ksame name
- ruvnet/ruflo★ 79ksame name
- ruvnet/ruvector★ 4.7ksame name
- ruvnet/RuVector★ 4.7ksame name
- ruvnet/agentic-flow★ 838same name
- proffesor-for-testing/agentic-qe★ 524same name
- ruvnet/ruv-FANN★ 388same name
- spencermarx/open-code-review★ 382same name
25 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.
In this repository58 other files it gives its agents.
- ad-hoc-script-verificationSkill
- architecture-diagramSkill
- blocked-page-recoverySkill
- cadquery-enclosure-designSkill
- canonical-thumbnailSkill
- circuit-designSkill
- competitor-news-monitorSkill
- component-alternativesSkill
- debugging-hermes-tui-commandsSkill
- docker-container-update-checkSkill
- document-to-action-itemsSkill
- docxSkill
- email-inbox-triageSkill
- embedded-porting-patternsSkill
- ephemeral-file-sharingSkill
- excalidrawSkill
- flash-game-researchSkill
- flutter-android-buildSkill
- flutter-content-renderingSkill
- githubSkill
- goatcounter-analyticsSkill
- google-oauth-file-pollSkill
- grounded-citationsSkill
- hermes-agent-skill-authoringSkill
- hermes-gateway-slash-commandSkill
- hermes-gateway-supervisionSkill
- jellyseerr-watch-suggestionsSkill
- maintained-fork-publishingSkill
- meeting-action-itemsSkill
- native-mcpSkill
- obsidian-mapsSkill
- pdf-flattenSkill
- pdfSkill
- pdf-surgical-editsSkill
- planSkill
- product-price-monitorSkill
- psp-developmentSkill
- psp-homebrew-testingSkill
- psp-prx-plugin-maintenanceSkill
- python-debugpySkill
- python-webapp-patternsSkill
- reddit-readingSkill
- retro-fansiteSkill
- reverse-proxy-websocket-debuggingSkill
- rss-feedsSkill
- simplify-codeSkill
- sketchSkill
- skit-thumbnailSkill
- spikeSkill
- subagent-driven-developmentSkill
- test-driven-developmentSkill
- usb-device-enumerationSkill
- weekly-review-planningSkill
- wiki-media-asset-pipelineSkill
- windows-c-build-toolchainSkill
- windows-crash-forensicsSkill
- writing-plansSkill
- yt-dlp-anti-botSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. 9 are common, 7 are distinctive, and 0 are very specific to this project.
9
Common
Most of the 20 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Common: line 108
When reviewing local changes, present findings in this structure:
- Common: line 288
When performing a code review (local or PR), systematically check:
- Common: line 296
No hardcoded secrets, credentials, or API keys
- Common: line 298
No SQL injection, XSS, or path traversal
- Common: line 303
No unnecessary complexity or premature abstraction
- Common: line 313
No N+1 queries or unnecessary loops
- Common: line 315
No blocking operations in async code paths
- Common: line 326
When the user asks you to "review the code" or "check before pushing":
- Common: line 333
If critical issues found, offer to fix them before the user pushes
- Distinctive: line 341
When the user asks to "check my repos for open PRs" or similar, they usually mean PRs submitted by other people on repos they own (not …
- Distinctive: line 507
When the user asks "is this PR good?" or "did it do the job?", they want you to validate that the PR correctly solves its referenced issue …
- Distinctive: line 524
Use this when the user asks "is it good / did it work?" — compact, per-requirement assessment:
- Distinctive: line 540
When a cron job or notification delivers a PR to review:
- Distinctive: line 550
Always read the issue before evaluating the PR.
- Distinctive: line 554
Always verify the before-state on the default branch.
- Distinctive: line 560
After reviewing, if the PR is clean and ready, approve and merge in sequence:
“Common” is measured: kept by at least 6 in 10 of the 20 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 Code Review
Perform code reviews on local changes before pushing, or review open PRs on GitHub. Most of this skill uses plain git — the gh/curl split only matters for PR-level interactions.
User Preferences (this user)
- No emojis in PR reviews or code comments — use plain text labels (Critical, Warning, Suggestion, Looks Good) instead of emoji icons. The user considers emojis in technical communication "AI slop." All examples below reflect this style.
- Minimal verbosity — present findings directly without decorative language.
Prerequisites
- Authenticated with GitHub (see
github-authskill) - Inside a git repository
Setup (for PR interactions)
if command -v gh &>/dev/null && gh auth status &>/dev/null; then
AUTH="gh"
else
AUTH="git"
if [ -z "$GITHUB_TOKEN" ]; then
if [ -f ~/.hermes/.env ] && grep -q "^GITHUB_TOKEN=" ~/.hermes/.env; then
GITHUB_TOKEN=$(grep "^GITHUB_TOKEN=" ~/.hermes/.env | head -1 | cut -d= -f2 | tr -d '\n\r')
elif grep -q "github.com" ~/.git-credentials 2>/dev/null; then
GITHUB_TOKEN=$(grep "github.com" ~/.git-credentials 2>/dev/null | head -1 | sed 's|https://[^:]*:\([^@]*\)@.*|\1|')
fi
fi
fi
REMOTE_URL=$(git remote get-url origin)
OWNER_REPO=$(echo "$REMOTE_URL" | sed -E 's|.*github\.com[:/]||; s|\.git$||')
OWNER=$(echo "$OWNER_REPO" | cut -d/ -f1)
REPO=$(echo "$OWNER_REPO" | cut -d/ -f2)1. Reviewing Local Changes (Pre-Push)
This is pure git — works everywhere, no API needed.
Get the Diff
# Staged changes (what would be committed)
git diff --staged
# All changes vs main (what a PR would contain)
git diff main...HEAD
# File names only
git diff main...HEAD --name-only
# Stat summary (insertions/deletions per file)
git diff main...HEAD --statReview Strategy
- Get the big picture first:
git diff main...HEAD --stat
git log main..HEAD --oneline- Review file by file — use
read_fileon changed files for full context, and the diff to see what changed:
git diff main...HEAD -- src/auth/login.py- Check for common issues:
# Debug statements, TODOs, console.logs left behind
git diff main...HEAD | grep -n "print(\|console\.log\|TODO\|FIXME\|HACK\|XXX\|debugger"
# Large files accidentally staged
git diff main...HEAD --stat | sort -t'|' -k2 -rn | head -10
# Secrets or credential patterns
git diff main...HEAD | grep -in "password\|secret\|api_key\|token.*=\|private_key"
# Merge conflict markers
git diff main...HEAD | grep -n "<<<<<<\|>>>>>>\|======="- Present structured feedback to the user.
Review Output Format
When reviewing local changes, present findings in this structure:
## Code Review Summary
### Critical
- **src/auth.py:45** — SQL injection: user input passed directly to query.
Suggestion: Use parameterized queries.
### Warnings
- **src/models/user.py:23** — Password stored in plaintext. Use bcrypt or argon2.
- **src/api/routes.py:112** — No rate limiting on login endpoint.
### Suggestions
- **src/utils/helpers.py:8** — Duplicates logic in `src/core/utils.py:34`. Consolidate.
- **tests/test_auth.py** — Missing edge case: expired token test.
### Looks Good
- Clean separation of concerns in the middleware layer
- Good test coverage for the happy path2. Reviewing a Pull Request on GitHub
View PR Details
With gh:
gh pr view 123
gh pr diff 123
gh pr diff 123 --name-onlyWith git + curl:
PR_NUMBER=123
# Get PR details
curl -s \
-H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER \
| python3 -c "
import sys, json
pr = json.load(sys.stdin)
print(f\"Title: {pr['title']}\")
print(f\"Author: {pr['user']['login']}\")
print(f\"Branch: {pr['head']['ref']} -> {pr['base']['ref']}\")
print(f\"State: {pr['state']}\")
print(f\"Body:\n{pr['body']}\")"
# List changed files
curl -s \
-H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER/files \
| python3 -c "
import sys, json
for f in json.load(sys.stdin):
print(f\"{f['status']:10} +{f['additions']:-4} -{f['deletions']:-4} {f['filename']}\")"Check Out PR Locally for Full Review
This works with plain git — no gh needed:
# Fetch the PR branch and check it out
git fetch origin pull/123/head:pr-123
git checkout pr-123
# Now you can use read_file, search_files, run tests, etc.
# View diff against the base branch
git diff main...pr-123With gh (shortcut):
gh pr checkout 123Leave Comments on a PR
General PR comment — with gh:
gh pr comment 123 --body "Overall looks good, a few suggestions below."General PR comment — with curl:
curl -s -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$OWNER/$REPO/issues/$PR_NUMBER/comments \
-d '{"body": "Overall looks good, a few suggestions below."}'Leave Inline Review Comments
Single inline comment — with gh (via API):
HEAD_SHA=$(gh pr view 123 --json headRefOid --jq '.headRefOid')
gh api repos/$OWNER/$REPO/pulls/123/comments \
--method POST \
-f body="This could be simplified with a list comprehension." \
-f path="src/auth/login.py" \
-f commit_id="$HEAD_SHA" \
-f line=45 \
-f side="RIGHT"Single inline comment — with curl:
# Get the head commit SHA
HEAD_SHA=$(curl -s \
-H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER \
| python3 -c "import sys,json; print(json.load(sys.stdin)['head']['sha'])")
curl -s -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER/comments \
-d "{
\"body\": \"This could be simplified with a list comprehension.\",
\"path\": \"src/auth/login.py\",
\"commit_id\": \"$HEAD_SHA\",
\"line\": 45,
\"side\": \"RIGHT\"
}"Submit a Formal Review (Approve / Request Changes)
With gh:
gh pr review 123 --approve --body "LGTM!"
gh pr review 123 --request-changes --body "See inline comments."
gh pr review 123 --comment --body "Some suggestions, nothing blocking."With curl — multi-comment review submitted atomically:
HEAD_SHA=$(curl -s \
-H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER \
| python3 -c "import sys,json; print(json.load(sys.stdin)['head']['sha'])")
curl -s -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$OWNER/$REPO/pulls/$PR_NUMBER/reviews \
-d "{
\"commit_id\": \"$HEAD_SHA\",
\"event\": \"COMMENT\",
\"body\": \"Code review from Hermes Agent\",
\"comments\": [
{\"path\": \"src/auth.py\", \"line\": 45, \"body\": \"Use parameterized queries to prevent SQL injection.\"},
{\"path\": \"src/models/user.py\", \"line\": 23, \"body\": \"Hash passwords with bcrypt before storing.\"},
{\"path\": \"tests/test_auth.py\", \"line\": 1, \"body\": \"Add test for expired token edge case.\"}
]
}"Event values: "APPROVE", "REQUEST_CHANGES", "COMMENT"
The line field refers to the line number in the new version of the file. For deleted lines, use "side": "LEFT".
3. Review Checklist
When performing a code review (local or PR), systematically check:
Correctness
- Does the code do what it claims?
- Edge cases handled (empty inputs, nulls, large data, concurrent access)?
- Error paths handled gracefully?
Security
- No hardcoded secrets, credentials, or API keys
- Input validation on user-facing inputs
- No SQL injection, XSS, or path traversal
- Auth/authz checks where needed
Code Quality
- Clear naming (variables, functions, classes)
- No unnecessary complexity or premature abstraction
- DRY — no duplicated logic that should be extracted
- Functions are focused (single responsibility)
Testing
- New code paths tested?
- Happy path and error cases covered?
- Tests readable and maintainable?
Performance
- No N+1 queries or unnecessary loops
- Appropriate caching where beneficial
- No blocking operations in async code paths
Documentation
- Public APIs documented
- Non-obvious logic has comments explaining "why"
- README updated if behavior changed
4. Pre-Push Review Workflow
When the user asks you to "review the code" or "check before pushing":
git diff main...HEAD --stat— see scope of changesgit diff main...HEAD— read the full diff- For each changed file, use
read_fileif you need more context - Apply the checklist above
- Present findings in the structured format (Critical / Warnings / Suggestions / Looks Good)
- If critical issues found, offer to fix them before the user pushes
5. PR Review Workflow (End-to-End)
Step 0: Discover PRs to review
When the user asks to "check my repos for open PRs" or similar, they usually mean PRs submitted by other people on repos they own (not their own PRs). Two approaches:
Across all owned repos:
gh search prs --owner <username> --state open --limit 50 \
--json number,title,repository,author,updatedAt,url,isDraftOn a specific repo:
gh pr list --repo owner/repo --state open --author "*" \
--json number,title,author,updatedAt,urlFilter out PRs authored by the repo owner to focus on external contributions.
Step 1: Set up environment
source "${HERMES_HOME:-$HOME/.hermes}/skills/github/github-auth/scripts/gh-env.sh"
# Or run the inline setup block from the top of this skillStep 2: Gather PR context
Get the PR metadata, description, and list of changed files to understand scope before diving into code.
With gh:
gh pr view 123
gh pr diff 123 --name-only
gh pr checks 123With curl:
PR_NUMBER=123
# PR details (title, author, description, branch)
curl -s -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$GH_OWNER/$GH_REPO/pulls/$PR_NUMBER
# Changed files with line counts
curl -s -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$GH_OWNER/$GH_REPO/pulls/$PR_NUMBER/filesStep 3: Check out the PR locally
This gives you full access to read_file, search_files, and the ability to run tests.
git fetch origin pull/$PR_NUMBER/head:pr-$PR_NUMBER
git checkout pr-$PR_NUMBERStep 4: Read the diff and understand changes
# Full diff against the base branch
git diff main...HEAD
# Or file-by-file for large PRs
git diff main...HEAD --name-only
# Then for each file:
git diff main...HEAD -- path/to/file.pyFor each changed file, use read_file to see full context around the changes — diffs alone can miss issues visible only with surrounding code.
Step 5: Run automated checks locally (if applicable)
# Run tests if there's a test suite
python -m pytest 2>&1 | tail -20
# or: npm test, cargo test, go test ./..., etc.
# Run linter if configured
ruff check . 2>&1 | head -30
# or: eslint, clippy, etc.Step 6: Apply the review checklist (Section 3)
Go through each category: Correctness, Security, Code Quality, Testing, Performance, Documentation.
Step 7: Post the review to GitHub
Collect your findings and submit them as a formal review with inline comments.
With gh:
# If no issues — approve
gh pr review $PR_NUMBER --approve --body "Reviewed by Hermes Agent. Code looks clean — good test coverage, no security concerns."
# If issues found — request changes with inline comments
gh pr review $PR_NUMBER --request-changes --body "Found a few issues — see inline comments."With curl — atomic review with multiple inline comments:
HEAD_SHA=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$GH_OWNER/$GH_REPO/pulls/$PR_NUMBER \
| python3 -c "import sys,json; print(json.load(sys.stdin)['head']['sha'])")
# Build the review JSON — event is APPROVE, REQUEST_CHANGES, or COMMENT
curl -s -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/$GH_OWNER/$GH_REPO/pulls/$PR_NUMBER/reviews \
-d "{
\"commit_id\": \"$HEAD_SHA\",
\"event\": \"REQUEST_CHANGES\",
\"body\": \"## Hermes Agent Review\n\nFound 2 issues, 1 suggestion. See inline comments.\",
\"comments\": [
{\\\"path\\\": \\\"src/auth.py\\\", \\\"line\\\": 45, \\\"body\\\": \\\"**Critical:** User input passed directly to SQL query — use parameterized queries.\\\"},
{\\\"path\\\": \\\"src/models.py\\\", \\\"line\\\": 23, \\\"body\\\": \\\"**Warning:** Password stored without hashing.\\\"},
{\\\"path\\\": \\\"src/utils.py\\\", \\\"line\\\": 8, \\\"body\\\": \\\"**Suggestion:** This duplicates logic in core/utils.py:34.\\\"}
]
}"Step 8: Also post a summary comment
In addition to inline comments, leave a top-level summary so the PR author gets the full picture at a glance. Use the review output format from references/review-output-template.md.
With gh:
gh pr comment $PR_NUMBER --body "$(cat <<'EOF'
## Code Review Summary
**Verdict: Changes Requested** (2 issues, 1 suggestion)
### Critical
- **src/auth.py:45** — SQL injection vulnerability
### Warnings
- **src/models.py:23** — Plaintext password storage
### Suggestions
- **src/utils.py:8** — Duplicated logic, consider consolidating
### Looks Good
- Clean API design
- Good error handling in the middleware layer
---
*Reviewed by Hermes Agent*
EOF
)"Step 9: Clean up
git checkout main
git branch -D pr-$PR_NUMBERDecision: Approve vs Request Changes vs Comment
- Approve — no critical or warning-level issues, only minor suggestions or all clear
- Request Changes — any critical or warning-level issue that should be fixed before merge
- Comment — observations and suggestions, but nothing blocking (use when you're unsure or the PR is a draft)
6. Issue-Driven PR Review (Did It Do the Job?)
When the user asks "is this PR good?" or "did it do the job?", they want you to validate that the PR correctly solves its referenced issue — not just that the code is clean. This is distinct from a general code review.
Workflow
- Read the PR title and description to understand what it claims to fix.
- Check the linked issue(s) — verify the PR body says
Closes #NorFixes #N, and read the issue to understand what was actually requested. The PR might look correct in isolation but miss what the issue actually asked for. - Verify the before-state on main — check the current code on the default branch (via
curlto raw.githubusercontent.com orgit) to confirm the problem actually existed. A PR that fixes something that was already fixed is a no-op. - Read the diff — does the implementation match the issue's requirements? Check:
- Are all methods/lines the issue mentioned addressed?
- Does the approach match what the issue suggested (if guidance was given)?
- Does the PR scope-creep beyond the issue (adding unrelated features)?
- Check test coverage — does the PR include tests that specifically validate the fix? Do they test defaults, setting values, AND toggling? Are the assertions meaningful?
- Check project conventions — does the code follow the existing file's patterns (logging style, naming, class structure)?
- Give a structured verdict using the table format below.
Verdict Table Format
Use this when the user asks "is it good / did it work?" — compact, per-requirement assessment:
| Criterion | Verdict |
|-----------|---------|
| Does what issue #[N] asked for? | [Yes / Mostly / No] |
| Follows project conventions? | [Yes / Mostly / No] |
| Has tests? | [Yes / Partially / No] |
| Single focused commit? | [Yes / No] |
| Validated (CI passes, commands shown)? | [Yes / No] |
**Bottom line:** [Ready to merge / Needs minor fixes / Needs rework]Workflow for PR Notifications from Cron
When a cron job or notification delivers a PR to review:
- Open the PR page on GitHub (
browser_navigate) - Open the linked issue URL separately to cross-reference
- Fetch the current main branch file(s) to establish before-state
- Apply the checklist above
- Report back with the verdict table in a single message
Pitfall: PR looks good but doesn't address the issue
Always read the issue before evaluating the PR. A well-written PR with clean code might miss the actual problem. Conversely, a rough PR might be exactly what the issue asked for. The issue is the source of truth for requirements.
Pitfall: Skipping the main-branch check
Always verify the before-state on the default branch. A PR claiming to "fix" something that's already been addressed in another commit is a red flag — it might be a stale branch or a rebase mistake.
7. Approve and Merge
After reviewing, if the PR is clean and ready, approve and merge in sequence:
Approve with a thank-you comment:
gh pr review <N> --approve --body "Excellent work thank you for contributing!"Merge (squash) and delete the branch:
gh pr merge <N> --squash --delete-branchThe approval + comment and the merge are separate commands so you can first leave the review, then merge once the author sees it.
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.

