.claude/skills/codex-custom-model-provider/SKILL.md
Configure OpenAI Codex CLI to use custom model providers like Groq, OpenRouter, or other OpenAI-compatible APIs. Use when: (1) Getting 401 errors when trying custom providers, (2) Codex profiles not loading correctly, (3) Need to route Codex to non-OpenAI endpoints, (4) wire_api errors or "responses" endpoint not found. Covers env_key auth, wire_api selection, and the -c flag workaround for profiles.
npx skillsauth add Dbochman/dotfiles codex-custom-model-providerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Configuring OpenAI Codex CLI (v0.89+) to use third-party model providers like Groq, OpenRouter, or other OpenAI-compatible APIs fails with auth errors or wrong endpoints.
/responses endpoint instead of /chat/completions-p profile_name flag not loading custom provider settings~/.codex/config.toml)[model_providers.groq]
base_url = "https://api.groq.com/openai/v1"
name = "Groq"
wire_api = "chat" # CRITICAL: Groq doesn't support "responses" API
env_key = "GROQ_API_KEY" # Environment variable containing the API key
| Setting | Purpose | Common Values |
|---------|---------|---------------|
| base_url | API endpoint | Provider's OpenAI-compatible URL |
| wire_api | API format | "chat" for most providers, "responses" for OpenAI only |
| env_key | Auth env var | Name of env var holding API key |
| name | Display name | Human-readable provider name |
[profiles.groq-gpt]
model = "openai/gpt-oss-120b"
model_provider = "groq"
-c Flag WorkaroundImportant: In Codex v0.89, the -p profile flag may not load custom providers correctly.
Use the -c flag to explicitly set the provider:
# This may NOT work:
codex -p groq-gpt exec "prompt"
# This DOES work:
export GROQ_API_KEY="your-key"
codex -c 'model_provider="groq"' -m "openai/gpt-oss-120b" exec "prompt"
Groq:
[model_providers.groq]
base_url = "https://api.groq.com/openai/v1"
name = "Groq"
wire_api = "chat"
env_key = "GROQ_API_KEY"
OpenRouter:
[model_providers.openrouter]
base_url = "https://openrouter.ai/api/v1"
name = "OpenRouter"
wire_api = "chat"
env_key = "OPENROUTER_API_KEY"
Check provider is recognized:
RUST_LOG=debug codex -c 'model_provider="groq"' -m "model-name" exec "test" 2>&1 | grep provider
Verify correct endpoint:
/responses = need wire_api = "chat"# Set API key from 1Password
export GROQ_API_KEY=$(op read "op://Private/GroqAPI Credentials/credential")
# Run with Groq provider
codex -c 'model_provider="groq"' -m "openai/gpt-oss-120b" exec --sandbox read-only "What model are you?"
wire_api = "chat" shows deprecation warning but is required for non-OpenAI providers/responses) is OpenAI-specific; most providers only support Chat Completions[projects] trust levels) should be added manually after installtools
Use exact configured Reolink cameras through the local Home Hub for availability and power status, fresh stills, visual commentary, protected Dylan/Julia/household sharing, and reversible spotlight control. Supports trusted owner tasks and explicitly scoped proactive automations; not for Nest or Ring cameras, arbitrary recipients, recordings, account changes, or raw camera APIs.
data-ai
Privately manage Dylan and Julia's household plant inventory and care history by physical location, bed, and exact Flower Cam view. Use for confirmed plant onboarding from camera conversations, camera- or bed-filtered inventory, record corrections, individual or whole-bed care, and private filtered exports. Pair with reolink-camera when an owner asks about plants visible in Flower Cam images.
testing
Inspect and control the physically secured Reachy Mini at Crosstown through ClawBody. Use for requests to check Reachy, look around, express an emotion, play any official emotion or dance preset, speak proactively, mute or unmute its microphone, stop movement, or describe what its camera sees.
tools
Handle Reachy/iMessage handoffs, selective durable memory, forgetting, and diagnostics; automatic context comes from the gateway plugin.