export CUSTOM_API_KEY="YOUR_CAPRIOLE_AI_API_KEY"
export CAPRIOLE_ANTHROPIC_BASE_URL="https://api.caprioletech.com"
openclaw onboard --non-interactive \
--accept-risk \
--mode local \
--auth-choice custom-api-key \
--custom-base-url "$CAPRIOLE_ANTHROPIC_BASE_URL" \
--custom-model-id "claude-latest" \
--custom-provider-id "capriole-ai-anthropic" \
--custom-compatibility anthropic \
--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-anthropic.request.auth \
'{"mode":"authorization-bearer","token":"${CUSTOM_API_KEY}"}' \
--strict-json
openclaw config set models.providers.capriole-ai-anthropic.api \
'"anthropic-messages"' \
--strict-json
openclaw config set models.providers.capriole-ai-anthropic.models \
'[
{
"id": "claude-latest",
"name": "Claude latest",
"api": "anthropic-messages",
"contextWindow": 200000,
"maxTokens": 32000,
"input": ["text"],
"reasoning": true,
"cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
},
{
"id": "claude-opus-4-8",
"name": "Opus 4.8",
"api": "anthropic-messages",
"contextWindow": 200000,
"maxTokens": 32000,
"input": ["text"],
"reasoning": true,
"cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
},
{
"id": "claude-opus-4-7",
"name": "Opus 4.7",
"api": "anthropic-messages",
"contextWindow": 200000,
"maxTokens": 32000,
"input": ["text"],
"reasoning": true,
"cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
},
{
"id": "claude-opus-4-6",
"name": "Opus 4.6",
"api": "anthropic-messages",
"contextWindow": 200000,
"maxTokens": 32000,
"input": ["text"],
"reasoning": true,
"cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
},
{
"id": "claude-sonnet-4-6",
"name": "Sonnet 4.6",
"api": "anthropic-messages",
"contextWindow": 200000,
"maxTokens": 32000,
"input": ["text"],
"reasoning": true,
"cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
}
]' \
--strict-json