Inline PR Comments
hyperlane-xyz/hyperlane-explorer
Post a single consolidated PR review with summary and inline comments.
Posts pull request review findings as GitHub draft (pending) inline comments for a human to edit and submit, instead of publishing them straight to the PR author.
$ npx skills add agent-substrate/substrate --skill post-draft-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install agent-substrate/substrate post-draft-review --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/agent-substrate/substrate.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/post-draft-review .claude/skills/post-draft-review && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "post-draft-review" agent skill from https://github.com/agent-substrate/substrate/tree/main/.agents/skills/post-draft-review into .claude/skills/post-draft-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "post-draft-review", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/agent-substrate/substrate/tree/main/.agents/skills/post-draft-reviewType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add agent-substrate/substrate --skill post-draft-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install agent-substrate/substrate post-draft-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agent-substrate/substrate.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/post-draft-review .agents/skills/post-draft-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "post-draft-review" agent skill from https://github.com/agent-substrate/substrate/tree/main/.agents/skills/post-draft-review into .agents/skills/post-draft-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "post-draft-review", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add agent-substrate/substrate --skill post-draft-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install agent-substrate/substrate post-draft-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agent-substrate/substrate.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/post-draft-review .cursor/skills/post-draft-review && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "post-draft-review" agent skill from https://github.com/agent-substrate/substrate/tree/main/.agents/skills/post-draft-review into .cursor/skills/post-draft-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "post-draft-review", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/agent-substrate/substrate.git --path .agents/skills/post-draft-review--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add agent-substrate/substrate --skill post-draft-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install agent-substrate/substrate post-draft-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agent-substrate/substrate.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/post-draft-review .gemini/skills/post-draft-review && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "post-draft-review" agent skill from https://github.com/agent-substrate/substrate/tree/main/.agents/skills/post-draft-review into .gemini/skills/post-draft-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "post-draft-review", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install agent-substrate/substrate post-draft-reviewInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add agent-substrate/substrate --skill post-draft-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/agent-substrate/substrate.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/post-draft-review .github/skills/post-draft-review && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "post-draft-review" agent skill from https://github.com/agent-substrate/substrate/tree/main/.agents/skills/post-draft-review into .github/skills/post-draft-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "post-draft-review", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add agent-substrate/substrate --skill post-draft-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install agent-substrate/substrate post-draft-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agent-substrate/substrate.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/post-draft-review .opencode/skills/post-draft-review && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "post-draft-review" agent skill from https://github.com/agent-substrate/substrate/tree/main/.agents/skills/post-draft-review into .opencode/skills/post-draft-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "post-draft-review", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
post-draft-reviewPosts pull request review findings as GitHub draft (pending) inline comments for a human to edit and submit, instead of publishing them straight to the PR author.
Post Draft Review is an agent skill from agent-substrate/substrate. Posts pull request review findings as GitHub draft (pending) inline comments for a human to edit and submit, instead of publishing them straight to the PR author. Use whenever asked to review a pull request or leave review comments on one, including phrasings like "review PR 764" or "take a look at this PR".
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `README.md`).
It sits in Development, covering Pull requests, Technical documentation and Code review. It works with GitHub. The repository describes itself as: Agent Substrate: the core system. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 296e329. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghjqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Post Draft Review loads about 2.8k tokens when it runs. Until then it costs about 82 tokens; SKILL.md has 1,472 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from agent-substrate/substrate at commit 296e329, republished under its Apache-2.0 licence (© agent-substrate). 1,472 words, ~2,825 tokens.
.claude/skills/post-draft-review/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.A "draft review" on GitHub is a review left in the PENDING state. It is visible
only to its author, accumulating comments, until the author explicitly submits
(publishes) or discards it.
Findings go in as pending inline comments rather than individually published comments, so a human reviews them before anything reaches the PR author.
gh pr review can not create one — it always submits immediately
(--approve / --comment / --request-changes). To stay in draft, hit the REST API:
POST .../reviews with no event field creates the review PENDING rather than
submitting it.
Contribute inline comments only, created with an empty body (body: ""). The
top-level summary is written by the human in the UI's "Finish your review" box when they
submit. Rationale:
PUT on a
submitted review with an empty body is rejected with 422. An empty body sidesteps the
whole failure mode.Anything with no inline anchor — what was checked and found clean, issues in files outside the diff — goes in the chat hand-off, for the human to draw on when they write the summary.
Each inline finding leads with :robot: followed by the bolded severity name and color
(e.g. 🤖 **should-fix** 🟡 – …) to mark it as an AI finding. Keep it generic: don't
name the agent, vendor, or model. Disclose only that an agent was involved. The human
who finishes the review is accountable for what gets submitted.
Bias toward brevity. A human reads this, then decides. Concretely:
🤖 **blocking** 🔴 – …, 🤖 **should-fix** 🟡 – …, 🤖 **nit** 🟢 – …,
🤖 **question** 🟢 – …. Leading with 🤖 makes agent comments uniformly recognizable.
The severity name is required because the colors alone aren't a standard PR authors
know, and a bare 🟢 beside a critique reads like approval.First check whether a pending review already exists. You post under the human's account, and each author may have only one pending review per PR — so any existing draft is theirs, and it may hold comments they wrote by hand:
gh api repos/<owner>/<repo>/pulls/<num>/reviews \
--jq '.[] | select(.state == "PENDING") | {id, node_id}'No output means there's no draft yet; create one as below. If it returns a review, skip to Adding to a draft that already exists and do not delete it.
Write each comment body to a file and assemble the payload with jq --rawfile, which
escapes markdown, backticks, and newlines correctly. The body is always empty:
commit_id=$(gh pr view <num> --repo <owner>/<repo> --json headRefOid --jq '.headRefOid')
jq -n --arg commit "$commit_id" --rawfile c1 c1.md --rawfile c2 c2.md '{
body: "",
commit_id: $commit,
comments: [
{path:"cmd/ateapi/internal/store/ateredis/ateredis.go", line:849, side:"RIGHT", body:$c1},
{path:"cmd/ateapi/main.go", line:57, side:"RIGHT", body:$c2}
]
}' > /tmp/review.json
gh api repos/<owner>/<repo>/pulls/<num>/reviews \
--method POST --input /tmp/review.json --jq '{id, state}'
# => {"id": ..., "state": "PENDING"}state: PENDING confirms it's a draft: not visible to anyone else, no notifications,
until submitted. Keep the returned id to inspect or discard. Omitting event is what
keeps it in draft; including event submits immediately.
Inline-comment notes:
line is the line number in the file at the PR head. side: "RIGHT" is the new
(post-change) version, "LEFT" the base side.start_line and start_side together with line/side.gh pr checkout <num>, or
fetch pull/<num>/head). Don't eyeball them from the diff.commit_id pins the review to the head you actually read. Without it GitHub anchors
against whatever is current when the POST lands, so a push between your fetch and your
post silently moves every comment to lines you never looked at. The GraphQL append below
has no equivalent field, so re-check the head SHA before appending to an older draft.A pending review you didn't create is the human's, and it may already hold comments they wrote themselves. Never delete it. Deleting takes their comments with it, they aren't recoverable, and drafts are exactly where someone parks a half-finished thought.
Append instead, one mutation per finding, using the review's node_id (the PRR_…
value, not the numeric id):
gh api graphql -f query='
mutation($review: ID!, $path: String!, $line: Int!, $body: String!) {
addPullRequestReviewThread(input: {
pullRequestReviewId: $review,
path: $path, line: $line, side: RIGHT, body: $body
}) { thread { id } }
}' -f review="PRR_kwDO..." \
-f path="cmd/ateom-microvm/restore.go" -F line=214 \
-F body=@c1.md-F body=@c1.md reads the body straight from the file, keeping the file-per-comment
discipline that --rawfile gives the batch path. Prefer it over -f body="$(cat c1.md)":
command substitution strips trailing newlines, so the last line of the comment loses its
break. For a multi-line anchor, add startLine and startSide.
Leave the review body alone whether it's empty or not. If the human started the draft, that text is theirs.
Appending this way is verified: the review keeps its id, stays pending, and the human's own comments come through untouched. The single-comment delete below hasn't been exercised — read the review back the first time you use it.
Delete your own comments one at a time. Don't delete the review — recreating it is only safe when you know the draft is entirely yours, and in a shared draft you don't:
# your findings are the 🤖-tagged ones
gh api repos/<owner>/<repo>/pulls/<num>/reviews/<id>/comments \
--jq '.[] | select(.body | startswith("🤖")) | .id'
gh api repos/<owner>/<repo>/pulls/comments/<comment_id> --method DELETEThis is the second job the 🤖 marker does. In a shared draft it's the only thing that tells your comments apart from the human's.
A finding the human has already edited may no longer start with 🤖, so the filter skips it. That's the safe direction — they've taken it over — but don't read a missing marker as proof a comment was never yours.
line and original_line come back null while a review is PENDING (they resolve on
submit), and position is a legacy cumulative diff offset. Neither tells you the file
line at a glance. Instead, check the last line of each comment's diff_hunk, which
is the line the comment is attached to:
gh api repos/<owner>/<repo>/pulls/<num>/reviews/<id>/comments \
--jq '.[] | "\(.path)\n ↳ \(.diff_hunk | split("\n") | last)\n"'The hand-off in chat should give the human what they need to write the summary and
decide: a short findings table (severity, one-line claim, file:line anchor) and the
checked-and-found-clean notes, meaning the verification work with no inline anchor. No
paste-ready summary text — the summary is the human's to write.
Close the hand-off with the review id, the comment count, and these three points. A human who doesn't know them can publish the whole thing unread:
PENDING and visible only to them.Point them at README.md, which is the full version of the above and the authoritative instructions for the human — keep it in sync if you change this section. Don't imply the review is finished. It isn't, and it can't be until someone has read the findings.
To discard the whole draft instead:
gh api repos/<owner>/<repo>/pulls/<num>/reviews/<review_id> --method DELETEThis removes every comment in the review, including any the human wrote. Only reach for it on a draft you created and know is entirely yours.
POST .../reviews errors out. Append to the existing draft rather
than clearing it — see Adding to a draft that already
exists.[x](cmd/.../foo.go#L1)) render
oddly on GitHub. Prefer plain `path:line` in backticks for code references.© agent-substrate, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .agents/skills/post-draft-review of agent-substrate/substrate.
Open the folder on GitHubat commit 296e329
Post Draft Review next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Post Draft Review this skillagent-substrate/substrate | 4.5k | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Inline PR Commentshyperlane-xyz/hyperlane-explorer | 102 | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| PR Review Commentsgiuseppe-trisciuoglio/developer-kit | 355 | 1 repos | ~1k | Automated safety check: Notes | MIT | |
| Code Reviewtestdouble/han | 279 | — | ~8.7k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| GitHub Review Iterationprisma/orm | 48k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 |
hyperlane-xyz/hyperlane-explorer
Post a single consolidated PR review with summary and inline comments.
giuseppe-trisciuoglio/developer-kit
Posts review findings from a JSON file as inline comments on a GitHub Pull Request, attaching each comment to its file and line.
testdouble/han
Run a comprehensive code review on local source files. An agent skill from testdouble/han.
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
prisma/orm
Runs a loop on a GitHub pull request: fetch review state, triage comments into actions, implement them and resolve threads, repeating until nothing actionable is left.
prisma/orm
Fetches a pull request's canonical review state as JSON, validates it, and renders markdown, a text summary and triage target files from it using bundled scripts.
agent-substrate/substrate
Triages open GitHub issues by applying the correct labels. An agent skill from agent-substrate/substrate.
agent-substrate/substrate
Detects flaky Go tests by analyzing GitHub Actions workflow runs across the last 7 days and all PRs — covering both the run-tests job (unit/integration) and the e2e-test job (gVisor and microVM…
agent-substrate/substrate
Reviews CRDs for compliance with Kubernetes API conventions.
agent-substrate/substrate
Generates a security status report based on docs/threats.json by spinning up sub-agents for each threat to compute a quality score.
agent-substrate/substrate
Generates or updates an AGENTS.md file
Works with
Categories
Posts pull request review findings as GitHub draft (pending) inline comments for a human to edit and submit, instead of publishing them straight to the PR author. Post Draft Review is an agent skill from agent-substrate/substrate. Posts pull request review findings as GitHub draft (pending) inline comments for a human to edit and submit, instead of publishing them straight to the PR author.
Post Draft Review fits situations like: asked to review a pull request; leave review comments on one; including phrasings like review PR 764; take a look at this PR.
Run `npx skills add agent-substrate/substrate --skill post-draft-review -a claude-code`. Or copy the skill folder (.agents/skills/post-draft-review in agent-substrate/substrate) into .claude/skills/post-draft-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add agent-substrate/substrate --skill post-draft-review -a codex`. Or copy the skill folder (.agents/skills/post-draft-review in agent-substrate/substrate) into .agents/skills/post-draft-review in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add agent-substrate/substrate --skill post-draft-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/post-draft-review, .gemini/skills/post-draft-review, .github/skills/post-draft-review and .opencode/skills/post-draft-review in your project.
Going by SKILL.md and its folder, Post Draft Review needs the command-line tools its instructions call (gh and jq).
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Post Draft Review is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Post Draft Review: Inline PR Comments (hyperlane-xyz/hyperlane-explorer, 102 stars), PR Review Comments (giuseppe-trisciuoglio/developer-kit, 355 stars), Code Review (testdouble/han, 279 stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
agent-substrate (a GitHub organization) maintains it in agent-substrate/substrate, which has 4,536 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 8, 2026.
Source: agent-substrate/substrate on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.