deep

star 1

다중 페르소나(Lazy / Paranoid)로 코드를 독립 분석하고 codex 교차 검증을 더해 결함을 다관점에서 적대적으로 찾아야 할 때 호출한다. 사용자가 '심층 리뷰', '철저하게 봐', '다관점', '두 관점', 'exhaustive', '한 번 더 확인', '결함이 있는지 다 보자' 같은 표현을 쓰거나, PR이나 디렉토리·파일 변경을 가장 깐깐하게 검토받고 싶을 때 트리거된다. 변경 규모와 무관하게 적대성·다관점이 필요한 모든 케이스에 적합하다.

jyeokchoi By jyeokchoi schedule Updated 6/2/2026

name: deep description: "다중 페르소나(Lazy / Paranoid)로 코드를 독립 분석하고 codex 교차 검증을 더해 결함을 다관점에서 적대적으로 찾아야 할 때 호출한다. 사용자가 '심층 리뷰', '철저하게 봐', '다관점', '두 관점', 'exhaustive', '한 번 더 확인', '결함이 있는지 다 보자' 같은 표현을 쓰거나, PR이나 디렉토리·파일 변경을 가장 깐깐하게 검토받고 싶을 때 트리거된다. 변경 규모와 무관하게 적대성·다관점이 필요한 모든 케이스에 적합하다." argument-hint: "/deep [PR 번호 | 파일·디렉토리 경로]"

Deep

언제 쓰나

코드를 다관점으로 깊이 검토해 결함을 빠짐없이 찾고 싶을 때. 두 페르소나(Lazy / Paranoid)가 완전히 독립된 컨텍스트에서 같은 코드를 분석하고, codex 교차 검증을 병렬로 더해 단일 모델 편향을 회피한다. 페르소나 동의는 비공식 합의가 아니라 병합 단계에서 정리한다.

절차

Step 1: 컨텍스트 수집

대상이 (a) review/pr이 전달한 PR 컨텍스트인지, (b) PR 번호인지, (c) 파일·디렉토리 경로인지 확인한다.

  • PR 컨텍스트 (review/pr 위임): 인자에 {number, base, head, worktree_path, is_new_worktree, title, body}가 포함된 경우. worktree_path 안에서 git diff {base}...HEAD로 diff 추출. PR 컨텍스트는 산출물에 함께 반환해 라우터(review/SKILL.md Step 3)가 게시·정리 분기를 결정할 수 있도록 보존한다.
  • PR 번호 (직접 호출): dirty working tree 점검 후 gh pr checkout {N} → diff 추출. 직접 호출에서는 라우터 Step 3에 PR 컨텍스트가 없으므로 게시·정리 분기가 자동으로 건너뛰어진다.
  • 경로: explore 스킬을 호출해 대상 파일을 수집한다. 50개를 넘으면 자연어로 되읽어 범위를 확인한다.

diff가 비면 "변경사항 없음" 안내 후 종료. 수집 결과를 REVIEW_CONTENT로 둔다.

Step 2: 핵심 실행 — 2-Persona 병렬 분석 + codex 교차 검증 + 정책 audit

출처 구성은 변경 규모·위험에 비례시킨다 (AGENTS.md 5축 적정 공학). 사용자가 deep을 호출한 이상 2-Persona 다관점은 어떤 규모에서도 유지한다(deep의 존재 이유) — 비례 대상은 추가 출처(codex 교차 검증·정책 audit)와 pre-commitment의 깊이다. 작고 되돌리기 쉬운 저위험 변경은 추가 출처를 생략하거나 pre-commitment를 간결화하고, 크거나 사용자·돈·데이터에 닿는 변경에 codex·audit·pre-commitment 3건의 깊이를 집중한다. 비례 기준은 수치로 박지 않고 맥락에서 판정한다. 단 다관점 적대성과 발견된 위해에 대한 검증 강도는 변경이 작다는 이유로 낮추지 않는다(가드).

병렬 시작 강제 — 페르소나 분석과 codex 교차 검증을 (수행 시) 동시에 시작한다. 페르소나 결과를 기다린 뒤 codex를 호출하지 않는다. 병렬성이 무너지면 codex 독립성이 훼손된다.

분석은 위임이 더 적합하므로 delegate 스킬에 넘긴다.

  • Lazy Engineer (실용 관점) — "이거 지금 고쳐야 함? 나중에 해도 됨?" 동작·테스트가 충분하면 수용. 기존 부채와의 일관성·blast radius·대안의 단순성을 우선 판단.
  • Paranoid Engineer (엄격 관점) — "이거 진짜 괜찮음? 한번 더 확인해" 아키텍처 완결성·테스트 커버리지·보안(인젝션·인증/인가 우회·민감 데이터 노출)·에러 핸들링 완전성·엣지 케이스 누락을 우선 의심.
  • codex 교차 검증 — verify 스킬의 adversarial-review sub-skill을 호출해 설계 선택·숨겨진 가정·대안 접근법에 도전한다.
  • Policy Audit — audit 스킬을 호출해 대상 diff·파일이 적용 가능한 정책·절차를 지켰는지 별도 판정한다. audit 결과는 결함 탐색 페르소나에게 공유하지 않는다.

