Codex Exec 사용
이 문서는 codex exec / codex exec review를 직접 호출하는 절차를 다룬다.
이 스킬은 다음 경로에서 참조된다:
- Claude Code 세션:
run-da,parallel-audit등의 fan-out 시 기본 경로 (codex exec subprocess) - headless 세션: CI,
codex execsubprocess 등에서의 codex exec 직접 실행 (claude -p자체의 사용법은 using-claude-p 스킬 참조) - Codex 세션: fan-out은 native subagent가 기본이므로, 이 스킬은 사용자의 명시적
codex exec요청에만 적용
작성 기준
- 확인 날짜: 2026-03-15
- 확인 버전: codex-cli 0.114.0
- 재검증:
codex --version && codex exec --help && codex exec review --help
CLI 버전이 바뀌면 플래그/동작이 달라질 수 있으므로, 실행 전 도움말로 확인한다.
범위
| 포함 | 제외 |
|------|------|
| codex exec 비대화형 실행 | Codex 세션의 기본 subagent fan-out (run-da, parallel-audit, plan-with-questions) |
| codex exec review 코드 리뷰 | 대화형 TUI 사용법 |
| codex exec resume 세션 재개 | Codex 설정 파일 전체 관리 |
| stdin/파일 기반 프롬프트 전달 | Claude 하네스 투영 → syncing-codex-harness |
| 결과 저장 및 자동화 출력 | |
의사결정 트리
codex exec 실행이 필요한가?
│
├─ 코드 리뷰인가?
│ ├─ YES → 커스텀 리뷰 지시가 필요한가?
│ │ ├─ YES ─────────────────────────────────────────────┐
│ │ │ ⚠️ review에서 PROMPT과 scope flag │
│ │ │ 동시 사용 불가 (Known Issue #7825) │
│ │ │ │
│ │ │ 방법 A: AGENTS.md에 리뷰 지시 배치 후 │
│ │ │ review --base/--uncommitted 실행 │
│ │ │ (영구 지시, review의 diff 스코핑 유지) │
│ │ │ │
│ │ │ 방법 B: codex exec에 diff + 지시를 │
│ │ │ 프롬프트로 직접 전달 (review 서브커맨드 미사용)│
│ │ │ (1회성 지시, 가장 유연) │
│ │ │ │
│ │ │ → references/patterns.md 패턴 3, 4 참조 │
│ │ └──────────────────────────────────────────────────┘
│ │
│ └─ NO → codex exec review + scope flag
│ → references/patterns.md 패턴 2 참조
│
├─ 세션 재개인가?
│ └─ YES → codex exec resume --last 또는 <session-id>
│ ⚠️ --ephemeral 세션은 resume 불가
│
└─ 일반 실행 → codex exec --full-auto [-o result.md]
→ references/patterns.md 패턴 1 참조
명령 alias
| 명령 | 설명 |
|------|------|
| codex e | codex exec의 단축 alias |
| codex review | top-level alias (⚠️ codex exec review와 다름 — 아래 gotcha §5 참조) |
| --yolo | --dangerously-bypass-approvals-and-sandbox의 숨은 alias |
호환성 매트릭스
exec 전용 플래그 (review 미지원)
| 플래그 | 설명 |
|--------|------|
| -i, --image <FILE> | 이미지 첨부 |
| -s, --sandbox <MODE> | 샌드박스 정책 (read-only, workspace-write, danger-full-access) |
| -C, --cd <DIR> | 작업 디렉토리 지정 |
| --add-dir <DIR> | 추가 쓰기 가능 디렉토리 |
| --output-schema <FILE> | JSON Schema 출력 형식 |
| --oss | 오픈소스 프로바이더 |
| --local-provider <PROVIDER> | 로컬 프로바이더 (lmstudio/ollama) |
| -p, --profile <PROFILE> | config.toml 프로필 |
| --color <COLOR> | 색상 설정 (always/never/auto) |
| --progress-cursor | 커서 기반 진행률 |
review 전용 플래그
| 플래그 | 설명 |
|--------|------|
| --uncommitted | 미커밋 변경 리뷰 |
| --base <BRANCH> | 베이스 브랜치 대비 리뷰 |
| --commit <SHA> | 특정 커밋 리뷰 |
| --title <TITLE> | 리뷰 요약 제목 (scope flag와 조합 가능, 상호 배타 규칙에 미참여. 단독 사용 시 --commit <SHA> 필요) |
exec · review 공통 플래그
| 플래그 | 설명 |
|--------|------|
| -c, --config <key=value> | config 오버라이드 |
| --enable <FEATURE> | 피처 활성화 |
| --disable <FEATURE> | 피처 비활성화 |
| -m, --model <MODEL> | 모델 선택 (생략 권장 — config.toml 기본값 사용) |
| --full-auto | 자동 실행 (-a on-request, --sandbox workspace-write) |
| --dangerously-bypass-approvals-and-sandbox | 샌드박스 우회 (--yolo 숨은 alias) |
| --skip-git-repo-check | Git 저장소 체크 건너뜀 |
| --ephemeral | 세션 파일 미저장 |
| --json | JSONL 이벤트 출력 |
| -o, --output-last-message <FILE> | 마지막 메시지 파일 저장 (review에서 upstream bug #12502로 빈 파일 생성) |
⚠️ review 상호 배타 규칙
다음 4개 인자는 모두 상호 배타적 — 한 번에 하나만 사용 가능:
| | PROMPT | --base | --uncommitted | --commit | |---|:---:|:---:|:---:|:---:| | PROMPT | — | ❌ | ❌ | ❌ | | --base | ❌ | — | ❌ | ❌ | | --uncommitted | ❌ | ❌ | — | ❌ | | --commit | ❌ | ❌ | ❌ | — |
위반 시 에러:
error: the argument '[PROMPT]' cannot be used with '--base <BRANCH>'
error: the argument '--base <BRANCH>' cannot be used with '--uncommitted'
근본 원인과 상세 분석: references/known-issues.md §1
입력 방법
| 방법 | 예시 |
|------|------|
| 인라인 문자열 | codex exec --full-auto "짧은 질의" |
| stdin 파이프 | cat prompt.md \| codex exec --full-auto -o result.md |
| stdin 마커 | codex exec review - --full-auto (stdin에서 읽음) |
| 파일 리다이렉트 | codex exec --full-auto < prompt.md -o result.md |
| here-doc | codex exec --full-auto <<'EOF' ... EOF |
표준 실행 절차
일반 exec
프롬프트를 파일로 작성하고, stdin 파이프로 전달하며, -o로 결과를 저장한다:
cat > /tmp/prompt.md <<'PROMPT'
이 변경의 배포 리스크를 3개 이내로 지적한다.
PROMPT
⚠️ run_in_background 환경: 여기서 Bash tool 호출을 종료하고, 아래를 별도 호출로 실행한다 (§11 하위 항목).
cat /tmp/prompt.md | codex exec --full-auto -o /tmp/result.md 2>&1
인라인 프롬프트도 가능하다 (짧은 질의에 한해):
codex exec --full-auto "git diff 기준으로 회귀 가능성 한 줄 요약"
코드 리뷰 — scope flag만 사용 (커스텀 지시 불필요)
codex exec review --base main --full-auto > /tmp/review.md 2>&1
codex exec review --uncommitted --full-auto > /tmp/review.md 2>&1
codex exec review --commit <sha> --full-auto > /tmp/review.md 2>&1
review 결과를 파일 저장하려면 stdout 리다이렉트(> file 2>&1)를 사용한다.
-o는 review --help에 표시되지만 upstream bug(#12502)로 빈 파일을 생성한다.
코드 리뷰 — 커스텀 지시 필요
PROMPT과 scope flag이 상호 배타이므로, 두 가지 대안 중 선택한다:
방법 A — AGENTS.md 활용 (영구 지시, review diff 스코핑 유지)
프로젝트 AGENTS.md 또는 ~/.codex/AGENTS.override.md에 리뷰 정책을 배치한 뒤,
scope flag으로 review를 실행하면 지시가 자동 적용된다.
(지시 파일 우선순위: references/patterns.md 패턴 3 참조)
방법 B — exec 우회 (1회성 지시, 최대 유연성)
codex exec (review 미사용)에 git diff 출력과 커스텀 지시를 프롬프트로 직접 전달한다.
-o로 결과 저장이 가능하고, 프롬프트 내용을 자유롭게 구성할 수 있다.
상세 명령과 예제: references/patterns.md 패턴 3, 4
세션 재개
codex exec resume --last # 마지막 세션 재개
codex exec resume <session-id> # 특정 세션 재개
codex exec resume --last --all # cwd 필터 해제하여 전체 세션 중 최신 재개
⚠️ --ephemeral 세션은 파일이 저장되지 않으므로 resume 불가. No saved session found 에러 발생.
Gotchas
--search는 exec에서 미동작:error: unexpected argument '--search' found. 대안:-c web_search=live--full-auto는--sandbox를 묵묵히 override:-s read-only명시해도workspace-write로 강제됨- CODEX_API_KEY는 exec 전용: interactive TUI와 VS Code extension에서는 무시됨. OPENAI_API_KEY는 auth 체인에 미참여 (TUI prefill 전용). 우선순위: CODEX_API_KEY > ephemeral tokens > auth.json (상세: known-issues.md 워크트리 참고)
- ephemeral 세션 resume 불가:
--ephemeral으로 실행한 세션은 파일 미저장되어No saved session found에러 발생 codex review(top-level) vscodex exec review: 전자는-m,--full-auto,--json,-o등 미지원. 비대화형 자동화에는 반드시codex exec review사용- Bash tool sandbox에서
&+$!미작동: Claude Code의 Bash tool에서 background process PID 캡처($!)가 리터럴 문자열로 반환됨. shell-level 병렬 대신 여러 병렬 Bash tool 호출 (예: codex exec 경로의run-da/parallel-audit) +cat file | codex exec ... -stdin pipe를 사용한다. 이 제약은 Codex 세션의 native subagent 경로에는 적용되지 않는다. 상세: known-issues.md §11 - stdin pipe로 stdin hang 방지: Claude Code Bash tool에서 병렬 호출 시 codex exec가 background로 자동 전환되면, stdin이 닫히지 않아
Reading additional input from stdin...에서 hang이 발생한다.cat file | codex exec ... -stdin pipe를 사용하면 pipe EOF가 stdin을 구조적으로 닫아 hang을 방지한다:cat "$DIR/prompt.md" | codex exec --full-auto --ephemeral -o "$DIR/result.md" - 2>"$DIR/stderr.log". 인라인 인자"$(cat file)"와< /dev/null은 사용하지 않는다. 상세: known-issues.md §14
모델 사용 원칙
- 기본 모델:
~/.codex/config.toml의model값을 따른다. - 리뷰 전용 모델:
review_model설정으로 분리 가능하다. - 실무 원칙:
-m을 생략하고 기본 모델을 사용한다.model is not supported오류 시-m을 제거하고 재시도한다.- 모델명을 매번 다르게 혼용하지 않는다.
운영 체크리스트
실행 전:
codex --version으로 기대 버전 확인pwd가 대상 저장소 루트인지 확인- 프롬프트 파일 경로와 결과 파일 경로를 분리
실행 후:
- 결과 파일 생성 여부 확인 (
-o또는 리다이렉트) - 빈 결과 시 stderr 로그부터 확인
- 다음 라운드 입력에 반영할 액션 항목만 추출
하지 말아야 할 패턴
| 금지 패턴 | 발생 에러 | 올바른 대안 |
|-----------|----------|------------|
| review에서 -o 결과 저장 의존 | 빈 파일 생성 (upstream bug #12502) | stdout 리다이렉트 > file 2>&1 |
| review에서 PROMPT + scope flag | '[PROMPT]' cannot be used with '--base' | 의사결정 트리의 방법 A 또는 B |
| exec 전용 플래그를 review에 전달 | unexpected argument | exec 전용/공통 매트릭스 확인 |
| -m o3 / -m o4-mini 등 비Codex 모델 지정 | "Model metadata not found" + "model is not supported" | -m 생략, config.toml 기본 모델 사용 |
| -m 플래그로 매번 다른 모델 지정 | 불일치/에러 위험 | config.toml 기본값 사용 원칙 |
| 실패 원인 미확인 후 반복 재시도 | 동일 에러 반복 | known-issues.md 진단 절차 |
| 긴 루프에서 결과 파일 저장 생략 | 결과 유실 | -o 또는 리다이렉트 필수 사용 |
참조
- 상황별 실행 패턴: references/patterns.md
- 제한사항/트러블슈팅: references/known-issues.md
문서와 CLI 동작이 다를 때는 CLAUDE.md의 "스킬 문서 불일치 시 행동 원칙"을 따른다.
codex exec --help / codex exec review --help 출력이 이 문서보다 항상 우선하는 진실 원천이다.