MVAESTECH

Accueil › IA locale › OpenCode en local

IA locale · Banc d'essai

OpenCode, un agent de code qui reste chez moi.

Un modèle ne sait que lire du texte et en écrire. Pour qu'il lise vos fichiers, lance les tests ou cherche sur le web, il faut un programme autour de lui : le harness. J'installe et je teste OpenCode, un harness open source, entièrement sur mon serveur IA.

Aucun compte, aucune URL publique, aucun prompt qui part chez un tiers. Voici comment il fonctionne, comment je l'ai installé et ce que je vérifie.

Mathieu dessiné en train de réfléchir, la main sous le menton.
  • OpenCode
  • Ollama
  • Qwen3-Coder-Next
  • SearXNG via MCP
  • RTX 3090 Ti · 24 Go
  • Ubuntu 24.04 LTS

Un harness, c'est quoi ?

Le modèle, c'est le cerveau. Le harness, ce sont ses mains et ses yeux : il décide ce que le modèle voit, quels outils il peut utiliser, et ce qu'il a le droit de toucher.

  1. Le harness · OpenCodeIl fait travailler le modèle

    Il choisit le contexte envoyé, donne les outils, exécute les actions et relance tant que la tâche n'est pas finie.

    outilsbouclepermissionsMCP
  2. Le modèle · OllamaIl lit et il écrit

    Il reçoit du texte, il rend du texte, ou une demande d'outil : « lis ce fichier », « lance les tests ».

    Qwen3-Coder-NextQwen3API OpenAI
  3. Le matériel · GPUIl fixe les limites

    La VRAM décide de la taille du modèle et de la longueur du contexte qu'on peut lui donner.

    RTX 3090 Ti24 GoOCuLink
  • Même modèle, résultats différentsSur la même carte graphique, un modèle peut réussir une tâche dans un harness et la rater dans un autre. Ce qui change, c'est la façon dont on le fait travailler.
  • En local, ça compte encore plusUn modèle local est plus petit et sa fenêtre de contexte plus courte qu'un grand service en ligne. Chaque jeton envoyé doit servir, et le harness doit le recadrer quand il s'égare.
  • Pourquoi OpenCodeOpen source, dans le terminal, il accepte n'importe quelle API compatible OpenAI, donc Ollama. Il gère les outils, deux modes (préparer ou modifier) et les serveurs MCP. Et il tourne sans compte.

Comment l'agent travaille

Un agent de code, c'est une boucle. Le modèle ne touche jamais vos fichiers lui-même : il demande, OpenCode exécute, puis lui renvoie le résultat.

La boucle d'un agent de code Vous donnez une consigne à OpenCode. OpenCode envoie le contexte au modèle, qui répond par une demande d'outil. OpenCode exécute l'outil sur votre projet et renvoie le résultat au modèle, jusqu'à la réponse finale. Vous une consigne OpenCode le harness Le modèle Ollama · Qwen RTX 3090 Ti Votre projet fichiers · terminal read · edit · bash 1 2 3 4 5
Les étapes 2 à 5 se répètent tant que la tâche n'est pas finie.
  1. Vous donnez une consigne« Ajoute la validation du DTO CreateOrder et fais passer les tests. »
  2. OpenCode prépare le contexteSes instructions, votre consigne, les fichiers déjà lus et la liste des outils disponibles partent vers le modèle.
  3. Le modèle demande un outilIl ne répond pas encore : il demande de lire CreateOrder.cs, de chercher un nom ou de lancer dotnet test.
  4. OpenCode exécute, avec votre accordLecture, modification ou commande, sur le projet. Chez moi, chaque modification et chaque commande attendent mon feu vert.
  5. Le résultat revient au modèleLe contenu du fichier ou la sortie des tests rejoint le contexte. Le modèle décide de la suite, jusqu'à la réponse finale.

Tout reste sur mon réseau

C'était la condition de départ : faire comme un grand assistant de code en ligne, mais sans que rien ne sorte de chez moi, sauf quand je le demande.

Architecture de l'installation locale Depuis mon poste, j'accède au serveur IA par une connexion distante protégée. Sur le serveur, OpenCode parle à Ollama, qui fait tourner Qwen sur la carte graphique, et à SearXNG par MCP. Le web n'est lu qu'à la demande. Mon poste un simple navigateur accès distant protégé, privé Mon serveur IA OpenCode l'agent de code Ollama Qwen3-Coder-Next RTX 3090 Ti · 24 Go SearXNG branché par MCP sans pistage à la demande webfetch Le web jamais par défaut ✕ aucun compte ✕ aucune URL publique ✕ partage désactivé
Les traits bleus restent dans le réseau local. Le jaune ne s'allume que quand je l'autorise.
  • Pas d'URL publiqueL'agent n'est pas exposé sur internet. Pour travailler à distance, je passe par un accès privé et protégé, et je lance OpenCode directement sur le serveur.
  • Pas de compte, pas de partageOpenCode tourne sans inscription. Le partage de sessions est désactivé dans la configuration, les mises à jour automatiques aussi : rien ne change sans que je le décide.
  • Le modèle chez moiOpenCode parle à Ollama par son API compatible OpenAI, sur localhost. Les prompts et le code ne quittent pas la machine.
  • Le web, seulement si je dis ouiLa recherche passe par mon SearXNG, branché comme serveur MCP. La lecture d'une page (webfetch) demande mon accord à chaque fois.