두 페르소나에는 공통 지시를 둔다.

  • Pre-commitment: 코드를 읽기 전 "이 변경에서 문제가 있다면 어디일까"를 예측해 출력 상단에 기록한다 — 사전 예측이 확증 편향을 줄인다. 예측 건수는 변경 규모·위험에 비례시킨다 (AGENTS.md 5축 적정 공학) — 작고 단순한 변경은 1건으로 줄일 수 있고, 크거나 위해 표면이 넓은 변경에 3건 이상의 깊이를 집중한다. 단 0건은 금지다 — 사전 예측 없이 코드를 읽으면 확증 편향이 결함 탐색을 가린다.
  • 적대적 검증: 주석·커밋 메시지·PR 설명을 증거로 신뢰하지 않는다. 코드만으로 동작을 독립 재구성한 뒤 주석과 대조한다. "안전하다"고 주장된 부분을 우선 의심한다.
  • 발견은 결함·정상·중립 어느 쪽이든 보고. 같은 위치에 양쪽 페르소나 발견이 겹칠 수 있다.

위임은 delegate 스킬을 호출해 6-Section 프롬프트로 형식화한다. Step 3의 추가 비평 1회는 각 페르소나에게 자기 발견의 부연·확인·철회만 요청하는 동일 발견자 후속 질의이므로, subagent 스킬이 정의한 후속 질의 예외에 따라 동일 에이전트를 resume한다 — 따라서 페르소나는 재개 가능한 에이전트 타입으로 스폰한다. codex는 verify 스킬 호출로 한다.

Step 3: 결과 작성·보고 — 병합 + verdict

출처(Lazy · Paranoid · codex · Audit)의 발견을 병합한다. 규모 비례로 codex·audit을 생략했으면 수행한 출처만 병합하고, 생략 사유를 리포트에 한 줄 명시한다(2-Persona는 항상 포함).

  • 합의 발견: 같은 위치·같은 결함 → 단일 항목으로 통합, 출처를 합집합으로 병기 [Lazy, Paranoid, Codex, Audit]. 단일 출처가 합의를 임의로 덮어쓰지 않는다.
  • 불일치 발견: 같은 위치인데 한 쪽은 결함·다른 쪽은 정상 → 양쪽 모두 보존하고 "unresolved" 태그. 양쪽 주장과 근거를 모두 리포트에 남긴다.
  • 단일 출처 발견: 한 출처만 제기 → 그대로 보존, 출처 태그 단일.

병합 결과에 심각도 ≥ MAJOR가 있거나 unresolved가 남아 있으면 두 페르소나에 1회씩만 추가 비평을 요청해 confirmed / withdrawn / unresolved로 정리한다. 왕복은 금지 — 자율 토론으로 퇴화한다.

verdict는 다음 우선순위로 기계적으로 결정한다.

우선 조건 verdict
1 unresolved가 MAJOR 이상으로 남음 REQUEST_CHANGES (차단 해제 불가)
2 confirmed 발견 중 심각도 ≥ MINOR 존재 REQUEST_CHANGES
3 위 조건 모두 미충족 APPROVE

STYLE / nitpick은 코멘트로 남기되 verdict를 차단하지 않는다.

산출물은 두 개다.

  • report.html — write 스킬(human-docs)에 위임해 작성. 본문은 (대상 · Pre-commitment · 페르소나별 발견 · codex 발견 · audit 발견 · 병합 결과 · unresolved · 발견 목록 final · verdict) 순으로 구성하고, 출처 태그는 합집합 그대로 보존한다.
  • comment-candidates.json — 사용자 확정 단계의 입력. 각 발견을 GitHub Review Comments API 호환 sidecar 후보 형식으로 직렬화. 필드: id, path, line, side(RIGHT 기본), start_line(다중 라인 한정), start_side, severity(CRITICAL/MAJOR/MINOR/STYLE), sources(Lazy/Paranoid/Codex/Audit 합집합), body(발견 요약 + 근거 + 권고).

두 산출물의 경로와 PR 컨텍스트(있는 경우)를 호출자(라우터)에 반환한다. comment candidate 사용자 확정·comments.json 최종 저장·게시·worktree 정리는 라우터 Step 3 단일 소스에서 처리한다.

제약·실패 모드

