
Codex CLI를 맥에 깔고 나서 몇 시간을 날린 날이 있다. 설치는 끝났다고 나오는데 codex --version은 파일이 없다고 하고, codex login은 401 Unauthorized만 뱉고, 겨우 로그인이 되니 codex exec가 실행을 거부했다. 세 가지가 한꺼번에 겹쳐서 하나를 고치면 다음 벽이 나왔다.
이 블로그에 구글 검색으로 들어오는 검색어 상위에 "codex 401 unauthorized"가 있다. 그만큼 같은 자리에서 막히는 사람이 많다는 뜻이라, 겪은 순서 그대로 증상과 해결을 적는다. 순서가 중요하다. 로그인만 다시 해서는 안 풀리는 경우가 있기 때문이다.
증상 세 가지
- codex --version이 버전 대신
No such file or directory를 낸다. - codex login과 codex exec가 전부
401 Unauthorized로 끝난다. - 로그인 뒤에도 codex exec가
Not inside a trusted directory라며 거부한다.
첫째, brew cask가 껍데기만 남긴다
처음엔 설치가 덜 된 줄 알았다. 그런데 brew cask로 깐 codex는 심볼릭 링크만 멀쩡하고 링크가 가리키는 실행 파일이 없는 상태였다. 뼈대만 있고 속이 빈 셈이다. 이 상태에서는 무슨 명령을 쳐도 "파일이 없다"로 끝난다.
재설치로 링크와 실행 파일을 함께 복구해야 한다. 재설치 뒤에 codex --version이 버전을 찍으면 첫 번째 벽은 넘은 것이다. 여기서 버전이 안 나오면 아래 단계로 가 봐야 소용없다.
둘째, 401은 키가 아니라 토큰이다
버전은 나오는데 codex login이 매번 401 Unauthorized를 냈다. 처음엔 API 키가 잘못된 줄 알고 키를 다시 발급받았는데 그대로였다. 원인은 auth.json에 남아 있던 만료된 인증 토큰이었다. 재설치나 손으로 만진 설정 뒤에 토큰이 옛것으로 남으면 서버가 401로 거절한다.
codex login
codex login을 다시 돌리면 새 토큰을 받아 auth.json을 덮어쓴다. 401은 그 자리에서 사라졌다. 키를 새로 받기 전에 로그인부터 다시 하는 게 순서다. 다만 첫째 단계를 건너뛰면 로그인 명령 자체가 안 뜨니, 반드시 버전 확인이 먼저다.
셋째, git 저장소가 아니면 실행을 거부한다
로그인이 되고 나서 codex exec를 개인 폴더에서 돌렸더니 Not inside a trusted directory가 나왔다. 버그가 아니라 보안 장치다. Codex CLI는 기본적으로 git 커밋 기록이 있는 폴더에서만 실행된다. 저장소가 아닌 곳의 파일을 만지려면 검사를 끄는 옵션을 붙여야 한다.
codex exec --skip-git-repo-check "..."
이 옵션을 붙이니 의도한 대로 돌았다. git 저장소가 아닌 폴더에서 쓸 일이 많으면 이 플래그를 기본으로 붙인다.
최종 확인 순서
codex --version이 버전을 찍는가
brew reinstall --cask codex
codex --version
codex login이 성공으로 끝나는가codex exec --skip-git-repo-check가 실제로 실행되는가
세 줄이 차례로 통과하면 끝이다. 하나라도 막히면 그 앞 단계로 돌아간다.
덤, 설치했는데 "없다"고 나오는 다른 이유
같은 맥에서 나중에 또 한 번 "codex CLI not found"를 봤는데, 이번엔 cask가 아니라 크론이었다. 크론은 PATH가 비어 있어서 홈브루로 깐 것(/opt/homebrew/bin)을 못 찾는다. 터미널에서는 되는데 예약 작업에서만 안 되면 이 경우다. 크론 스크립트 안에 PATH를 직접 넣어서 해결했다.
또 하나, Claude Code의 샌드박스 안에서 Codex를 부르면 버전 확인조차 멈춘다. 이건 고칠 방법을 못 찾아서 그 경로의 작업은 로컬 모델로 돌렸다.
재설치 한 번으로 안 끝나는 이유
정리하면 CLI가 안 될 때 원인은 하나가 아니었다. 패키지 관리자의 링크, 디스크에 남은 옛 토큰, 도구의 기본 보안 정책이 각각 다른 오류를 냈고, 오류 문구를 하나씩 원인까지 되짚어야 다음 명령이 맞는다. 에러 코드를 외우는 것보다 "지금 어느 단계에서 막혔는가"를 먼저 보는 쪽이 시간을 아꼈다.
※ 맥미니에서 실제로 겪은 순서를 그대로 적었다. 명령은 그때 쓴 것 그대로다.

'Claude Code 활용' 카테고리의 다른 글
| Context7 MCP 사용법, Claude Code에 붙인 MCP 정리 (0) | 2026.09.22 |
|---|---|
| Claude Code 윈도우 사용법, 한글 깨짐·bat·환경변수 함정 (0) | 2026.09.21 |
| Claude Code 업무 자동화, 무너지는 건 코드가 아니라 코드 밖 (0) | 2026.09.18 |
| Claude Code 메모리 다른 PC로 옮기는 법 (46개 프로젝트) (0) | 2026.09.17 |