$npx -y skills add tobihagemann/turbo --skill reply-to-pr-conversationDraft, confirm, and post a single conversational reply to GitHub PR conversation comments (issue comments). The reply addresses all tracked items in one natural-prose message. Use when the user asks to \"reply to PR conversation\", \"post PR conversation replies\", or \"draft PR
| 1 | # Reply to PR Conversation |
| 2 | |
| 3 | Draft a single reply that addresses a processed issue-comment list, confirm with the user, and post it as a new PR issue comment. |
| 4 | |
| 5 | ## Step 1: Run `/github-voice` Skill |
| 6 | |
| 7 | Run the `/github-voice` skill to load voice rules and the insider-vs-outsider detection. |
| 8 | |
| 9 | ## Step 2: Compose the Reply |
| 10 | |
| 11 | Use the processed-item list from conversation context. Each entry has: id, author, original comment body (to quote from selectively), category (`fix`, `skip`, `answer`, or `clarify`), and per-category payload. |
| 12 | |
| 13 | Draft one reply that addresses every item as natural conversational prose. The output is a single piece of prose with flexible length and no rigid section structure. |
| 14 | |
| 15 | **Use the category to interpret each payload:** |
| 16 | |
| 17 | - **fix**: payload is a commit SHA. Mention "fixed in `<sha>`" where it fits the flow, plus a brief note when the fix diverges from what the commenter suggested. |
| 18 | - **skip**: payload is the skip reasoning. State it directly. |
| 19 | - **answer**: payload is answer text prepared upstream. Integrate it as the implementer's own words. |
| 20 | - **clarify**: payload is a user-directed question. Ask it as-is. |
| 21 | |
| 22 | **Quote selectively.** Use `>` blockquotes only for the phrase being responded to. A single-topic reply quotes one sentence then responds; a multi-topic reply weaves quotes and responses together. Drop quotes entirely when @mentions plus context make the reply unambiguous. |
| 23 | |
| 24 | **Quote handling:** |
| 25 | |
| 26 | - Strip leading `>` from quoted lines so nested blockquotes don't misattribute. |
| 27 | - Replace fenced-code lines inside a quote with `> [code snippet]`. |
| 28 | - If the author login ends in `[bot]`, omit the suffix from the `@` mention. |
| 29 | |
| 30 | Apply `/github-voice` rules. Match the conversation's length and tone. An acknowledgment with emoji is fine when the discussion calls for it; a multi-paragraph response is fine when the items warrant it. |
| 31 | |
| 32 | ## Step 3: Confirm |
| 33 | |
| 34 | Output the drafted reply as text for review: |
| 35 | |
| 36 | ``` |
| 37 | **Draft comment** |
| 38 | |
| 39 | <full comment body as it will be posted> |
| 40 | ``` |
| 41 | |
| 42 | Then use `AskUserQuestion` to ask whether to post. Offer: |
| 43 | |
| 44 | - **Post** — post the comment |
| 45 | - **Cancel** — skip posting |
| 46 | |
| 47 | ## Step 4: Post the Comment |
| 48 | |
| 49 | Auto-detect owner, repo, and PR number from the current branch if not provided. Write the drafted body to `.turbo/pr/<pr_number>-comment.md` with the Write tool, then post via the issue-comments REST endpoint: |
| 50 | |
| 51 | ```bash |
| 52 | gh api -X POST \ |
| 53 | "/repos/<owner>/<repo>/issues/<pr_number>/comments" \ |
| 54 | -F body=@.turbo/pr/<pr_number>-comment.md |
| 55 | ``` |
| 56 | |
| 57 | Report the posted comment's URL. |
| 58 | |
| 59 | Then use the TaskList tool and proceed to any remaining task. |
| 60 | |
| 61 | ## Rules |
| 62 | |
| 63 | - Never close the PR, resolve a thread, or edit existing comments. Only post a new issue comment. |
| 64 | - If the post fails, report the failure and leave the drafted body in the output so the user can post it manually. |