Repository files navigation

OpenClaude

Use Claude Code with any LLM — not just Claude.

OpenClaude is a fork of the Claude Code source leak (exposed via npm source maps on March 31, 2026). We added an OpenAI-compatible provider shim so you can plug in GPT-4o, DeepSeek, Gemini, Llama, Mistral, or any model that speaks the OpenAI chat completions API. It now also supports the ChatGPT Codex backend for codexplan and codexspark.

All of Claude Code's tools work — bash, file read/write/edit, grep, glob, agents, tasks, MCP — just powered by whatever model you choose.


Install

Option A: npm (recommended)

npm install -g @gitlawb/openclaude

Option B: From source (requires Bun)

# Clone from gitlawb
git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
# Install dependencies
bun install
# Build
bun run build
# Link globally (optional)
npm link

Option C: Run directly with Bun (no build step)

git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
bun install
bun run dev

Quick Start

1. Set 3 environment variables

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-your-key-here
export OPENAI_MODEL=gpt-4o

2. Run it

# If installed via npm
openclaude
# If built from source
bun run dev
# or after build:
node dist/cli.mjs

That's it. The tool system, streaming, file editing, multi-step reasoning — everything works through the model you picked.

The npm package name is @gitlawb/openclaude, but the installed CLI command is still openclaude.


Provider Examples

OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o

Codex via ChatGPT auth

codexplan maps to GPT-5.4 on the Codex backend with high reasoning. codexspark maps to GPT-5.3 Codex Spark for faster loops.

If you already use the Codex CLI, OpenClaude will read ~/.codex/auth.json automatically. You can also point it elsewhere with CODEX_AUTH_JSON_PATH or override the token directly with CODEX_API_KEY.

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_MODEL=codexplan
# optional if you do not already have ~/.codex/auth.jsonexport CODEX_API_KEY=...
openclaude

DeepSeek

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://api.deepseek.com/v1
export OPENAI_MODEL=deepseek-chat

Google Gemini (via OpenRouter)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-or-...
export OPENAI_BASE_URL=https://openrouter.ai/api/v1
export OPENAI_MODEL=google/gemini-2.0-flash

Ollama (local, free)

ollama pull llama3.3:70b
export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.3:70b
# no API key needed for local models

LM Studio (local)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

Together AI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.together.xyz/v1
export OPENAI_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo

Groq

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=gsk_...
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export OPENAI_MODEL=llama-3.3-70b-versatile

Mistral

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.mistral.ai/v1
export OPENAI_MODEL=mistral-large-latest

Azure OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=your-azure-key
export OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/your-deployment/v1
export OPENAI_MODEL=gpt-4o

Environment Variables

