{"id":"371b40f0-250b-43e9-b9d4-55cf72db657e","shortId":"QKZF22","kind":"skill","title":"reply-to-pr-conversation","tagline":"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 conve","description":"# Reply to PR Conversation\n\nDraft a single reply that addresses a processed issue-comment list, confirm with the user, and post it as a new PR issue comment.\n\n## Step 1: Run `/github-voice` Skill\n\nRun the `/github-voice` skill to load voice rules and the insider-vs-outsider detection.\n\n## Step 2: Compose the Reply\n\nUse 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.\n\nDraft 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.\n\n**Use the category to interpret each payload:**\n\n- **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.\n- **skip**: payload is the skip reasoning. State it directly.\n- **answer**: payload is answer text prepared upstream. Integrate it as the implementer's own words.\n- **clarify**: payload is a user-directed question. Ask it as-is.\n\n**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.\n\n**Quote handling:**\n\n- Strip leading `>` from quoted lines so nested blockquotes don't misattribute.\n- Replace fenced-code lines inside a quote with `> [code snippet]`.\n- If the author login ends in `[bot]`, omit the suffix from the `@` mention.\n\nApply `/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.\n\n## Step 3: Confirm\n\nOutput the drafted reply as text for review:\n\n```\n**Draft comment**\n\n<full comment body as it will be posted>\n```\n\nThen use `AskUserQuestion` to ask whether to post. Offer:\n\n- **Post** — post the comment\n- **Cancel** — skip posting\n\n## Step 4: Post the Comment\n\nAuto-detect owner, repo, and PR number from the current branch if not provided. Post the drafted body once via the issue-comments REST endpoint:\n\n```bash\ngh api -X POST \\\n  \"/repos/<owner>/<repo>/issues/<pr_number>/comments\" \\\n  -f body=\"<comment-body>\"\n```\n\nReport the posted comment's URL.\n\nThen use the TaskList tool and proceed to any remaining task.\n\n## Rules\n\n- Never close the PR, resolve a thread, or edit existing comments. Only post a new issue comment.\n- If the post fails, report the failure and leave the drafted body in the output so the user can post it manually.","tags":["reply","conversation","turbo","tobihagemann","agent-skills","claude-code","claude-skills","developer-tools","skills"],"capabilities":["skill","source-tobihagemann","skill-reply-to-pr-conversation","topic-agent-skills","topic-claude-code","topic-claude-skills","topic-developer-tools","topic-skills"],"categories":["turbo"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/tobihagemann/turbo/reply-to-pr-conversation","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add tobihagemann/turbo","source_repo":"https://github.com/tobihagemann/turbo","install_from":"skills.sh"}},"qualityScore":"0.590","qualityRationale":"deterministic score 0.59 from registry signals: · indexed on github topic:agent-skills · 280 github stars · SKILL.md body (2,723 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:54:11.250Z","embedding":null,"createdAt":"2026-04-20T19:22:49.594Z","updatedAt":"2026-04-22T00:54:11.250Z","lastSeenAt":"2026-04-22T00:54:11.250Z","tsv":"'/comments':416 '/github-voice':83,87,315 '/issues':415 '/repos':414 '1':81 '2':101 '3':349 '4':378 'acknowledg':325 'address':23,60,141 'answer':129,207,210 'api':411 'appli':314 'as-i':232 'ask':37,230,365 'askuserquest':363 'author':118,303 'auto':383 'auto-detect':382 'bash':409 'blockquot':238,286 'bodi':121,400,418,465 'bot':307 'branch':393 'brief':187 'call':333 'cancel':374 'categori':126,135,166 'clarifi':131,222 'close':438 'code':293,299 'comment':18,20,65,79,120,196,360,373,381,406,422,447,453 'commit':175 'compos':102 'confirm':7,67,350 'context':113,272 'conv':50 'convers':5,12,17,42,45,54,112,146,319 'current':392 'detect':99,384 'direct':206,228 'discuss':332 'diverg':192 'draft':6,48,55,137,353,359,399,464 'drop':266 'edit':445 'emoji':327 'end':305 'endpoint':408 'entir':268 'entri':115 'everi':142 'exist':446 'f':417 'fail':457 'failur':460 'fenc':292 'fenced-cod':291 'fine':329,342 'fit':182 'fix':127,171,178,191 'flexibl':157 'flow':184 'gh':410 'github':15 'handl':278 'id':117 'implement':218 'insid':96,295 'insider-vs-outsid':95 'integr':214 'interpret':168 'issu':19,64,78,405,452 'issue-com':63,404 'item':26,109,143,345 'lead':280 'leav':462 'length':158,321 'line':283,294 'list':66,110 'load':90 'login':304 'make':273 'manual':475 'match':317 'mention':177,270,313 'messag':32 'misattribut':289 'multi':258,338 'multi-paragraph':337 'multi-top':257 'natur':30,145 'natural-pros':29 'nest':285 'never':437 'new':76,451 'note':188 'number':389 'offer':369 'omit':308 'one':28,138,252 'origin':119 'output':149,351,468 'outsid':98 'owner':385 'paragraph':339 'payload':136,170,172,199,208,223 'per':134 'per-categori':133 'phrase':242 'piec':153 'plus':185,271 'post':9,43,72,368,370,371,376,379,397,413,421,449,456,473 'pr':4,16,41,44,49,53,77,388,440 'prepar':212 'proceed':431 'process':62,108 'processed-item':107 'prose':31,147,155 'provid':396 'question':229 'quot':123,235,251,262,267,277,282,297 'reason':203 'remain':434 'replac':290 'repli':2,13,22,39,46,51,58,104,139,250,260,275,354 'reply-to-pr-convers':1 'repo':386 'report':419,458 'resolv':441 'respond':244,255 'respons':264,340 'rest':407 'review':358 'rigid':161 'rule':92,316,436 'run':82,85 'section':162 'select':125,236 'sentenc':253 'sha':176 'singl':11,57,152,248 'single-top':247 'skill':84,88 'skill-reply-to-pr-conversation' 'skip':128,198,202,375 'snippet':300 'source-tobihagemann' 'state':204 'step':80,100,348,377 'strip':279 'structur':163 'suffix':310 'suggest':197 'task':435 'tasklist':428 'text':211,356 'thread':443 'togeth':265 'tone':323 'tool':429 'topic':249,259 'topic-agent-skills' 'topic-claude-code' 'topic-claude-skills' 'topic-developer-tools' 'topic-skills' 'track':25 'unambigu':276 'upstream':213 'url':424 'use':33,105,164,237,362,426 'user':36,70,227,471 'user-direct':226 'via':402 'voic':91 'vs':97 'warrant':346 'weav':261 'whether':366 'word':221 'x':412","prices":[{"id":"450d2875-87ba-4e2a-83cb-73afd589ac4f","listingId":"371b40f0-250b-43e9-b9d4-55cf72db657e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"tobihagemann","category":"turbo","install_from":"skills.sh"},"createdAt":"2026-04-20T19:22:49.594Z"}],"sources":[{"listingId":"371b40f0-250b-43e9-b9d4-55cf72db657e","source":"github","sourceId":"tobihagemann/turbo/reply-to-pr-conversation","sourceUrl":"https://github.com/tobihagemann/turbo/tree/main/skills/reply-to-pr-conversation","isPrimary":false,"firstSeenAt":"2026-04-20T19:22:49.594Z","lastSeenAt":"2026-04-22T00:54:11.250Z"}],"details":{"listingId":"371b40f0-250b-43e9-b9d4-55cf72db657e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"tobihagemann","slug":"reply-to-pr-conversation","github":{"repo":"tobihagemann/turbo","stars":280,"topics":["agent-skills","claude-code","claude-skills","developer-tools","skills"],"license":"mit","html_url":"https://github.com/tobihagemann/turbo","pushed_at":"2026-04-21T12:22:12Z","description":"A composable dev process for Claude Code, packaged as modular skills.","skill_md_sha":"42c7d26204a675c1d5dd82e806a668fe919e3d7d","skill_md_path":"skills/reply-to-pr-conversation/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/tobihagemann/turbo/tree/main/skills/reply-to-pr-conversation"},"layout":"multi","source":"github","category":"turbo","frontmatter":{"name":"reply-to-pr-conversation","description":"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\"."},"skills_sh_url":"https://skills.sh/tobihagemann/turbo/reply-to-pr-conversation"},"updatedAt":"2026-04-22T00:54:11.250Z"}}