Opencode draaien met Ollama op Mac
Het is nu mogelijk om levensvatbare lokale LLM-ontwikkeling te doen. Met krachtige modellen zoals Qwen 3.8 en Gemma 4 kunnen we deze modellen eindelijk gebruiken om webapplicaties te bouwen. Ik maak gebruik van een Apple Macbook Pro M5 met 48GB RAM. Naar mijn mening is dit het ideale punt voor lokale ontwikkeling, omdat het je in staat stelt om 30B-modellen te draaien met een redelijke contextgrootte.
Waarom ik Ollama gebruik
Om eerlijk te zijn: het is simpel. Het ondersteunt nu MLX, waardoor het snel is op Apple silicon. Daarnaast heeft het een goede modeldirectory, is het zeer stabiel en crasht het niet.
Waarom Opencode
Voor deze blog moeten we ergens beginnen, en Opencode is een uitstekende harness.
Docker Sandboxes (sbx)
Er is nog een ander hulpmiddel dat ik gebruik: docker sandboxes, ook wel sbx genoemd. In mijn werk gebruik ik frontier-modellen waarvoor we onze harnesses moeten sandboxen. Ook vind ik het prettig om mijn lokale modellen in containers te draaien, omdat ze je computer anders gemakkelijk in de war kunnen brengen met een ongewenste hallucinatie.
De tools installeren
Installatie van Docker Sandbox:
brew trust docker/tap && brew install docker/tap/sbx
Installatie van Opencode:
brew install anomalyco/tap/opencode
Installatie van Ollama: Om Ollama te installeren, ga je naar https://ollama.com/ om de app te downloaden en te installeren.
De modellen installeren
We gaan twee modellen downloaden. Zorg er eerst voor dat Ollama is opgestart.
- Qwen 3.8 27B mxfp8 (32GB): Dit is een uitstekend werkpaard dat het meeste van je langdurige werk kan verrichten en urenlang ongestoord binnen Opencode kan draaien.
``bash ollama pull qwen3.8:27b-mxfp8 ``
- Gemma 4 31b mxfp8 (34GB): Dit is een geweldig, groot en compact model voor wanneer je iets krachtigers nodig hebt.
``bash ollama pull gemma4:31b-mxfp8 ``
Opmerking: Als je geen Apple-computer met 48GB RAM hebt, kun je de standaardmodellen downloaden: qwen3.8:27b-mlx en gemma4:31b-mlx.
Je project configureren
Voor deze setup moet je per project een sbx-kit configureren. Een kit is een manier om de sandbox aan te passen. Maak de volgende mappen en bestanden aan:
./sbx-kit/files/home/.config/opencode-local.json./sbx-kit/spec.yaml
spec.yaml
schemaVersion: "2"
kind: mixin
name: local-ollama-opencode
version: "0.1.0"
displayName: Local Ollama for OpenCode
description: Configure OpenCode in Docker Sandboxes to use Ollama running on the Mac host.
requires:
agent: opencode
environment:
variables:
OPENCODE_CONFIG: /home/agent/.config/opencode-local.json
permissions:
network:
allow:
- localhost:11434
- localhost:5173
- localhost:4000
agentInstructions:
content: |
Local Ollama runs on the host machine.
Default model:
qwen3.8:27b-mxfp8
Deep file analysis / reasoning:
gemma4:31b-mxfp8
opencode-local.json
{
"$schema": "https://opencode.ai/config.json",
"model": "ollama/gemma4:31b-mxfp8",
"small_model": "ollama/gemma4:31b-mxfp8",
"lsp": false,
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Mac Ollama",
"options": {
"baseURL": "http://host.docker.internal:11434/v1"
},
"models": {
"qwen3.8:27b-mxfp8-64K": {
"id": "qwen3.8:27b-mxfp8",
"name": "Qwen 3.8 27B MXFP8 [31 GB] [64K ctx]",
"limit": {
"context": 65536,
"output": 8192
},
"variants": {
"low": {
"reasoningEffort": "low"
},
"medium": {
"reasoningEffort": "medium"
},
"high": {
"reasoningEffort": "high"
},
"xhigh": {
"reasoningEffort": "xhigh"
}
}
},
"gemma4:31b-mxfp8": {
"name": "Gemma 4 31B MXFP8 [33 → ~50 GB] [256K ctx]",
"limit": {
"context": 262144,
"output": 8192
}
}
}
}
}
}
Voor het Qwen-model hebben we de context beperkt tot 64k; dit zorgt ervoor dat je systeem niet vastloopt wanneer het geheugen opraakt. Daarnaast is er 3GB nodig voor de sandbox.
Opencode uitvoeren
Om Opencode te starten, voer je het volgende uit:
sbx run opencode --kit ./sbx-kit/
Hiermee wordt Opencode gestart met Qwen als geselecteerd model. Zorg ervoor dat je de "effort" wijzigt naar "low" via het /models commando.
Nu zou alles moeten werken.
Opmerking: Je moet zijn ingelogd bij Docker om sbx te kunnen gebruiken. Deze functie wordt niet erg gewaardeerd door de development community, maar er is geen andere manier om dit te omzeilen.
Groetjes,