Codex-GPT 상호검증
Codex를 작업 책임자, ChatGPT를 외부 검토자로 두고 결과물을 검증한다. 브라우저 준비·로그인과 검토 루프를 분리하되, 사용자는 이 스킬 하나만 호출한다.
모드와 로딩 지도
입력에 mode가 있으면 따르고, 없으면 auto를 사용한다. 아래 표의 참조 파일만 해당 시점에 읽는다. 세 파일을 시작부터 모두 읽지 않는다.
| mode | 읽을 순서 | 완료 시점 |
|---|---|---|
auto |
browser-bootstrap.md → review-loop.md → finalize.md | 최종 결과와 제목 확인 |
bootstrap |
browser-bootstrap.md | 대화 준비 또는 LOGIN_REQUIRED |
review |
browser-bootstrap.md → review-loop.md → finalize.md | 기존 대화 검토 종료와 결과 확정 |
기본 입력
task: 작업 목표
artifact: 검토할 결과물 또는 현재 작업트리
artifact_scope: diff | file | project
review_type: correctness | security | performance | architecture | test | documentation
acceptance_criteria: 완료 기준
model_preference: strongest_available | current | named
model_name: null
reasoning_preference: high | current | standard
model_fallback: ask | keep_current
max_rounds: 3
apply_changes: true
allow_browser_review: true
allow_new_chat: true
allow_chat_rename: auto | true | false
review_chat_url: null
기본값은 artifact_scope: diff, max_rounds: 3, model_preference: strongest_available, reasoning_preference: high, model_fallback: ask, allow_chat_rename: auto다. apply_changes는 변경 요청이면 true, 검토·설명 요청이면 false다. allow_chat_rename: auto는 이 스킬이 만든 대화만 변경하고 기존 대화는 보존한다.
모델·추론 설정은 모든 모드에서 실제 브라우저에 보이는 컨트롤만 사용한다. strongest_available와 high는 보이는 범위의 최고 옵션을 선택하고, named는 model_name과 정확히 일치하는 옵션만 선택한다. 찾지 못하면 model_fallback을 적용하고 실제 선택값을 기록한다.
브라우저 조작은 browser:control-in-app-browser 스킬로 수행한다.
실행 순서
- 입력과 브라우저 전송 범위를 확인한다.
- 사용자가 특정 인앱 브라우저 탭을 명시하면 새 탭보다 우선한다. 주변 UI에 열려 있다는 사실만으로 탭을 선택하지 않는다.
- 모드 표에 따라 필요한 참조 파일을 읽고 검토 대화를 준비한다.
- 첫 검토 대화가 정해지면 같은 탭·대화를 라운드마다 재사용한다.
- 독립 관점·전문 검토·컨텍스트 과대일 때만 새 대화로 교체한다.
auto와review모드에서만finalize.md의 결과 계약으로 종료하고 완료 기준을 확인한다.
기존 원본 Codex 대화는 보존한다. 브라우저 탭과 ChatGPT 대화를 혼동하지 않으며, 새 검토 대화는 원본과 분리한다.
책임 경계
- Codex: 요구사항 해석, finding 판정, 작업트리 수정, 테스트 실행, 종료 결정.
- ChatGPT: 지정된 범위의 반례·누락·오류·위험 탐색과 근거 제시.
- 브라우저: 검토 대화 열기, 로그인 상태 확인, 요청 전송, 응답 읽기, 채팅명 변경 시도.
$handoff: 검토를 실제로 다른 에이전트나 세션에 넘길 때만finalize.md의 조건에 따라 읽고 실행해 portable 인계 문서를 만든다. 일반 최종 보고나 같은 대화의 다음 라운드를 대신하지 않는다.
ChatGPT의 의견 일치만으로 완료 처리하지 않는다. 테스트, 명세, 공식 문서, 실행 결과처럼 확인 가능한 근거를 우선한다.
안전 규칙
- 비밀번호, OTP, CAPTCHA, API 키는 입력하거나 공개하지 않는다.
- 비공개 코드·문서를 브라우저로 전송하려면 입력의
allow_browser_review: true와 전송 범위를 확인한다. 범위가 없으면 멈추고 사용자에게 묻는다. - 로그인 화면에서는 사용자에게 직접 로그인하도록 요청하고,
LOGIN_REQUIRED상태로 일시정지한다. 무한 폴링하지 않는다. - 브라우저 지연·로그인 실패·응답 형식 오류·채팅 생성 실패는 성공으로 가장하지 않는다.
- 새 채팅은 독립 관점, 전문 검토, 컨텍스트 과대 중 하나일 때만 만든다.
- 같은 finding을 새로운 근거 없이 다시 논쟁하지 않는다.
상태
INIT ─┬→ LOGIN_REQUIRED
└→ READY → REVIEWING → DONE
├────→ NEEDS_USER_DECISION
└────→ BLOCKED
상태와 함께 review_chat_url, chat_origin, conversation_summary, rounds_used, remaining_findings를 유지한다. 가능한 상태는 READY, REVIEWING, DONE, LOGIN_REQUIRED, NEEDS_USER_DECISION, BLOCKED다. LOGIN_REQUIRED에서는 사용자 로그인 후 같은 작업을 재개할 수 있게 현재 탭과 다음 작업을 설명한다.
최종 결과 형식과 제목 변경 상태는 finalize.md의 계약을 따른다. SUCCESS는 완료 기준을 만족하고 blocking finding이 없을 때만 사용한다. 남은 위험은 PARTIAL, 사용자 선택은 NEEDS_USER_DECISION, 실행 차단은 FAILED다.