Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ MINIMAX_API_KEY=
ZAI_API_KEY=
AI_GATEWAY_API_KEY=
OPENCODE_API_KEY=
LITELLM_API_KEY=
SYNTHETIC_API_KEY=
COPILOT_GITHUB_TOKEN=
XIAOMI_API_KEY=
Expand Down Expand Up @@ -186,6 +187,7 @@ WHATSAPP_DM_POLICY=pairing
# Custom base URL, e.g. Cloudflare AI Gateway:
# https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/anthropic
AI_GATEWAY_BASE_URL=
LITELLM_BASE_URL=
ANTHROPIC_BASE_URL=
MOONSHOT_BASE_URL=
KIMI_BASE_URL=
Expand All @@ -208,4 +210,3 @@ PORT=8080
# COOLIFY_FQDN — public FQDN assigned by Coolify
# COOLIFY_URL — Coolify dashboard URL
# COOLIFY_BRANCH — git branch deployed

8 changes: 4 additions & 4 deletions .github/workflows/auto-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ on:
default: false

env:
GITHUB_REGISTRY: ghcr.io
DOCKER_REGISTRY: docker.io
IMAGE_NAME: coollabsio/openclaw
BASE_IMAGE_NAME: coollabsio/openclaw-base
GITHUB_REGISTRY: ${{ vars.GITHUB_REGISTRY || 'ghcr.io' }}
DOCKER_REGISTRY: ${{ vars.DOCKER_REGISTRY || 'docker.io' }}
IMAGE_NAME: ${{ vars.IMAGE_NAME || 'coollabsio/openclaw' }}
BASE_IMAGE_NAME: ${{ vars.BASE_IMAGE_NAME || 'coollabsio/openclaw-base' }}

