بنقرة واحدة
code-review-team
// PR diff에 대해 정적분석·설계·보안 3 리뷰어 + 리팩토러 4인 팀을 운영한다. 트리거 - "코드 리뷰", "PR 리뷰", "리뷰 재실행", "다시 실행", "리뷰 보고서".
// PR diff에 대해 정적분석·설계·보안 3 리뷰어 + 리팩토러 4인 팀을 운영한다. 트리거 - "코드 리뷰", "PR 리뷰", "리뷰 재실행", "다시 실행", "리뷰 보고서".
데이터베이스 쿼리 생성: 매출·재고 도메인 분기. 사용자가 'Q4 매출', '재고 현황' 등을 언급하면 호출. 단순 SELECT는 직접 작성, 도메인 템플릿이 필요할 때 이 스킬을 검토.
테이블 열 정규화 — 매출/금액/수량 키워드 포함 시 숫자 변환
테이블 열 정규화 — 'Q4 매출' 열만 숫자 변환
다중 모드 오케스트레이터 — README 작성/변경로그 생성/PR 본문 작성. 사용자가 '리드미', 'README', '체인지로그', 'changelog', 'PR 본문', 'pull request body'를 요청하면 호출. 본 sub-harness 데모용. 단순 1줄 수정은 직접 처리.
CSV 파일 통계 요약: 행 수, 열별 dtype 추론, 숫자 열 평균·중앙값·표준편차 표 산출. 사용자가 'CSV 요약', '데이터 통계' 등을 언급하거나 .csv 파일을 첨부하면 호출.
PR·diff·변경 파일 목록을 받아 정적 분석, 보안 검토, 테스트 영향 검토를 병렬로 수행하고 하나의 리뷰 리포트로 통합한다. 사용자가 'PR 리뷰', 'diff 점검', '변경사항 리뷰', '코드 리뷰 자동화'를 요청하면 이 스킬을 사용한다. 단일 파일의 간단한 스타일 조언은 code-reviewer 스킬로 처리하고, 전체 코드베이스 보안 감사는 security-auditor 스킬로 위임한다.
| name | code-review-team |
| description | PR diff에 대해 정적분석·설계·보안 3 리뷰어 + 리팩토러 4인 팀을 운영한다. 트리거 - "코드 리뷰", "PR 리뷰", "리뷰 재실행", "다시 실행", "리뷰 보고서". |
| allowed-tools | TeamCreate, AgentTool, TaskCreate, SendMessage, TeamDelete, Read, Write, Bash(gh pr diff, gh pr comment) |
4인 리뷰어 팀 오케스트레이터. 리더는 텍스트를 쓰지 않는다 — 워커 4인이 모든 보고서를 생산한다.
공식 도구: TeamCreate, AgentTool, TaskCreate, SendMessage, TeamDelete. 의사 함수 (실 구현 필요):
parseDiff,waitForTeamCompletion,mergeReports,$(셸 실행 헬퍼).
async function codeReviewTeam(prNumber: number) {
// ──────────────────────────────────────────────
// Phase 0 — 입력 수집
// ──────────────────────────────────────────────
const diff = await $(`gh pr diff ${prNumber}`); // 의사: $
await Write(`_workspace/input/pr-${prNumber}.diff`, diff);
const parsed = parseDiff(diff); // 의사: parseDiff
// ──────────────────────────────────────────────
// Phase 1 — TeamCreate + AgentTool × 4 (worktree 격리)
// ──────────────────────────────────────────────
const team = await TeamCreate({
name: "code-review",
description: "PR diff를 4개 렌즈로 리뷰한다"
});
const roleMap = [
"static-analyzer",
"design-reviewer",
"security-auditor",
"refactorer"
];
for (const role of roleMap) {
await AgentTool({
team: team.id,
agent: role,
isolation: "worktree"
});
}
// ──────────────────────────────────────────────
// Phase 2 — TaskCreate × 4 (for-루프)
// ──────────────────────────────────────────────
// 책 주의: 단건 호출은 TaskCreate 1회씩이지만, 의사 표기로는 배열 표기로도 자주 그려진다.
// 실제로는 for-루프로 4회 호출.
const taskSpecs = [
{ agent: "static-analyzer", name: "정적 분석", output: "_workspace/review/01_static.md" },
{ agent: "design-reviewer", name: "설계 검토", output: "_workspace/review/02_design.md" },
{ agent: "security-auditor", name: "보안 감사", output: "_workspace/review/03_security.md" },
{ agent: "refactorer", name: "리팩토링", output: "_workspace/review/04_refactor.md",
depends_on: ["정적 분석", "설계 검토", "보안 감사"] }
];
for (const t of taskSpecs) {
await TaskCreate({
team: team.id,
agent: t.agent,
name: t.name,
input: `_workspace/input/pr-${prNumber}.diff`,
output: t.output,
depends_on: t.depends_on
});
}
// ──────────────────────────────────────────────
// Phase 3 — 팬아웃 (리뷰어 3인 병렬). 동료 SendMessage는 리더 미경유.
// ──────────────────────────────────────────────
await waitForTeamCompletion(team.id, { tasks: ["정적 분석", "설계 검토", "보안 감사"] });
// 워커 간 SendMessage는 워커 정의(.md)의 팀 통신 프로토콜에 따라 자율 호출.
// ──────────────────────────────────────────────
// Phase 4 — 생성-검증 루프 (최대 3회)
// ──────────────────────────────────────────────
// refactorer는 depends_on 대기 후 자동 시작. 본인이 생성·검증을 내부에서 3회 상한으로 진행.
await waitForTeamCompletion(team.id, { tasks: ["리팩토링"] });
// ──────────────────────────────────────────────
// Phase 5 — 통합 · 게시 · 정리
// ──────────────────────────────────────────────
const reports = [
Read("_workspace/review/01_static.md"),
Read("_workspace/review/02_design.md"),
Read("_workspace/review/03_security.md"),
Read("_workspace/review/04_refactor.md")
];
const merged = mergeReports(reports, { priority: ["P0", "P1", "P2"] });
await Write("_workspace/review_report.md", merged);
await $(`gh pr comment ${prNumber} -F _workspace/review_report.md`);
await TeamDelete(team.id); // workspace 보존
}
공식 5종 (실제 호출 가능):
의사 함수 4종 (구현자가 직접 만들어야 함):
parseDiff(diff) — diff 텍스트를 파일·라인 메타로waitForTeamCompletion(teamId, opts) — 작업 완료 대기mergeReports(reports, opts) — 4 보고서를 우선순위 정렬해 통합$(cmd) — Bash 실행 헬퍼gh pr comment까지만. git commit·gh pr merge는 호출하지 않는다._workspace/ 디렉토리는 남는다. 사람이 재검토할 수 있게.