This project exposes Ollama-like HTTP endpoints and routes requests to local codex.
It now supports model routing by request model name:
codex(or values containingcodex) -> calls Codex CLImodel: "codex"usesCODEX_MODEL(if set) or Codex CLI default profile model- explicit names such as
gpt-3.5-codexare passed tocodex exec --model
gemini(or values starting withgemini) -> calls Gemini provider selected at startupgooglemode (default): Gemini CLI (Google auth)apimode: direct Gemini API call (API key)
POST /api/chatPOST /api/generateGET /api/tagsGET /healthz
Default port is 11435 (customizable with BRIDGE_PORT).
By default, the bridge uses your Codex CLI default model/profile.
If needed, set CODEX_MODEL to force a specific model.
Optional detail controls:
CODEX_MODEL_VERBOSITY=low|medium|high(default:high)DETAIL_MODE=off|high(default:high)DETAIL_SYSTEM_INSTRUCTION="..."to customize internal guidance (default favors natural conversational style, without forced numbering)GEMINI_BIN=geminito set Gemini CLI binary pathGEMINI_MODEL=...to set default Gemini model when request model is justgeminiGEMINI_AUTH_MODE=google|apito override Gemini auth mode (googledefault)GEMINI_API_BASE_URL=...to override Gemini API base URL (default:https://generativelanguage.googleapis.com/v1beta)STARTUP_CHECK_TIMEOUT_SECONDS=15startup readiness check timeoutSTARTUP_CHECK_STRICT=1abort server start when any startup check fails
- Python 3.10+
codexCLI installed and logged ingeminiCLI installed and logged in (only needed when usinggeminimodel)- If Gemini CLI is configured to use Gemini API auth mode, set
GEMINI_API_KEY
python3 bridge_server.pyOr with custom port:
BRIDGE_PORT=18080 python3 bridge_server.pycurl -s http://localhost:11435/api/chat \
-H 'Content-Type: application/json' \
-d '{
"model": "codex",
"messages": [
{"role": "user", "content": "한 문장으로 인사해줘"}
],
"stream": false
}'curl -s http://localhost:11435/api/chat \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini",
"messages": [
{"role": "user", "content": "Say hello in one sentence."}
],
"stream": false
}'curl -s http://localhost:11435/api/generate \
-H 'Content-Type: application/json' \
-d '{
"model": "codex",
"prompt": "hello in one short sentence",
"stream": false
}'curl -s http://localhost:11435/api/tagsstream: trueis supported as Ollama-style NDJSON framing.- Current streaming is simulated from final response text produced by
codex exec. - Codex prompts are passed through stdin (
codex exec -) to avoid OS argv length limits. - On startup, the server probes both
codexandgeminiand prints[READY]/[FAIL ]with reason. - Full logs are written to
logs/bridge_server-YYYYMMDD-HHMMSS.logon each start. - Log timestamps use Korea Standard Time (
Asia/Seoul,+09:00). - On first launch, Gemini auth mode can be selected (
googledefault, orapi). - The selected mode is saved to
.bridge_settings.json. - If
apimode is selected and API key env is missing, the server prompts forGEMINI_API_KEYin terminal. - Entered API key is saved to
.bridge_secrets.jsonand reused on next starts. - In
apimode, Gemini requests are sent directly to Gemini API (no Gemini CLI process for requests). - In
apimode, TLS certificate verification is disabled for Gemini API requests. - Unsupported Ollama options are ignored by design.
Build on Windows (cmd.exe at repository root):
windows\build_windows_exe.batOutput:
dist\codex2ollama-bridge.exe
Run options:
- Double-click
dist\codex2ollama-bridge.exe(console window stays open while running). - Or use launcher script:
windows\start_bridge.batOptional environment variables in cmd before launch:
set BRIDGE_PORT=11435
set CODEX_MODEL=gpt-5
set CODEX_MODEL_VERBOSITY=highPrerequisites on Windows:
codexCLI must be installed and logged in.- Allow firewall prompt if Windows asks on first run.
FAQ:
- Q: Do Windows end users need to install PyInstaller?
- A: No. Only the person building the
.exeneeds PyInstaller.
- A: No. Only the person building the
- Q: Can I build
codex2ollama-bridge.exeon macOS?- A: Usually no. Build Windows
.exeon Windows (local PC, VM, or CI runner).
- A: Usually no. Build Windows
- Q: If I update
bridge_server.py, do I need to edit.batfiles?- A: Usually no. Rebuild the
.exe. Update.batonly if file names, exe name, or paths change.
- A: Usually no. Rebuild the
이 프로젝트는 Ollama 스타일의 HTTP 엔드포인트를 제공하고 요청을 로컬 codex로 전달합니다.
요청 model 값에 따라 CLI를 분기 호출합니다:
codex(또는codex를 포함하는 값) -> Codex CLI 호출model: "codex"는CODEX_MODEL(설정 시) 또는 Codex CLI 기본 프로파일 모델 사용gpt-3.5-codex같은 명시 모델명은codex exec --model로 전달
gemini(또는gemini로 시작하는 값) -> 시작 시 선택한 Gemini 공급자 호출google모드(기본): Gemini CLI (Google 인증)api모드: Gemini API 직접 호출 (API 키)
POST /api/chatPOST /api/generateGET /api/tagsGET /healthz
기본 포트는 11435이며 BRIDGE_PORT로 변경할 수 있습니다.
기본적으로 브리지는 Codex CLI의 기본 모델/프로필을 사용합니다.
필요하면 CODEX_MODEL을 설정해 특정 모델을 강제로 사용하게 할 수 있습니다.
선택 가능한 상세 제어 옵션:
CODEX_MODEL_VERBOSITY=low|medium|high(기본값:high)DETAIL_MODE=off|high(기본값:high)DETAIL_SYSTEM_INSTRUCTION="..."내부 지침 문구를 사용자화 (기본값은 번호 강제를 피한 자연스러운 대화 스타일)GEMINI_BIN=geminiGemini CLI 실행 파일 경로 설정GEMINI_MODEL=...요청 모델이gemini일 때 기본 Gemini 모델 설정GEMINI_AUTH_MODE=google|apiGemini 인증 모드 강제 지정 (google기본)GEMINI_API_BASE_URL=...Gemini API 기본 URL 지정 (기본값:https://generativelanguage.googleapis.com/v1beta)STARTUP_CHECK_TIMEOUT_SECONDS=15시작 시 준비상태 점검 타임아웃STARTUP_CHECK_STRICT=1시작 점검 하나라도 실패하면 서버 시작 중단
- Python 3.10+
codexCLI 설치 및 로그인 완료gemini모델 사용 시geminiCLI 설치 및 로그인 완료- Gemini CLI 인증 모드가 Gemini API 방식이면
GEMINI_API_KEY환경변수 설정 필요
python3 bridge_server.py또는 사용자 지정 포트로 실행:
BRIDGE_PORT=18080 python3 bridge_server.pycurl -s http://localhost:11435/api/chat \
-H 'Content-Type: application/json' \
-d '{
"model": "codex",
"messages": [
{"role": "user", "content": "한 문장으로 인사해줘"}
],
"stream": false
}'curl -s http://localhost:11435/api/chat \
-H 'Content-Type: application/json' \
-d '{
"model": "gemini",
"messages": [
{"role": "user", "content": "한 문장으로 인사해줘"}
],
"stream": false
}'curl -s http://localhost:11435/api/generate \
-H 'Content-Type: application/json' \
-d '{
"model": "codex",
"prompt": "hello in one short sentence",
"stream": false
}'curl -s http://localhost:11435/api/tagsstream: true는 Ollama 스타일 NDJSON 프레이밍으로 지원됩니다.- 현재 스트리밍은
codex exec최종 응답 텍스트를 기반으로 시뮬레이션됩니다. - Codex 프롬프트는 OS 인자 길이 제한을 피하기 위해 stdin(
codex exec -)으로 전달됩니다. - 서버 시작 시
codex/gemini호출 준비상태를 점검하고[READY]/[FAIL ]이유를 출력합니다. - 전체 로그는 매번 시작 시간 기준 새 파일
logs/bridge_server-YYYYMMDD-HHMMSS.log에 저장됩니다. - 로그 시간대는 한국시간(
Asia/Seoul,+09:00) 기준입니다. - 최초 실행 시 Gemini 인증 모드를 선택할 수 있습니다 (
google기본,api선택 가능). - 선택된 모드는
.bridge_settings.json에 저장됩니다. api모드 선택 시 API 키 환경변수가 없으면 서버 시작 중 터미널에서GEMINI_API_KEY입력을 요청합니다.- 입력된 API 키는
.bridge_secrets.json에 저장되어 다음 실행부터 재사용됩니다. api모드에서는 Gemini 요청을 Gemini API로 직접 보냅니다(요청 시 Gemini CLI 프로세스 미사용).api모드에서는 Gemini API 요청 시 TLS 인증서 검증을 비활성화합니다.- 지원하지 않는 Ollama 옵션은 설계상 무시됩니다.
Windows에서 빌드 (저장소 루트의 cmd.exe):
windows\build_windows_exe.bat출력 파일:
dist\codex2ollama-bridge.exe
실행 방법:
dist\codex2ollama-bridge.exe더블클릭 실행 (실행 중 콘솔 창 유지)- 또는 런처 스크립트 사용:
windows\start_bridge.bat실행 전 선택 환경변수(cmd):
set BRIDGE_PORT=11435
set CODEX_MODEL=gpt-5
set CODEX_MODEL_VERBOSITY=highWindows 사전 조건:
codexCLI 설치 및 로그인 완료- 첫 실행 시 Windows 방화벽 허용 팝업이 뜨면 허용
FAQ:
- Q: Windows 최종 사용자가 PyInstaller를 설치해야 하나요?
- A: 아니요.
.exe를 빌드하는 사람만 PyInstaller가 필요합니다.
- A: 아니요.
- Q: macOS에서 Windows용
codex2ollama-bridge.exe를 빌드할 수 있나요?- A: 보통 어렵습니다. Windows(실PC, VM, CI 러너)에서 빌드하세요.
- Q:
bridge_server.py를 수정하면.bat파일도 수정해야 하나요?- A: 대부분 아닙니다.
.exe만 다시 빌드하면 됩니다. 파일명/경로/실행파일명이 바뀔 때만.bat수정이 필요합니다.
- A: 대부분 아닙니다.