Le piège n° 1 : la fenêtre de contexte

À chaque tour, tout ce que le modèle doit savoir tient dans une fenêtre de taille fixe, réglée côté Ollama (num_ctx). Pour un simple chat, une petite fenêtre suffit. Pour un agent, elle déborde vite.

Quand les appels d'outils échouent avec un modèle local, la documentation d'OpenCode conseille justement de relever num_ctx dans Ollama, autour de 16k à 32k. Plus de contexte, c'est aussi plus de VRAM : c'est là que les 24 Go de la 3090 Ti servent.

Mon installation, étape par étape

Sur le serveur IA, sous Ubuntu 24.04, avec Ollama et SearXNG déjà en place.

  1. Installer OpenCode

    Un binaire, installé par le script officiel. Aucun compte demandé : le fournisseur de modèles, c'est mon Ollama.

    # Installation, sans compte$ curl -fsSL https://opencode.ai/install | bash$ opencode --version
  2. Donner de la place au modèle

    Une variante du modèle avec une fenêtre de 32k, pour que les instructions, les outils et les fichiers tiennent ensemble.

    # Modelfile : même modèle, fenêtre de 32kFROM qwen3-coder-nextPARAMETER num_ctx 32768 $ ollama create qwen3-coder-next-32k -f Modelfile
  3. Brancher OpenCode sur Ollama

    Dans ~/.config/opencode/opencode.json : Ollama comme fournisseur, partage et mises à jour automatiques coupés, et une validation demandée avant chaque modification, commande ou lecture web.

    {  "$schema": "https://opencode.ai/config.json",  "provider": {    "ollama": {      "npm": "@ai-sdk/openai-compatible",      "name": "Ollama (local)",      "options": { "baseURL": "http://localhost:11434/v1" },      "models": {        "qwen3-coder-next-32k": {          "name": "Qwen3-Coder-Next 32k",          "limit": { "context": 32768, "output": 8192 }        }      }    }  },  "model": "ollama/qwen3-coder-next-32k",  "share": "disabled",  "autoupdate": false,  "permission": { "edit": "ask", "bash": "ask", "webfetch": "ask" }}
  4. Ajouter la recherche web

    SearXNG devient un outil de l'agent grâce à un serveur MCP local. L'agent cherche sur mon moteur, sans pistage, sans clé d'API externe.

    // Dans le même opencode.json"mcp": {  "searxng": {    "type": "local",    "command": ["npx", "-y", "mcp-searxng"],    "environment": { "SEARXNG_URL": "http://votre-searxng" }  }}
  5. Travailler à distance, sans rien exposer

    Je me connecte au serveur par un accès privé, j'ouvre un terminal dans le projet et je lance l'agent. Je commence en mode plan, qui lit et propose sans rien modifier, puis je passe en mode build pour appliquer.

    # Sur le serveur, dans le projet$ cd ~/projets/mon-api$ opencode # Tab : bascule entre plan (lecture) et build (modifications)

Ce que je vérifie

Les mêmes tâches pour chaque harness et chaque modèle, sur du code réel en C#, PHP, SQL et JavaScript. Une tâche est réussie quand le code compile et que les tests passent, pas quand l'outil dit « terminé ».

  • Les appels d'outils tiennentLe modèle demande-t-il les bons outils, avec les bons paramètres, du premier coup ? C'est le premier point qui casse avec un modèle local.
  • Les modifications sont justesLe bon fichier, au bon endroit, sans réécrire ce qui n'avait rien demandé. Chaque fichier touché sans raison coûte une relecture.
  • Il sait s'arrêterAprès une erreur de compilation, il corrige, relance, puis s'arrête. Ni boucle infinie, ni « terminé » trop tôt.
  • Plan, puis buildLe plan proposé en lecture seule est-il exploitable ? Le mode build le suit-il vraiment ?
  • La recherche aide vraimentQuand il cherche une documentation sur SearXNG, en tire-t-il la bonne information, ou se contente-t-il du premier lien ?
  • Le temps et la mémoireTemps jusqu'au résultat, VRAM occupée avec 32k de contexte. Un outil juste mais trop lent ne sera pas utilisé.
Trois harness comparés, branchés sur le même serveur Ollama
Même modèle, trois harnessAiderContinue.devOpenCode
Où il vitTerminalVS CodeTerminal
Façon de travaillerUn commit Git par modificationChat, complétion, modifications guidéesAgent autonome avec outils, en boucle
Avant de modifierRelecture du diffValidation dans l'éditeurMode plan, puis accord par action
Outils externesLimitésContexte et MCPMCP : SearXNG chez moi
Pour quiCeux qui vivent dans GitUne équipe sous VS CodeDéléguer une tâche entière

Aucun outil n'arrive dans mes recommandations avant d'être passé par ces tests. Pour un client, je refais l'exercice sur ses propres tâches et sur son matériel avant de conseiller un couple modèle et harness.

Votre agent de code, sur vos machines ?

Je vous installe la même chose : serveur IA, modèle testé sur vos tâches, harness réglé, accès distant sans rien exposer.