Contexte matériel et logiciel

Le guide s’appuie sur un MacBook Pro M5 équipé de 48 Go de RAM, une configuration capable de charger des modèles de 30 milliards de paramètres sans dépasser les limites de mémoire du système. Ollama, le moteur d’inférence, exploite le backend mlx qui tire parti du GPU Apple Silicon, ce qui réduit le temps de chargement des poids et diminue la consommation énergétique par rapport à une exécution purement CPU.

Installation et configuration des outils

Le processus débute par l’installation de trois composants via Homebrew : le sandbox Docker (sbx), OpenCode et Ollama. La commande

brew trust docker/tap && brew install docker/tap/sbx
ajoute le dépôt Docker, puis
brew install anomalyco/tap/opencode
déploie OpenCode. Ollama reste une application graphique téléchargée depuis le site officiel, ce qui garantit la version la plus récente et la compatibilité avec le driver mlx.

Chaque projet nécessite un kit sbx contenant deux fichiers : spec.yaml et opencode-local.json. Le spec.yaml décrit le mixin, les variables d’environnement et les ports réseau autorisés :

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

Gestion des modèles et limites de mémoire

Le guide propose deux modèles : Qwen 3.8 27B en format mxfp8 (≈ 32 GB) et Gemma 4 31B mxfp8 (≈ 34 GB). Ollama les télécharge avec les commandes

ollama pull qwen3.8:27b-mxfp8
ollama pull gemma4:31b-mxfp8
. Pour les machines disposant de moins de 48 GB, les variantes mlx (moins gourmandes) sont proposées. Le fichier de configuration OpenCode spécifie les limites de contexte : 64 K tokens pour Qwen et 256 K tokens pour Gemma, afin d’éviter un dépassement de la RAM disponible. Le champ limit.context de chaque modèle reflète ces seuils, tandis que limit.output reste fixé à 8 192 tokens. Un espace supplémentaire de 3 GB est réservé au sandbox Docker, ce qui garantit que le processus d’inférence ne monopolise pas toute la mémoire du système hôte.

Exécution et bonnes pratiques

Le lancement s’effectue avec

sbx run opencode --kit ./sbx-kit/
, ce qui initialise un conteneur Docker contenant l’agent OpenCode et expose les ports requis. Une fois le conteneur actif, la commande /models permet de sélectionner le modèle et d’ajuster le niveau d’effort de raisonnement (low, medium, high, xhigh) défini dans la section variants du fichier de configuration. L’utilisateur doit se connecter à Docker avant d’exécuter sbx, condition imposée par le mécanisme d’isolation du sandbox. Le flux complet – du téléchargement du modèle à l’interaction via OpenCode – repose sur une chaîne d’appels réseau locale (localhost :11434) qui minimise la latence tout en conservant la sécurité du système hôte.