From sd0x-dev-flow
Posts friendly review comments to GitHub PRs: prepare locally via conversation, preview drafts, confirm, then submit atomically. For code reviews, PR feedback, inline suggestions.
npx claudepluginhub sd0xdev/sd0x-dev-flow --plugin sd0x-dev-flowThis skill uses the workspace's default tool permissions.
`pr comment`, `review comment`, `post comment`, `send review`, `pr feedback`, `inline comment`
Posts structured PR review comments to GitHub via API using GitHub CLI, with inline comments on lines, code suggestions, multi-line ranges, and priority labels like critical or nit. Ideal after code analysis.
Guides GitHub PR comment workflows: drafts responses, creates pending reviews via gh CLI, resolves feedback by fixing code or replying per strict style rules.
Resolves GitHub PR review comments: fetches via GitHub CLI and API, classifies by severity, filters new feedback, applies fixes with confirmation, commits changes, and replies to threads.
Share bugs, ideas, or general feedback.
pr comment, review comment, post comment, send review, pr feedback, inline comment
| Need | Use Instead |
|---|---|
| Read existing PR review comments | /load-pr-review |
| Create a code review (automated) | /codex-review-fast or /codex-review |
| Create a PR | /create-pr |
| PR status overview | /pr-summary |
Discuss locally → prepare friendly comments → dry-run preview → user confirms → atomic submit
Control plane (this SKILL.md) handles conversation, tone, orchestration.
Data plane (JS script) handles validation, API calls, safety.
Claude prepares comments following these rules:
| Rule | Description | Example |
|---|---|---|
| Questions over commands | Use "would it make sense to" instead of "change this to" | "Would it make sense to extract this to a shared utility?" |
| Code, not person | Subject is the code, not "you" | "This logic seems to..." not "You wrote..." |
| Explain why | Give the reason, not just the what | "If one copy gets a bug fix but the other doesn't..." |
| Assume good intent | Confirm rather than accuse | "Just want to confirm this trade-off is intentional" |
| Praise first | Acknowledge before suggesting | "This async design is great. One thought though..." |
| No emoji | Unless user explicitly requests | -- |
| Follow PR language | Match the language used in the PR | -- |
Internal classification (Conventional Comments, not shown in output):
| Label | Purpose | Blocking |
|---|---|---|
suggestion | Improvement proposal | Configurable |
question | Clarification | No |
issue | Points out a problem | Yes |
nitpick | Stylistic preference | No |
praise | Positive feedback | No |
sequenceDiagram
participant U as User
participant C as Claude (Conversation)
participant SK as SKILL.md (Orchestration)
participant JS as pr-comment.js (Data Plane)
participant GH as GitHub API
Note over U,C: Phase 1: Natural conversation
U->>C: Discuss PR diff, observations
C->>U: Draft N friendly comments
U->>C: Adjust tone / content / count
Note over U,GH: Phase 2: Skill invoked
U->>SK: /pr-comment [PR#]
SK->>SK: Collect comments from conversation
SK->>JS: prepare --pr N --repo owner/repo --input comments.json
JS->>GH: gh pr view (metadata)
JS->>GH: gh api pulls/N/files (changed files)
JS->>GH: gh api pulls/N (head SHA)
JS-->>SK: Validated payload + validation summary
SK->>U: Dry-run preview (default)
alt User confirms
SK->>U: AskUserQuestion gate
U->>SK: Approved
SK->>JS: submit --pr N --repo owner/repo --input payload.json
JS->>JS: Re-fetch head SHA, drift check
JS->>GH: POST /repos/{owner}/{repo}/pulls/{N}/reviews
GH-->>JS: 200/201 Success
JS-->>SK: Success + review URL
SK->>U: Review posted successfully
end
From the conversation context, gather the user's review comments. Each comment needs:
| Field | Required | Default | Description |
|---|---|---|---|
path | Yes | -- | File path (repo-relative) |
line | Yes | -- | Line number (positive integer) |
side | No | RIGHT | RIGHT (new) or LEFT (deleted) |
body | Yes | -- | Comment content |
Write the comments to a temp JSON file, then run:
bash scripts/run-skill.sh pr-comment pr-comment.js \
prepare --pr <N> --repo <owner/repo> --input <comments.json>
Parse the JSON output. Display to user:
## PR #<N>: <title>
**Target**: <owner/repo> | **Head**: <branch> | **State**: <state>
### Comments to Post (<valid>/<total> valid)
| # | File | Line | Side | Preview |
|---|------|------|------|---------|
| 1 | path/to/file.go | 136 | RIGHT | First 80 chars of body... |
### Validation
- Valid: N | Invalid: M (excluded) | Warnings: K
If invalid comments exist, show them with reasons. If warnings exist, note them but include in payload.
Use AskUserQuestion to get user approval before submitting.
Save the prepare output (including payload) to a temp file, then run:
bash scripts/run-skill.sh pr-comment pr-comment.js \
submit --pr <N> --repo <owner/repo> --input <payload.json>
| Exit Code | Meaning | Action |
|---|---|---|
| 0 | Success | Report review URL |
| 2 | Error (including 422) | Report error details |
| 3 | SHA drift | Warn user, offer to re-prepare |
If submit returns exit 3:
references/api-and-guardrails.md -- API contract + safety rules + exit codes