export CUSTOM_API_KEY="YOUR_CAPRIOLE_AI_API_KEY"
export CAPRIOLE_OPENAI_BASE_URL="https://api.caprioletech.com/v1"
openclaw onboard --non-interactive \
--accept-risk \
--mode local \
--auth-choice custom-api-key \
--custom-base-url "$CAPRIOLE_OPENAI_BASE_URL" \
--custom-model-id "openai/gpt-5.5" \
--custom-provider-id "capriole-ai-openai" \
--custom-compatibility openai \
--secret-input-mode ref \
--gateway-port 18789 \
--gateway-bind loopback \
--skip-channels \
--skip-search \
--skip-skills \
--skip-health \
--no-install-daemon
openclaw config set models.providers.capriole-ai-openai.request.auth \
'{"mode":"authorization-bearer","token":"${CUSTOM_API_KEY}"}' \
--strict-json
openclaw config set models.providers.capriole-ai-openai.api \
'"openai-responses"' \
--strict-json
openclaw config set models.providers.capriole-ai-openai.models \
'[
{
"id": "openai/gpt-5.5",
"name": "GPT 5.5",
"api": "openai-responses",
"contextWindow": 400000,
"maxTokens": 128000,
"input": ["text"],
"reasoning": true,
"cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
},
{
"id": "openai/gpt-5.4-mini",
"name": "GPT 5.4 mini",
"api": "openai-responses",
"contextWindow": 400000,
"maxTokens": 128000,
"input": ["text"],
"reasoning": true,
"cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
}
]' \
--strict-json