OpenAI-compatible API proxy for Command Code.
Use your Command Code subscription from any OpenAI-compatible client — OpenCode, Continue, the OpenAI SDK, or plain curl.
npx commandcode-api-proxy
Command Code exposes two API surfaces:
| Surface | Protocol | Plan required |
|---|---|---|
/provider/v1/chat/completions |
OpenAI-compatible | Provider tier (paid add-on) |
/alpha/generate |
Custom (Vercel AI SDK stream) | Your standard subscription |
This proxy talks /alpha/generate upstream and standard OpenAI downstream — so your existing plan works from any tool.
# Run directly (no install)
npx commandcode-api-proxy
# Or install globally
npm install -g commandcode-api-proxy
commandcode-api-proxyThe proxy loads your API key from (in order of priority):
--api-keyCLI flag:npx commandcode-api-proxy --api-key user_xxxCC_API_KEYenvironment variable~/.commandcode/auth.json(auto-generated bynpx command-code)
If you've already run npx command-code to log in, no extra setup is needed.
| Option | Description | Default |
|---|---|---|
--host |
Bind address | 127.0.0.1 |
--port |
Port | 8787 |
--api-key |
Command Code API key | — |
curl http://127.0.0.1:8787/v1/chat/completions \
-H "Authorization: Bearer user_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4-pro",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'Add to your opencode.json (project root or ~/.config/opencode/opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"commandcode": {
"npm": "@ai-sdk/openai-compatible",
"name": "Command Code",
"options": {
"baseURL": "http://127.0.0.1:8787/v1"
},
"models": {
"deepseek/deepseek-v4-pro": { "name": "DeepSeek V4 Pro" },
"deepseek/deepseek-v4-flash": { "name": "DeepSeek V4 Flash" },
"MiniMaxAI/MiniMax-M2.7": { "name": "MiniMax M2.7" },
"MiniMaxAI/MiniMax-M2.5": { "name": "MiniMax M2.5" },
"zai-org/GLM-5.1": { "name": "GLM 5.1" },
"zai-org/GLM-5": { "name": "GLM 5" },
"moonshotai/Kimi-K2.6": { "name": "Kimi K2.6" },
"moonshotai/Kimi-K2.5": { "name": "Kimi K2.5" },
"Qwen/Qwen3.6-Max-Preview": { "name": "Qwen 3.6 Max" },
"Qwen/Qwen3.6-Plus": { "name": "Qwen 3.6 Plus" },
"Qwen/Qwen3.7-Max": { "name": "Qwen 3.7 Max" },
"Qwen/Qwen3.7-Plus": { "name": "Qwen 3.7 Plus" },
"stepfun/Step-3.5-Flash": { "name": "Step 3.5 Flash" },
"google/gemini-3.1-flash-lite": { "name": "Gemini 3.1 Flash Lite" },
"google/gemini-3.5-flash": { "name": "Gemini 3.5 Flash" },
"xiaomi/mimo-v2.5": { "name": "MiMo v2.5" },
"claude-sonnet-4-6": { "name": "Claude Sonnet 4.6" },
"claude-opus-4-7": { "name": "Claude Opus 4.7" },
"openai/gpt-5.5": { "name": "GPT 5.5" }
}
}
}
}from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8787/v1",
api_key="placeholder",
)
response = client.chat.completions.create(
model="deepseek/deepseek-v4-pro",
messages=[{"role": "user", "content": "Hello!"}],
){
"models": [
{
"title": "Command Code",
"provider": "openai",
"model": "deepseek/deepseek-v4-pro",
"apiKey": "placeholder",
"apiBase": "http://127.0.0.1:8787/v1"
}
]
}Short names work in addition to full model IDs:
| Alias | Maps to |
|---|---|
deepseek-v4-pro, deepseek-v4 |
deepseek/deepseek-v4-pro |
deepseek-v4-flash, deepseek-flash |
deepseek/deepseek-v4-flash |
claude-sonnet-4-6, claude-opus-4-7 |
deepseek/deepseek-v4-pro |
gpt-4, gpt-4o, gpt-5, gpt-5.5 |
deepseek/deepseek-v4-pro |
kimi-k2.6, kimi-k2.5 |
moonshotai/Kimi-* |
qwen-3.6-max, qwen-3.6-plus |
Qwen/Qwen3.6-* |
glm-5.1, glm-5 |
zai-org/GLM-* |
MIT