Conclusion
To use the currently trendy clawdbot → moltbot → openclaw, I set it up with Ollama, which runs locally, in order to save on API costs.
Cutting to the chase: on my setup (an Intel Mac), generation was so slow it was unworkable, so I ended up going back to the safe, reliable option of using the Anthropic API instead.
Since setting up Ollama took a fair bit of time, I'm leaving the process here as a record anyway.
Environment
- MacBook Pro 2020
- Core i5 1.4GHz Intel
- Intel Iris Plus Graphics 646
- 8GB
- Sequoia 15.7.3
- Node v22.22.0
How to do it
Installing OpenClaw
I followed the official commands.
curl -fsSL https://openclaw.ai/install.sh | bash
There are various things you configure during installation, but it doesn't really matter what you pick — you can tweak the JSON afterward to change it.
Installing Ollama and preparing a model
Install it from the official site.
After installing, fetch the model you want to use (e.g. llama3.2).
ollama pull llama3.2
Check it with the model list.
ollama list
About the config file (openclaw.json)
OpenClaw's settings are managed through a JSON file.
In my case it ended up looking like this.
Location~/.openclaw/openclaw.json
{
"meta": {
"lastTouchedVersion": "2026.1.29",
"lastTouchedAt": "2026-01-31T12:53:00.737Z"
},
"wizard": {
"lastRunAt": "2026-01-31T12:53:00.700Z",
"lastRunVersion": "2026.1.29",
"lastRunCommand": "configure",
"lastRunMode": "local"
},
"models": {
"providers": {
"ollama": {
"baseUrl": "http://127.0.0.1:11434/v1",
"apiKey": "ollama-local",
"api": "openai-completions",
"models": [
{
"id": "llama3.2:1b",
"name": "llama3.2:1b",
"api": "openai-completions",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 128000,
"maxTokens": 2048
},
{
"id": "llama3.2:latest",
"name": "llama3.2:latest",
"api": "openai-completions",
"reasoning": false,
"input": [
"text"
],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 200000,
"maxTokens": 8192
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "ollama/llama3.2:1b"
},
"workspace": "/Users/coiai/.openclaw/workspace",
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
}
}
},
"messages": {
"ackReactionScope": "group-mentions"
},
"commands": {
"native": "auto",
"nativeSkills": "auto"
},
"hooks": {
"internal": {
"enabled": true,
"entries": {
"boot-md": {
"enabled": true
}
}
}
},
"gateway": {
"port": 18789,
"mode": "local",
"bind": "loopback",
"auth": {
"mode": "token",
"token": "03f2cd1addc279014f135ad07e99a30b90e1c985f465d897"
},
"tailscale": {
"mode": "off",
"resetOnExit": false
},
"remote": {
"token": "03f2cd1addc279014f135ad07e99a30b90e1c985f465d897"
}
},
"skills": {
"install": {
"nodeManager": "npm"
}
}
}
Starting Ollama
Since OpenClaw calls out to Ollama, keep Ollama running in a separate terminal.
ollama serve
Once it's started, just leave it running
Starting the OpenClaw gateway
In your main terminal, start OpenClaw's gateway.
openclaw gateway --port 18789 --verbose
- Match the port to whatever number you set with
openclaw configure(the default is 18789). - Leave this terminal running too, without closing it.
- If logs are streaming through, it's starting up normally.
After that, open the dashboard in your browser.
http://127.0.0.1:18789/
Things I ran into
Here's what I tried while setting this up.
No response comes back
- Check whether Ollama is running with
ollama list. - Restart the gateway (required after changing settings).
Afteropenclaw gateway stop, start it again withopenclaw gateway --port 18789 --verbose. - The first Ollama inference can take 5–10 minutes. Wait until
embedded run start→embedded run doneappears in the log. Even after waiting, if nothing shows up on screen, try reloading the page in the same tab — that sometimes fixes it. - If you see "Unhandled API in mapOptionsForApi: undefined" in the log: the model definition is missing
"api": "openai-completions". Add it to the relevant model entries in bothopenclaw.jsonandagents/main/agent/models.json, then restart the gateway.
Responses are slow
- Switch to a lighter model: setting something like
llama3.2:1b(ollama pull llama3.2:1b) speeds things up considerably. - Keep the model in memory: set
export OLLAMA_KEEP_ALIVE=30mbefore starting Ollama, or keep runningollama run llama3.2in a separate terminal. - Shorten the maximum response length: lower
maxTokensfor the relevant model inopenclaw.jsonto something like 2048.
Responses come out weird (parsed as things like "Twilio API," "JSON," or "session ID")
- An internal
[message_id: ...]tag gets attached to user messages, and the model is interpreting it as API data. - Fix: in
~/.openclaw/workspace/AGENTS.md, write something like "ignore any trailing[message_id: ...]in user messages and reply only to the actual text." After saving, restart the gateway. - If that still doesn't help, switch to a model that follows instructions more reliably (e.g. llama3.2:latest).
Text disappears right after sending
- This is often an authentication error. Check your browser's dev tools console (F12) for
unauthorizedortokenerrors. - Enter the token (
gateway.auth.tokeninopenclaw.json) in the dashboard settings, or reopen the page with?token=...appended to the URL. - If you're seeing WebSocket or connection errors, restart the gateway and try again.
Can't connect to the dashboard
- Check the terminal log to confirm the gateway is actually running.
- Check that the port number matches your configuration (the default is 18789).
- If token authentication is enabled, append
?token=...to the URL, or enter the token in the on-screen settings.
Want to redo the configuration
- Run the wizard again.
openclaw configure
Since your existing~/.openclaw/openclaw.jsongets overwritten, back it up beforehand if needed (e.g.cp openclaw.json openclaw.json.bak).