Skip to content

Instantly share code, notes, and snippets.

@sshh12
Last active May 16, 2026 21:25
Show Gist options
  • Select an option

  • Save sshh12/f2c402db02eb00982100f645519bd8c3 to your computer and use it in GitHub Desktop.

Select an option

Save sshh12/f2c402db02eb00982100f645519bd8c3 to your computer and use it in GitHub Desktop.
Use Claude Code CLI via OpenAI/Codex Config
#!/usr/bin/env bash
#
# Run Claude Code through a local LiteLLM gateway backed by your Codex OpenAI key.
#
# Usage:
# ./claude-through-codex -p hi
# ./claude-through-codex
#
# Requirements:
# - claude on PATH
# - uv/uvx or litellm on PATH
# - OPENAI_API_KEY in the environment, or an API-key Codex login at ~/.codex/auth.json
#
# Configuration:
# CLAUDE_THROUGH_CODEX_MODEL=gpt-5.5 OpenAI model LiteLLM routes to
# CLAUDE_THROUGH_CODEX_PORT=4000 local LiteLLM port
# CLAUDE_THROUGH_CODEX_HOST=127.0.0.1 local LiteLLM bind host
# CLAUDE_THROUGH_CODEX_ALIAS=claude-through-codex
# CLAUDE_THROUGH_CODEX_GATEWAY_KEY=sk-claude-through-codex
# CLAUDE_THROUGH_CODEX_LITELLM_SPEC='litellm[proxy]!=1.82.7,!=1.82.8'
#
# Example:
# CLAUDE_THROUGH_CODEX_MODEL=gpt-5.4 ./claude-through-codex -p "summarize this repo"
set -euo pipefail
PORT="${CLAUDE_THROUGH_CODEX_PORT:-4000}"
HOST="${CLAUDE_THROUGH_CODEX_HOST:-127.0.0.1}"
MODEL="${CLAUDE_THROUGH_CODEX_MODEL:-gpt-5.5}"
LITELLM_SPEC="${CLAUDE_THROUGH_CODEX_LITELLM_SPEC:-litellm[proxy]!=1.82.7,!=1.82.8}"
CLAUDE_MODEL_ALIAS="${CLAUDE_THROUGH_CODEX_ALIAS:-claude-through-codex}"
GATEWAY_KEY="${CLAUDE_THROUGH_CODEX_GATEWAY_KEY:-sk-claude-through-codex}"
BASE_URL="http://${HOST}:${PORT}"
CONFIG_FILE="${TMPDIR:-/tmp}/claude-through-codex-litellm.yaml"
LOG_FILE="${TMPDIR:-/tmp}/claude-through-codex-litellm.log"
if ! command -v claude >/dev/null 2>&1; then
echo "claude-through-codex: claude CLI not found on PATH" >&2
exit 127
fi
if command -v litellm >/dev/null 2>&1; then
LITELLM=(litellm)
elif command -v uvx >/dev/null 2>&1; then
LITELLM=(uvx --from "$LITELLM_SPEC" litellm)
elif command -v uv >/dev/null 2>&1; then
LITELLM=(uv tool run --from "$LITELLM_SPEC" litellm)
else
echo "claude-through-codex: install uv or litellm first. Recommended: brew install uv" >&2
exit 127
fi
if [[ -z "${OPENAI_API_KEY:-}" ]]; then
if [[ -r "${CODEX_HOME:-$HOME/.codex}/auth.json" ]]; then
OPENAI_API_KEY="$(
jq -er '.OPENAI_API_KEY // empty' "${CODEX_HOME:-$HOME/.codex}/auth.json"
)"
export OPENAI_API_KEY
fi
fi
if [[ -z "${OPENAI_API_KEY:-}" ]]; then
echo "claude-through-codex: no OPENAI_API_KEY found in env or ${CODEX_HOME:-$HOME/.codex}/auth.json" >&2
exit 1
fi
cat >"$CONFIG_FILE" <<EOF
model_list:
- model_name: ${CLAUDE_MODEL_ALIAS}
litellm_params:
model: openai/${MODEL}
api_key: os.environ/OPENAI_API_KEY
litellm_settings:
drop_params: true
general_settings:
master_key: ${GATEWAY_KEY}
EOF
if ! curl -fsS "${BASE_URL}/health/liveliness" >/dev/null 2>&1; then
"${LITELLM[@]}" --config "$CONFIG_FILE" --host "$HOST" --port "$PORT" >"$LOG_FILE" 2>&1 &
LITELLM_PID="$!"
trap 'kill "$LITELLM_PID" >/dev/null 2>&1 || true' EXIT
READY=0
for _ in {1..60}; do
if curl -fsS "${BASE_URL}/health/liveliness" >/dev/null 2>&1; then
READY=1
break
fi
if ! kill -0 "$LITELLM_PID" >/dev/null 2>&1; then
echo "claude-through-codex: litellm exited early. See $LOG_FILE" >&2
exit 1
fi
sleep 0.25
done
if [[ "$READY" != 1 ]]; then
echo "claude-through-codex: litellm did not become ready. See $LOG_FILE" >&2
exit 1
fi
fi
export ANTHROPIC_BASE_URL="$BASE_URL"
export ANTHROPIC_AUTH_TOKEN="$GATEWAY_KEY"
export ANTHROPIC_MODEL="${ANTHROPIC_MODEL:-$CLAUDE_MODEL_ALIAS}"
export ANTHROPIC_DEFAULT_OPUS_MODEL="${ANTHROPIC_DEFAULT_OPUS_MODEL:-$CLAUDE_MODEL_ALIAS}"
export ANTHROPIC_DEFAULT_SONNET_MODEL="${ANTHROPIC_DEFAULT_SONNET_MODEL:-$CLAUDE_MODEL_ALIAS}"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="${ANTHROPIC_DEFAULT_HAIKU_MODEL:-$CLAUDE_MODEL_ALIAS}"
export CLAUDE_CODE_SUBAGENT_MODEL="${CLAUDE_CODE_SUBAGENT_MODEL:-$CLAUDE_MODEL_ALIAS}"
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS="${CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS:-1}"
exec claude "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment