gh-pr-review is a GitHub CLI extension that finally brings inline PR review comments to the terminal. GitHub’s built-in gh tool does not show inline comments or review threads — but this extension does.
$ npx -y skills add agynio/gh-pr-review --agent claude-code
What's inside
gh-pr-review is a GitHub CLI extension that finally brings inline PR review comments to the terminal.
GitHub’s built-in gh tool does not show inline comments or review threads — but this extension does.
With gh-pr-review, you can:
Designed for developers, DevOps teams, and AI systems that need full pull request review context, not just top-level comments.
Blog post: gh-pr-review: LLM-friendly PR review workflows in your CLI — explains the motivation, design principles, and CLI + JSON output examples.
The quickest path from opening a pending review to resolving threads:
Install or upgrade the extension.
gh extension install agynio/gh-pr-review
# Update an existing installation
gh extension upgrade agynio/gh-pr-review
Start a pending review (GraphQL). Capture the returned id (GraphQL
node).
gh pr-review review --start -R owner/repo 42
{
"id": "PRR_kwDOAAABbcdEFG12",
"state": "PENDING"
}
Pending reviews omit submitted_at; the field appears after submission.
Add inline comments with the pending review ID (GraphQL). The
review --add-comment command fails fast if you supply a numeric ID instead
of the required PRR_… GraphQL identifier.
gh pr-review review --add-comment \
--review-id PRR_kwDOAAABbcdEFG12 \
--path internal/service.go \
--line 42 \
--body "nit: use helper" \
-R owner/repo 42
{
"id": "PRRT_kwDOAAABbcdEFG12",
"path": "internal/service.go",
"is_outdated": false,
"line": 42
}
Inspect review threads (GraphQL). review view surfaces pending
review summaries, thread state, and inline comment metadata. Thread IDs are
always included; enable --include-comment-node-id when you also need the
individual comment node identifiers.
gh pr-review review view --reviewer octocat -R owner/repo 42
{
"reviews": [
{
"id": "PRR_kwDOAAABbcdEFG12",
"state": "COMMENTED",
"author_login": "octocat",
"comments": [
{
"thread_id": "PRRT_kwDOAAABbcdEFG12",
"path": "internal/service.go",
"author_login": "octocat",
"body": "nit: prefer helper",
"created_at": "2024-05-25T18:21:37Z",
"is_resolved": false,
"is_outdated": false,
"thread_comments": []
}
]
}
]
}
Use the thread_id values with comments reply to continue discussions. If
you are replying inside your own pending review, pass the associated
PRR_… identifier with --review-id.
gh pr-review comments reply \
--thread-id PRRT_kwDOAAABbcdEFG12 \
--body "Follow-up addressed in commit abc123" \
-R owner/repo 42
Submit the review (GraphQL). Reuse the pending review PRR_…
identifier when finalizing. Successful submissions emit a status-only
payload. GraphQL-level errors are returned as structured JSON for
troubleshooting.
gh pr-review review --submit \
--review-id PRR_kwDOAAABbcdEFG12 \
--event REQUEST_CHANGES \
--body "Please add tests" \
-R owner/repo 42
{
"status": "Review submitted successfully"
}
On GraphQL errors, the command exits non-zero after emitting:
{
"status": "Review submission failed",
"errors": [
{ "message": "mutation failed", "path": ["mutation", "submitPullRequestReview"] }
]
}
Inspect and resolve threads (GraphQL). Array responses are always []
when no threads match.
gh pr-review threads list --unresolved --mine -R owner/repo 42
[
{
"threadId": "R_ywDoABC123",
"isResolved": false,
"path": "internal/service.go",
"line": 42,
"isOutdated": false
}
]
gh pr-review threads resolve --thread-id R_ywDoABC123 -R owner/repo 42
{
"thread_node_id": "R_ywDoABC123",
"is_resolved": true
}
gh pr-review review view emits a GraphQL-only snapshot of pull request
discussion. The response groups reviews → parent inline comments → thread
replies, omitting optional fields entirely instead of returning null.
Run it with either a combined selector or explicit flags:
gh pr-review review view -R owner/repo --pr 3
Install or upgrade to v1.6.0 or newer (GraphQL-only thread resolution and minimal comment replies):
gh extension install agynio/gh-pr-review
# Update an existing installation
gh extension upgrade agynio/gh-pr-review
created_at ascending.author_login only—no user objects or html_url fields.body, submitted_at, line) are omitted when empty.comments is omitted entirely when a review has no inline comments.thread_comments is required for every inline comment and always present
(empty arrays indicate no replies).For the full canonical response structure, see docs/SCHEMAS.md.
| Flag | Purpose |
|---|---|
--reviewer <login> | Only include reviews authored by <login> (case-insensitive). |
--states <list> | Comma-separated review states (APPROVED, CHANGES_REQUESTED, COMMENTED, DISMISSED). |
--unresolved | Keep only unresolved threads. |
--not_outdated | Exclude threads marked as outdated. |
--tail <n> | Retain only the last n replies per thread (0 = all). The parent inline comment is always kept; only replies are trimmed. |
--include-comment-node-id | Add GraphQL comment node identifiers to parent comments and replies. |
# Default: return all reviews, states, threads
gh pr-review review view -R owner/repo --pr 3
# Unresolved threads only
gh pr-review review view -R owner/repo --pr 3 --unresolved
# Focus changes requested from a single reviewer; keep only latest reply per thread
gh pr-review review view -R owner/repo --pr 3 --reviewer alice --states CHANGES_REQUESTED --tail 1
# Drop outdated threads and include comment node IDs
gh pr-review review view -R owner/repo --pr 3 --not_outdated --include-comment-node-id
Use the thread_id values surfaced in the report when replying.
gh pr-review comments reply 3 -R owner/repo \
--thread-id PRRT_kwDOAAABbcdEFG12 \
--body "Follow-up addressed in commit abc123"
Each command binds to a single GitHub backend—there are no runtime fallbacks.
| Command | Backend | Notes |
|---|---|---|
review --start | GraphQL | Opens a pending review via addPullRequestReview. |
review --add-comment | GraphQL | Requires a PRR_… review node ID. |
review view | GraphQL | Aggregates reviews, inline comments, and replies (used for thread IDs). |
review --submit | GraphQL | Finalizes a pending review via submitPullRequestReview using the PRR_… review node ID (executed through the internal gh api graphql wrapper). |
comments reply | GraphQL | Replies via addPullRequestReviewThreadReply; supply --review-id when responding from a pending review. |
threads list | GraphQL | Enumerates review threads for the pull request. |
threads resolve / unresolve | GraphQL | Mutates thread resolution via resolveReviewThread / unresolveReviewThread; supply GraphQL thread node IDs (PRRT_…). |
gh-pr-review is designed to give LLMs and agents the exact PR review context they need — without the noisy, multi-step GitHub API workflow.
Replaces multi-call API chains with one command
Instead of calling list reviews → list thread comments → list comments,
a single gh pr-review review view command returns the entire, assembled review structure.
Deterministic, stable output
Consistent formatting, stable ordering, and predictable field names make parsing reliable for agents.
Compact, meaningful JSON
Only essential fields are returned. Low-signal metadata (URLs, hashes, unused fields) is stripped out to reduce token usage.
Pre-joined review threads
Threads come fully reconstructed with inline context — no need for agents to merge comments manually.
Server-side filters for token efficiency
Options like --unresolved and --tail help reduce payload size and keep inputs affordable for LLMs.
"A good tool definition should define a clear, narrow purpose, return exactly the meaningful context the agent needs, and avoid burdening the model with low-signal intermediate results."
gh-pr-review can be used as a reusable skill for AI coding agents via Vercel's add-skill package.
To add gh-pr-review as a skill to your AI coding agent:
npx skills add agynio/gh-pr-review
Additional options:
# Install to a specific agent
npx skills add agynio/gh-pr-review -a claude-code
# Install globally (available across all projects)
npx skills add agynio/gh-pr-review -g
This command will:
gh extension installOnce installed, your AI coding agent can:
All commands return structured JSON optimized for agent consumption with minimal tokens and maximum context.
User: "Show me unresolved comments on PR #42"
Agent: gh pr-review review view -R owner/repo --pr 42 --unresolved --not_outdated
Agent: [Parses JSON, summarizes 3 unresolved threads]
User: "Reply to the comment about error handling"
Agent: gh pr-review comments reply 42 -R owner/repo --thread-id PRRT_... --body "Fixed in commit abc123"
Agent: gh pr-review threads resolve 42 -R owner/repo --thread-id PRRT_...
See SKILL.md for complete skill documentation including:
Run the test suite and linters locally with cgo disabled (matching the release build):
CGO_ENABLED=0 go test ./...
CGO_ENABLED=0 golangci-lint run
Releases are built using the
cli/gh-extension-precompile
workflow to publish binaries for macOS, Linux, and Windows.
.github/
workflows/
ci.yml
release.yml
.gitignore
cmd/
comments_test.go
comments.go
deps.go
output.go
review_test.go
review_view_test.go
review_view.go
review.go
root.go
testdata/
report_response.json
threads_test.go
threads.go
CODEOWNERS
docs/
AGENTS.md
SCHEMAS.md
USAGE.md
go.mod
go.sum
internal/
comments/
service_test.go
service.go
ghcli/
ghcli.go
report/
builder_test.go
builder.go
domain.go
query.go
service_test.go
service.go
testdata/
report_response.json
resolver/
resolver_test.go
resolver.go
review/
latest_test.go
latest.go
pending_test.go
pending.go
service_test.go
service.go
threads/
service_test.go
service.go
LICENSE
main.go
README.md
SKILL.mdFAQ
gh-pr-review is a Claude Code plugin with 1 hand-picked skill for code review work, indexed on Flowy. Install it with the command on its page. It includes gh-pr-review. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.