Resolve Code Review Comments 1. Fetch all comments Run the bundled script to get every inline comment with its diff hunk: Omit to use the current branch's PR. Each block in the output contains: - — file path and line number - — the diff hunk showing surrounding lines - — the reviewer's message 2. Create a todo item per comment Add one todo for each comment before touching any code. This ensures nothing is missed even when comments span many files. 3. Apply each comment Work through todos one at a time. There are two comment types: Suggestion block Body starts with Fix any errors before markin…

s/\\033\\\\[[0-9;]*[mGKH]//g'\n\nTHREADS_JSON=$(gh api graphql \\\n -f query='\n query($owner: String!, $repo: String!, $pr: Int!, $endCursor: String) {\n repository(owner: $owner, name: $repo) {\n pullRequest(number: $pr) {\n reviewThreads(first: 100, after: $endCursor) {\n pageInfo { hasNextPage endCursor }\n nodes {\n isResolved\n isOutdated\n comments(first: 50) {\n nodes {\n path\n line\n body\n author { login }\n createdAt\n diffHunk\n }\n }\n }\n }\n }\n }\n }\n ' \\\n -f owner=\"$OWNER\" \\\n -f repo=\"$REPO\" \\\n -F pr=\"$PR_NUMBER\" \\\n --paginate \\\n | sed \"$STRIP_ANSI\" \\\n | jq -s '[.[].data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false and .isOutdated == false)]')\n\nTOTAL=$(echo \"$THREADS_JSON\" | jq 'length')\n\nif [[ \"$TOTAL\" -eq 0 ]]; then\n echo \"No active review comments found for PR #${PR_NUMBER}.\"\n exit 0\nfi\n\necho \"PR #${PR_NUMBER} — ${TOTAL} active review thread(s)\"\necho \"\"\n\n# ---------------------------------------------------------------------------\n# Format and print each active thread in a single jq pass.\n# The first comment in the thread carries the diff hunk (code context).\n# All comments in the thread are shown so the full conversation is visible.\n# ---------------------------------------------------------------------------\nSEP=\"$(printf '%0.s─' {1..80})\"\n\necho \"$THREADS_JSON\" | jq -r --arg sep \"$SEP\" '\n .[] |\n (.comments.nodes[0]) as $first |\n [\n $sep,\n (\"File : \" + $first.path + \":\" + (($first.line // \"?\") | tostring)),\n (\"Author : @\" + $first.author.login),\n (\"Date : \" + $first.createdAt),\n \"\",\n \"-- code context --\",\n $first.diffHunk,\n \"\",\n \"-- comment --\",\n (.comments.nodes | map(.body) | join(\"\\n\\n---\\n\\n\")),\n \"\"\n ] | join(\"\\n\")\n'\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":3560,"content_sha256":"bb3eb5e118f0fa4412e9d64b5816acb8ae04349207afb0481a6ff4cc820a08d0"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Resolve Code Review Comments","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"1. Fetch all comments","type":"text"}]},{"type":"paragraph","content":[{"text":"Run the bundled script to get every inline comment with its diff hunk:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"bash .forge/skills/resolve-code/scripts/pr-comments.sh [PR_NUMBER]","type":"text"}]},{"type":"paragraph","content":[{"text":"Omit ","type":"text"},{"text":"PR_NUMBER","type":"text","marks":[{"type":"code_inline"}]},{"text":" to use the current branch's PR.","type":"text"}]},{"type":"paragraph","content":[{"text":"Each block in the output contains:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"File :","type":"text","marks":[{"type":"code_inline"}]},{"text":" — file path and line number","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"-- code context --","type":"text","marks":[{"type":"code_inline"}]},{"text":" — the diff hunk showing surrounding lines","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"-- comment --","type":"text","marks":[{"type":"code_inline"}]},{"text":" — the reviewer's message","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"2. Create a todo item per comment","type":"text"}]},{"type":"paragraph","content":[{"text":"Add one todo for each comment before touching any code. This ensures nothing is missed even when comments span many files.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"3. Apply each comment","type":"text"}]},{"type":"paragraph","content":[{"text":"Work through todos one at a time. There are two comment types:","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Suggestion block","type":"text"}]},{"type":"paragraph","content":[{"text":"Body starts with ","type":"text"},{"text":"```suggestion","type":"text","marks":[{"type":"code_inline"}]},{"text":". Apply the suggested text verbatim as a replacement for the highlighted lines in the diff hunk.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Free-form feedback","type":"text"}]},{"type":"paragraph","content":[{"text":"Read the comment in the context of the diff hunk, infer the required change, and implement it. When the intent is ambiguous, make the change that best matches the project's conventions and state the assumption clearly.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"4. Verify","type":"text"}]},{"type":"paragraph","content":[{"text":"After all comments are addressed, run:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"cargo check && cargo nextest run","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Fix any errors before marking the task complete.","type":"text"}]}]},"metadata":{"date":"2026-06-05","name":"github-pr-comments","author":"@skillopedia","source":{"stars":7366,"repo_name":"forge","origin_url":"https://github.com/antinomyhq/forge/blob/HEAD/.forge/skills/github-pr-comments/SKILL.md","repo_owner":"antinomyhq","body_sha256":"ca5b43d7bed12fddf5d64903d19da85d6badb95a4b7fc7012a11b2bc7d4fe9ba","cluster_key":"276ed8f8c464a47a00ad8e9ef05c2f9efbcaec3dd55a8702f7d698ad9a83ed1e","clean_bundle":{"format":"clean-skill-bundle-v1","source":"antinomyhq/forge/.forge/skills/github-pr-comments/SKILL.md","attachments":[{"id":"1b7d3eec-e517-5a56-b0f5-4eae1744eb2e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1b7d3eec-e517-5a56-b0f5-4eae1744eb2e/attachment.sh","path":"scripts/pr-comments.sh","size":3560,"sha256":"bb3eb5e118f0fa4412e9d64b5816acb8ae04349207afb0481a6ff4cc820a08d0","contentType":"application/x-sh; charset=utf-8"}],"bundle_sha256":"320418bec6df91fa20668a5ac644061e48c87e379af8a706893bfb9e3e682ff3","attachment_count":1,"text_attachments":1,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":".forge/skills/github-pr-comments/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"integrations-apis","category_label":"Integrations"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"integrations-apis","import_tag":"clean-skills-v1","description":"Resolve inline code review comments on a GitHub PR. Use when asked to \"resolve review comments\", \"address PR feedback\", \"fix PR comments\", or \"work through review comments\". Fetches every inline comment with its surrounding code context, then applies each change systematically.\n"}},"renderedAt":1782979205189}

Resolve Code Review Comments 1. Fetch all comments Run the bundled script to get every inline comment with its diff hunk: Omit to use the current branch's PR. Each block in the output contains: - — file path and line number - — the diff hunk showing surrounding lines - — the reviewer's message 2. Create a todo item per comment Add one todo for each comment before touching any code. This ensures nothing is missed even when comments span many files. 3. Apply each comment Work through todos one at a time. There are two comment types: Suggestion block Body starts with Fix any errors before markin…