| name | codex-router-external-models |
| description | Route external AI models (Kimi, DeepSeek, Claude, Grok) through local proxy into Codex and Cursor |
| triggers | ["set up external models in Codex","install codex-router for external providers","add Kimi or DeepSeek to my Codex","configure external model routing","troubleshoot codex-router setup","enable Claude or Grok in Codex","manage external model providers","fix missing models in Codex catalog"] |
Codex Router External Models
Skill by ara.so — Codex Skills collection.
Overview
Codex Router is a local credential-isolating proxy that enables Anthropic Claude, Kimi, DeepSeek, Grok, and other external models inside Codex App/CLI and Cursor. It:
- Merges external models into the native Codex picker
- Isolates API keys and OAuth sessions per provider
- Preserves existing Codex GPT models, profiles, and ChatGPT login
- Runs as a background service on localhost
- Supports safe migration from older versions with rollback
Targets:
- Codex App/CLI: Responses API with native catalog merge (stable)
- Cursor: Manual OpenAI-compatible base URL (experimental)
Requirements:
- Node.js 22.19+ (24 LTS recommended)
uv or Python 3.10+ with venv
- Git (for managed checkout/rollback)
- Target app installed (Codex or Cursor)
Installation
Guided Installation (Recommended)
macOS/Linux:
curl -fsSL https://raw.githubusercontent.com/duolahypercho/codex-router/main/install.sh \
| sh -s -- --target codex --guided
Windows PowerShell:
$installer = Join-Path $env:TEMP "codex-router-install.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/duolahypercho/codex-router/main/install.ps1 -OutFile $installer
powershell.exe -NoProfile -ExecutionPolicy Bypass -File $installer -Target codex -Guided
The guided installer:
- Detects existing authentication (OAuth sessions, API keys)
- Prompts invisibly for new API keys (no echo)
- Installs background service
- Verifies all layers
- Never makes paid test requests unless
--smoke-test is explicitly added
Manual Clone
git clone https://github.com/duolahypercho/codex-router.git
cd codex-router
Key Commands
All commands use ./bin/model-router (or ./model-router.ps1 on Windows).
Provider Management
./bin/model-router codex providers
./bin/model-router codex providers enable deepseek
./bin/model-router codex providers enable kimi-oauth
./bin/model-router codex providers disable anthropic-api
./bin/model-router codex provider-key deepseek set
./bin/model-router codex provider-key anthropic-api set
./bin/model-router codex provider-key ollama-cloud set
./bin/model-router codex provider-key deepseek remove
Diagnostics
./bin/model-router codex doctor
./bin/refresh-catalog
./bin/model-router codex status
Model Curation (Catalog-Only Providers)
For providers without preselected models (Groq, OpenRouter, Together AI, etc.):
./bin/model-router codex provider-key groq set
./bin/curate-models groq
./bin/test-model 'groq/llama-3.3-70b-versatile' --live --yes
Control Commands
./bin/control auth-mode on
./bin/control auth-mode off
./bin/model-router codex restart
Configuration
Codex Integration
The installer adds these blocks to ~/.codex/config.toml:
openai_base_url = "http://127.0.0.1:4102/_codex-router/<capability-token>/v1"
model_catalog_json = "/absolute/path/.codex/codex-router/merged-models.json"
[model_providers.codex-router]
name = "Codex Router (external models)"
base_url = "http://127.0.0.1:4102/_codex-router/<capability-token>/v1"
wire_api = "responses"
Never edit these blocks manually. Use router commands to modify configuration.
Available Providers and Models
OAuth Providers (use existing CLI sessions):
'kimi-oauth/kimi-for-coding-highspeed'
'kimi-oauth/kimi-for-coding'
'kimi-oauth/k3'
'grok-oauth/grok-4.5'
API Key Providers:
'kimi-api/kimi-k3'
'deepseek/deepseek-v4-flash'
'deepseek/deepseek-v4-pro'
'grok-api/grok-4.5'
'anthropic-api/claude-opus-4.8'
'ollama-cloud/glm-5.2'
'ollama-cloud/kimi-k2.7-code'
'ollama-cloud/minimax-m3'
'ollama-cloud/deepseek-v4-pro'
'minimax-token-plan/minimax-m3'
'qwen-plan/qwen3.7-max'
'qwen-plan/qwen3.7-plus'
'zai-coding/glm-5.2'
'zai-coding/glm-5-turbo'
Catalog-Only Providers (curate models manually):
groq - Groq
openrouter - OpenRouter
together - Together AI
fireworks - Fireworks AI
cerebras - Cerebras
mistral - Mistral AI
nvidia-nim - NVIDIA NIM
siliconflow - SiliconFlow
huggingface - Hugging Face Router
gemini-api - Google Gemini API
Environment Variables
Override provider base URLs:
export QWEN_PLAN_BASE_URL="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
export GROQ_BASE_URL="https://custom-groq-endpoint.example.com/v1"
State directory override:
export CODEX_ROUTER_STATE_DIR="$HOME/.codex/codex-router"
Real Usage Examples
Setting Up DeepSeek
./bin/model-router codex providers enable deepseek
./bin/model-router codex provider-key deepseek set
./bin/model-router codex providers
./bin/refresh-catalog
Setting Up Kimi OAuth
npm install -g @moonshot-ai/kimi-code
kimi login
./bin/model-router codex providers enable kimi-oauth
./bin/model-router codex providers
./bin/refresh-catalog
Setting Up Grok with Search Tools
npm install -g @xai-official/grok
grok login --oauth
./bin/model-router codex providers enable grok-oauth
./bin/model-router codex doctor
Curating Groq Models
./bin/model-router codex provider-key groq set
./bin/curate-models groq
./bin/test-model 'groq/llama-3.3-70b-versatile' --live --yes
./bin/refresh-catalog
Managing Multiple Providers
./bin/model-router codex providers enable deepseek
./bin/model-router codex providers enable anthropic-api
./bin/model-router codex providers enable ollama-cloud
./bin/model-router codex provider-key deepseek set
./bin/model-router codex provider-key anthropic-api set
./bin/model-router codex provider-key ollama-cloud set
./bin/model-router codex providers
./bin/model-router codex doctor
Separate Cursor Configuration
Cursor uses independent state:
./bin/model-router cursor providers enable deepseek
./bin/model-router cursor provider-key deepseek set
./bin/model-router cursor providers
./bin/model-router cursor doctor
Common Patterns
Post-Installation Checklist
./bin/model-router codex doctor
./bin/model-router codex providers
./bin/refresh-catalog
Rotating API Keys
./bin/model-router codex provider-key deepseek remove
./bin/model-router codex provider-key deepseek set
./bin/model-router codex restart
Disabling External Models Temporarily
./bin/model-router codex providers disable deepseek
./bin/model-router codex providers disable kimi-oauth
./bin/model-router codex providers disable anthropic-api
./bin/refresh-catalog
./bin/model-router codex providers enable deepseek
./bin/refresh-catalog
Checking Quota/Rate Limits
The router automatically parses rate limit headers:
Troubleshooting
Models Not Appearing in Picker
cat ~/.codex/config.toml | grep model_catalog_json
ls -lh ~/.codex/codex-router/merged-models.json
./bin/refresh-catalog
./bin/model-router codex providers
Windows WSL Configuration Mismatch
When Codex Desktop runs on Windows but commands execute in WSL:
export CODEX_HOME=/mnt/c/Users/<WindowsUser>/.codex
export CODEX_ROUTER_STATE_DIR="$CODEX_HOME/codex-router"
grep model_catalog_json /mnt/c/Users/<WindowsUser>/.codex/config.toml
./bin/control auth-mode off
OAuth Session Expired
kimi login
./bin/model-router codex doctor
grok login --oauth
./bin/model-router codex doctor
Provider Shows "Not Ready"
./bin/model-router codex providers
./bin/model-router codex provider-key <provider> set
kimi login status
grok login --status
./bin/model-router codex doctor
Service Not Running
./bin/model-router codex status
./bin/model-router codex restart
tail -f ~/.codex/codex-router/logs/service.log
Catalog Merge Fails
./bin/control auth-mode on
./bin/refresh-catalog
cat ~/.codex/codex-router/native-models.json
./bin/model-router codex providers enable deepseek
./bin/refresh-catalog
./bin/model-router codex providers enable anthropic-api
./bin/refresh-catalog
Testing Individual Models
./bin/test-model 'deepseek/deepseek-v4-flash' --live --yes
./bin/test-model 'kimi-oauth/k3'
Regional Endpoint Configuration
export QWEN_PLAN_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
./bin/model-router codex restart
Removing Router Completely
./bin/model-router codex providers | grep SHOW | while read provider _; do
./bin/model-router codex providers disable "$provider"
done
./bin/model-router codex stop
rm -rf ~/.codex/codex-router
Migration from Older Versions
The installer auto-detects and migrates recognized older configurations. To rollback:
cd codex-router
git log --oneline
git checkout <commit-hash>
./bin/model-router codex restart
Best Practices
- Always run doctor after changes:
./bin/model-router codex doctor
- Fully quit Codex after catalog refresh: Catalog loads at startup only
- Use invisible prompts for keys: Never paste keys in chat/logs
- Test curated models before production:
./bin/test-model --live --yes
- Keep providers enabled only when needed: Reduces picker clutter
- Use separate credentials per target: Codex and Cursor state is independent
- Check quota cards after first use: No extra config needed for rate limits
- Verify OAuth sessions periodically:
kimi login status, grok login --status