OpenClaw
Ready-made agentsIntermediate5 min
OpenClaw connects to Zukko as a custom provider. Config: ~/.openclaw/openclaw.json. Key: fetch_... (API keys).
| Option | api | baseUrl |
|---|---|---|
| OpenAI Compatible | openai-completions | https://api.zukko.pro/v1 |
| Anthropic Messages | anthropic-messages | https://api.zukko.pro |
1With onboard
bash
npm install -g openclaw
openclaw onboard --non-interactive --accept-risk \
--auth-choice custom-api-key \
--custom-base-url "https://api.zukko.pro/v1" \
--custom-model-id "claude-sonnet-5" \
--custom-api-key "fetch_..." \
--secret-input-mode plaintext \
--custom-compatibility openaiFor the Anthropic option use --custom-base-url "https://api.zukko.pro" (no /v1) and --custom-compatibility anthropic. Onboard flags change between versions — check openclaw onboard --help.
2Manual: OpenAI Compatible
A custom provider's model must be listed in models.providers.<provider>.models[], otherwise OpenClaw does not know about it.
json5
{
models: {
mode: "merge",
providers: {
zukko: {
baseUrl: "https://api.zukko.pro/v1",
apiKey: "fetch_...",
api: "openai-completions",
models: [
{
id: "claude-sonnet-5",
name: "Claude Sonnet 5",
input: ["text", "image"],
contextWindow: 1000000,agents.defaults.models only sets aliases and per-model settings — it does not restrict anything.
3Manual: Anthropic Messages
Same file, but in the provider:
json5
baseUrl: "https://api.zukko.pro",
api: "anthropic-messages",Base URL without /v1.
4Apply and check
The Gateway picks up changes to openclaw.json by itself. If OpenClaw says Restart the gateway to apply, restart the Gateway. To check:
bash
openclaw config validate
openclaw models list5If it fails
- Model not listed — make sure it is in
models.providers.zukko.models[]and the id matchesGET /v1/models. - Model not allowed — if you set
agents.defaults.modelPolicy.allow, addzukko/<id>(orzukko/*) to it. - 401 — check the
fetch_...key and the URL from the table (with or without/v1). - 404 `model_not_found` — there is no such model in the catalog: check the name against
GET /v1/models. - 503 `model_disabled` — the model is temporarily switched off; pick another from
GET /v1/models.