Codex 대화형 모드와 codex exec 비교: 릴리스 점검은 어디에서 돌릴까
TL;DR
실패 원인을 대화로 좁히고 수정 범위를 사람이 조정해야 한다면 Codex 대화형 모드를 고릅니다. 프로젝트 폴더에서
codex
를 열고 파일·명령 결과를 보며 다음 행동을 정하는 방식입니다.
같은 릴리스 점검을 스크립트나 CI에서 반복하려면
codex exec
를 고릅니다. 비대화형으로 실행하며 최종 출력을 파이프할 수 있고, JSON Lines 이벤트와 JSON Schema 기반 최종 응답도 지원합니다.
두 방식 모두 릴리스 승인 자체를 대신하지 않습니다. 테스트·빌드의 종료 코드, 실제 diff와 사람이 정한 승인 기준을 함께 확인합니다.
핵심 3줄 요약
원인이 불분명해 후속 질문과 범위 조정이 필요하면 대화형
codex
가 맞습니다.입력·권한·출력 형식을 미리 고정해 되풀이할 점검은
codex exec
가 맞습니다.AI 출력은 보조 검토로 남기고 최종 배포는 재현 가능한 검사와 사람 승인으로 결정합니다.
이 글에서 다룰 내용
릴리스 후보에서 테스트 실패가 났을 때 대화형 모드와
codex exec
중 무엇을 먼저 쓸지 비교합니다. 두 모드의 한 문장 정의, 공식 실행 경계, 한 작업에 적용하는 순서, 복사 프롬프트, 자동화 권한과 출력 검수 기준까지 다룹니다.
어떤 문제를 해결하는 기능인가
후속 질문으로 원인을 좁혀야 하면 대화형 codex, 같은 점검을 CI에서 반복하려면 codex exec를 먼저 고릅니다.
릴리스 점검에는 원인 조사와 반복 검사가 함께 들어갑니다. 원인도 모른 채 자동화부터 만들면 프롬프트와 권한이 자주 바뀝니다. 이미 정해진 검사를 매번 대화형 화면에서 되풀이하는 것도 결과를 파이프라인에 연결하기 어렵게 만듭니다.
Codex 대화형 모드는 로컬 저장소에서 파일을 살펴보고 수정하며 설치된 도구를 실행하는 터미널 작업 방식입니다.
codex
로 시작한 뒤 모델·추론 수준·권한을 고릅니다. 진행 중인 결과를 보면서 후속 지시를 줄 수 있습니다.
codex exec
는 대화형 TUI를 열지 않고 스크립트와 CI에서 Codex를 실행하는 비대화형 모드입니다. 진행 상황은 stderr로 보내고 마지막 에이전트 메시지는 stdout에 출력하므로 다른 명령으로 넘기거나 파일에 저장할 수 있습니다.
선택 기준은 단순합니다. 사람과 함께 질문을 바꿔 가며 원인을 찾으면 대화형 모드, 이미 합의한 점검을 같은 형태로 반복하면
codex exec
입니다.
대화형 모드를 고를 때
1. 먼저 실패 상태를 재현합니다
릴리스 후보 브랜치에서
codex
를 열기 전에 현재 폴더, 브랜치, 변경 파일과 실패한 명령을 확인합니다. Codex에는 실패 로그와 실제 저장소 파일만 근거로 원인을 분류하라고 요청합니다.
pwd
git status
git diff --stat
codex
대화형 세션에서는 첫 가설을 바로 수정으로 연결하지 않습니다. 관련 설정과 테스트 파일을 읽은 뒤 재현 명령과 예상 영향 범위를 먼저 제시하게 합니다.
2. 후속 질문으로 조사 범위를 좁힙니다
오류가 코드, 의존성, 환경 설정 가운데 어디에서 시작됐는지 확인합니다. Codex가 짚은 파일과 명령을 사람이 읽고 다음 조사 범위를 승인합니다. 요구사항이 바뀌거나 확인할 파일이 늘어날 때는 이 과정을 반복합니다.
수정안이 나오면 실제 diff와 관련 테스트를 확인합니다. 대화가 자연스럽게 이어졌다는 이유만으로 이전 테스트 결과나 실행 중인 프로세스가 여전히 유효하다고 가정하지 않습니다.
codex exec를 고를 때
3. 반복할 입력과 완료 기준을 먼저 고정합니다
codex exec
는 CI, 사전 병합 검사, 예약 작업처럼 같은 절차를 되풀이할 때 적합합니다. 프롬프트에는 비교할 기준 브랜치, 읽을 수 있는 입력, 실행 가능한 명령, 출력 필드와 실패 시 처리 방식을 적습니다.
가장 단순한 실행 형태는 아래와 같습니다.
codex exec "현재 변경을 읽고 릴리스 위험을 근거 파일과 함께 요약하라"
공식 문서에 따르면 기본 sandbox는 읽기 전용입니다. 코드 수정을 허용해야 할 때만
--sandbox workspace-write
를 사용합니다.
danger-full-access
는 격리된 CI 실행기나 컨테이너처럼 통제된 환경으로 제한합니다.
4. 사람이 읽을 출력과 기계가 읽을 출력을 나눕니다
최종 설명만 필요하면 stdout을 파일이나 다음 명령으로 넘길 수 있습니다. 실행 이벤트까지 수집하려면
--json
을 사용합니다. 이때 stdout은 JSON Lines 스트림이 되며 시작·완료·실패, 명령 실행, 파일 변경 같은 이벤트를 기록합니다.
codex exec --json "저장소 구조와 릴리스 위험을 요약하라" | jq
후속 단계에서 고정 필드를 받아야 한다면
--output-schema
로 JSON Schema에 맞춘 최종 응답을 요청할 수 있습니다. 다만 출력 구조가 맞는다고 내용까지 정확한 것은 아닙니다. 파일 근거와 실제 검사 결과는 따로 대조합니다.
한 릴리스 점검에서 무엇을 고를까
5. 첫 실행은 대화형으로 점검 기준을 만듭니다
새로운 저장소나 처음 보는 실패라면 대화형 모드에서 재현 명령, 확인할 위험, 허용할 파일과 최종 출력 형식을 정합니다. 이 과정에서 사람이 실제로 도움이 된 질문과 불필요한 질문을 구분합니다.
자동화로 옮길 것은 반복 가능한 항목뿐입니다. 기준 브랜치와의 diff를 읽고 위험 항목, 근거 파일, 재현 명령, 검토 상태를 내는 작업은 형식을 고정하기 쉽습니다. 원인에 따라 조사 방향이 달라지는 일은 대화형으로 남겨 둡니다.
6. 반복 실행은 codex exec로 옮기고 관찰부터 시작합니다
확정한 프롬프트를 버전 관리하고 읽기 전용 sandbox에서 먼저 실행합니다. 초기에는 Codex의 자연어 판단으로 파이프라인을 차단하지 않습니다. 실제 테스트·빌드 결과와 나란히 기록해 사람이 검토합니다.
출력의 근거가 충분하고 운영 기준이 합의된 뒤에도 배포 판정은 결정적 검사에 둡니다.
codex exec
는 누락 가능성을 찾고 검토 메모를 만드는 보조 단계로 사용합니다.
7. 실패하면 대화형 모드로 돌아갑니다
비대화형 실행이 실패하면 JSONL의
turn.failed
나
error
, stderr와 종료 상태를 확인합니다. 입력 누락, 필수 MCP 서버 초기화 실패, 권한 부족, 실제 코드 문제를 구분한 뒤 대화형 세션에서 원인을 조사합니다.
자동화 설정을 무작정 넓히지 않습니다. 필요한 파일과 명령을 확인한 뒤 sandbox와 네트워크 범위를 조정합니다. 변경 이유는 검토 기록에 남깁니다.
그대로 복사해 쓸 프롬프트
허용 입력: 현재 Git 저장소의 기준 브랜치와 변경 diff, 저장소 안의 코드·설정·테스트, 사용자가 제공한 실패 로그, 승인된 읽기 및 테스트 명령 결과.
제외 입력: 저장소 밖의 개인정보, 비밀번호와 인증 토큰, 승인하지 않은 네트워크 자료, 확인하지 않은 배포 환경, 제공되지 않은 제품 요구사항.
출력 형식: 위험 항목 | 근거 파일과 위치 | 재현 또는 확인 명령 | 영향 | 확실성 | 권장 다음 행동 순서의 표를 작성한다. 확인한 입력, 실행한 명령, 실패한 명령을 표 아래에 분리한다.
완료 기준: 모든 위험 항목에 실제 파일 또는 명령 결과 근거가 있다. 테스트·빌드 상태와 Codex의 해석을 구분하고, 확인하지 못한 항목은 미확인으로 표시한다.
추정 금지: 실행하지 않은 테스트, 읽지 않은 파일, 확인하지 않은 배포 상태, 존재하지 않는 요구사항을 만들지 않는다. 근거가 없으면 모른다고 쓴다.
승인 지점: 파일 수정, sandbox 확대, 네트워크 접근, 패키지 설치, 커밋·푸시, 파이프라인 차단과 최종 배포는 사람이 근거를 검토하고 승인한 뒤 진행한다.
대화형 모드에서는 이 프롬프트로 조사한 뒤 후속 질문을 이어갑니다.
codex exec
에서는 기준 브랜치와 허용 명령을 실행 환경에 맞게 고정하고 출력 스키마를 별도로 관리합니다.
실전 활용 팁
모드를 고르기 전에 결과를 누가 소비하는지부터 적으세요. 개발자가 화면을 보며 다음 질문을 고른다면 대화형 출력이 맞습니다. CI가 결과를 파싱한다면 JSONL 이벤트와 최종 구조화 응답의 역할을 나눠야 합니다.
세션 기록이 필요 없는 일회성 자동 점검이라면 공식 문서의
--ephemeral
옵션도 살펴볼 만합니다. 2단계 비대화형 흐름을 이어야 할 때는
codex exec resume
을 별도 절차로 설계합니다. 대화형
codex resume
과는 섞지 않습니다.
주의할 점
-
codex exec는 기본 읽기 전용 sandbox에서 시작합니다. 쓰기가 꼭 필요한 작업만 권한을 늘립니다. -
danger-full-access를 일반 개발 PC나 통제되지 않은 실행 환경의 기본값으로 두지 않습니다. -
--json은 JSONL 이벤트를 제공합니다. 최종 응답의 필드 형태가 필요하면--output-schema를 따로 사용합니다. - 필수로 설정한 MCP 서버가 초기화되지 않으면
codex exec는 계속 진행하지 않고 오류로 종료할 수 있습니다. -
codex exec는 기본적으로 Git 저장소 안에서 실행해야 합니다. 안전을 확인하지 않은 채 저장소 검사를 우회하지 않습니다. - 모델의 자연어 결론만으로 배포를 승인하지 않습니다. 테스트·빌드·정적 검사와 실제 diff를 사람이 확인합니다.
- CLI 버전에 따라 옵션이 달라질 수 있으므로 현재 환경의
codex --help와codex exec --help를 확인합니다.
자주 묻는 질문
대화형 모드와 codex exec는 다른 모델을 쓰나요?
이 글의 선택 기준은 모델 순위가 아니라 실행 방식입니다. 실제 모델과 추론 수준은 현재 CLI 설정과 조직 정책을 확인하세요. 같은 모델을 쓰더라도 후속 대화를 주고받는 흐름과 미리 정한 절차를 실행하는 흐름은 다릅니다.
codex exec 결과가 좋으면 바로 릴리스를 승인해도 되나요?
아니요. Codex 결과는 파일 근거가 있는 보조 검토로 사용합니다. 테스트·빌드의 종료 상태, 실제 diff와 조직의 승인 기준을 확인한 뒤 사람이 결정합니다.
JSONL과 JSON Schema는 같은 기능인가요?
아닙니다.
--json
은 실행 중 발생한 이벤트를 JSON Lines로 출력합니다.
--output-schema
는 최종 응답을 지정한 JSON Schema에 맞추도록 요청합니다. 운영 목적에 맞게 둘을 구분하세요.
실패한 codex exec 작업을 이어갈 수 있나요?
공식 문서는
codex exec resume --last
또는 세션 ID를 사용해 비대화형 세션을 이어가는 방법을 안내합니다. 먼저 실패 원인과 현재 저장소 상태를 확인하고, 권한을 자동으로 넓히지 않은 채 다음 단계를 승인하세요.
출처
마무리
릴리스 점검에서 Codex 대화형 모드와
codex exec
를 한 줄로 순위 매길 필요는 없습니다. 원인 조사는 후속 질문이 가능한 대화형 모드에서 합니다. 합의된 검토 절차만 비대화형 실행으로 옮깁니다.
처음에는 대화형으로 기준을 다듬습니다. 반복할 입력·권한·출력을 고정한 뒤
codex exec
를 관찰 모드로 붙입니다. 마지막 배포 결정은 재현 가능한 검사와 실제 diff, 사람 승인으로 마무리합니다.
