babysit
thedotmack/claude-mem
PR 또는 코드 리뷰 주기가 병합 준비가 될 때까지 감시합니다. actionable issue가 모두 해결될 때까지 PR 코멘트, 리뷰 및 CI를 지속적으로 확인하라는 요청이 있을 때 사용합니다.
...모든 것을 확장하십시오Babysit 기능 소개
PR(풀 리퀘스트) 또는 코드 리뷰 주기를 PR이 병합 준비가 완전히 될 때까지 감시하며, 한 번의 검토 후 중단하지 않고 댓글이나 리뷰 스레드가 해결될 때까지 지속적으로 확인합니다. 이 워크플로우는 PR 번호, 브랜치, 기본 브랜치를 식별하고, PR이 초안(draft) 상태가 아닌지 확인하며, 병합 가능성, 상태 확인(checks), 리뷰 결정, 댓글, 그리고 리뷰 스레드를 검사합니다. 보류 중인 상태 확인(checks)이 완료될 때까지 감시하며, 사용자가 다른 주기를 요청하지 않는 한 약 30~60초의 실용적인 간격으로 폴링(polling)합니다. 새로운 댓글과 해결되지 않은 리뷰 스레드를 읽으며, 봇의 요약은 유용하지만 코드와 대조하여 검증해야 하는 실행 가능한 발견 사항으로 처리됩니다.
실제 문제는 집중된 커밋(focused commits)에서 수정하고, 관련 테스트나 빌드를 실행하며, 변경 사항을 푸시(push)한 후 상태 재검토를 위해 해당 사이클로 돌아갑니다. 코드나 생성된 아티팩트가 이제 댓글의 요구사항을 충족하는지 확인한 후에야 오래된(stale) 리뷰 스레드가 해결됩니다. 상태 확인(checks)이 통과하거나 의도적으로 건너뛰어졌고, 리뷰 결정이 허용 가능하며, 실행 가능한 댓글이 남아 있지 않으며, 해결되지 않은 리뷰 스레드가 없을 때만 프로세스가 중단됩니다.
이 스킬은 구체적인 GitHub CLI 및 GraphQL 레시피를 제공합니다. JSON 필드 목록을 사용하는 gh pr view는 상태, 초안 여부, 병합 가능성, 병합 상태 상태(mergeStateStatus), 리뷰 결정, headRefOid, 상태 확인 롤업(statusCheckRollup)을 포함한 대략적인 상태를 제공합니다. GraphQL 쿼리 전에 gh repo view와 jq를 사용하여 저장소 소유자와 이름을 확인합니다. 페이지네이션을 위한 pageInfo를 포함하는 reviewThreads GraphQL 쿼리를 사용하여 해결되지 않은 리뷰 스레드를 가져오며, hasNextPage가 true이고 endCursor를 사용하여 결과를 페이지네이션하는 문서화된 루프와 jq를 사용하여 해결되지 않은 스레드를 필터링합니다. resolveReviewThread 뮤테이션(mutation)은 수정이 검증된 경우에만 스레드를 해결합니다. 운영 규칙에는 긴 상태 확인(checks) 동안 감시자를 실행 상태로 유지하고, 봇이 보고한 문제가 오래된 코드인지 현재 코드인지 확인하며, 해결 전에 소스와 생성된 아티팩트가 일치하는지 검증하고, 새로운 최종 검사를 수행하며, 최신 커밋 SHA, 상태 확인 결과, 해결되지 않은 스레드 수, 실행된 테스트, 그리고 더러운(local) 파일 등 구체적인 증거를 보고하는 것이 포함됩니다.
자주 묻는 질문
이 스킬은 언제 PR 감시를 중단합니까?
상태 확인(checks)이 통과하거나 의도적으로 건너뛰어졌고, 리뷰 결정이 허용 가능하며, 실행 가능한 댓글이 남아 있지 않으며, 해결되지 않은 리뷰 스레드가 없을 때만 중단합니다. 스레드가 여전히 열려 있는 경우 한 번의 상태 확인 통과 후 중단하지 않습니다.
상태 폴링은 얼마나 자주 수행됩니까?
사용자가 다른 주기를 요청하지 않는 한, 일반적으로 30~60초의 실용적인 간격으로 수행합니다. 긴 상태 확인(checks)이 보류 중인 동안 감시자는 실행 상태로 유지됩니다.
해결되지 않은 리뷰 스레드는 어떻게 찾습니까?
pageInfo를 포함하는 GraphQL reviewThreads 쿼리를 사용하여, hasNextPage가 true일 때 이전 endCursor를 사용하여 결과를 페이지네이션한 후, jq를 사용하여 isResolved가 false인 스레드를 필터링합니다.
오래된 리뷰 스레드를 해결하는 것이 안전한 때는 언제입니까?
resolveReviewThread 뮤테이션을 사용하여 코드나 생성된 아티팩트가 이제 댓글의 요구사항을 충족하는지 확인한 후에만 해결합니다. 분산된 생성 파일의 경우, 소스와 생성된 아티팩트가 일치하는지 먼저 확인해야 합니다.
최종 보고 시 무엇을 포함해야 합니까?
구체적인 증거: 최신 커밋 SHA, 상태 확인 이름 및 결과, 해결되지 않은 스레드 수, 실행된 테스트, 그리고 더러운(local) 파일 등. 이는 PR 상태, 스레드, 최근 댓글, git 상태에 대한 새로운 최종 검사를 수행한 후 보고해야 합니다.
Stay with the PR until it is actually clean. Do not stop after one check pass if comments or review threads are still unresolved.
Workflow
- Identify the PR number, branch, and base branch.
- Confirm the PR is not draft and inspect mergeability, checks, review decision, comments, and review threads.
- Watch pending checks until they finish. Poll at a practical interval, usually 30-60 seconds unless the user asks for a different cadence.
- Read new comments and unresolved review threads. Treat bot summaries as useful, but verify actionable findings against the code.
- Fix real issues in focused commits, run relevant tests/builds, push, and return to step 2.
- Resolve stale review threads only after verifying the code or generated artifact now addresses the comment.
- Stop only when checks are passing or intentionally skipped, review decision is acceptable, no actionable comments remain, and no unresolved review threads remain.
GitHub CLI Checks
Use gh pr view for the coarse status:
gh pr view <number> --json \ number,state,isDraft,mergeable,mergeStateStatus,reviewDecision,headRefOid,statusCheckRollup,url
Resolve the repository owner/name before using GraphQL:
repo_json=$(gh repo view --json owner,name)owner=$(jq -r '.owner.login // .owner.name' <<<"$repo_json")repo=$(jq -r '.name' <<<"$repo_json")
Use GraphQL for unresolved review threads. Include pageInfo; omit cursor on the first page, then pass the previous endCursor with -f cursor="$cursor" while hasNextPage is true.
gh api graphql \ -f query='query($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){pageInfo{hasNextPage endCursor}nodes{id,isResolved,isOutdated,path,line,comments(last:1){nodes{author{login},body,createdAt,url}}}}}}}' \ -f owner="$owner" -f repo="$repo" -F number=<number>
Use this loop when a PR may have many review threads:
thread_query='query($owner:String!,$repo:String!,$number:Int!,$cursor:String){repository(owner:$owner,name:$repo){pullRequest(number:$number){reviewThreads(first:100,after:$cursor){pageInfo{hasNextPage endCursor}nodes{id,isResolved,isOutdated,path,line,comments(last:1){nodes{author{login},body,createdAt,url}}}}}}}'cursor_args=()while :; do page=$(gh api graphql -f query="$thread_query" -f owner="$owner" -f repo="$repo" -F number=<number> "${cursor_args[@]}") printf '%s' "$page" | jq -r '.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved==false) | [.id,.path,(.line//""),(.isOutdated|tostring),(.comments.nodes[-1].author.login//""),(.comments.nodes[-1].body|gsub("";" ")|.[0:240])] | @tsv' jq -e '.data.repository.pullRequest.reviewThreads.pageInfo.hasNextPage' >/dev/null <<<"$page" || break cursor=$(jq -r '.data.repository.pullRequest.reviewThreads.pageInfo.endCursor' <<<"$page") cursor_args=(-f cursor="$cursor")done
Filter unresolved threads with jq:
jq -r '.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved==false) | [.id,.path,(.line//""),(.isOutdated|tostring),(.comments.nodes[-1].author.login//""),(.comments.nodes[-1].body|gsub("";" ")|.[0:240])] | @tsv'
Resolve a stale thread only when the fix is verified:
gh api graphql \ -f query='mutation($threadId:ID!){resolveReviewThread(input:{threadId:$threadId}){thread{id,isResolved}}}' \ -f threadId=<thread-id>
Operating Rules
- Keep the watcher running while long checks are pending.
- If a generated file is part of the distribution, verify the source and generated artifact agree before resolving comments.
- If a bot reports an issue against stale code, confirm whether the thread is outdated or addressed in the latest head.
- Before final reporting, do one fresh sweep of PR status, unresolved threads, recent comments, and local
git status. - Report concrete evidence: latest commit SHA, check names and results, unresolved thread count, tests run, and any dirty local files left untouched.
모든 파일
0개 파일babysit 설치
스킬 파일을 다운로드하여 .claude/skills/ 디렉토리에 추출하세요.
ZIP 다운로드저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.
git clone https://github.com/thedotmack/claude-mem/blob/main/plugin/skills/babysit/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
복사





집
