{"id":"756a8344-29ff-4ba7-b4a7-26dd0750a751","shortId":"UharDd","kind":"skill","title":"resolve-pr-comments","tagline":"Evaluate, fix, answer, and reply to GitHub pull request review comments and conversation comments. Handles both change requests (fix or skip) and reviewer questions (explain using reasoning recalled from past Claude Code transcripts). Use when the user asks to \"resolve PR comment","description":"# Resolve PR Review Comments\n\nFetch unresolved review comments from a GitHub PR (inline threads, review-body observations, and issue-comment observations from the PR conversation), evaluate each one, fix or skip based on confidence, answer reviewer questions using recalled implementation reasoning, and reply. Inline threads are answered with thread replies; issue-comment findings are answered with new PR conversation comments. Review-body findings flow through the same evaluate-and-fix pipeline; their outcomes land in the summary because a review body has no destination to post to.\n\n## Task Tracking\n\nAt the start, use `TaskCreate` to create a task for each step:\n\n1. Fetch comments\n2. Triage review bodies and issue comments\n3. Run `/interpret-feedback` skill\n4. Split questions and change requests\n5. Run `/evaluate-findings` skill\n6. Resolve ambiguities\n7. Run `/resolve-findings` skill\n8. Verify fixes\n9. Run `/answer-reviewer-questions` skill\n10. Run `/reply-to-pr-threads` skill\n11. Run `/reply-to-pr-conversation` skill\n12. Summary\n\n## Step 1: Fetch Comments\n\nAuto-detect owner, repo, and PR number from current branch if not provided. Then run `scripts/fetch-pr-data.sh`, which handles full pagination (reviews, review threads, inner comment pages for long threads, issue comments, commits) and emits a single merged JSON document:\n\n```bash\nbash <skill-dir>/scripts/fetch-pr-data.sh <owner> <repo> <pr_number>\n```\n\nOutput shape:\n\n```jsonc\n{\n  \"meta\":          { \"title\", \"url\", \"headRefName\", \"baseRefName\" },\n  \"reviewThreads\": [ { \"id\", \"isResolved\", \"isOutdated\", \"comments\": { \"nodes\": [ { \"author\", \"body\", \"path\", \"line\", \"originalLine\", \"diffHunk\" } ] } } ],\n  \"reviews\":       [ { \"author\", \"body\", \"state\", \"submittedAt\" } ],\n  \"issueComments\": [ { \"author\", \"body\", \"createdAt\", \"url\" } ],\n  \"commits\":       [ { \"commit\": { \"oid\", \"abbreviatedOid\", \"message\", \"committedDate\" } } ]\n}\n```\n\nFilter review threads to unresolved only. Filter reviews to those with a non-empty body, excluding `PENDING` state (unsubmitted drafts). Filter issue comments to those with a non-empty body.\n\n## Step 2: Triage Review Bodies and Issue Comments\n\nReview bodies and PR conversation comments (issue comments) often pack multiple distinct concerns into one comment. Split each non-empty, non-PENDING review body and each non-empty issue comment into atomic observations, one per paragraph or bullet, so each can be evaluated on its own merits.\n\nFor every observation, check whether a subsequent commit already addresses it. Compare the source timestamp (`submittedAt` for review bodies, `createdAt` for issue comments) against each commit's `committedDate`; only commits after the source was posted can address it. Start with commit messages; read `git show <oid>` only when the message is ambiguous. A commit addresses an observation when its changes clearly resolve that specific concern. Touching the same area is not enough.\n\nClassify each observation:\n- **Addressed**: A subsequent commit resolves it. Record the commit SHA for the Step 12 summary.\n- **Unaddressed**: No subsequent commit resolves it. Carry into Step 3, tagged with its `source` (`review-body` or `issue-comment`), the author, the observation text, and (for review bodies) the review state.\n\nReview-body and issue-comment findings have no `diffHunk`, file path, or line reference. The downstream pipeline handles findings without a code location.\n\n## Step 3: Run `/interpret-feedback` Skill\n\nRun the `/interpret-feedback` skill on the union of:\n- Unresolved inline threads\n- Unaddressed review-body findings from Step 2\n- Unaddressed issue-comment findings from Step 2\n\nSkip AI-reviewer accounts — match by known login (e.g., `coderabbitai`, `copilot-pull-request-reviewer[bot]`), not the `[bot]` suffix alone. Their structured feedback routes directly to `/evaluate-findings`.\n\nFor inline threads, include the `diffHunk` so the interpreters can see the code the reviewer was looking at. For outdated comments where `line` is null, use `originalLine`. For review-body and issue-comment findings, provide the observation text and the PR's changed-file list as context.\n\nTag each item with its `source` (`inline-thread`, `review-body`, or `issue-comment`) so later steps can route replies correctly.\n\n## Step 4: Split Questions and Change Requests\n\nClassify each interpreted item as either a **question** or a **change request** based on the reconciled intent from Step 3.\n\n- **Question** — the reviewer is asking for an explanation or wondering whether something is intentional. No code change requested. Examples: \"Why this approach?\", \"Is this intentional?\", \"What is the benefit here?\".\n- **Change request** — the reviewer suggests a code change, flags a bug, or proposes an alternative. This includes soft-phrased suggestions (\"could we ...\", \"consider ...\") and rhetorical questions that imply a change (\"Shouldn't this ...?\", \"Is there a reason this isn't ...?\").\n\nWhen in doubt, treat the item as a change request. The verdict from `/evaluate-findings` in Step 5 will catch genuine non-issues.\n\nProduce two lists. Each entry retains the `source` tag, identifier (thread id for inline threads; a generated id for review-body and issue-comment findings), file path and line (use `originalLine` when `line` is null; omit for review-body and issue-comment findings), the reviewer's original text, and the reconciled intent from Step 3. Questions skip Step 5 and feed Step 9. Change requests feed Step 5.\n\n## Step 5: Run `/evaluate-findings` Skill\n\nRun the `/evaluate-findings` skill on the change requests from Step 4 to triage each one. Questions are not evaluated here.\n\nReview-body and issue-comment findings have no file or line reference. Scope their assessment to the PR's changed files as a whole, and do not treat the absent code location as a \"code has diverged\" early exit.\n\n## Step 6: Resolve Ambiguities\n\nCollect items assigned an Escalate verdict by `/evaluate-findings`. If there are none, skip to Step 7.\n\nOutput all escalated items as a numbered list. For each item, show:\n\n- The reviewer's original comment\n- The competing interpretations or the reason for escalation\n- The file and line reference, when available\n\nThen use `AskUserQuestion` to ask how to handle them. Per item, the options are:\n\n- **Direct answer**: \"Do X\" — assign an Accept verdict with the user's clarified intent. Step 7 picks it up as an accepted finding.\n- **Ask the reviewer**: \"Ask them Y\" — queue a clarification question to be drafted in Step 10 (inline threads) or Step 11 (issue comments)\n- **Skip**: Remove from processing\n\n## Step 7: Run `/resolve-findings` Skill\n\nIf there are no accepted findings to implement, skip to Step 9.\n\nRun the `/resolve-findings` skill on the accepted findings from Step 5, including any items reclassified in Step 6. `/finalize` commits and pushes as part of its normal flow; Steps 10 and 11 replies reference the already-pushed commit SHA.\n\n## Step 8: Verify Fixes\n\nFor each finding that was fixed in Step 7, verify the fix actually addresses the reviewer's concern:\n\n1. Read the current code. For inline threads, use the thread's file and line. For review-body and issue-comment findings, read the files touched during the fix.\n2. Compare against the reviewer's comment (and `diffHunk` when available).\n3. Confirm the specific concern is resolved.\n\nIf the fix did not address the concern (wrong location, incomplete change, or the issue is still present), downgrade the item to Skip. Record the reason (the attempted fix did not resolve the reviewer's concern, with a brief explanation of what remains) so Step 10 (for inline threads), Step 11 (for issue-comment findings), and Step 12 (for review-body findings) report it correctly.\n\n## Step 9: Run `/answer-reviewer-questions` Skill\n\nRun the `/answer-reviewer-questions` skill on question items whose source is `inline-thread`. It produces raw answer text per thread.\n\nIssue-comment questions are composed during Step 11's assembly and posted by `/reply-to-pr-conversation`. They have no file and line to ground with `/recall-reasoning`, so the composition draws on the reconciled intent and the PR's changed code. Review-body questions have no destination to post to and are listed for manual follow-up in Step 12.\n\nIf there are no inline-thread questions, skip the skill invocation.\n\n## Step 10: Run `/reply-to-pr-threads` Skill\n\nAssemble the processed-thread list from inline-thread items only:\n\n- **fix** — inline threads with Apply verdicts whose fix was verified in Step 8. Payload: the commit SHA from Step 7.\n- **skip** — inline threads with Skip verdicts from `/evaluate-findings`, plus any downgraded in Step 8. Payload: the skip reasoning.\n- **answer** — inline-thread questions with answers composed in Step 9. Payload: the raw answer text.\n- **clarify** — inline threads reclassified as clarification questions in Step 6. Payload: the user-directed clarification question.\n\nIssue-comment findings go to Step 11; review-body findings have no destination to post to and surface only in Step 12.\n\nRun the `/reply-to-pr-threads` skill with the assembled list.\n\n## Step 11: Run `/reply-to-pr-conversation` Skill\n\nAssemble the processed-item list from issue-comment items only. Each entry includes the generated id, the author, the original comment body (for quoting), the category, and the per-category payload:\n\n- **fix** — issue-comment findings with Apply verdicts whose fix was verified in Step 8. Payload: the commit SHA from Step 7.\n- **skip** — issue-comment findings with Skip verdicts from `/evaluate-findings`, plus any downgraded in Step 8. Payload: the skip reasoning.\n- **answer** — issue-comment questions. Compose a one-or-two-sentence answer from the reconciled intent from Step 3 and the PR's changed code. Payload: the composed answer.\n- **clarify** — issue-comment items reclassified as clarification questions in Step 6. Payload: the user-directed clarification question.\n\nReview-body findings have no destination to post to. Exclude them from this list; their triage status is reported in Step 12.\n\nIf there are no issue-comment items to reply to, skip the skill invocation.\n\nRun the `/reply-to-pr-conversation` skill with the assembled list.\n\n## Step 12: Summary\n\nAfter processing all items, present a summary grouped by source.\n\n**Inline threads:**\n- Total unresolved threads found\n- Fixed (change requests with accepted verdicts)\n- Skipped (false positives or disproportionate changes)\n- Questions answered (split into: answered from recalled transcript, answered from current code)\n- Clarification questions posted\n\n**Review-body findings:**\n- Already addressed by commits (list author, state, one-line summary, addressing commit SHA)\n- Fixed in this session (list observation, addressing commit SHA)\n- Skipped (list observation, skip reasoning)\n- Questions for manual follow-up (list observation; no thread to reply to)\n\n**Issue-comment findings:**\n- Already addressed by commits (list author, one-line summary, addressing commit SHA)\n- Fixed in this session (list observation, addressing commit SHA)\n- Skipped (list observation, skip reasoning)\n- Questions answered (list observation)\n- Clarification questions asked\n- Reply URL (the posted issue comment, if any)\n\n**Overall:** list of files modified.\n\n## Rules\n\n- Process inline threads in file order to minimize context switching. Handle review-body and issue-comment findings after inline threads.\n- Stale references and default-to-skip policy are handled by the `/evaluate-findings` skill.\n- When a thread has multiple comments (discussion), read the full thread before deciding.\n- The first comment in each thread is the original review comment; subsequent comments are replies.","tags":["resolve","comments","turbo","tobihagemann","agent-skills","claude-code","claude-skills","developer-tools","skills"],"capabilities":["skill","source-tobihagemann","skill-resolve-pr-comments","topic-agent-skills","topic-claude-code","topic-claude-skills","topic-developer-tools","topic-skills"],"categories":["turbo"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/tobihagemann/turbo/resolve-pr-comments","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 (11,733 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.559Z","embedding":null,"createdAt":"2026-04-18T22:04:00.872Z","updatedAt":"2026-04-22T00:54:11.559Z","lastSeenAt":"2026-04-22T00:54:11.559Z","tsv":"'/answer-reviewer-questions':189,1228,1232 '/evaluate-findings':175,581,766,851,855,925,1366,1512,1795 '/finalize':1065 '/interpret-feedback':165,524,528 '/recall-reasoning':1274 '/reply-to-pr-conversation':197,1264,1445,1612 '/reply-to-pr-threads':193,1325,1436 '/resolve-findings':182,1033,1049 '/scripts/fetch-pr-data.sh':247 '1':153,202,1109 '10':191,1018,1076,1203,1323 '11':195,1023,1078,1208,1258,1417,1443 '12':199,461,1216,1309,1433,1594,1619 '2':156,317,544,552,1140 '3':163,472,522,681,834,1151,1542 '4':167,656,863 '5':173,769,838,847,849,1057 '6':177,915,1064,1402,1564 '7':180,933,995,1031,1099,1358,1502 '8':184,1088,1351,1372,1495,1518 '9':187,842,1046,1226,1387 'abbreviatedoid':281 'absent':904 'accept':986,1001,1039,1053,1641 'account':557 'actual':1103 'address':383,410,427,448,1104,1163,1669,1679,1688,1714,1723,1732 'ai':555 'ai-review':554 'alon':574 'alreadi':382,1083,1668,1713 'already-push':1082 'altern':726 'ambigu':179,424,917 'answer':7,83,95,104,981,1246,1377,1383,1391,1523,1535,1552,1650,1653,1657,1741 'appli':1343,1487 'approach':703 'area':441 'ask':42,686,970,1003,1006,1746 'askuserquest':968 'assembl':1260,1327,1440,1447,1616 'assess':889 'assign':920,984 'atom':358 'attempt':1185 'author':262,269,274,485,1466,1673,1718 'auto':206 'auto-detect':205 'avail':965,1150 'base':80,674 'baserefnam':255 'bash':245,246 'benefit':710 'bodi':63,112,132,159,263,270,275,299,315,320,325,349,392,479,492,498,540,612,643,797,817,875,1127,1220,1291,1420,1470,1574,1666,1774 'bot':569,572 'branch':215 'brief':1196 'bug':722 'bullet':364 'carri':469 'catch':771 'categori':1474,1479 'chang':21,171,432,627,660,672,698,712,719,742,761,843,859,894,1169,1287,1547,1638,1648 'changed-fil':626 'check':377 'clarif':1011,1398,1408,1560,1570,1661,1744 'clarifi':992,1393,1553 'classifi':445,662 'claud':35 'clear':433 'code':36,519,594,697,718,905,909,1113,1288,1548,1660 'coderabbitai':563 'collect':918 'comment':4,15,18,46,50,54,68,101,109,155,162,204,230,236,260,307,323,329,331,339,356,396,483,502,548,602,616,647,801,821,879,950,1025,1131,1146,1212,1252,1412,1456,1469,1484,1506,1526,1556,1601,1711,1752,1778,1802,1812,1820,1822 'commit':237,278,279,381,399,403,414,426,451,456,466,1066,1085,1354,1498,1671,1680,1689,1716,1724,1733 'committedd':283,401 'compar':385,1141 'compet':952 'compos':1255,1384,1528,1551 'composit':1277 'concern':336,437,1108,1155,1165,1193 'confid':82 'confirm':1152 'consid':735 'context':631,1769 'convers':17,73,108,328 'copilot':565 'copilot-pull-request-review':564 'correct':654,1224 'could':733 'creat':147 'createdat':276,393 'current':214,1112,1659 'decid':1809 'default':1787 'default-to-skip':1786 'destin':135,1295,1424,1578 'detect':207 'diffhunk':267,506,587,1148 'direct':579,980,1407,1569 'discuss':1803 'disproportion':1647 'distinct':335 'diverg':911 'document':244 'doubt':755 'downgrad':1176,1369,1515 'downstream':513 'draft':304,1015 'draw':1278 'e.g':562 'earli':912 'either':667 'emit':239 'empti':298,314,344,354 'enough':444 'entri':780,1460 'escal':922,936,958 'evalu':5,74,119,369,871 'evaluate-and-fix':118 'everi':375 'exampl':700 'exclud':300,1582 'exit':913 'explain':29 'explan':689,1197 'fals':1644 'feed':840,845 'feedback':577 'fetch':51,154,203 'file':507,628,803,883,895,960,1121,1135,1268,1758,1765 'filter':284,290,305 'find':102,113,503,516,541,549,617,802,822,880,1002,1040,1054,1093,1132,1213,1221,1413,1421,1485,1507,1575,1667,1712,1779 'first':1811 'fix':6,23,77,121,186,1090,1096,1102,1139,1160,1186,1339,1346,1481,1490,1637,1682,1726 'flag':720 'flow':114,1074 'follow':1305,1700 'follow-up':1304,1699 'found':1636 'full':224,1806 'generat':792,1463 'genuin':772 'git':417 'github':11,57 'go':1414 'ground':1272 'group':1628 'handl':19,223,515,973,1771,1792 'headrefnam':254 'id':257,787,793,1464 'identifi':785 'implement':88,1042 'impli':740 'includ':585,728,1058,1461 'incomplet':1168 'inlin':59,92,535,583,639,789,1019,1115,1205,1241,1315,1335,1340,1360,1379,1394,1631,1762,1781 'inline-thread':638,1240,1314,1334,1378 'inner':229 'intent':678,695,706,831,993,1282,1539 'interpret':590,664,953 'invoc':1321,1609 'isn':751 'isoutd':259 'isresolv':258 'issu':67,100,161,235,306,322,330,355,395,482,501,547,615,646,775,800,820,878,1024,1130,1172,1211,1251,1411,1455,1483,1505,1525,1555,1600,1710,1751,1777 'issue-com':66,99,481,500,546,614,645,799,819,877,1129,1210,1250,1410,1454,1482,1504,1524,1554,1599,1709,1776 'issuecom':273 'item':634,665,758,919,937,944,976,1060,1178,1236,1337,1451,1457,1557,1602,1624 'json':243 'jsonc':250 'known':560 'land':125 'later':649 'line':265,510,604,806,810,885,962,1123,1270,1677,1721 'list':629,778,941,1301,1332,1441,1452,1586,1617,1672,1686,1692,1702,1717,1730,1736,1742,1756 'locat':520,906,1167 'login':561 'long':233 'look':598 'manual':1303,1698 'match':558 'merg':242 'merit':373 'messag':282,415,422 'meta':251 'minim':1768 'modifi':1759 'multipl':334,1801 'new':106 'node':261 'non':297,313,343,346,353,774 'non-empti':296,312,342,352 'non-issu':773 'non-pend':345 'none':929 'normal':1073 'null':606,812 'number':212,940 'observ':64,69,359,376,429,447,487,620,1687,1693,1703,1731,1737,1743 'often':332 'oid':280 'omit':813 'one':76,338,360,867,1531,1676,1720 'one-lin':1675,1719 'one-or-two-sent':1530 'option':978 'order':1766 'origin':826,949,1468,1818 'originallin':266,608,808 'outcom':124 'outdat':601 'output':248,934 'overal':1755 'owner':208 'pack':333 'page':231 'pagin':225 'paragraph':362 'part':1070 'past':34 'path':264,508,804 'payload':1352,1373,1388,1403,1480,1496,1519,1549,1565 'pend':301,347 'per':361,975,1248,1478 'per-categori':1477 'phrase':731 'pick':996 'pipelin':122,514 'plus':1367,1513 'polici':1790 'posit':1645 'post':137,408,1262,1297,1426,1580,1663,1750 'pr':3,45,48,58,72,107,211,327,624,892,1285,1545 'present':1175,1625 'process':1029,1330,1450,1622,1761 'processed-item':1449 'processed-thread':1329 'produc':776,1244 'propos':724 'provid':218,618 'pull':12,566 'push':1068,1084 'question':28,85,169,658,669,682,738,835,868,1012,1235,1253,1292,1317,1381,1399,1409,1527,1561,1571,1649,1662,1696,1740,1745 'queue':1009 'quot':1472 'raw':1245,1390 'read':416,1110,1133,1804 'reason':31,89,749,956,1183,1376,1522,1695,1739 'recal':32,87,1655 'reclassifi':1061,1396,1558 'reconcil':677,830,1281,1538 'record':454,1181 'refer':511,886,963,1080,1784 'remain':1200 'remov':1027 'repli':9,91,98,653,1079,1604,1707,1747,1824 'repo':209 'report':1222,1591 'request':13,22,172,567,661,673,699,713,762,844,860,1639 'resolv':2,44,47,178,434,452,467,916,1157,1189 'resolve-pr-com':1 'retain':781 'review':14,27,49,53,62,84,111,131,158,226,227,268,285,291,319,324,348,391,478,491,494,497,539,556,568,596,611,642,684,715,796,816,824,874,947,1005,1106,1126,1144,1191,1219,1290,1419,1573,1665,1773,1819 'review-bodi':61,110,477,496,538,610,641,795,815,873,1125,1218,1289,1418,1572,1664,1772 'reviewthread':256 'rhetor':737 'rout':578,652 'rule':1760 'run':164,174,181,188,192,196,220,523,526,850,853,1032,1047,1227,1230,1324,1434,1444,1610 'scope':887 'scripts/fetch-pr-data.sh':221 'see':592 'sentenc':1534 'session':1685,1729 'sha':457,1086,1355,1499,1681,1690,1725,1734 'shape':249 'shouldn':743 'show':418,945 'singl':241 'skill':166,176,183,190,194,198,525,529,852,856,1034,1050,1229,1233,1320,1326,1437,1446,1608,1613,1796 'skill-resolve-pr-comments' 'skip':25,79,553,836,930,1026,1043,1180,1318,1359,1363,1375,1503,1509,1521,1606,1643,1691,1694,1735,1738,1789 'soft':730 'soft-phras':729 'someth':693 'sourc':387,406,476,637,783,1238,1630 'source-tobihagemann' 'specif':436,1154 'split':168,340,657,1651 'stale':1783 'start':143,412 'state':271,302,495,1674 'status':1589 'step':152,201,316,460,471,521,543,551,650,655,680,768,833,837,841,846,848,862,914,932,994,1017,1022,1030,1045,1056,1063,1075,1087,1098,1202,1207,1215,1225,1257,1308,1322,1350,1357,1371,1386,1401,1416,1432,1442,1494,1501,1517,1541,1563,1593,1618 'still':1174 'structur':576 'submittedat':272,389 'subsequ':380,450,465,1821 'suffix':573 'suggest':716,732 'summari':128,200,462,1620,1627,1678,1722 'surfac':1429 'switch':1770 'tag':473,632,784 'task':139,149 'taskcreat':145 'text':488,621,827,1247,1392 'thread':60,93,97,228,234,286,536,584,640,786,790,1020,1116,1119,1206,1242,1249,1316,1331,1336,1341,1361,1380,1395,1632,1635,1705,1763,1782,1799,1807,1815 'timestamp':388 'titl':252 'topic-agent-skills' 'topic-claude-code' 'topic-claude-skills' 'topic-developer-tools' 'topic-skills' 'total':1633 'touch':438,1136 'track':140 'transcript':37,1656 'treat':756,902 'triag':157,318,865,1588 'two':777,1533 'unaddress':463,537,545 'union':532 'unresolv':52,288,534,1634 'unsubmit':303 'url':253,277,1748 'use':30,38,86,144,607,807,967,1117 'user':41,990,1406,1568 'user-direct':1405,1567 'verdict':764,923,987,1344,1364,1488,1510,1642 'verifi':185,1089,1100,1348,1492 'whether':378,692 'whole':898 'whose':1237,1345,1489 'without':517 'wonder':691 'wrong':1166 'x':983 'y':1008","prices":[{"id":"73fc10a7-d643-46cb-8530-b661b276f2d9","listingId":"756a8344-29ff-4ba7-b4a7-26dd0750a751","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-18T22:04:00.872Z"}],"sources":[{"listingId":"756a8344-29ff-4ba7-b4a7-26dd0750a751","source":"github","sourceId":"tobihagemann/turbo/resolve-pr-comments","sourceUrl":"https://github.com/tobihagemann/turbo/tree/main/skills/resolve-pr-comments","isPrimary":false,"firstSeenAt":"2026-04-18T22:04:00.872Z","lastSeenAt":"2026-04-22T00:54:11.559Z"}],"details":{"listingId":"756a8344-29ff-4ba7-b4a7-26dd0750a751","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"tobihagemann","slug":"resolve-pr-comments","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":"ff0153224272fa00fc2305100d0aede706098b50","skill_md_path":"skills/resolve-pr-comments/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/tobihagemann/turbo/tree/main/skills/resolve-pr-comments"},"layout":"multi","source":"github","category":"turbo","frontmatter":{"name":"resolve-pr-comments","description":"Evaluate, fix, answer, and reply to GitHub pull request review comments and conversation comments. Handles both change requests (fix or skip) and reviewer questions (explain using reasoning recalled from past Claude Code transcripts). Use when the user asks to \"resolve PR comments\", \"fix review comments\", \"address PR feedback\", \"handle review comments\", \"address review feedback\", \"respond to PR comments\", \"answer review questions\", or \"address code review\"."},"skills_sh_url":"https://skills.sh/tobihagemann/turbo/resolve-pr-comments"},"updatedAt":"2026-04-22T00:54:11.559Z"}}