Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Draft, 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 conversation messages".
.claude/skills/tobihagemann-reply-to-pr-conversation/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 57% | 0% |
| case-03 | ✓→✗ | ▼ Worse | 38% | 0% |
| case-04 | ✓→✗ | ▼ Worse | 38% | 0% |
| case-13 | ✓→✗ | ▼ Worse | -24% | 0% |
Draft a single reply that addresses a processed issue-comment list, confirm with the user, and post it as a new PR issue comment.
$github-voice SkillRun the $github-voice skill to load voice rules and the insider-vs-outsider detection.
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.
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.
Use the category to interpret each payload:
<sha>" where it fits the flow, plus a brief note when the fix diverges from what the commenter suggested.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.
Quote handling:
> from quoted lines so nested blockquotes don't misattribute.> [code snippet].[bot], omit the suffix from the @ mention.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.
Output the drafted reply as text for review:
**Draft comment**
<full comment body as it will be posted>Then use request_user_input to ask whether to post. Offer:
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 apply_patch, then post via the issue-comments REST endpoint:
bashgh api -X POST \ "/repos/<owner>/<repo>/issues/<pr_number>/comments" \ -F body=@.turbo/pr/<pr_number>-comment.md
Report the posted comment's URL.
Then call update_plan to mark this step completed and continue with the next step of the active workflow.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 3,950 | 6,017 | +52% | 1 | 1 | 0% | 585 | 944 | +61% | 0 | 0 | — |
case-02 | fail→fail | 7,530 | 4,101 | -46% | 1 | 1 | 0% | 1,122 | 925 | -18% | 0 | 0 | — |
case-03 | pass→fail | 5,751 | 7,227 | +26% | 1 | 1 | 0% | 835 | 1,154 | +38% | 0 | 0 | — |
case-04 | pass→fail | 6,271 | 11,039 | +76% | 1 | 1 | 0% | 1,111 | 1,531 | +38% | 0 | 0 | — |
case-05 | fail→pass | 7,410 | 5,743 | -22% | 1 | 1 | 0% | 1,424 | 1,628 | +14% | 0 | 0 | — |
case-06 | pass→pass | 4,035 | 4,380 | +9% | 1 | 1 | 0% | 648 | 1,416 | +119% | 0 | 0 | — |
case-07 | pass→pass | 5,239 | 4,008 | -23% | 1 | 1 | 0% | 937 | 1,311 | +40% | 0 | 0 | — |
case-08 | pass→pass | 4,620 | 2,534 | -45% | 1 | 1 | 0% | 747 | 1,077 | +44% | 0 | 0 | — |
case-09 | pass→pass | 3,579 | 4,198 | +17% | 1 | 1 | 0% | 536 | 1,357 | +153% | 0 | 0 | — |
case-10 | fail→fail | 3,008 | 7,181 | +139% | 1 | 1 | 0% | 425 | 1,183 | +178% | 0 | 0 | — |
case-11 | fail→fail | 3,470 | 7,025 | +102% | 1 | 1 | 0% | 522 | 1,028 | +97% | 0 | 0 | — |
case-12 | fail→pass | 5,230 | 4,183 | -20% | 1 | 1 | 0% | 899 | 1,412 | +57% | 0 | 0 | — |
case-13 | pass→fail | 8,124 | 5,246 | -35% | 1 | 1 | 0% | 1,182 | 893 | -24% | 0 | 0 | — |
case-14 | fail→fail | 5,287 | 6,244 | +18% | 1 | 1 | 0% | 807 | 1,163 | +44% | 0 | 0 | — |
case-15 | fail→fail | 10,926 | 1,463 | -87% | 1 | 1 | 0% | 1,917 | 889 | -54% | 0 | 0 | — |
case-16 | pass→pass | 3,160 | 1,441 | -54% | 1 | 1 | 0% | 553 | 919 | +66% | 0 | 0 | — |
case-17 | pass→pass | 8,189 | 2,343 | -71% | 1 | 1 | 0% | 1,494 | 1,074 | -28% | 0 | 0 | — |
case-18 | pass→pass | 8,945 | 1,516 | -83% | 1 | 1 | 0% | 1,482 | 882 | -40% | 0 | 0 | — |
case-19 | fail→fail | 3,769 | 1,287 | -66% | 1 | 1 | 0% | 548 | 813 | +48% | 0 | 0 | — |
case-20 | fail→fail | 7,391 | 1,226 | -83% | 1 | 1 | 0% | 839 | 832 | -1% | 0 | 0 | — |
case-21 | fail→fail | 6,754 | 1,305 | -81% | 1 | 1 | 0% | 967 | 851 | -12% | 0 | 0 | — |
case-22 | fail→fail | 12,275 | 1,724 | -86% | 1 | 1 | 0% | 1,776 | 929 | -48% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 15 counted toward the lift figure. The other 7 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -5 percentage points is the difference between those two pass rates over the 15 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.