VariableRequiredDescription
CLAUDE_CODE_USE_OPENAIYesSet to 1 to enable the OpenAI provider
OPENAI_API_KEYYes*Your API key (*not needed for local models like Ollama)
OPENAI_MODELYesModel name (e.g. gpt-4o, deepseek-chat, llama3.3:70b)
OPENAI_BASE_URLNoAPI endpoint (defaults to https://api.openai.com/v1)
CODEX_API_KEYCodex onlyCodex/ChatGPT access token override
CODEX_AUTH_JSON_PATHCodex onlyPath to a Codex CLI auth.json file
CODEX_HOMECodex onlyAlternative Codex home directory (auth.json will be read from here)
OPENCLAUDE_DISABLE_CO_AUTHORED_BYNoSet to 1 to suppress the default Co-Authored-By trailer in generated git commit messages

You can also use ANTHROPIC_MODEL to override the model name. OPENAI_MODEL takes priority.

OpenClaude PR bodies use OpenClaude branding by default. OPENCLAUDE_DISABLE_CO_AUTHORED_BY only affects the commit trailer, not PR attribution text.


Runtime Hardening

Use these commands to keep the CLI stable and catch environment mistakes early:

# quick startup sanity check
bun run smoke
# validate provider env + reachability
bun run doctor:runtime
# print machine-readable runtime diagnostics
bun run doctor:runtime:json
# persist a diagnostics report to reports/doctor-runtime.json
bun run doctor:report
# full local hardening check (smoke + runtime doctor)
bun run hardening:check
# strict hardening (includes project-wide typecheck)
bun run hardening:strict

Notes:

  • doctor:runtime fails fast if CLAUDE_CODE_USE_OPENAI=1 with a placeholder key (SUA_CHAVE) or a missing key for non-local providers.
  • Local providers (for example http://localhost:11434/v1) can run without OPENAI_API_KEY.
  • Codex profiles validate CODEX_API_KEY or the Codex CLI auth file and probe POST /responses instead of GET /models.

Provider Launch Profiles

Use profile launchers to avoid repeated environment setup:

# one-time profile bootstrap (prefer viable local Ollama, otherwise OpenAI)
bun run profile:init
# preview the best provider/model for your goal
bun run profile:recommend -- --goal coding --benchmark
# auto-apply the best available local/openai provider/model for your goal
bun run profile:auto -- --goal latency
# codex bootstrap (defaults to codexplan and ~/.codex/auth.json)
bun run profile:codex
# openai bootstrap with explicit key
bun run profile:init -- --provider openai --api-key sk-...
# ollama bootstrap with custom model
bun run profile:init -- --provider ollama --model llama3.1:8b
# ollama bootstrap with intelligent model auto-selection
bun run profile:init -- --provider ollama --goal coding
# codex bootstrap with a fast model alias
bun run profile:init -- --provider codex --model codexspark
# launch using persisted profile (.openclaude-profile.json)
bun run dev:profile
# codex profile (uses CODEX_API_KEY or ~/.codex/auth.json)
bun run dev:codex
# OpenAI profile (requires OPENAI_API_KEY in your shell)
bun run dev:openai
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
bun run dev:ollama

profile:recommend ranks installed Ollama models for latency, balanced, or coding, and profile:auto can persist the recommendation directly. If no profile exists yet, dev:profile now uses the same goal-aware defaults when picking the initial model.

Use --provider ollama when you want a local-only path. Auto mode falls back to OpenAI when no viable local chat model is installed. Goal-based Ollama selection only recommends among models that are already installed and reachable from Ollama.

Use profile:codex or --provider codex when you want the ChatGPT Codex backend.

dev:openai, dev:ollama, and dev:codex run doctor:runtime first and only launch the app if checks pass. For dev:ollama, make sure Ollama is running locally before launch.


What Works

  • All tools: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
  • Streaming: Real-time token streaming
  • Tool calling: Multi-step tool chains (the model calls tools, gets results, continues)
  • Images: Base64 and URL images passed to vision models
  • Slash commands: /commit, /review, /compact, /diff, /doctor, etc.
  • Sub-agents: AgentTool spawns sub-agents using the same provider
  • Memory: Persistent memory system

What's Different

  • No thinking mode: Anthropic's extended thinking is disabled (OpenAI models use different reasoning)
  • No prompt caching: Anthropic-specific cache headers are skipped
  • No beta features: Anthropic-specific beta headers are ignored
  • Token limits: Defaults to 32K max output — some models may cap lower, which is handled gracefully

How It Works

The shim (src/services/api/openaiShim.ts) sits between Claude Code and the LLM API:

Claude Code Tool System
|
v
Anthropic SDK interface (duck-typed)
|
v
openaiShim.ts <-- translates formats
|
v
OpenAI Chat Completions API
|
v
Any compatible model

It translates:

  • Anthropic message blocks → OpenAI messages
  • Anthropic tool_use/tool_result → OpenAI function calls
  • OpenAI SSE streaming → Anthropic stream events
  • Anthropic system prompt arrays → OpenAI system messages

The rest of Claude Code doesn't know it's talking to a different model.


Model Quality Notes

Not all models are equal at agentic tool use. Here's a rough guide:

ModelTool CallingCode QualitySpeed
GPT-4oExcellentExcellentFast
DeepSeek-V3GreatGreatFast
Gemini 2.0 FlashGreatGoodVery Fast
Llama 3.3 70BGoodGoodMedium
Mistral LargeGoodGoodFast
GPT-4o-miniGoodGoodVery Fast
Qwen 2.5 72BGoodGoodMedium
Smaller models (<7B)LimitedLimitedVery Fast

For best results, use models with strong function/tool calling support.


Files Changed from Original

src/services/api/openaiShim.ts — NEW: OpenAI-compatible API shim (724 lines)
src/services/api/client.ts — Routes to shim when CLAUDE_CODE_USE_OPENAI=1
src/utils/model/providers.ts — Added 'openai' provider type
src/utils/model/configs.ts — Added openai model mappings
src/utils/model/model.ts — Respects OPENAI_MODEL for defaults
src/utils/auth.ts — Recognizes OpenAI as valid 3P provider

6 files changed. 786 lines added. Zero dependencies added.


Origin

This is a fork of instructkr/claude-code, which mirrored the Claude Code source snapshot that became publicly accessible through an npm source map exposure on March 31, 2026.

The original Claude Code source is the property of Anthropic. This repository is not affiliated with or endorsed by Anthropic.


License

This repository is provided for educational and research purposes. The original source code is subject to Anthropic's terms. The OpenAI shim additions are public domain.

About

Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models via OpenAI-compatible API shim

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

OpenClaude

Use Claude Code with any LLM — not just Claude.

OpenClaude is a fork of the Claude Code source leak (exposed via npm source maps on March 31, 2026). We added an OpenAI-compatible provider shim so you can plug in GPT-4o, DeepSeek, Gemini, Llama, Mistral, or any model that speaks the OpenAI chat completions API. It now also supports the ChatGPT Codex backend for codexplan and codexspark.

All of Claude Code's tools work — bash, file read/write/edit, grep, glob, agents, tasks, MCP — just powered by whatever model you choose.


Install

Option A: npm (recommended)

npm install -g @gitlawb/openclaude

Option B: From source (requires Bun)

# Clone from gitlawb
git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
# Install dependencies
bun install
# Build
bun run build
# Link globally (optional)
npm link

Option C: Run directly with Bun (no build step)

git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
bun install
bun run dev

Quick Start

1. Set 3 environment variables

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-your-key-here
export OPENAI_MODEL=gpt-4o

2. Run it

# If installed via npm
openclaude
# If built from source
bun run dev
# or after build:
node dist/cli.mjs

That's it. The tool system, streaming, file editing, multi-step reasoning — everything works through the model you picked.

The npm package name is @gitlawb/openclaude, but the installed CLI command is still openclaude.


Provider Examples

OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o

Codex via ChatGPT auth

codexplan maps to GPT-5.4 on the Codex backend with high reasoning. codexspark maps to GPT-5.3 Codex Spark for faster loops.

If you already use the Codex CLI, OpenClaude will read ~/.codex/auth.json automatically. You can also point it elsewhere with CODEX_AUTH_JSON_PATH or override the token directly with CODEX_API_KEY.

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_MODEL=codexplan
# optional if you do not already have ~/.codex/auth.jsonexport CODEX_API_KEY=...
openclaude

DeepSeek

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://api.deepseek.com/v1
export OPENAI_MODEL=deepseek-chat

Google Gemini (via OpenRouter)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-or-...
export OPENAI_BASE_URL=https://openrouter.ai/api/v1
export OPENAI_MODEL=google/gemini-2.0-flash

Ollama (local, free)

ollama pull llama3.3:70b
export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.3:70b
# no API key needed for local models

LM Studio (local)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

Together AI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.together.xyz/v1
export OPENAI_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo

Groq

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=gsk_...
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export OPENAI_MODEL=llama-3.3-70b-versatile

Mistral

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.mistral.ai/v1
export OPENAI_MODEL=mistral-large-latest

Azure OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=your-azure-key
export OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/your-deployment/v1
export OPENAI_MODEL=gpt-4o

Environment Variables

VariableRequiredDescription
CLAUDE_CODE_USE_OPENAIYesSet to 1 to enable the OpenAI provider
OPENAI_API_KEYYes*Your API key (*not needed for local models like Ollama)
OPENAI_MODELYesModel name (e.g. gpt-4o, deepseek-chat, llama3.3:70b)
OPENAI_BASE_URLNoAPI endpoint (defaults to https://api.openai.com/v1)
CODEX_API_KEYCodex onlyCodex/ChatGPT access token override
CODEX_AUTH_JSON_PATHCodex onlyPath to a Codex CLI auth.json file
CODEX_HOMECodex onlyAlternative Codex home directory (auth.json will be read from here)
OPENCLAUDE_DISABLE_CO_AUTHORED_BYNoSet to 1 to suppress the default Co-Authored-By trailer in generated git commit messages

You can also use ANTHROPIC_MODEL to override the model name. OPENAI_MODEL takes priority.

OpenClaude PR bodies use OpenClaude branding by default. OPENCLAUDE_DISABLE_CO_AUTHORED_BY only affects the commit trailer, not PR attribution text.


Runtime Hardening

Use these commands to keep the CLI stable and catch environment mistakes early:

# quick startup sanity check
bun run smoke
# validate provider env + reachability
bun run doctor:runtime
# print machine-readable runtime diagnostics
bun run doctor:runtime:json
# persist a diagnostics report to reports/doctor-runtime.json
bun run doctor:report
# full local hardening check (smoke + runtime doctor)
bun run hardening:check
# strict hardening (includes project-wide typecheck)
bun run hardening:strict

Notes:

  • doctor:runtime fails fast if CLAUDE_CODE_USE_OPENAI=1 with a placeholder key (SUA_CHAVE) or a missing key for non-local providers.
  • Local providers (for example http://localhost:11434/v1) can run without OPENAI_API_KEY.
  • Codex profiles validate CODEX_API_KEY or the Codex CLI auth file and probe POST /responses instead of GET /models.

Provider Launch Profiles

Use profile launchers to avoid repeated environment setup:

# one-time profile bootstrap (prefer viable local Ollama, otherwise OpenAI)
bun run profile:init
# preview the best provider/model for your goal
bun run profile:recommend -- --goal coding --benchmark
# auto-apply the best available local/openai provider/model for your goal
bun run profile:auto -- --goal latency
# codex bootstrap (defaults to codexplan and ~/.codex/auth.json)
bun run profile:codex
# openai bootstrap with explicit key
bun run profile:init -- --provider openai --api-key sk-...
# ollama bootstrap with custom model
bun run profile:init -- --provider ollama --model llama3.1:8b
# ollama bootstrap with intelligent model auto-selection
bun run profile:init -- --provider ollama --goal coding
# codex bootstrap with a fast model alias
bun run profile:init -- --provider codex --model codexspark
# launch using persisted profile (.openclaude-profile.json)
bun run dev:profile
# codex profile (uses CODEX_API_KEY or ~/.codex/auth.json)
bun run dev:codex
# OpenAI profile (requires OPENAI_API_KEY in your shell)
bun run dev:openai
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
bun run dev:ollama

profile:recommend ranks installed Ollama models for latency, balanced, or coding, and profile:auto can persist the recommendation directly. If no profile exists yet, dev:profile now uses the same goal-aware defaults when picking the initial model.

Use --provider ollama when you want a local-only path. Auto mode falls back to OpenAI when no viable local chat model is installed. Goal-based Ollama selection only recommends among models that are already installed and reachable from Ollama.

Use profile:codex or --provider codex when you want the ChatGPT Codex backend.

dev:openai, dev:ollama, and dev:codex run doctor:runtime first and only launch the app if checks pass. For dev:ollama, make sure Ollama is running locally before launch.


What Works

  • All tools: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
  • Streaming: Real-time token streaming
  • Tool calling: Multi-step tool chains (the model calls tools, gets results, continues)
  • Images: Base64 and URL images passed to vision models
  • Slash commands: /commit, /review, /compact, /diff, /doctor, etc.
  • Sub-agents: AgentTool spawns sub-agents using the same provider
  • Memory: Persistent memory system

What's Different

  • No thinking mode: Anthropic's extended thinking is disabled (OpenAI models use different reasoning)
  • No prompt caching: Anthropic-specific cache headers are skipped
  • No beta features: Anthropic-specific beta headers are ignored
  • Token limits: Defaults to 32K max output — some models may cap lower, which is handled gracefully

How It Works

The shim (src/services/api/openaiShim.ts) sits between Claude Code and the LLM API:

Claude Code Tool System
|
v
Anthropic SDK interface (duck-typed)
|
v
openaiShim.ts <-- translates formats
|
v
OpenAI Chat Completions API
|
v
Any compatible model

It translates:

  • Anthropic message blocks → OpenAI messages
  • Anthropic tool_use/tool_result → OpenAI function calls
  • OpenAI SSE streaming → Anthropic stream events
  • Anthropic system prompt arrays → OpenAI system messages

The rest of Claude Code doesn't know it's talking to a different model.


Model Quality Notes

Not all models are equal at agentic tool use. Here's a rough guide:

ModelTool CallingCode QualitySpeed
GPT-4oExcellentExcellentFast
DeepSeek-V3GreatGreatFast
Gemini 2.0 FlashGreatGoodVery Fast
Llama 3.3 70BGoodGoodMedium
Mistral LargeGoodGoodFast
GPT-4o-miniGoodGoodVery Fast
Qwen 2.5 72BGoodGoodMedium
Smaller models (<7B)LimitedLimitedVery Fast

For best results, use models with strong function/tool calling support.


Files Changed from Original

src/services/api/openaiShim.ts — NEW: OpenAI-compatible API shim (724 lines)
src/services/api/client.ts — Routes to shim when CLAUDE_CODE_USE_OPENAI=1
src/utils/model/providers.ts — Added 'openai' provider type
src/utils/model/configs.ts — Added openai model mappings
src/utils/model/model.ts — Respects OPENAI_MODEL for defaults
src/utils/auth.ts — Recognizes OpenAI as valid 3P provider

6 files changed. 786 lines added. Zero dependencies added.


Origin

This is a fork of instructkr/claude-code, which mirrored the Claude Code source snapshot that became publicly accessible through an npm source map exposure on March 31, 2026.

The original Claude Code source is the property of Anthropic. This repository is not affiliated with or endorsed by Anthropic.


License

This repository is provided for educational and research purposes. The original source code is subject to Anthropic's terms. The OpenAI shim additions are public domain.

About

Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models via OpenAI-compatible API shim

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenClaude

Use Claude Code with any LLM — not just Claude.

OpenClaude is a fork of the Claude Code source leak (exposed via npm source maps on March 31, 2026). We added an OpenAI-compatible provider shim so you can plug in GPT-4o, DeepSeek, Gemini, Llama, Mistral, or any model that speaks the OpenAI chat completions API. It now also supports the ChatGPT Codex backend for codexplan and codexspark.

All of Claude Code's tools work — bash, file read/write/edit, grep, glob, agents, tasks, MCP — just powered by whatever model you choose.


Install

Option A: npm (recommended)

npm install -g @gitlawb/openclaude

Option B: From source (requires Bun)

# Clone from gitlawb
git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
# Install dependencies
bun install
# Build
bun run build
# Link globally (optional)
npm link

Option C: Run directly with Bun (no build step)

git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
bun install
bun run dev

Quick Start

1. Set 3 environment variables

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-your-key-here
export OPENAI_MODEL=gpt-4o

2. Run it

# If installed via npm
openclaude
# If built from source
bun run dev
# or after build:
node dist/cli.mjs

That's it. The tool system, streaming, file editing, multi-step reasoning — everything works through the model you picked.

The npm package name is @gitlawb/openclaude, but the installed CLI command is still openclaude.


Provider Examples

OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o

Codex via ChatGPT auth

codexplan maps to GPT-5.4 on the Codex backend with high reasoning. codexspark maps to GPT-5.3 Codex Spark for faster loops.

If you already use the Codex CLI, OpenClaude will read ~/.codex/auth.json automatically. You can also point it elsewhere with CODEX_AUTH_JSON_PATH or override the token directly with CODEX_API_KEY.

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_MODEL=codexplan
# optional if you do not already have ~/.codex/auth.jsonexport CODEX_API_KEY=...
openclaude

DeepSeek

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://api.deepseek.com/v1
export OPENAI_MODEL=deepseek-chat

Google Gemini (via OpenRouter)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-or-...
export OPENAI_BASE_URL=https://openrouter.ai/api/v1
export OPENAI_MODEL=google/gemini-2.0-flash

Ollama (local, free)

ollama pull llama3.3:70b
export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.3:70b
# no API key needed for local models

LM Studio (local)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

Together AI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.together.xyz/v1
export OPENAI_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo

Groq

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=gsk_...
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export OPENAI_MODEL=llama-3.3-70b-versatile

Mistral

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.mistral.ai/v1
export OPENAI_MODEL=mistral-large-latest

Azure OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=your-azure-key
export OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/your-deployment/v1
export OPENAI_MODEL=gpt-4o

Environment Variables

VariableRequiredDescription
CLAUDE_CODE_USE_OPENAIYesSet to 1 to enable the OpenAI provider
OPENAI_API_KEYYes*Your API key (*not needed for local models like Ollama)
OPENAI_MODELYesModel name (e.g. gpt-4o, deepseek-chat, llama3.3:70b)
OPENAI_BASE_URLNoAPI endpoint (defaults to https://api.openai.com/v1)
CODEX_API_KEYCodex onlyCodex/ChatGPT access token override
CODEX_AUTH_JSON_PATHCodex onlyPath to a Codex CLI auth.json file
CODEX_HOMECodex onlyAlternative Codex home directory (auth.json will be read from here)
OPENCLAUDE_DISABLE_CO_AUTHORED_BYNoSet to 1 to suppress the default Co-Authored-By trailer in generated git commit messages

You can also use ANTHROPIC_MODEL to override the model name. OPENAI_MODEL takes priority.

OpenClaude PR bodies use OpenClaude branding by default. OPENCLAUDE_DISABLE_CO_AUTHORED_BY only affects the commit trailer, not PR attribution text.


Runtime Hardening

Use these commands to keep the CLI stable and catch environment mistakes early:

# quick startup sanity check
bun run smoke
# validate provider env + reachability
bun run doctor:runtime
# print machine-readable runtime diagnostics
bun run doctor:runtime:json
# persist a diagnostics report to reports/doctor-runtime.json
bun run doctor:report
# full local hardening check (smoke + runtime doctor)
bun run hardening:check
# strict hardening (includes project-wide typecheck)
bun run hardening:strict

Notes:

  • doctor:runtime fails fast if CLAUDE_CODE_USE_OPENAI=1 with a placeholder key (SUA_CHAVE) or a missing key for non-local providers.
  • Local providers (for example http://localhost:11434/v1) can run without OPENAI_API_KEY.
  • Codex profiles validate CODEX_API_KEY or the Codex CLI auth file and probe POST /responses instead of GET /models.

Provider Launch Profiles

Use profile launchers to avoid repeated environment setup:

# one-time profile bootstrap (prefer viable local Ollama, otherwise OpenAI)
bun run profile:init
# preview the best provider/model for your goal
bun run profile:recommend -- --goal coding --benchmark
# auto-apply the best available local/openai provider/model for your goal
bun run profile:auto -- --goal latency
# codex bootstrap (defaults to codexplan and ~/.codex/auth.json)
bun run profile:codex
# openai bootstrap with explicit key
bun run profile:init -- --provider openai --api-key sk-...
# ollama bootstrap with custom model
bun run profile:init -- --provider ollama --model llama3.1:8b
# ollama bootstrap with intelligent model auto-selection
bun run profile:init -- --provider ollama --goal coding
# codex bootstrap with a fast model alias
bun run profile:init -- --provider codex --model codexspark
# launch using persisted profile (.openclaude-profile.json)
bun run dev:profile
# codex profile (uses CODEX_API_KEY or ~/.codex/auth.json)
bun run dev:codex
# OpenAI profile (requires OPENAI_API_KEY in your shell)
bun run dev:openai
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
bun run dev:ollama

profile:recommend ranks installed Ollama models for latency, balanced, or coding, and profile:auto can persist the recommendation directly. If no profile exists yet, dev:profile now uses the same goal-aware defaults when picking the initial model.

Use --provider ollama when you want a local-only path. Auto mode falls back to OpenAI when no viable local chat model is installed. Goal-based Ollama selection only recommends among models that are already installed and reachable from Ollama.

Use profile:codex or --provider codex when you want the ChatGPT Codex backend.

dev:openai, dev:ollama, and dev:codex run doctor:runtime first and only launch the app if checks pass. For dev:ollama, make sure Ollama is running locally before launch.


What Works

  • All tools: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
  • Streaming: Real-time token streaming
  • Tool calling: Multi-step tool chains (the model calls tools, gets results, continues)
  • Images: Base64 and URL images passed to vision models
  • Slash commands: /commit, /review, /compact, /diff, /doctor, etc.
  • Sub-agents: AgentTool spawns sub-agents using the same provider
  • Memory: Persistent memory system

What's Different

  • No thinking mode: Anthropic's extended thinking is disabled (OpenAI models use different reasoning)
  • No prompt caching: Anthropic-specific cache headers are skipped
  • No beta features: Anthropic-specific beta headers are ignored
  • Token limits: Defaults to 32K max output — some models may cap lower, which is handled gracefully

How It Works

The shim (src/services/api/openaiShim.ts) sits between Claude Code and the LLM API:

Claude Code Tool System
|
v
Anthropic SDK interface (duck-typed)
|
v
openaiShim.ts <-- translates formats
|
v
OpenAI Chat Completions API
|
v
Any compatible model

It translates:

  • Anthropic message blocks → OpenAI messages
  • Anthropic tool_use/tool_result → OpenAI function calls
  • OpenAI SSE streaming → Anthropic stream events
  • Anthropic system prompt arrays → OpenAI system messages

The rest of Claude Code doesn't know it's talking to a different model.


Model Quality Notes

Not all models are equal at agentic tool use. Here's a rough guide:

ModelTool CallingCode QualitySpeed
GPT-4oExcellentExcellentFast
DeepSeek-V3GreatGreatFast
Gemini 2.0 FlashGreatGoodVery Fast
Llama 3.3 70BGoodGoodMedium
Mistral LargeGoodGoodFast
GPT-4o-miniGoodGoodVery Fast
Qwen 2.5 72BGoodGoodMedium
Smaller models (<7B)LimitedLimitedVery Fast

For best results, use models with strong function/tool calling support.


Files Changed from Original

src/services/api/openaiShim.ts — NEW: OpenAI-compatible API shim (724 lines)
src/services/api/client.ts — Routes to shim when CLAUDE_CODE_USE_OPENAI=1
src/utils/model/providers.ts — Added 'openai' provider type
src/utils/model/configs.ts — Added openai model mappings
src/utils/model/model.ts — Respects OPENAI_MODEL for defaults
src/utils/auth.ts — Recognizes OpenAI as valid 3P provider

6 files changed. 786 lines added. Zero dependencies added.


Origin

This is a fork of instructkr/claude-code, which mirrored the Claude Code source snapshot that became publicly accessible through an npm source map exposure on March 31, 2026.

The original Claude Code source is the property of Anthropic. This repository is not affiliated with or endorsed by Anthropic.


License

This repository is provided for educational and research purposes. The original source code is subject to Anthropic's terms. The OpenAI shim additions are public domain.

About

Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models via OpenAI-compatible API shim

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenClaude

Use Claude Code with any LLM — not just Claude.

OpenClaude is a fork of the Claude Code source leak (exposed via npm source maps on March 31, 2026). We added an OpenAI-compatible provider shim so you can plug in GPT-4o, DeepSeek, Gemini, Llama, Mistral, or any model that speaks the OpenAI chat completions API. It now also supports the ChatGPT Codex backend for codexplan and codexspark.

All of Claude Code's tools work — bash, file read/write/edit, grep, glob, agents, tasks, MCP — just powered by whatever model you choose.


Install

Option A: npm (recommended)

npm install -g @gitlawb/openclaude

Option B: From source (requires Bun)

# Clone from gitlawb
git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
# Install dependencies
bun install
# Build
bun run build
# Link globally (optional)
npm link

Option C: Run directly with Bun (no build step)

git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
bun install
bun run dev

Quick Start

1. Set 3 environment variables

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-your-key-here
export OPENAI_MODEL=gpt-4o

2. Run it

# If installed via npm
openclaude
# If built from source
bun run dev
# or after build:
node dist/cli.mjs

That's it. The tool system, streaming, file editing, multi-step reasoning — everything works through the model you picked.

The npm package name is @gitlawb/openclaude, but the installed CLI command is still openclaude.


Provider Examples

OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o

Codex via ChatGPT auth

codexplan maps to GPT-5.4 on the Codex backend with high reasoning. codexspark maps to GPT-5.3 Codex Spark for faster loops.

If you already use the Codex CLI, OpenClaude will read ~/.codex/auth.json automatically. You can also point it elsewhere with CODEX_AUTH_JSON_PATH or override the token directly with CODEX_API_KEY.

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_MODEL=codexplan
# optional if you do not already have ~/.codex/auth.jsonexport CODEX_API_KEY=...
openclaude

DeepSeek

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://api.deepseek.com/v1
export OPENAI_MODEL=deepseek-chat

Google Gemini (via OpenRouter)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-or-...
export OPENAI_BASE_URL=https://openrouter.ai/api/v1
export OPENAI_MODEL=google/gemini-2.0-flash

Ollama (local, free)

ollama pull llama3.3:70b
export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.3:70b
# no API key needed for local models

LM Studio (local)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

Together AI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.together.xyz/v1
export OPENAI_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo

Groq

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=gsk_...
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export OPENAI_MODEL=llama-3.3-70b-versatile

Mistral

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.mistral.ai/v1
export OPENAI_MODEL=mistral-large-latest

Azure OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=your-azure-key
export OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/your-deployment/v1
export OPENAI_MODEL=gpt-4o

Environment Variables

VariableRequiredDescription
CLAUDE_CODE_USE_OPENAIYesSet to 1 to enable the OpenAI provider
OPENAI_API_KEYYes*Your API key (*not needed for local models like Ollama)
OPENAI_MODELYesModel name (e.g. gpt-4o, deepseek-chat, llama3.3:70b)
OPENAI_BASE_URLNoAPI endpoint (defaults to https://api.openai.com/v1)
CODEX_API_KEYCodex onlyCodex/ChatGPT access token override
CODEX_AUTH_JSON_PATHCodex onlyPath to a Codex CLI auth.json file
CODEX_HOMECodex onlyAlternative Codex home directory (auth.json will be read from here)
OPENCLAUDE_DISABLE_CO_AUTHORED_BYNoSet to 1 to suppress the default Co-Authored-By trailer in generated git commit messages

You can also use ANTHROPIC_MODEL to override the model name. OPENAI_MODEL takes priority.

OpenClaude PR bodies use OpenClaude branding by default. OPENCLAUDE_DISABLE_CO_AUTHORED_BY only affects the commit trailer, not PR attribution text.


Runtime Hardening

Use these commands to keep the CLI stable and catch environment mistakes early:

# quick startup sanity check
bun run smoke
# validate provider env + reachability
bun run doctor:runtime
# print machine-readable runtime diagnostics
bun run doctor:runtime:json
# persist a diagnostics report to reports/doctor-runtime.json
bun run doctor:report
# full local hardening check (smoke + runtime doctor)
bun run hardening:check
# strict hardening (includes project-wide typecheck)
bun run hardening:strict

Notes:

  • doctor:runtime fails fast if CLAUDE_CODE_USE_OPENAI=1 with a placeholder key (SUA_CHAVE) or a missing key for non-local providers.
  • Local providers (for example http://localhost:11434/v1) can run without OPENAI_API_KEY.
  • Codex profiles validate CODEX_API_KEY or the Codex CLI auth file and probe POST /responses instead of GET /models.

Provider Launch Profiles

Use profile launchers to avoid repeated environment setup:

# one-time profile bootstrap (prefer viable local Ollama, otherwise OpenAI)
bun run profile:init
# preview the best provider/model for your goal
bun run profile:recommend -- --goal coding --benchmark
# auto-apply the best available local/openai provider/model for your goal
bun run profile:auto -- --goal latency
# codex bootstrap (defaults to codexplan and ~/.codex/auth.json)
bun run profile:codex
# openai bootstrap with explicit key
bun run profile:init -- --provider openai --api-key sk-...
# ollama bootstrap with custom model
bun run profile:init -- --provider ollama --model llama3.1:8b
# ollama bootstrap with intelligent model auto-selection
bun run profile:init -- --provider ollama --goal coding
# codex bootstrap with a fast model alias
bun run profile:init -- --provider codex --model codexspark
# launch using persisted profile (.openclaude-profile.json)
bun run dev:profile
# codex profile (uses CODEX_API_KEY or ~/.codex/auth.json)
bun run dev:codex
# OpenAI profile (requires OPENAI_API_KEY in your shell)
bun run dev:openai
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
bun run dev:ollama

profile:recommend ranks installed Ollama models for latency, balanced, or coding, and profile:auto can persist the recommendation directly. If no profile exists yet, dev:profile now uses the same goal-aware defaults when picking the initial model.

Use --provider ollama when you want a local-only path. Auto mode falls back to OpenAI when no viable local chat model is installed. Goal-based Ollama selection only recommends among models that are already installed and reachable from Ollama.

Use profile:codex or --provider codex when you want the ChatGPT Codex backend.

dev:openai, dev:ollama, and dev:codex run doctor:runtime first and only launch the app if checks pass. For dev:ollama, make sure Ollama is running locally before launch.


What Works

  • All tools: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
  • Streaming: Real-time token streaming
  • Tool calling: Multi-step tool chains (the model calls tools, gets results, continues)
  • Images: Base64 and URL images passed to vision models
  • Slash commands: /commit, /review, /compact, /diff, /doctor, etc.
  • Sub-agents: AgentTool spawns sub-agents using the same provider
  • Memory: Persistent memory system

What's Different

  • No thinking mode: Anthropic's extended thinking is disabled (OpenAI models use different reasoning)
  • No prompt caching: Anthropic-specific cache headers are skipped
  • No beta features: Anthropic-specific beta headers are ignored
  • Token limits: Defaults to 32K max output — some models may cap lower, which is handled gracefully

How It Works

The shim (src/services/api/openaiShim.ts) sits between Claude Code and the LLM API:

Claude Code Tool System
|
v
Anthropic SDK interface (duck-typed)
|
v
openaiShim.ts <-- translates formats
|
v
OpenAI Chat Completions API
|
v
Any compatible model

It translates:

  • Anthropic message blocks → OpenAI messages
  • Anthropic tool_use/tool_result → OpenAI function calls
  • OpenAI SSE streaming → Anthropic stream events
  • Anthropic system prompt arrays → OpenAI system messages

The rest of Claude Code doesn't know it's talking to a different model.


Model Quality Notes

Not all models are equal at agentic tool use. Here's a rough guide:

ModelTool CallingCode QualitySpeed
GPT-4oExcellentExcellentFast
DeepSeek-V3GreatGreatFast
Gemini 2.0 FlashGreatGoodVery Fast
Llama 3.3 70BGoodGoodMedium
Mistral LargeGoodGoodFast
GPT-4o-miniGoodGoodVery Fast
Qwen 2.5 72BGoodGoodMedium
Smaller models (<7B)LimitedLimitedVery Fast

For best results, use models with strong function/tool calling support.


Files Changed from Original

src/services/api/openaiShim.ts — NEW: OpenAI-compatible API shim (724 lines)
src/services/api/client.ts — Routes to shim when CLAUDE_CODE_USE_OPENAI=1
src/utils/model/providers.ts — Added 'openai' provider type
src/utils/model/configs.ts — Added openai model mappings
src/utils/model/model.ts — Respects OPENAI_MODEL for defaults
src/utils/auth.ts — Recognizes OpenAI as valid 3P provider

6 files changed. 786 lines added. Zero dependencies added.


Origin

This is a fork of instructkr/claude-code, which mirrored the Claude Code source snapshot that became publicly accessible through an npm source map exposure on March 31, 2026.

The original Claude Code source is the property of Anthropic. This repository is not affiliated with or endorsed by Anthropic.


License

This repository is provided for educational and research purposes. The original source code is subject to Anthropic's terms. The OpenAI shim additions are public domain.

About

Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models via OpenAI-compatible API shim

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

OpenClaude

Use Claude Code with any LLM — not just Claude.

OpenClaude is a fork of the Claude Code source leak (exposed via npm source maps on March 31, 2026). We added an OpenAI-compatible provider shim so you can plug in GPT-4o, DeepSeek, Gemini, Llama, Mistral, or any model that speaks the OpenAI chat completions API. It now also supports the ChatGPT Codex backend for codexplan and codexspark.

All of Claude Code's tools work — bash, file read/write/edit, grep, glob, agents, tasks, MCP — just powered by whatever model you choose.


Install

Option A: npm (recommended)

npm install -g @gitlawb/openclaude

Option B: From source (requires Bun)

# Clone from gitlawb
git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
# Install dependencies
bun install
# Build
bun run build
# Link globally (optional)
npm link

Option C: Run directly with Bun (no build step)

git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
bun install
bun run dev

Quick Start

1. Set 3 environment variables

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-your-key-here
export OPENAI_MODEL=gpt-4o

2. Run it

# If installed via npm
openclaude
# If built from source
bun run dev
# or after build:
node dist/cli.mjs

That's it. The tool system, streaming, file editing, multi-step reasoning — everything works through the model you picked.

The npm package name is @gitlawb/openclaude, but the installed CLI command is still openclaude.


Provider Examples

OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o

Codex via ChatGPT auth

codexplan maps to GPT-5.4 on the Codex backend with high reasoning. codexspark maps to GPT-5.3 Codex Spark for faster loops.

If you already use the Codex CLI, OpenClaude will read ~/.codex/auth.json automatically. You can also point it elsewhere with CODEX_AUTH_JSON_PATH or override the token directly with CODEX_API_KEY.

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_MODEL=codexplan
# optional if you do not already have ~/.codex/auth.jsonexport CODEX_API_KEY=...
openclaude

DeepSeek

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://api.deepseek.com/v1
export OPENAI_MODEL=deepseek-chat

Google Gemini (via OpenRouter)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-or-...
export OPENAI_BASE_URL=https://openrouter.ai/api/v1
export OPENAI_MODEL=google/gemini-2.0-flash

Ollama (local, free)

ollama pull llama3.3:70b
export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.3:70b
# no API key needed for local models

LM Studio (local)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

Together AI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.together.xyz/v1
export OPENAI_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo

Groq

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=gsk_...
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export OPENAI_MODEL=llama-3.3-70b-versatile

Mistral

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.mistral.ai/v1
export OPENAI_MODEL=mistral-large-latest

Azure OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=your-azure-key
export OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/your-deployment/v1
export OPENAI_MODEL=gpt-4o

Environment Variables

VariableRequiredDescription
CLAUDE_CODE_USE_OPENAIYesSet to 1 to enable the OpenAI provider
OPENAI_API_KEYYes*Your API key (*not needed for local models like Ollama)
OPENAI_MODELYesModel name (e.g. gpt-4o, deepseek-chat, llama3.3:70b)
OPENAI_BASE_URLNoAPI endpoint (defaults to https://api.openai.com/v1)
CODEX_API_KEYCodex onlyCodex/ChatGPT access token override
CODEX_AUTH_JSON_PATHCodex onlyPath to a Codex CLI auth.json file
CODEX_HOMECodex onlyAlternative Codex home directory (auth.json will be read from here)
OPENCLAUDE_DISABLE_CO_AUTHORED_BYNoSet to 1 to suppress the default Co-Authored-By trailer in generated git commit messages

You can also use ANTHROPIC_MODEL to override the model name. OPENAI_MODEL takes priority.

OpenClaude PR bodies use OpenClaude branding by default. OPENCLAUDE_DISABLE_CO_AUTHORED_BY only affects the commit trailer, not PR attribution text.


Runtime Hardening

Use these commands to keep the CLI stable and catch environment mistakes early:

# quick startup sanity check
bun run smoke
# validate provider env + reachability
bun run doctor:runtime
# print machine-readable runtime diagnostics
bun run doctor:runtime:json
# persist a diagnostics report to reports/doctor-runtime.json
bun run doctor:report
# full local hardening check (smoke + runtime doctor)
bun run hardening:check
# strict hardening (includes project-wide typecheck)
bun run hardening:strict

Notes:

  • doctor:runtime fails fast if CLAUDE_CODE_USE_OPENAI=1 with a placeholder key (SUA_CHAVE) or a missing key for non-local providers.
  • Local providers (for example http://localhost:11434/v1) can run without OPENAI_API_KEY.
  • Codex profiles validate CODEX_API_KEY or the Codex CLI auth file and probe POST /responses instead of GET /models.

Provider Launch Profiles

Use profile launchers to avoid repeated environment setup:

# one-time profile bootstrap (prefer viable local Ollama, otherwise OpenAI)
bun run profile:init
# preview the best provider/model for your goal
bun run profile:recommend -- --goal coding --benchmark
# auto-apply the best available local/openai provider/model for your goal
bun run profile:auto -- --goal latency
# codex bootstrap (defaults to codexplan and ~/.codex/auth.json)
bun run profile:codex
# openai bootstrap with explicit key
bun run profile:init -- --provider openai --api-key sk-...
# ollama bootstrap with custom model
bun run profile:init -- --provider ollama --model llama3.1:8b
# ollama bootstrap with intelligent model auto-selection
bun run profile:init -- --provider ollama --goal coding
# codex bootstrap with a fast model alias
bun run profile:init -- --provider codex --model codexspark
# launch using persisted profile (.openclaude-profile.json)
bun run dev:profile
# codex profile (uses CODEX_API_KEY or ~/.codex/auth.json)
bun run dev:codex
# OpenAI profile (requires OPENAI_API_KEY in your shell)
bun run dev:openai
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
bun run dev:ollama

profile:recommend ranks installed Ollama models for latency, balanced, or coding, and profile:auto can persist the recommendation directly. If no profile exists yet, dev:profile now uses the same goal-aware defaults when picking the initial model.

Use --provider ollama when you want a local-only path. Auto mode falls back to OpenAI when no viable local chat model is installed. Goal-based Ollama selection only recommends among models that are already installed and reachable from Ollama.

Use profile:codex or --provider codex when you want the ChatGPT Codex backend.

dev:openai, dev:ollama, and dev:codex run doctor:runtime first and only launch the app if checks pass. For dev:ollama, make sure Ollama is running locally before launch.


What Works

  • All tools: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
  • Streaming: Real-time token streaming
  • Tool calling: Multi-step tool chains (the model calls tools, gets results, continues)
  • Images: Base64 and URL images passed to vision models
  • Slash commands: /commit, /review, /compact, /diff, /doctor, etc.
  • Sub-agents: AgentTool spawns sub-agents using the same provider
  • Memory: Persistent memory system

What's Different

  • No thinking mode: Anthropic's extended thinking is disabled (OpenAI models use different reasoning)
  • No prompt caching: Anthropic-specific cache headers are skipped
  • No beta features: Anthropic-specific beta headers are ignored
  • Token limits: Defaults to 32K max output — some models may cap lower, which is handled gracefully

How It Works

The shim (src/services/api/openaiShim.ts) sits between Claude Code and the LLM API:

Claude Code Tool System
|
v
Anthropic SDK interface (duck-typed)
|
v
openaiShim.ts <-- translates formats
|
v
OpenAI Chat Completions API
|
v
Any compatible model

It translates:

  • Anthropic message blocks → OpenAI messages
  • Anthropic tool_use/tool_result → OpenAI function calls
  • OpenAI SSE streaming → Anthropic stream events
  • Anthropic system prompt arrays → OpenAI system messages

The rest of Claude Code doesn't know it's talking to a different model.


Model Quality Notes

Not all models are equal at agentic tool use. Here's a rough guide:

ModelTool CallingCode QualitySpeed
GPT-4oExcellentExcellentFast
DeepSeek-V3GreatGreatFast
Gemini 2.0 FlashGreatGoodVery Fast
Llama 3.3 70BGoodGoodMedium
Mistral LargeGoodGoodFast
GPT-4o-miniGoodGoodVery Fast
Qwen 2.5 72BGoodGoodMedium
Smaller models (<7B)LimitedLimitedVery Fast

For best results, use models with strong function/tool calling support.


Files Changed from Original

src/services/api/openaiShim.ts — NEW: OpenAI-compatible API shim (724 lines)
src/services/api/client.ts — Routes to shim when CLAUDE_CODE_USE_OPENAI=1
src/utils/model/providers.ts — Added 'openai' provider type
src/utils/model/configs.ts — Added openai model mappings
src/utils/model/model.ts — Respects OPENAI_MODEL for defaults
src/utils/auth.ts — Recognizes OpenAI as valid 3P provider

6 files changed. 786 lines added. Zero dependencies added.


Origin

This is a fork of instructkr/claude-code, which mirrored the Claude Code source snapshot that became publicly accessible through an npm source map exposure on March 31, 2026.

The original Claude Code source is the property of Anthropic. This repository is not affiliated with or endorsed by Anthropic.


License

This repository is provided for educational and research purposes. The original source code is subject to Anthropic's terms. The OpenAI shim additions are public domain.

About

Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models via OpenAI-compatible API shim

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenClaude

Use Claude Code with any LLM — not just Claude.

OpenClaude is a fork of the Claude Code source leak (exposed via npm source maps on March 31, 2026). We added an OpenAI-compatible provider shim so you can plug in GPT-4o, DeepSeek, Gemini, Llama, Mistral, or any model that speaks the OpenAI chat completions API. It now also supports the ChatGPT Codex backend for codexplan and codexspark.

All of Claude Code's tools work — bash, file read/write/edit, grep, glob, agents, tasks, MCP — just powered by whatever model you choose.


Install

Option A: npm (recommended)

npm install -g @gitlawb/openclaude

Option B: From source (requires Bun)

# Clone from gitlawb
git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
# Install dependencies
bun install
# Build
bun run build
# Link globally (optional)
npm link

Option C: Run directly with Bun (no build step)

git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
bun install
bun run dev

Quick Start

1. Set 3 environment variables

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-your-key-here
export OPENAI_MODEL=gpt-4o

2. Run it

# If installed via npm
openclaude
# If built from source
bun run dev
# or after build:
node dist/cli.mjs

That's it. The tool system, streaming, file editing, multi-step reasoning — everything works through the model you picked.

The npm package name is @gitlawb/openclaude, but the installed CLI command is still openclaude.


Provider Examples

OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o

Codex via ChatGPT auth

codexplan maps to GPT-5.4 on the Codex backend with high reasoning. codexspark maps to GPT-5.3 Codex Spark for faster loops.

If you already use the Codex CLI, OpenClaude will read ~/.codex/auth.json automatically. You can also point it elsewhere with CODEX_AUTH_JSON_PATH or override the token directly with CODEX_API_KEY.

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_MODEL=codexplan
# optional if you do not already have ~/.codex/auth.jsonexport CODEX_API_KEY=...
openclaude

DeepSeek

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://api.deepseek.com/v1
export OPENAI_MODEL=deepseek-chat

Google Gemini (via OpenRouter)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-or-...
export OPENAI_BASE_URL=https://openrouter.ai/api/v1
export OPENAI_MODEL=google/gemini-2.0-flash

Ollama (local, free)

ollama pull llama3.3:70b
export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.3:70b
# no API key needed for local models

LM Studio (local)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

Together AI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.together.xyz/v1
export OPENAI_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo

Groq

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=gsk_...
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export OPENAI_MODEL=llama-3.3-70b-versatile

Mistral

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.mistral.ai/v1
export OPENAI_MODEL=mistral-large-latest

Azure OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=your-azure-key
export OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/your-deployment/v1
export OPENAI_MODEL=gpt-4o

Environment Variables

VariableRequiredDescription
CLAUDE_CODE_USE_OPENAIYesSet to 1 to enable the OpenAI provider
OPENAI_API_KEYYes*Your API key (*not needed for local models like Ollama)
OPENAI_MODELYesModel name (e.g. gpt-4o, deepseek-chat, llama3.3:70b)
OPENAI_BASE_URLNoAPI endpoint (defaults to https://api.openai.com/v1)
CODEX_API_KEYCodex onlyCodex/ChatGPT access token override
CODEX_AUTH_JSON_PATHCodex onlyPath to a Codex CLI auth.json file
CODEX_HOMECodex onlyAlternative Codex home directory (auth.json will be read from here)
OPENCLAUDE_DISABLE_CO_AUTHORED_BYNoSet to 1 to suppress the default Co-Authored-By trailer in generated git commit messages

You can also use ANTHROPIC_MODEL to override the model name. OPENAI_MODEL takes priority.

OpenClaude PR bodies use OpenClaude branding by default. OPENCLAUDE_DISABLE_CO_AUTHORED_BY only affects the commit trailer, not PR attribution text.


Runtime Hardening

Use these commands to keep the CLI stable and catch environment mistakes early:

# quick startup sanity check
bun run smoke
# validate provider env + reachability
bun run doctor:runtime
# print machine-readable runtime diagnostics
bun run doctor:runtime:json
# persist a diagnostics report to reports/doctor-runtime.json
bun run doctor:report
# full local hardening check (smoke + runtime doctor)
bun run hardening:check
# strict hardening (includes project-wide typecheck)
bun run hardening:strict

Notes:

  • doctor:runtime fails fast if CLAUDE_CODE_USE_OPENAI=1 with a placeholder key (SUA_CHAVE) or a missing key for non-local providers.
  • Local providers (for example http://localhost:11434/v1) can run without OPENAI_API_KEY.
  • Codex profiles validate CODEX_API_KEY or the Codex CLI auth file and probe POST /responses instead of GET /models.

Provider Launch Profiles

Use profile launchers to avoid repeated environment setup:

# one-time profile bootstrap (prefer viable local Ollama, otherwise OpenAI)
bun run profile:init
# preview the best provider/model for your goal
bun run profile:recommend -- --goal coding --benchmark
# auto-apply the best available local/openai provider/model for your goal
bun run profile:auto -- --goal latency
# codex bootstrap (defaults to codexplan and ~/.codex/auth.json)
bun run profile:codex
# openai bootstrap with explicit key
bun run profile:init -- --provider openai --api-key sk-...
# ollama bootstrap with custom model
bun run profile:init -- --provider ollama --model llama3.1:8b
# ollama bootstrap with intelligent model auto-selection
bun run profile:init -- --provider ollama --goal coding
# codex bootstrap with a fast model alias
bun run profile:init -- --provider codex --model codexspark
# launch using persisted profile (.openclaude-profile.json)
bun run dev:profile
# codex profile (uses CODEX_API_KEY or ~/.codex/auth.json)
bun run dev:codex
# OpenAI profile (requires OPENAI_API_KEY in your shell)
bun run dev:openai
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
bun run dev:ollama

profile:recommend ranks installed Ollama models for latency, balanced, or coding, and profile:auto can persist the recommendation directly. If no profile exists yet, dev:profile now uses the same goal-aware defaults when picking the initial model.

Use --provider ollama when you want a local-only path. Auto mode falls back to OpenAI when no viable local chat model is installed. Goal-based Ollama selection only recommends among models that are already installed and reachable from Ollama.

Use profile:codex or --provider codex when you want the ChatGPT Codex backend.

dev:openai, dev:ollama, and dev:codex run doctor:runtime first and only launch the app if checks pass. For dev:ollama, make sure Ollama is running locally before launch.


What Works

  • All tools: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
  • Streaming: Real-time token streaming
  • Tool calling: Multi-step tool chains (the model calls tools, gets results, continues)
  • Images: Base64 and URL images passed to vision models
  • Slash commands: /commit, /review, /compact, /diff, /doctor, etc.
  • Sub-agents: AgentTool spawns sub-agents using the same provider
  • Memory: Persistent memory system

What's Different

  • No thinking mode: Anthropic's extended thinking is disabled (OpenAI models use different reasoning)
  • No prompt caching: Anthropic-specific cache headers are skipped
  • No beta features: Anthropic-specific beta headers are ignored
  • Token limits: Defaults to 32K max output — some models may cap lower, which is handled gracefully

How It Works

The shim (src/services/api/openaiShim.ts) sits between Claude Code and the LLM API:

Claude Code Tool System
|
v
Anthropic SDK interface (duck-typed)
|
v
openaiShim.ts <-- translates formats
|
v
OpenAI Chat Completions API
|
v
Any compatible model

It translates:

  • Anthropic message blocks → OpenAI messages
  • Anthropic tool_use/tool_result → OpenAI function calls
  • OpenAI SSE streaming → Anthropic stream events
  • Anthropic system prompt arrays → OpenAI system messages

The rest of Claude Code doesn't know it's talking to a different model.


Model Quality Notes

Not all models are equal at agentic tool use. Here's a rough guide:

ModelTool CallingCode QualitySpeed
GPT-4oExcellentExcellentFast
DeepSeek-V3GreatGreatFast
Gemini 2.0 FlashGreatGoodVery Fast
Llama 3.3 70BGoodGoodMedium
Mistral LargeGoodGoodFast
GPT-4o-miniGoodGoodVery Fast
Qwen 2.5 72BGoodGoodMedium
Smaller models (<7B)LimitedLimitedVery Fast

For best results, use models with strong function/tool calling support.


Files Changed from Original

src/services/api/openaiShim.ts — NEW: OpenAI-compatible API shim (724 lines)
src/services/api/client.ts — Routes to shim when CLAUDE_CODE_USE_OPENAI=1
src/utils/model/providers.ts — Added 'openai' provider type
src/utils/model/configs.ts — Added openai model mappings
src/utils/model/model.ts — Respects OPENAI_MODEL for defaults
src/utils/auth.ts — Recognizes OpenAI as valid 3P provider

6 files changed. 786 lines added. Zero dependencies added.


Origin

This is a fork of instructkr/claude-code, which mirrored the Claude Code source snapshot that became publicly accessible through an npm source map exposure on March 31, 2026.

The original Claude Code source is the property of Anthropic. This repository is not affiliated with or endorsed by Anthropic.


License

This repository is provided for educational and research purposes. The original source code is subject to Anthropic's terms. The OpenAI shim additions are public domain.

About

Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models via OpenAI-compatible API shim

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenClaude

Use Claude Code with any LLM — not just Claude.

OpenClaude is a fork of the Claude Code source leak (exposed via npm source maps on March 31, 2026). We added an OpenAI-compatible provider shim so you can plug in GPT-4o, DeepSeek, Gemini, Llama, Mistral, or any model that speaks the OpenAI chat completions API. It now also supports the ChatGPT Codex backend for codexplan and codexspark.

All of Claude Code's tools work — bash, file read/write/edit, grep, glob, agents, tasks, MCP — just powered by whatever model you choose.


Install

Option A: npm (recommended)

npm install -g @gitlawb/openclaude

Option B: From source (requires Bun)

# Clone from gitlawb
git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
# Install dependencies
bun install
# Build
bun run build
# Link globally (optional)
npm link

Option C: Run directly with Bun (no build step)

git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
bun install
bun run dev

Quick Start

1. Set 3 environment variables

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-your-key-here
export OPENAI_MODEL=gpt-4o

2. Run it

# If installed via npm
openclaude
# If built from source
bun run dev
# or after build:
node dist/cli.mjs

That's it. The tool system, streaming, file editing, multi-step reasoning — everything works through the model you picked.

The npm package name is @gitlawb/openclaude, but the installed CLI command is still openclaude.


Provider Examples

OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o

Codex via ChatGPT auth

codexplan maps to GPT-5.4 on the Codex backend with high reasoning. codexspark maps to GPT-5.3 Codex Spark for faster loops.

If you already use the Codex CLI, OpenClaude will read ~/.codex/auth.json automatically. You can also point it elsewhere with CODEX_AUTH_JSON_PATH or override the token directly with CODEX_API_KEY.

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_MODEL=codexplan
# optional if you do not already have ~/.codex/auth.jsonexport CODEX_API_KEY=...
openclaude

DeepSeek

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://api.deepseek.com/v1
export OPENAI_MODEL=deepseek-chat

Google Gemini (via OpenRouter)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-or-...
export OPENAI_BASE_URL=https://openrouter.ai/api/v1
export OPENAI_MODEL=google/gemini-2.0-flash

Ollama (local, free)

ollama pull llama3.3:70b
export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.3:70b
# no API key needed for local models

LM Studio (local)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

Together AI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.together.xyz/v1
export OPENAI_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo

Groq

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=gsk_...
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export OPENAI_MODEL=llama-3.3-70b-versatile

Mistral

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.mistral.ai/v1
export OPENAI_MODEL=mistral-large-latest

Azure OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=your-azure-key
export OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/your-deployment/v1
export OPENAI_MODEL=gpt-4o

Environment Variables

VariableRequiredDescription
CLAUDE_CODE_USE_OPENAIYesSet to 1 to enable the OpenAI provider
OPENAI_API_KEYYes*Your API key (*not needed for local models like Ollama)
OPENAI_MODELYesModel name (e.g. gpt-4o, deepseek-chat, llama3.3:70b)
OPENAI_BASE_URLNoAPI endpoint (defaults to https://api.openai.com/v1)
CODEX_API_KEYCodex onlyCodex/ChatGPT access token override
CODEX_AUTH_JSON_PATHCodex onlyPath to a Codex CLI auth.json file
CODEX_HOMECodex onlyAlternative Codex home directory (auth.json will be read from here)
OPENCLAUDE_DISABLE_CO_AUTHORED_BYNoSet to 1 to suppress the default Co-Authored-By trailer in generated git commit messages

You can also use ANTHROPIC_MODEL to override the model name. OPENAI_MODEL takes priority.

OpenClaude PR bodies use OpenClaude branding by default. OPENCLAUDE_DISABLE_CO_AUTHORED_BY only affects the commit trailer, not PR attribution text.


Runtime Hardening

Use these commands to keep the CLI stable and catch environment mistakes early:

# quick startup sanity check
bun run smoke
# validate provider env + reachability
bun run doctor:runtime
# print machine-readable runtime diagnostics
bun run doctor:runtime:json
# persist a diagnostics report to reports/doctor-runtime.json
bun run doctor:report
# full local hardening check (smoke + runtime doctor)
bun run hardening:check
# strict hardening (includes project-wide typecheck)
bun run hardening:strict

Notes:

  • doctor:runtime fails fast if CLAUDE_CODE_USE_OPENAI=1 with a placeholder key (SUA_CHAVE) or a missing key for non-local providers.
  • Local providers (for example http://localhost:11434/v1) can run without OPENAI_API_KEY.
  • Codex profiles validate CODEX_API_KEY or the Codex CLI auth file and probe POST /responses instead of GET /models.

Provider Launch Profiles

Use profile launchers to avoid repeated environment setup:

# one-time profile bootstrap (prefer viable local Ollama, otherwise OpenAI)
bun run profile:init
# preview the best provider/model for your goal
bun run profile:recommend -- --goal coding --benchmark
# auto-apply the best available local/openai provider/model for your goal
bun run profile:auto -- --goal latency
# codex bootstrap (defaults to codexplan and ~/.codex/auth.json)
bun run profile:codex
# openai bootstrap with explicit key
bun run profile:init -- --provider openai --api-key sk-...
# ollama bootstrap with custom model
bun run profile:init -- --provider ollama --model llama3.1:8b
# ollama bootstrap with intelligent model auto-selection
bun run profile:init -- --provider ollama --goal coding
# codex bootstrap with a fast model alias
bun run profile:init -- --provider codex --model codexspark
# launch using persisted profile (.openclaude-profile.json)
bun run dev:profile
# codex profile (uses CODEX_API_KEY or ~/.codex/auth.json)
bun run dev:codex
# OpenAI profile (requires OPENAI_API_KEY in your shell)
bun run dev:openai
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
bun run dev:ollama

profile:recommend ranks installed Ollama models for latency, balanced, or coding, and profile:auto can persist the recommendation directly. If no profile exists yet, dev:profile now uses the same goal-aware defaults when picking the initial model.

Use --provider ollama when you want a local-only path. Auto mode falls back to OpenAI when no viable local chat model is installed. Goal-based Ollama selection only recommends among models that are already installed and reachable from Ollama.

Use profile:codex or --provider codex when you want the ChatGPT Codex backend.

dev:openai, dev:ollama, and dev:codex run doctor:runtime first and only launch the app if checks pass. For dev:ollama, make sure Ollama is running locally before launch.


What Works

  • All tools: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
  • Streaming: Real-time token streaming
  • Tool calling: Multi-step tool chains (the model calls tools, gets results, continues)
  • Images: Base64 and URL images passed to vision models
  • Slash commands: /commit, /review, /compact, /diff, /doctor, etc.
  • Sub-agents: AgentTool spawns sub-agents using the same provider
  • Memory: Persistent memory system

What's Different

  • No thinking mode: Anthropic's extended thinking is disabled (OpenAI models use different reasoning)
  • No prompt caching: Anthropic-specific cache headers are skipped
  • No beta features: Anthropic-specific beta headers are ignored
  • Token limits: Defaults to 32K max output — some models may cap lower, which is handled gracefully

How It Works

The shim (src/services/api/openaiShim.ts) sits between Claude Code and the LLM API:

Claude Code Tool System
|
v
Anthropic SDK interface (duck-typed)
|
v
openaiShim.ts <-- translates formats
|
v
OpenAI Chat Completions API
|
v
Any compatible model

It translates:

  • Anthropic message blocks → OpenAI messages
  • Anthropic tool_use/tool_result → OpenAI function calls
  • OpenAI SSE streaming → Anthropic stream events
  • Anthropic system prompt arrays → OpenAI system messages

The rest of Claude Code doesn't know it's talking to a different model.


Model Quality Notes

Not all models are equal at agentic tool use. Here's a rough guide:

ModelTool CallingCode QualitySpeed
GPT-4oExcellentExcellentFast
DeepSeek-V3GreatGreatFast
Gemini 2.0 FlashGreatGoodVery Fast
Llama 3.3 70BGoodGoodMedium
Mistral LargeGoodGoodFast
GPT-4o-miniGoodGoodVery Fast
Qwen 2.5 72BGoodGoodMedium
Smaller models (<7B)LimitedLimitedVery Fast

For best results, use models with strong function/tool calling support.


Files Changed from Original

src/services/api/openaiShim.ts — NEW: OpenAI-compatible API shim (724 lines)
src/services/api/client.ts — Routes to shim when CLAUDE_CODE_USE_OPENAI=1
src/utils/model/providers.ts — Added 'openai' provider type
src/utils/model/configs.ts — Added openai model mappings
src/utils/model/model.ts — Respects OPENAI_MODEL for defaults
src/utils/auth.ts — Recognizes OpenAI as valid 3P provider

6 files changed. 786 lines added. Zero dependencies added.


Origin

This is a fork of instructkr/claude-code, which mirrored the Claude Code source snapshot that became publicly accessible through an npm source map exposure on March 31, 2026.

The original Claude Code source is the property of Anthropic. This repository is not affiliated with or endorsed by Anthropic.


License

This repository is provided for educational and research purposes. The original source code is subject to Anthropic's terms. The OpenAI shim additions are public domain.

About

Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models via OpenAI-compatible API shim

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

OpenClaude

Use Claude Code with any LLM — not just Claude.

OpenClaude is a fork of the Claude Code source leak (exposed via npm source maps on March 31, 2026). We added an OpenAI-compatible provider shim so you can plug in GPT-4o, DeepSeek, Gemini, Llama, Mistral, or any model that speaks the OpenAI chat completions API. It now also supports the ChatGPT Codex backend for codexplan and codexspark.

All of Claude Code's tools work — bash, file read/write/edit, grep, glob, agents, tasks, MCP — just powered by whatever model you choose.


Install

Option A: npm (recommended)

npm install -g @gitlawb/openclaude

Option B: From source (requires Bun)

# Clone from gitlawb
git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
# Install dependencies
bun install
# Build
bun run build
# Link globally (optional)
npm link

Option C: Run directly with Bun (no build step)

git clone https://node.gitlawb.com/z6MkqDnb7Siv3Cwj7pGJq4T5EsUisECqR8KpnDLwcaZq5TPr/openclaude.git
cd openclaude
bun install
bun run dev

Quick Start

1. Set 3 environment variables

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-your-key-here
export OPENAI_MODEL=gpt-4o

2. Run it

# If installed via npm
openclaude
# If built from source
bun run dev
# or after build:
node dist/cli.mjs

That's it. The tool system, streaming, file editing, multi-step reasoning — everything works through the model you picked.

The npm package name is @gitlawb/openclaude, but the installed CLI command is still openclaude.


Provider Examples

OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4o

Codex via ChatGPT auth

codexplan maps to GPT-5.4 on the Codex backend with high reasoning. codexspark maps to GPT-5.3 Codex Spark for faster loops.

If you already use the Codex CLI, OpenClaude will read ~/.codex/auth.json automatically. You can also point it elsewhere with CODEX_AUTH_JSON_PATH or override the token directly with CODEX_API_KEY.

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_MODEL=codexplan
# optional if you do not already have ~/.codex/auth.jsonexport CODEX_API_KEY=...
openclaude

DeepSeek

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-...
export OPENAI_BASE_URL=https://api.deepseek.com/v1
export OPENAI_MODEL=deepseek-chat

Google Gemini (via OpenRouter)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=sk-or-...
export OPENAI_BASE_URL=https://openrouter.ai/api/v1
export OPENAI_MODEL=google/gemini-2.0-flash

Ollama (local, free)

ollama pull llama3.3:70b
export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3.3:70b
# no API key needed for local models

LM Studio (local)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

Together AI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.together.xyz/v1
export OPENAI_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo

Groq

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=gsk_...
export OPENAI_BASE_URL=https://api.groq.com/openai/v1
export OPENAI_MODEL=llama-3.3-70b-versatile

Mistral

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=...
export OPENAI_BASE_URL=https://api.mistral.ai/v1
export OPENAI_MODEL=mistral-large-latest

Azure OpenAI

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_API_KEY=your-azure-key
export OPENAI_BASE_URL=https://your-resource.openai.azure.com/openai/deployments/your-deployment/v1
export OPENAI_MODEL=gpt-4o

Environment Variables

VariableRequiredDescription
CLAUDE_CODE_USE_OPENAIYesSet to 1 to enable the OpenAI provider
OPENAI_API_KEYYes*Your API key (*not needed for local models like Ollama)
OPENAI_MODELYesModel name (e.g. gpt-4o, deepseek-chat, llama3.3:70b)
OPENAI_BASE_URLNoAPI endpoint (defaults to https://api.openai.com/v1)
CODEX_API_KEYCodex onlyCodex/ChatGPT access token override
CODEX_AUTH_JSON_PATHCodex onlyPath to a Codex CLI auth.json file
CODEX_HOMECodex onlyAlternative Codex home directory (auth.json will be read from here)
OPENCLAUDE_DISABLE_CO_AUTHORED_BYNoSet to 1 to suppress the default Co-Authored-By trailer in generated git commit messages

You can also use ANTHROPIC_MODEL to override the model name. OPENAI_MODEL takes priority.

OpenClaude PR bodies use OpenClaude branding by default. OPENCLAUDE_DISABLE_CO_AUTHORED_BY only affects the commit trailer, not PR attribution text.


Runtime Hardening

Use these commands to keep the CLI stable and catch environment mistakes early:

# quick startup sanity check
bun run smoke
# validate provider env + reachability
bun run doctor:runtime
# print machine-readable runtime diagnostics
bun run doctor:runtime:json
# persist a diagnostics report to reports/doctor-runtime.json
bun run doctor:report
# full local hardening check (smoke + runtime doctor)
bun run hardening:check
# strict hardening (includes project-wide typecheck)
bun run hardening:strict

Notes:

  • doctor:runtime fails fast if CLAUDE_CODE_USE_OPENAI=1 with a placeholder key (SUA_CHAVE) or a missing key for non-local providers.
  • Local providers (for example http://localhost:11434/v1) can run without OPENAI_API_KEY.
  • Codex profiles validate CODEX_API_KEY or the Codex CLI auth file and probe POST /responses instead of GET /models.

Provider Launch Profiles

Use profile launchers to avoid repeated environment setup:

# one-time profile bootstrap (prefer viable local Ollama, otherwise OpenAI)
bun run profile:init
# preview the best provider/model for your goal
bun run profile:recommend -- --goal coding --benchmark
# auto-apply the best available local/openai provider/model for your goal
bun run profile:auto -- --goal latency
# codex bootstrap (defaults to codexplan and ~/.codex/auth.json)
bun run profile:codex
# openai bootstrap with explicit key
bun run profile:init -- --provider openai --api-key sk-...
# ollama bootstrap with custom model
bun run profile:init -- --provider ollama --model llama3.1:8b
# ollama bootstrap with intelligent model auto-selection
bun run profile:init -- --provider ollama --goal coding
# codex bootstrap with a fast model alias
bun run profile:init -- --provider codex --model codexspark
# launch using persisted profile (.openclaude-profile.json)
bun run dev:profile
# codex profile (uses CODEX_API_KEY or ~/.codex/auth.json)
bun run dev:codex
# OpenAI profile (requires OPENAI_API_KEY in your shell)
bun run dev:openai
# Ollama profile (defaults: localhost:11434, llama3.1:8b)
bun run dev:ollama

profile:recommend ranks installed Ollama models for latency, balanced, or coding, and profile:auto can persist the recommendation directly. If no profile exists yet, dev:profile now uses the same goal-aware defaults when picking the initial model.

Use --provider ollama when you want a local-only path. Auto mode falls back to OpenAI when no viable local chat model is installed. Goal-based Ollama selection only recommends among models that are already installed and reachable from Ollama.

Use profile:codex or --provider codex when you want the ChatGPT Codex backend.

dev:openai, dev:ollama, and dev:codex run doctor:runtime first and only launch the app if checks pass. For dev:ollama, make sure Ollama is running locally before launch.


What Works

  • All tools: Bash, FileRead, FileWrite, FileEdit, Glob, Grep, WebFetch, WebSearch, Agent, MCP, LSP, NotebookEdit, Tasks
  • Streaming: Real-time token streaming
  • Tool calling: Multi-step tool chains (the model calls tools, gets results, continues)
  • Images: Base64 and URL images passed to vision models
  • Slash commands: /commit, /review, /compact, /diff, /doctor, etc.
  • Sub-agents: AgentTool spawns sub-agents using the same provider
  • Memory: Persistent memory system

What's Different

  • No thinking mode: Anthropic's extended thinking is disabled (OpenAI models use different reasoning)
  • No prompt caching: Anthropic-specific cache headers are skipped
  • No beta features: Anthropic-specific beta headers are ignored
  • Token limits: Defaults to 32K max output — some models may cap lower, which is handled gracefully

How It Works

The shim (src/services/api/openaiShim.ts) sits between Claude Code and the LLM API:

Claude Code Tool System
|
v
Anthropic SDK interface (duck-typed)
|
v
openaiShim.ts <-- translates formats
|
v
OpenAI Chat Completions API
|
v
Any compatible model

It translates:

  • Anthropic message blocks → OpenAI messages
  • Anthropic tool_use/tool_result → OpenAI function calls
  • OpenAI SSE streaming → Anthropic stream events
  • Anthropic system prompt arrays → OpenAI system messages

The rest of Claude Code doesn't know it's talking to a different model.


Model Quality Notes

Not all models are equal at agentic tool use. Here's a rough guide:

ModelTool CallingCode QualitySpeed
GPT-4oExcellentExcellentFast
DeepSeek-V3GreatGreatFast
Gemini 2.0 FlashGreatGoodVery Fast
Llama 3.3 70BGoodGoodMedium
Mistral LargeGoodGoodFast
GPT-4o-miniGoodGoodVery Fast
Qwen 2.5 72BGoodGoodMedium
Smaller models (<7B)LimitedLimitedVery Fast

For best results, use models with strong function/tool calling support.


Files Changed from Original

src/services/api/openaiShim.ts — NEW: OpenAI-compatible API shim (724 lines)
src/services/api/client.ts — Routes to shim when CLAUDE_CODE_USE_OPENAI=1
src/utils/model/providers.ts — Added 'openai' provider type
src/utils/model/configs.ts — Added openai model mappings
src/utils/model/model.ts — Respects OPENAI_MODEL for defaults
src/utils/auth.ts — Recognizes OpenAI as valid 3P provider

6 files changed. 786 lines added. Zero dependencies added.


Origin

This is a fork of instructkr/claude-code, which mirrored the Claude Code source snapshot that became publicly accessible through an npm source map exposure on March 31, 2026.

The original Claude Code source is the property of Anthropic. This repository is not affiliated with or endorsed by Anthropic.


License

This repository is provided for educational and research purposes. The original source code is subject to Anthropic's terms. The OpenAI shim additions are public domain.

About

Claude Code opened to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models via OpenAI-compatible API shim

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages