- Add 4 missing skills: chromedp-alpine-container, claude-memory-api, openclaw-custom-model-provider, webrtc-turn-shared-secret - Add 9 custom agents: sre, dba, devops-engineer, platform-engineer, security-engineer, network-engineer, observability-engineer, home-automation-engineer, cluster-health-checker - Add openclaw-install.sh: standalone script to clone dotfiles and install skills/agents/hooks/settings to OpenClaw's home directory Replaces the cc-config NFS volume + sync.sh approach
4 KiB
4 KiB
| name | description | author | version | date |
|---|---|---|---|---|
| openclaw-custom-model-provider | Configure custom model providers in OpenClaw (openclaw.ai). Use when: (1) adding a new LLM provider (Llama API, LM Studio, custom proxy) to OpenClaw, (2) changing the default model in OpenClaw, (3) enabling/disabling tools and commands in OpenClaw, (4) user mentions openclaw.json or openclaw configuration. Covers the models.providers JSON structure, agent defaults, and tool permissions. | Claude Code | 1.0.0 | 2026-02-16 |
OpenClaw Custom Model Provider Configuration
Problem
OpenClaw supports custom OpenAI-compatible model providers, but the configuration structure requires checking multiple documentation pages to assemble correctly.
Context / Trigger Conditions
- User wants to add a new LLM provider to OpenClaw
- User has an API key for Llama API, OpenRouter, LM Studio, or another OpenAI-compatible service
- User wants to change the default model OpenClaw uses
- User wants to enable all tools/commands (remove denyCommands restrictions)
Solution
Config File Location
~/.openclaw/openclaw.json
Adding a Custom Provider
Add to the models.providers object:
{
"models": {
"mode": "merge",
"providers": {
"my-provider": {
"baseUrl": "https://api.example.com/compat/v1",
"apiKey": "YOUR_API_KEY",
"api": "openai-completions",
"models": [
{
"id": "model-id",
"name": "Display Name",
"reasoning": false,
"input": ["text"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 8192
}
]
}
}
}
}
Key fields:
api: Protocol —"openai-completions"|"openai-responses"|"anthropic-messages"|"google-generative-ai"mode:"merge"(default, keeps built-in providers) or"replace"(only custom)cost: Set all to0for free/self-hosted models- Model reference format:
provider-name/model-id(e.g.,llama-as-openai/Llama-4-Maverick-17B-128E-Instruct-FP8)
Setting Default Model
{
"agents": {
"defaults": {
"model": {
"primary": "my-provider/model-id",
"fallbacks": ["ollama/local-model"]
},
"models": {
"my-provider/model-id": {},
"ollama/local-model": {}
}
}
}
}
Enabling All Tools/Commands
To remove tool restrictions:
{
"commands": {
"native": true,
"nativeSkills": true
},
"gateway": {
"nodes": {
"denyCommands": []
}
}
}
Default denyCommands blocks: camera.snap, camera.clip, screen.record,
calendar.add, contacts.add, reminders.add.
Common Provider Examples
Llama API:
"llama-as-openai": {
"baseUrl": "https://api.llama.com/compat/v1",
"apiKey": "LLM|...",
"api": "openai-completions"
}
Local Ollama:
"ollama": {
"baseUrl": "http://127.0.0.1:11434/v1",
"apiKey": "none",
"api": "openai-completions"
}
LM Studio:
"lmstudio": {
"baseUrl": "http://127.0.0.1:1234/v1",
"apiKey": "lmstudio",
"api": "openai-responses"
}
Verification
- Restart OpenClaw after config changes
- Run
openclawand check that the new model appears in model selection - Send a test message to verify the provider responds
Notes
mode: "merge"is the default and recommended — it keeps built-in providers alongside custom ones- Optional fields:
authHeader(boolean),headers(object for custom HTTP headers) - Set
reasoning: truefor models that support chain-of-thought (e.g., DeepSeek R1) - OpenClaw docs: https://docs.openclaw.ai/gateway/configuration-reference.md