Codex App Server 프로토콜과 승인 처리
자체 편집기나 내부 클라이언트에서 Codex의 대화·승인·작업 상태를 제어하려면 App Server 프로토콜을 검토할 수 있습니다. 단순 자동화 SDK보다 클라이언트가 책임져야 할 상태가 많습니다. 연결됐다는 사실만으로 인증과 실행 권한이 안전해지는 것은 아닙니다.
공식 문서를 참고한 비공식 한국어 가이드입니다. 서버 시작·네트워크 공개·프로토콜 실행은 미검증입니다. 공식 MCP 제거 안내는 App Server의 실험적 상태와 production workload 미지원도 명시하므로 운영 서비스의 안정적 대체 API로 단정하지 않습니다.
기본 통신 순서
codex app-server의 기본 transport는 stdio의 JSONL입니다. JSON-RPC 2.0 방식이지만 wire에서 "jsonrpc":"2.0" 필드를 생략하는 차이가 있습니다. 일반 JSON-RPC 라이브러리를 아무 설정 없이 꽂아 넣기 전에 실제 메시지 형식을 확인합니다.
클라이언트 initialize 요청
→ 초기화 응답
→ 클라이언트 initialized 알림
→ thread/start 또는 thread/resume
→ turn/start
→ 진행 notification과 서버 request 처리
→ 완료/실패 상태 확인
각 요청의 ID와 응답을 연결하고, 일부 delta만 도착한 상태와 turn 완료를 구분합니다. 연결마다 초기화를 수행해야 하며 재연결이 이전 실행의 자동 재개를 보장하지 않습니다. thread ID와 작업 디렉터리·계정의 관계도 확인합니다.
승인은 서버가 보내는 요청
서버는 진행 알림뿐 아니라 승인이 필요한 request도 보냅니다. 클라이언트가 이를 화면에 표시하고 사용자의 결정을 해당 request에 응답해야 합니다. 알림 수신만 구현하면 승인 대기에서 멈추거나 잘못된 기본 처리로 이어질 수 있습니다.
구현 시험은 합성 요청으로 허용·거부·사용자 취소·연결 종료를 나눠 진행합니다. 이전에 허용한 요청 ID를 다른 실행에 재사용하지 않습니다. 확인할 수 없는 승인 요청을 무조건 허용하는 fallback은 두지 않습니다.
명령 실행 경계
공식 프로토콜에서 command/exec는 server sandbox 안에서 실행하지만 thread/shellCommand와 실험적 process/*는 밖에서 실행되는 차이가 있습니다. 모두 같은 thread 화면에서 발생한다고 sandbox가 자동 상속되는 것은 아닙니다.
또한 thread/rollback은 제거됐고 thread/revert는 대화 이력만 바꾸며 파일을 복구하지 않습니다. 클라이언트에 ‘되돌리기’ 버튼을 만들 때 대화 조작을 Git/파일 rollback으로 표시하면 사용자가 수정이 사라졌다고 오인할 수 있습니다.
원격 공개와 인증
WebSocket은 experimental/unsupported 상태를 확인해야 합니다. non-loopback listener가 기본으로 무인증일 수 있으므로 서버를 외부 IP에 bind하는 예시를 이 글에서는 제공하지 않습니다. 필요한 경우 별도의 transport 인증·TLS·접근 제한을 설계해야 합니다.
upstream 모델 인증과 클라이언트→서버 인증은 별개입니다. 로컬 로그인 정보를 가졌다고 public endpoint의 사용자를 식별할 수 없습니다. app-server 인증을 commercial/hosted service에 쓸 수 있다고 가정하지 말고 공식 Sign in with ChatGPT 경로와 허용 조건을 따로 확인합니다.
MCP와 혼동하지 않기
제거된 codex mcp-server의 drop-in replacement가 아닙니다. MCP client에 동일한 도구 이름으로 연결하는 이전 예제를 그대로 재사용하지 마세요. 외부 MCP를 Codex가 사용하는 기능은 MCP 클라이언트에서 별도로 다룹니다.
도입 전에는 정확한 CLI 버전에 맞는 schema와 지원 상태, 인증 요구, 실패 시 자원 정리를 확인합니다. 이 글은 프로토콜 개요이며 전체 API reference를 대체하지 않습니다.
공식 한국어 도움말: ChatGPT 플랜과 Codex에서 계정별 이용 안내를 확인할 수 있습니다. 이 글은 해당 도움말의 공식 번역이 아니며 계정 조건과 요금은 공식 안내를 우선합니다.