Triage and reply to a pull request's unresolved review comments —
reply-only, on each reviewer's channel, with you approving every reply.
reply-pr reads the unresolved comments on a pull request, helps you decide what
to address and what to skip, and posts a reply on the right channel for each
reviewer — in your voice. It doesn't edit your code, and it doesn't post anything
you haven't approved.
A PR usually gathers comments from several reviewers at once — CodeRabbit, Codex, Claude, and people. Replying to them properly is more fiddly than it looks:
- each reviewer expects a different channel and
@-ping (Codex inline with@codex, Claude a top-level comment with@claude, CodeRabbit inline, no ping); - every comment wants a reply — including the ones you skip, with a reason;
- bots re-flag pre-existing code and add nitpicks that aren't worth re-litigating;
- and you're meant to leave no unresolved threads behind.
reply-pr keeps track of all that, so the replies stay yours and nothing slips.
flowchart TD
A["reply-pr on your PR"] --> B["Gather UNRESOLVED comments<br/>bots + humans, inline + top-level"]
B --> C["Classify + assess<br/>humans first, dedup,<br/>drop CodeRabbit nitpicks,<br/>flag likely pre-existing"]
C --> G{"You decide:<br/>tackle / skip + rationale"}
G -->|you steer| R["Reply on each reviewer's channel<br/>item by item, in your voice"]
R --> Z["Resolve settled threads"]
It gathers the unresolved comments, assesses each (humans first, CodeRabbit nitpicks dropped, likely-pre-existing findings flagged), and shows you a tackle/skip list to steer. Once you approve, it posts each reply on the reviewer's channel — noting the commit that fixed things where relevant — and resolves the settled threads. It is reply-only, and it never posts before you approve.
With the skills CLI — cross-tool (Claude
Code, Cursor, Codex, …):
npx skills add deployhq/reply-pr -g # all your repos (~/.claude/skills)
npx skills add deployhq/reply-pr # this project only (./.claude/skills)skills add defaults to project scope; since reply-pr is a personal, cross-repo
tool, you probably want -g / --global. (Scope is set by the flag — the CLI
doesn't prompt for it.) Inside saas.group it's also on
lookmi.
/reply-pr # the current branch's open PR
/reply-pr 1016 # a specific PR
/reply-pr analyse # analysis only — never postsOr just say "reply to the review comments on this PR." Either way it stops at the approval gate — a tackle/skip proposal, humans first — and only posts what you approve.
The rule works for any reviewer: reply in kind (where they commented) and ping only reviewers known to want it.
flowchart LR
H["Human"] --> HR["reply in kind<br/>highest priority"]
X["Codex"] --> XR["inline + @codex"]
L["Claude"] --> LR["top-level + @claude"]
C["CodeRabbit"] --> CR["inline, no ping<br/>nitpicks dropped"]
O["Any other bot"] --> OR["reply in kind, no ping<br/>flagged for you to confirm"]
| Does | Doesn't |
|---|---|
| Fetch unresolved comments | Edit your code |
| Propose tackle / skip (you decide) | Post anything before you approve it |
| Post replies on the right channel, in your voice | Silently skip a comment |
| Resolve settled threads | Re-litigate pre-existing code without flagging it |
ghCLI (authenticated),jq.
skills/reply-pr/
SKILL.md — the skill (workflow, reply rules, voice)
scripts/gather.sh — fetch unresolved threads (GraphQL) + top-level comments
scripts/post-reply.sh — post inline / top-level replies, resolve threads
The scripts are deterministic plumbing (gh + jq); the judgement — what to
tackle, how to word it, when to resolve — stays in the skill, gated on your call.