Community코딩 & 개발github.com

duongphuhiep/dakubo-skills

사용자가 GitHub 풀 리퀘스트의 코드 리뷰 코멘트에 답변하고 스레드를 종료하려 할 때 사용합니다. "PR #N의 코멘트에 답변", "리뷰어에게 답장", "이 리뷰 코멘트 해결" 등의 트리거로 동작합니다.

dakubo-skills란 무엇인가요?

이 스킬은 GitHub PR의 코드 리뷰 코멘트에 답변하고 해당 스레드를 종료(resolve)하는 과정을 자동화합니다. 사용자가 리뷰어의 특정 지적에 답변하거나 스레드를 해결하려는 의도를 감지하면, 컨텍스트에서 PR 번호, 대상 리뷰 코멘트, 답변 내용을 추론합니다. 필요한 경우 Git 브랜치 정보를 조회하거나 `dakubo-display-pr-remarks` 스킬을 호출하여 리뷰 코멘트 목록을 제공할 수 있습니다. 내부적으로 GitHub CLI와 GraphQL API를 사용하여 코멘트 ID를 찾고, 답변을 게시한 후 해당 스레드를 종료합니다. 이 스킬은 터미널 기반 AI 어시스턴트(예: Claude Code, Codex)에서 유용하며, 사용자의 수동 작업을 줄이고 코드 리뷰 워크플로우를 간소화합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/duongphuhiep/dakubo-skills/tree/HEAD/package/skills/dakubo-answer-review-remark-in-pr

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

PR의 리뷰 코멘트에 답변

GitHub PR의 코드 리뷰 코멘트에 답변하고 스레드를 종료합니다.

입력

모든 입력은 대화 컨텍스트에서 추론합니다. 모호한 경우에만 질문하세요.

입력 1 — PR 번호 또는 URL. 작업할 풀 리퀘스트입니다. 컨텍스트(예: 이전에 표시된 PR URL 또는 브랜치 이름)에서 추론합니다. 명확하지 않은 경우 다음을 실행합니다:

gh pr list --head "$(git rev-parse --abbrev-ref HEAD)" --json number,url --jq '.[0]'

입력 2 — 답변할 리뷰 코멘트. 특정 리뷰어의 지적 사항입니다. 일반적으로 번호(#2), 파일+라인, 또는 대화에서 이전에 표시된 리뷰 코멘트 표의 인용문으로 식별합니다. 대화에 리뷰 코멘트 표가 없고 dakubo-display-pr-remarks 스킬을 사용할 수 있다면, 해당 스킬을 사용하여 표를 만듭니다. 그렇지 않으면 사용자에게 리뷰 코멘트를 물어보세요.

입력 3 — 답변. 게시할 응답입니다: 설명, 확인, 또는 수정 요약입니다. 컨텍스트(예: 방금 수정하거나 논의한 내용)에서 파생합니다. 불명확하면 질문하세요.

프로세스

1. 코멘트 ID 확인

PR의 인라인 리뷰 코멘트를 가져옵니다:

gh api repos/:owner/:repo/pulls/<PR>/comments --paginate \
  --jq '.[] | {id, path, line: (.line // .original_line), body: .body[0:120]}'

라인 번호, 파일 경로 또는 본문 조각으로 대상 리뷰 코멘트를 찾고 id를 기록합니다.

2. 답변 게시

gh api repos/:owner/:repo/pulls/<PR>/comments \
  --method POST \
  --field body="<answer>" \
  --field in_reply_to=<comment_id>

3. 스레드 종료

이 코멘트가 포함된 리뷰 스레드를 찾습니다:

gh api graphql -f query='
{
  repository(owner: "<owner>", name: "<repo>") {
    pullRequest(number: <PR>) {
      reviewThreads(first: 100) {
        nodes {
          id
          isResolved
          comments(first: 1) { nodes { databaseId } }
        }
      }
    }
  }
}'

comments.nodes[0].databaseId가 원래 코멘트 id(답변이 아님)와 일치하는 스레드를 찾습니다. 그런 다음 종료합니다:

gh api graphql -f query='
mutation {
  resolveReviewThread(input: { threadId: "<thread_node_id>" }) {
    thread { isResolved }
  }
}'

출력

다음과 같은 한 문장으로 확인합니다: 코멘트 <id>에 <file>:<line>에 답변 게시 완료, 스레드 종료됨.

하지 말아야 할 것

  • 답변을 지어내지 마세요 — 컨텍스트에서 파생하거나 질문하세요.
  • 먼저 답변을 게시하지 않고 스레드를 종료하지 마세요.
  • 이 브랜치에 여러 PR이 열려 있는 경우 추측하지 말고 질문하세요.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

duongphuhiep/dakubo-skills

Use when the user wants to respond to a code review remark by adding a clarifying comment to the source code — so the reviewer understands the reasoning and won't raise the same remark again. Triggers on "answer remark #N", "add comment to address reviewer concern", "document why we did X", or any request to resolve a review finding through in-code explanation rather than a code change.

duongphuhiep/dakubo-skills

Use when the user wants to see unresolved PR comments, review remarks, or outstanding feedback on a pull request.

duongphuhiep/dakubo-skills

Traces the full call chain from a given symbol or code location up to all entry points that can reach it (HTTP controllers, main functions, page components, routes, etc.). Works for any language indexed by CodeGraph. Use for blast-radius analysis before modifying a function, method, or class.

duongphuhiep/dakubo-skills

Consolidates multiple fragmented OpenSpec capability folders under openspec/specs/ into a single main feature spec, through a staged/approved workflow. Use this whenever the user says openspec/specs/ is cluttered, has too many similar or overlapping capability folders, asks to merge/consolidate/combine specs, wants to clean up specs split across several separate change archives (e.g. specs/user-show/, specs/user-detail/ that should really be one specs/user-management/), or asks to check/apply a pending merged spec under openspec/specs/.merged-specs/. Do NOT use this for a normal single /opsx:archive of one change — only for merging several already-archived, already-existing spec folders together.

관련 스킬