jobs:
check-release:
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,11 +117,12 @@ Triggers: `schedule: '0 */6 * * *'` + `workflow_dispatch` (version, force_rebuil
| `ZAI_API_KEY` | ZAI API key. Configures GLM models. |
| `AI_GATEWAY_API_KEY` | Vercel AI Gateway API key. |
| `OPENCODE_API_KEY` | OpenCode API key. Also accepted as `OPENCODE_ZEN_API_KEY`. |
| `LITELLM_API_KEY` | LiteLLM API key (OpenAI-compatible). Default base URL is `http://localhost:4000` (override with `LITELLM_BASE_URL`). |
| `SYNTHETIC_API_KEY` | Synthetic API key (Anthropic-compatible). |
| `COPILOT_GITHUB_TOKEN` | GitHub Copilot token. Configures Claude models via GitHub. |
| `XIAOMI_API_KEY` | Xiaomi MiMo API key (Anthropic-compatible). Configures MiMo v2 Flash. |

Multiple providers can be set simultaneously. Priority for primary model: Anthropic > OpenAI > OpenRouter > Gemini > OpenCode > GitHub Copilot > xAI > Groq > Mistral > Cerebras > Venice > Moonshot > Kimi > MiniMax > Synthetic > ZAI > AI Gateway > Xiaomi > Bedrock > Ollama.
Multiple providers can be set simultaneously. Priority for primary model: Anthropic > OpenAI > OpenRouter > Gemini > OpenCode > GitHub Copilot > xAI > Groq > Mistral > Cerebras > Venice > Moonshot > Kimi > MiniMax > Synthetic > ZAI > AI Gateway > Xiaomi > Bedrock > LiteLLM > Ollama.

If a provider env var is removed, that provider section is cleaned from `openclaw.json` on next start.

Expand Down Expand Up @@ -308,6 +309,7 @@ If a channel env var is removed, that channel is cleaned from config on next sta
| Variable | Description |
|---|---|
| `AI_GATEWAY_BASE_URL` | Custom base URL for AI gateway (e.g. Cloudflare AI Gateway). Applied to the matching provider based on URL suffix. |
| `LITELLM_BASE_URL` | Base URL for LiteLLM Proxy (default: `http://localhost:4000`). |
| `ANTHROPIC_BASE_URL` | Override Anthropic API base URL specifically. |
| `MOONSHOT_BASE_URL` | Override Moonshot API base URL. Default: `https://api.moonshot.ai/v1`. |
| `KIMI_BASE_URL` | Override Kimi Coding API base URL. Default: `https://api.moonshot.ai/anthropic`. |
Expand Down
24 changes: 23 additions & 1 deletion scripts/configure.js
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,26 @@ if (ollamaUrl) {
removeProvider("ollama", "Ollama", "OLLAMA_BASE_URL");
}

// LiteLLM (OpenAI-compatible)
const litellmKey = (process.env.LITELLM_API_KEY || "").trim();
if (litellmKey) {
console.log("[configure] configuring LiteLLM provider");
ensure(config, "models", "providers");
const litellmBaseUrl = (process.env.LITELLM_BASE_URL || "http://localhost:4000")
.trim()
.replace(/\/+$/, "");
config.models.providers.litellm = {
api: "openai-completions",
apiKey: litellmKey,
baseUrl: litellmBaseUrl,
models: [
{ id: "claude-opus-4-6", name: "Claude Opus 4.6 (LiteLLM)", contextWindow: 200000 },
],
};
} else {
removeProvider("litellm", "LiteLLM", "LITELLM_API_KEY");
}

// ── Primary model selection (first available provider wins) ─────────────────
const primaryCandidates = [
[process.env.ANTHROPIC_API_KEY, "anthropic/claude-opus-4-5-20251101"],
Expand All @@ -341,6 +361,7 @@ const primaryCandidates = [
[process.env.AI_GATEWAY_API_KEY, "vercel-ai-gateway/anthropic/claude-opus-4.5"],
[process.env.XIAOMI_API_KEY, "xiaomi/mimo-v2-flash"],
[process.env.AWS_ACCESS_KEY_ID, "amazon-bedrock/anthropic.claude-opus-4-5-20251101-v1:0"],
[litellmKey, "litellm/claude-opus-4-6"],
[ollamaUrl, "ollama/llama3.3"],
];
if (process.env.OPENCLAW_PRIMARY_MODEL) {
Expand Down Expand Up @@ -616,6 +637,7 @@ const hasProvider =
!!opencodeKey ||
!!(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY) ||
!!ollamaUrl ||
!!litellmKey ||
// Custom proxy providers also need env var keys
!!process.env.VENICE_API_KEY || !!process.env.MINIMAX_API_KEY ||
!!process.env.MOONSHOT_API_KEY || !!process.env.KIMI_API_KEY ||
Expand All @@ -628,7 +650,7 @@ if (!hasProvider) {
console.error("[configure] XAI_API_KEY, GROQ_API_KEY, MISTRAL_API_KEY, CEREBRAS_API_KEY, ZAI_API_KEY,");
console.error("[configure] AI_GATEWAY_API_KEY, OPENCODE_API_KEY, COPILOT_GITHUB_TOKEN, VENICE_API_KEY,");
console.error("[configure] MOONSHOT_API_KEY, KIMI_API_KEY, MINIMAX_API_KEY, SYNTHETIC_API_KEY, XIAOMI_API_KEY,");
console.error("[configure] AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY (Bedrock), or OLLAMA_BASE_URL (local)");
console.error("[configure] LITELLM_API_KEY, AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY (Bedrock), or OLLAMA_BASE_URL (local)");
process.exit(1);
}

Expand Down
3 changes: 2 additions & 1 deletion scripts/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ for key in ANTHROPIC_API_KEY OPENAI_API_KEY OPENROUTER_API_KEY GEMINI_API_KEY \
XAI_API_KEY GROQ_API_KEY MISTRAL_API_KEY CEREBRAS_API_KEY \
VENICE_API_KEY MOONSHOT_API_KEY KIMI_API_KEY MINIMAX_API_KEY \
ZAI_API_KEY AI_GATEWAY_API_KEY OPENCODE_API_KEY OPENCODE_ZEN_API_KEY \
LITELLM_API_KEY \
SYNTHETIC_API_KEY COPILOT_GITHUB_TOKEN XIAOMI_API_KEY; do
[ -n "${!key:-}" ] && HAS_PROVIDER=1 && break
done
Expand All @@ -89,7 +90,7 @@ if [ "$HAS_PROVIDER" -eq 0 ]; then
echo "[entrypoint] Set one of: ANTHROPIC_API_KEY, OPENAI_API_KEY, OPENROUTER_API_KEY, GEMINI_API_KEY,"
echo "[entrypoint] XAI_API_KEY, GROQ_API_KEY, MISTRAL_API_KEY, CEREBRAS_API_KEY, VENICE_API_KEY,"
echo "[entrypoint] MOONSHOT_API_KEY, KIMI_API_KEY, MINIMAX_API_KEY, ZAI_API_KEY, AI_GATEWAY_API_KEY,"
echo "[entrypoint] OPENCODE_API_KEY, SYNTHETIC_API_KEY, COPILOT_GITHUB_TOKEN, XIAOMI_API_KEY"
echo "[entrypoint] OPENCODE_API_KEY, LITELLM_API_KEY, SYNTHETIC_API_KEY, COPILOT_GITHUB_TOKEN, XIAOMI_API_KEY"
echo "[entrypoint] Or: AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY (Bedrock), OLLAMA_BASE_URL (local)"
exit 1
fi
Expand Down