절대 규칙

  • 두 페르소나 분석과 codex 교차 검증을 병렬로 시작한다. 순차 실행 금지 — 왜: codex 독립성이 페르소나 결과에 오염되면 교차 검증의 의미가 사라진다.
  • 각 페르소나는 독립된 컨텍스트에서 시작한다. 분석 전에 다른 페르소나 결과를 공유하지 않는다 — 왜: 사전 공유는 독립 분석을 비공식 합의로 퇴화시킨다.
  • Pre-commitment를 출력 상단에 첨부하지 않은 페르소나 결과는 재요청한다. 건수는 변경 규모·위험에 비례시키되(소규모 1건까지 축소 가능, 큰 변경에 3건 이상 집중) 0건은 금지다 (AGENTS.md 5축 적정 공학) — 왜: 사전 예측이 빠지면 확증 편향이 결함 탐색을 가린다. 건수 비례는 깊이 조정이지 생략이 아니다.
  • 추가 비평은 페르소나당 1회 발화로 한정한다. 후속 반박 라운드 금지 — 왜: 왕복은 자율 토론으로 퇴화해 병합 단계의 결정력을 없앤다.
  • 라우터·메인은 병합 결과에서 발견을 임의로 drop·downgrade하지 않는다. 심각도 조정·발견 제거·LOW 강등은 페르소나의 명시적 withdrawn을 통해서만 한다 — 왜: 단일 권한자가 발견을 조작하면 다관점 분석의 결과가 무력화된다.
  • MINOR 이상 확정 발견은 verdict를 차단한다. STYLE / nitpick은 코멘트만 — 왜: MINOR 이상은 실질적 코드 문제이며 해결 없이 APPROVE하면 결함이 누적된다.
  • codex 호출이 실패해도 두 페르소나 결과만으로 진행한다. 실패 사유를 리포트에 명시한다 — 왜: 단일 호출 실패로 전체 리뷰를 중단시키면 합리적 진행이 막힌다.
  • audit은 정책 준수 출처일 뿐 Lazy/Paranoid/codex를 대체하지 않는다 — 왜: 정책 검사는 결함 탐색·설계 도전과 다른 축이다.
  • 게시·worktree 정리를 본 스킬에서 직접 수행하지 않는다. 라우터(review/SKILL.md Step 3) 단일 소스에 산출물과 PR 컨텍스트(있는 경우)를 반환한다 — 왜: 게시·정리 책임이 sub-skill과 라우터 두 곳에 분산되면 modal 분기·정리 누락이 발생한다.
  • comment-candidates.json 후보는 사용자 확정 단계의 입력이다. 본 스킬은 후보를 자동 채택하거나 가공하지 않는다 — 왜: 후보 자동 채택은 다관점 분석의 검토 입력 성격을 무너뜨린다.

결정 규칙

조건 행동
두 페르소나가 동일 위치를 결함·정상으로 갈라짐 unresolved 태그로 보존, 비평 1회로 정리 비공식 합의로 한쪽 의견을 덮으면 적대성이 무력화
발견이 STYLE만 잔존 verdict APPROVE, 코멘트로만 남김 STYLE 차단은 개발 속도만 저하
codex 호출이 실패 페르소나 결과만으로 진행, 사유 명시 외부 호출 실패가 전체 차단으로 이어지면 안 됨

실패 모드

합리화 신호 현실
"두 페르소나가 모두 동의했으니 합의된 결함이다" 합의는 병합 단계에서 정리한다. 비공식 브로드캐스트로 동의를 선언하면 unresolved 처리가 사라진다.
"사소한 스타일이지만 지적해야 품질이 올라간다" STYLE로 verdict를 차단하면 개발 속도만 저하. 코멘트로 남기되 차단하지 않는다.
"Pre-commitment는 형식이니 결과에 영향 없다" 사전 예측 없이 코드를 읽으면 확증 편향이 결함 탐색을 가린다. 형식이 정신이다.
"병렬 시작이 부담이니 페르소나 끝나면 codex 부르자" 순차 실행은 codex 독립성을 훼손한다. 병렬 호출은 시간이 아니라 독립성을 위한 설계다.
"내가 보기엔 MAJOR가 아니라 MINOR다, 강등하자" 메인은 심각도를 조정할 수 없다. 페르소나의 명시적 withdrawn만 허용. 메인 강등은 절대 규칙 위반.
"unresolved지만 사실 문제 없다, APPROVE 가능" unresolved가 MAJOR 이상이면 verdict는 REQUEST_CHANGES 고정. 차단 해제 불가.
"codex 호출이 실패했으니 deep 리뷰 자체를 중단하자" 페르소나 결과만으로 진행하고 사유를 리포트에 명시. 단일 호출 실패가 전체 중단으로 번지면 안 된다.
"작은 변경이니 2-Persona도 하나로 줄이자" 비례 대상은 추가 출처(codex·audit)와 pre-commitment 깊이다. 사용자가 deep을 호출한 이상 2-Persona 다관점은 가드로 유지한다.
"변경이 작으니 pre-commitment 0건으로 건너뛰자" 건수는 규모에 비례하되 0건은 금지. 사전 예측 없이 읽으면 확증 편향이 결함을 가린다.
Install via CLI
npx skills add https://github.com/jyeokchoi/claude-skills --skill deep
Repository Details
star Stars 1
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator