Codex CLI 오류 해결: 400·401·codex_apps 등 7가지

게시 읽는 시간 약 9분 문제 해결

읽기 전용 샌드박스(-s read-only)에서 Codex CLI에게 파일을 하나 만들라고 했습니다. 에이전트는 쓰기를 시도했다가 거부됐다고 보고하고 끝났는데, 종료 코드는 0이었어요. 파일은 하나도 안 생겼는데 말이죠.

스크립트에서 Codex를 돌린다면 이런 게 제일 무섭습니다. 이 오류를 포함해 Codex CLI에서 만날 만한 오류를 직접 일으켜 보고, 메시지 원문과 종료 코드를 같이 적어 뒀어요. 오류가 길게 찍혀도 마지막 ERROR: 줄의 첫머리만 보면 어디를 고칠지 대개 나옵니다.

2026년 9월 29일 Windows 11 · Windows PowerShell 5.1 테스트 환경에서 Codex CLI 0.158.0으로 7가지 중 5가지를 직접 일으켜 확인했습니다. 나머지 두 가지(codex_apps 시작 실패, 로그인 상태에서 나는 401)는 GitHub 공개 이슈를 인용했습니다. 설치 단계에서 막혔다면 Codex CLI 설치와 설치 확인 방법부터 보세요.

확인한 버전·환경

  • Codex CLI 0.162.1 · Windows 11 · Windows PowerShell 5.1 · 확인일 2026-10-13

마지막 ERROR 줄부터 보세요

표준 오류의 마지막 ERROR: 줄 앞부분에 보이는 문구로 막힌 곳이 갈립니다. 400이면 요청 내용(모델 이름), 401이면 인증, MCP client for면 MCP 서버, error:로 시작하면 명령줄 문제예요.

메시지에 보이는 것 막힌 곳 종료 코드 바로 할 일
status 400, model is not supported 모델 이름 1 모델 이름 고치기
401 Unauthorized: Missing bearer 로그인 정보 없음 1 codex login
401 … Incorrect API key provided: sk-svcac 서버가 거부 — 이슈 확인
MCP client for codex_apps failed to start 앱(커넥터) 연동 — codex update
error: unexpected argument '…' found 명령줄 인자 2 따옴표로 감싸기
patch rejected: … read-only sandbox 샌드박스 0 -s workspace-write
Reading additional input from stdin... 뒤 멈춤 표준 입력 — 입력 닫기

종료 코드는 직접 확인한 값이고, —는 확인한 값이 없는 칸입니다. 10월 13일 0.162.1에서 모델 이름(400), 따옴표 누락, 읽기 전용 쓰기 세 가지를 다시 일으켜도 같은 값이었어요.

무엇이 문제인지 감이 안 오면 codex login status와 codex doctor부터 실행해 보세요. 로그인과 설정 문제는 이 둘에서 바로 드러납니다. codex doctor 출력 읽는 법은 Codex CLI 설치 확인 절에 있어요.

400과 401: 모델 이름과 로그인 정보

The '…' model is not supported when using Codex with a ChatGPT account.

ChatGPT 계정으로 쓸 수 없는 모델 이름을 주면 경고 한 줄 뒤에 400 오류가 찍히고 종료 코드 1로 끝납니다.

codex exec -m no-such-model "Reply with exactly: ok"
warning: Model metadata for `no-such-model` not found. Defaulting to fallback metadata; this can degrade performance and cause issues.
ERROR: {"type":"error","status":400,"error":{"type":"invalid_request_error","message":"The 'no-such-model' model is not supported when using Codex with a ChatGPT account."}}

-m이나 config.toml의 model에 지금 계정이 쓸 수 없는 이름이 들어 있다는 뜻이에요. 오래된 글의 모델 이름을 옮겨 적었을 때 자주 생깁니다. 쓸 수 있는 모델 이름은 이렇게 확인하고, 그중 하나로 고치면 됩니다.

(codex debug models | ConvertFrom-Json).models.slug

테스트 환경에서는 gpt-6-sol, gpt-5.5 등 9개가 나왔고, 10월 13일 0.162.1에서는 gpt-6.1-sol이 맨 앞에 붙어 10개였습니다. 설정 파일에 적힌 이름을 고칠 때는 Codex CLI config.toml 설정과 우선순위에서 어느 파일이 읽히는지 함께 확인하세요.

unexpected status 401 Unauthorized: Missing bearer or basic authentication in header

이건 바로 끝나지 않고 재연결을 반복합니다. WebSocket으로 다섯 번, HTTPS로 다섯 번 다시 시도한 뒤에야 종료 코드 1로 끝났어요.

ERROR: Reconnecting... 5/5
ERROR: unexpected status 401 Unauthorized: Missing bearer or basic authentication in header, url: https://api.openai.com/v1/responses, cf-ray: <id>, request id: <id>

요청에 인증 정보가 아예 실리지 않았다는 뜻입니다. 로그인한 적이 없거나, CODEX_HOME 환경 변수가 다른 폴더를 가리켜 Codex가 로그인 정보를 엉뚱한 곳에서 찾고 있는 경우예요. 로그인 상태부터 확인하세요.

codex login status
Logged in using ChatGPT

이 줄이 안 나오면 codex login으로 다시 로그인합니다. 나오는데도 오류가 나면 $env:CODEX_HOME(macOS·Linux는 echo $CODEX_HOME)이 설정돼 있는지 확인하고, 필요 없으면 지우면 됩니다.

401 Unauthorized: Incorrect API key provided: sk-svcac…

로그인 정보는 있는데 서버가 거부한 경우입니다. 2026년 9월 25일 전후로 GitHub에 여러 건이 올라왔어요.

  • zqzhang77-bit(2026-09-25, #48237)은 ChatGPT 쪽 Codex 응답 주소(chatgpt.com/backend-api/codex/responses)에서 unexpected status 401 Unauthorized: Incorrect API key provided: sk-svcac…를 받았다고 보고했습니다. 같은 날 비슷한 이슈 여러 건이 중복 후보로 연결됐습니다.
  • mindsupport(2026-09-25, #48293, macOS)는 codex doctor가 저장된 API 키가 없다고 하는데도 같은 문구로 거부됐고, 새 CODEX_HOME으로 다시 로그인해도 같았다고 적었습니다(0.153.4~0.157.0).
  • #48237에는 Rabai94가 다음 날(2026-09-26) Windows에서 다시 되기 시작했다는 댓글을, HineshMandalia가 2026-09-28에 Raspberry Pi OS의 0.158.0에서도 겪었다는 댓글을 남겼습니다.

앞의 Missing bearer라면 로그아웃했다 다시 로그인하는 것으로 풀립니다. 하지만 이 문구는 새 폴더로 다시 로그인해도 같았다는 보고가 있고, 원인은 공식적으로 확인되지 않았어요.

그래서 codex login status가 로그인 상태라고 하는데 401이 나면, 메시지가 Missing bearer인지 Incorrect API key provided인지부터 보세요. 뒤의 것이라면 로컬 설정을 뒤지기 전에 위 이슈의 최신 댓글을 보는 편이 빠릅니다.

codex_apps가 시작하지 못할 때

MCP client for 'codex_apps' failed to start

실제 문구에서는 MCP client for 뒤의 codex_apps가 백틱으로 감싸여 나옵니다. 이것도 공개 이슈에 올라온 사례예요.

  • kswnia(2026-06-08, #27002)는 Windows(WSL·VS Code)에서 Codex CLI 0.136.0을 쓰다 이 오류를 겪었고, 다음 날 0.138에서 해결됐다고 남겼습니다.
  • fxkanton(2026-09-26, #48504)은 Windows의 Codex 데스크톱 앱(CLI 0.158.0-alpha)에서 codex_apps가 초기화 중 error decoding response body로 실패해 설치한 커넥터의 도구가 하나도 보이지 않았다고 보고했습니다. 다시 설치하거나 네트워크를 바꿔도 같았다고 적었고, 이슈는 열려 있습니다.

codex_apps는 ChatGPT에 연결해 둔 앱(커넥터)의 도구를 Codex에 보여 주는 내장 MCP 서버입니다. 설정의 features.apps가 이 기능이고 기본으로 켜져 있어요. 테스트 환경에서도 켜져 있었습니다.

codex features list | Select-String "^apps "
apps                                     stable             true

같은 오류를 만나면 먼저 codex update로 최신 버전으로 올리세요. 그래도 나면 앱 연동이 원인인지 가르기 위해 한 번만 끄고 실행해 봅니다.

codex exec --disable apps "Reply with exactly: ok"

테스트 환경에서는 ok를 답하고 종료 코드 0으로 끝났습니다. 이렇게 하면 커넥터 도구는 못 쓰지만 코딩 작업은 돼요.

계속 끄려면 codex features disable apps를 실행하면 config.toml에 기록됩니다. 커넥터가 필요하다면, 위 이슈처럼 버전에 따라 해결 여부가 갈리니 업데이트 뒤 다시 켜 보세요.

따옴표, 샌드박스, 표준 입력

이 셋은 실행 방법만 고치면 풀립니다.

error: unexpected argument 'with' found

프롬프트를 따옴표 없이 적으면 종료 코드 2로 바로 끝납니다.

codex exec Reply with exactly ok
error: unexpected argument 'with' found

Usage: codex exec [OPTIONS] [PROMPT]
       codex exec [OPTIONS] <COMMAND> [ARGS]

For more information, try '--help'.

codex exec는 프롬프트를 인자 하나로 받기 때문에, 공백 뒤의 두 번째 단어부터는 알 수 없는 인자가 됩니다. 셸 스크립트에서 변수로 프롬프트를 넘길 때 따옴표가 빠지거나, cmd·PowerShell·Git Bash를 거치며 따옴표가 사라질 때도 같은 오류가 나요.

프롬프트 전체를 큰따옴표로 감싸면 됩니다. 여러 셸을 거쳐 넘겨야 한다면 명령을 PowerShell 스크립트 파일(.ps1)에 적어 두고 그 파일을 실행해 보세요. 그렇게 하니 따옴표가 사라지지 않았습니다.

patch rejected: writing is blocked by read-only sandbox; rejected by user approval settings

도입에서 말한 그 오류입니다. 읽기 전용 샌드박스(-s read-only)에서 파일을 만들라고 하면, 에이전트가 쓰기를 시도했다가 거부됐다고 보고하고 끝나요. 종료 코드는 0입니다.

patch rejected: writing is blocked by read-only sandbox; rejected by user approval settings

읽기 전용 샌드박스에서는 파일 쓰기가 막히고, codex exec는 사용자에게 승인을 물을 수 없어 거부로 처리합니다.

함정: 파일을 하나도 못 썼는데 종료 코드는 0입니다. 스크립트가 종료 코드만 보면 성공으로 넘어갑니다.

에이전트가 거부를 받고 스스로 보고한 뒤 끝나면 이렇게 0이 나옵니다. 스크립트에서는 종료 코드와 함께 --json 출력의 마지막 메시지를 확인하세요.

작업 폴더에 써야 하는 작업이라면 -s workspace-write로 실행하면 됩니다. 모드별로 막히는 곳은 Codex CLI 샌드박스 모드와 승인 정책에 정리했어요.

Reading additional input from stdin... 뒤에 멈춤

다른 프로그램이 띄운 스크립트 안에서 codex exec가 이 문구를 찍고 끝나지 않는 경우입니다.

codex exec는 표준 입력이 파이프로 연결돼 있으면 그 내용을 지시 뒤에 덧붙이는데, 입력이 닫히지 않으면 계속 기다립니다. 문구 자체는 오류가 아니에요. 입력을 닫은 경우에도 이 문구는 매번 먼저 찍혔거든요.

입력을 닫아 주면 됩니다. cmd에서는 명령 끝에 < NUL을 붙이자 바로 진행했습니다. 자세한 상황은 Windows에서 AI CLI 한글이 깨질 때의 실전 후기에 있습니다.

MCP 서버가 안 떠도 exec는 조용했다

해 보니 예상과 달랐던 게 하나 더 있습니다. MCP 서버 명령에 없는 프로그램 이름을 적어 두고 codex exec를 실행했는데, 오류나 경고 없이 답(ok)을 내고 끝나더라고요. --json 출력에도 MCP 관련 이벤트가 없었습니다.

codex exec -c mcp_servers.demo.command="no-such-command-xyz" "Reply with exactly: ok"

Codex CLI 0.158.0이었고, 같은 설정에서 codex mcp list는 이 서버를 enabled로만 보여 줬어요.

exec 출력만으로는 서버를 아예 띄우지 않은 건지, 띄우다 실패했는데 알리지 않은 건지 가를 수 없었어요.

10월 13일 0.162.1에서 같은 명령을 다시 돌려도 exec는 ok를 내고 종료 코드 0으로 끝났습니다. 그런데 같은 설정으로 대화형 codex를 띄우니 하단에 ⚠ 3 warnings · f2 to view가 떴고, F2로 연 경고 목록에 program not found로 시작에 실패했다는 줄이 그대로 있었어요.

Codex CLI 0.162.1 대화형 화면에서 F2로 연 경고 목록의 두 번째 항목. 제목은 Warnings · 2 of 3 · MCP · demo이고, MCP client for demo failed to start: MCP startup failed: program not found와 MCP startup incomplete (failed: demo, 가려진 다른 서버 이름) 줄이 있으며, 맨 아래에 k keep & next, esc dismiss & close, ctrl+o copy 안내가 있습니다.
exec가 조용히 넘어간 MCP 시작 실패가 대화형 화면에서는 경고로 남습니다. 다른 서버 이름은 가렸습니다.

대화형 화면의 /mcp 목록에서도 이 서버는 demo: failed (0 tools)로 나왔습니다. 확실한 건 codex mcp list의 enabled가 설정이 켜져 있다는 뜻이지 서버가 실행된다는 뜻은 아니었다는 점입니다. MCP 서버가 제대로 붙었는지는 exec가 조용하다는 것으로 판단하지 말고, 그 서버의 도구를 실제로 쓰는 요청을 한 번 보내 확인하세요.

마치며

오류 일곱 가지를 놓고 보면, 시끄럽게 실패하는 쪽은 오히려 다루기 쉬웠습니다. 400은 모델 이름, 401 Missing bearer는 로그인 정보, error:는 명령줄이라고 메시지가 알려 주니까요.

까다로운 건 읽기 전용 샌드박스나 MCP 서버처럼 조용히 넘어가는 쪽이었습니다. 종료 코드 0은 “에이전트가 끝났다”는 뜻이지 “일이 됐다”는 뜻이 아니더라고요.

지금 쓰는 터미널에서 codex login status와 codex doctor를 한 번 실행해 두시길 권합니다. 다음에 오류가 났을 때 비교할 기준이 생기거든요.

오류 없이 돌아가는데 한도가 빨리 줄어든다면 Codex 사용량·한도 확인 방법을 이어서 보세요. 다른 도구의 오류는 AI 코딩 CLI 오류 해결 길잡이에 모여 있습니다.

참고한 공식 자료

모두 2026년 9월 29일에 확인했습니다.

인용한 공개 사례

변경 이력

  • 2026-10-17 — 401 절 제목을 실제 출력 그대로(unexpected status 401 Unauthorized …) 고쳤습니다.
  • 2026-10-14 — 0.162.1에서 다시 일으킨 항목을 모델 이름·따옴표 누락·읽기 전용 쓰기 세 가지로 밝혔습니다.
  • 2026-10-13 — Codex CLI 0.162.1에서 없는 모델·따옴표 누락·읽기 전용 쓰기·없는 MCP 명령을 다시 일으켜 문구와 종료 코드가 그대로임을 확인하고, exec에서는 조용한 MCP 시작 실패가 대화형 화면의 F2 경고와 /mcp에 failed로 보이는 화면을 더했습니다.