Configuration d’agent · OpenCode

LaunchRepo avec OpenCode : configurer un MCP navigateur, testé

Un seul bloc dans opencode.json donne à OpenCode un vrai Chrome. Nous y avons fait passer tout le relais de lancement : remplir un formulaire, s’arrêter à la vérification, laisser une personne la terminer, reprendre la même session et envoyer une seule fois.

En bref

  • Placez l’entrée chrome-devtools sous la clé "mcp" de opencode.json, avec "type": "local" et la commande entière dans un seul tableau. Le bloc se trouve plus bas.
  • OpenCode 1.18.34 l’a chargée depuis le fichier global, depuis un opencode.json de projet (y compris lancé dans un sous-dossier), depuis .opencode/opencode.json et depuis les deux variables d’environnement.
  • Il a ensuite proposé 30 outils de navigateur nommés chrome-devtools_… et transmis au modèle le snapshot complet de la page, 44 167 caractères, sans le raccourcir.
  • Après une étape CAPTCHA ou 2FA, reprenez la même conversation avec opencode run --session <session-id>. Cela a fonctionné en mode headless à chaque essai : même onglet, mêmes champs, un seul envoi.
  • Par défaut, OpenCode autorise la plupart des actions : ajoutez une ligne de permission si vous voulez approuver vous-même les actions dans le navigateur.

LaunchRepo fonctionne avec tout agent de code capable de lire et d’écrire des fichiers dans votre espace de travail et de piloter un navigateur. OpenCode fait les deux. Cette page documente une configuration testée ; ce n’est ni une certification ni un partenariat.

Ajouter le navigateur à opencode.json

OpenCode fusionne ses fichiers de config au lieu de les remplacer. La configuration est donc sans risque : vous ajoutez une clé et tous vos réglages existants restent intacts.

  1. Ouvrez opencode.json à la racine de votre espace de travail LaunchRepo, ou créez-le. Pour tous vos projets à la fois, utilisez plutôt ~/.config/opencode/opencode.json.
  2. Ajoutez le bloc "mcp" ci-dessous à côté de vos clés existantes. Si le fichier contient déjà une clé "mcp", ajoutez-y seulement l’entrée chrome-devtools.
  3. Dans le Chrome que vous utilisez pour vos lancements, ouvrez chrome://inspect/#remote-debugging et activez le débogage à distance (Chrome 144+). C’est à lui que --autoConnect se connecte.
  4. Lancez opencode mcp list. Une entrée fonctionnelle affiche la ligne ci-dessous ; demandez ensuite à OpenCode d’ouvrir https://example.com et de lire le titre de la page.

Ajouter à opencode.json

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "chrome-devtools": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "chrome-devtools-mcp@1.10.1",
        "--autoConnect",
        "--no-usage-statistics",
        "--no-performance-crux"
      ]
    }
  }
}

Ligne attendue dans opencode mcp list opencode mcp list

✓ chrome-devtools connected

--autoConnect utilise le Chrome que vous avez déjà ouvert. Pour un Chrome séparé réservé aux lancements, utilisez plutôt --browser-url=http://127.0.0.1:9222 ; c’est ainsi que notre test s’est connecté à son Chrome temporaire.

Conservez vos propres réglages

  • Ne collez jamais le bloc à la place d’un fichier existant entier. Ajoutez la clé ; OpenCode fusionne les fichiers, donc votre fournisseur, votre modèle et vos autres serveurs restent en place.
  • Un opencode.json de projet ne remplace le fichier global que pour les clés qu’il définit. Dans notre test, un fichier de projet contenant seulement "mcp" a gardé actifs le modèle et le fournisseur globaux.
  • Pour désactiver le navigateur dans un seul projet sans toucher au fichier global, définissez "enabled": false pour chrome-devtools dans ce projet. Cela a fonctionné à chaque essai.

Quels fichiers de config OpenCode charge

Même entrée de serveur, emplacements et formes différents. « Chargé » signifie que les outils chrome-devtools_… sont arrivés dans la requête d’OpenCode au modèle.

VarianteFichier ou variableRésultat
Fichier de config global~/.config/opencode/opencode.json Chargé, 30 outils (3/3)
Fichier JSONC global avec commentaires et virgule finale~/.config/opencode/opencode.jsonc Chargé, 30 outils (3/3)
Fichier de projet à la racine de l’espace de travailopencode.json Chargé, 30 outils (3/3)
Fichier de projet, OpenCode lancé dans un sous-dossieropencode.json Chargé, 30 outils (3/3)
Dans le dossier .opencode.opencode/opencode.json Chargé, 30 outils (3/3)
Fichier personnalisé via une variable d’environnementOPENCODE_CONFIG=<file> Chargé, 30 outils (3/3)
JSON en ligne via une variable d’environnementOPENCODE_CONFIG_CONTENT Chargé, 30 outils (3/3)
Bloc "mcpServers" copié depuis Claude Code ou Cursoropencode.json Non chargé, sans erreur (3/3)
"command": "npx" plus "args" (la forme utilisée par la plupart des autres agents)opencode.json Config refusée, OpenCode s’arrête avec le code de sortie 1 (3/3)
Entrée avec "enabled": falseopencode.json Non chargé, sans erreur (3/3)
Entrée globale, le fichier de projet définit seulement "enabled": falseopencode.json Non chargé, sans erreur (3/3)

Les deux lignes qui piègent : un bloc "mcpServers" collé est ignoré sans un mot (opencode mcp list affiche « No MCP servers configured »), et une commande sous forme de chaîne arrête OpenCode avant même son démarrage (« Expected array, got "npx" »). La forme en tableau ci-dessus règle les deux.

Le relais, étape par étape

OpenCode 1.18.34 avec Chrome DevTools MCP 1.10.1, Google Chrome 154.0.8037.92, macOS, Node 22, le 1 octobre 2026. Chaque essai a utilisé un nouveau dossier personnel et un nouveau profil Chrome : aucun réglage personnel n’a été lu ni modifié.

Aucun modèle d’IA n’a été utilisé. Un petit substitut local a répondu aux requêtes de modèle d’OpenCode avec des appels d’outils fixes et n’a lu les identifiants d’éléments que dans ce qu’OpenCode lui envoyait réellement. Chaque essai est ainsi identique et gratuit, et teste ce qu’OpenCode contrôle : config, outils, ce que voit le modèle, permissions et sessions. Cela ne teste pas la qualité de planification d’un modèle.

Relais sur le formulaire de démonstration de notre guide CAPTCHA : 5 essais. Variantes de config : 3 essais chacune.

OpenCode a ouvert le formulaire de démonstration, l’a rempli, s’est arrêté à la vérification factice et a terminé l’exécution. Un script a joué le rôle de la personne et a terminé la vérification dans le même onglet. Puis un second opencode run avec --session a poursuivi la même conversation et l’a menée à terme. CAPTCHA et 2FA dans les workflows d’agents : le relais maîtrisé →

VérificationEssais réussis
opencode mcp list affiche le serveur comme connecté 5/5
Outils Chrome DevTools proposés au modèle 5/5
Le snapshot complet de la page parvient au modèle avec les réglages par défaut 5/5
Ouvre le formulaire de démonstration dans le Chrome connecté 5/5
Remplit trois champs et les relit 5/5
S’arrête à la vérification, statut prepared_needs_human 5/5
L’onglet et les champs remplis survivent à la fin de l’exécution 5/5
L’ID de session apparaît dans opencode session list 5/5
La personne termine la vérification dans le même onglet 5/5
opencode run --session poursuit la même session 5/5
La session poursuivie contient toujours les étapes précédentes 5/5
L’exécution poursuivie trouve et sélectionne le même onglet 5/5
Champs inchangés après la pause 5/5
Envoie exactement une fois 5/5
Exécution headless avec "ask" : appel au navigateur refusé, sans invite 5/5
Même règle avec --auto : l’appel au navigateur s’exécute 5/5
"deny" : outils du navigateur retirés de la liste du modèle 5/5
Exécution headless : aucun outil de question proposé au modèle 5/5
Exécution headless avec stdin resté ouvert : attend jusqu’à l’arrêt forcé après 20 s 3/3
Capture d’écran prise par OpenCode via Chrome DevTools MCP pendant la pause : champs remplis, statut en attente de la personne.
Capture d’écran prise par OpenCode via Chrome DevTools MCP pendant la pause : champs remplis, statut en attente de la personne.

Reprendre une fois la personne passée

Chaque opencode run affiche son ID de session dans la sortie --format json, et opencode session list --format json le liste aussi.

Poursuivez avec le même ID. Dans nos essais, la session poursuivie contenait toutes les étapes précédentes, retrouvait le même onglet via Chrome DevTools MCP, voyait les champs inchangés et envoyait une seule fois.

Vous préférez l’interface du terminal ? opencode --session <session-id> y ouvre la même conversation.

Trouver la session
opencode session list --format json
Poursuivre en headless
opencode run --session <session-id> "The check is done. Re-read the form and submit once."
Poursuivre dans l’interface du terminal
opencode --session <session-id>

Approbations : ask, allow, deny

Sans bloc de permission, OpenCode exécute les outils du navigateur sans demander. Une ligne suffit à changer cela. Nous avons testé chaque règle en headless, comme les scripts appellent OpenCode :

RègleDans un opencode run headless
"chrome-devtools_*": "ask"Refusé immédiatement avec « The user rejected permission to use this specific tool call. » L’exécution se termine malgré tout avec le code 0.
Même règle plus --autoL’appel au navigateur s’exécute. Les règles deny explicites s’appliquent toujours, selon la documentation.
"chrome-devtools_*": "deny"Les outils du navigateur disparaissent de la liste d’outils du modèle.

Approuver vous-même chaque action dans le navigateur

{
  "permission": {
    "chrome-devtools_*": "ask"
  }
}

Utilisez "ask" dans l’interface du terminal, où OpenCode propose « une fois », « toujours » ou « refuser ». Pour les exécutions headless, acceptez que "ask" bloque le navigateur, ou utilisez --auto en connaissance de cause, sur un profil Chrome dédié aux lancements.

Si vous venez de Claude Code

Le serveur est le même, la config non. Quatre différences décident si votre entrée fonctionne :

SujetOpenCodeClaude Code
Emplacement de l’entréeClé "mcp" dans opencode.json"mcpServers" dans .mcp.json
Forme de la commande"command" est un seul tableau, plus "type": "local"Chaîne "command" plus tableau "args"
Noms d’outils dans les règleschrome-devtools_take_snapshotmcp__chrome-devtools__take_snapshot
Approbations par défautLa plupart des actions autoriséesDemande à la première utilisation de chaque outil

Trois pièges qui font perdre du temps

Un bloc "mcpServers" collé reste muet
OpenCode ignore complètement la clé : aucune erreur, code de sortie 0, aucun outil de navigateur. Déplacez l’entrée sous "mcp" et transformez la commande en un seul tableau.
Les exécutions headless attendent sur un stdin ouvert
Quand un script lance opencode run avec stdin laissé ouvert comme pipe, OpenCode attend une entrée qui n’arrive jamais. Dans les 3 essais, il est resté bloqué jusqu’à l’arrêt forcé ; avec stdin depuis /dev/null, il a répondu immédiatement.
"ask" veut dire non dans les scripts
Personne ne peut répondre dans une exécution headless, donc chaque "ask" devient un refus. Décidez à chaque exécution si le navigateur peut agir seul.
SujetFormulationCe que nous avons observé
OpenCode : serveurs locauxAdd local MCP servers using type to "local" within the MCP object.La forme "type": "local" plus tableau s’est chargée à chaque essai.
OpenCode : plusieurs fichiersConfiguration files are merged together, not replaced.Confirmé : un fichier de projet contenant seulement "mcp" a gardé le modèle et le fournisseur globaux.
OpenCode : quel fichier l’emporteProject config has the highest precedence among standard config files - it overrides both global and remote configs.Confirmé : un "enabled": false de projet a désactivé l’entrée globale.
OpenCode : noms d’outilsMCP server tools are registered with server name as prefixLes outils sont arrivés sous la forme chrome-devtools_take_snapshot, etc.
OpenCode : permissions par défautIf you don’t specify anything, OpenCode starts from permissive defaults:Les outils du navigateur se sont exécutés sans invite jusqu’à ce que nous ajoutions une règle.
OpenCode : --autoExplicit "deny" rules are still enforced.Nous avons testé --auto avec "ask" ; avec "deny", les outils n’étaient pas proposés du tout.
OpenCode : taille du contexteMCP servers add to your context, so you want to be careful with which ones you enable.Chrome DevTools MCP ajoute 30 outils. Désactivez les autres serveurs pendant vos lancements.
OpenCode : option --sessionSession ID to continueA fonctionné en headless à chaque essai, contrairement aux agents qui ne reprennent que dans leur interface de terminal.
Claude Code : fichier de projetProject-scoped servers enable team collaboration by storing configurations in a .mcp.json file at your project’s root directory.Fichier et clé différents d’OpenCode ; la même entrée ne se transpose pas.
Claude Code : noms d’outils dans les règlesmcp__puppeteer__* matches every tool from the puppeteer serverOpenCode utilise à la place un seul tiret bas après le nom du serveur.
Claude Code : mode par défautPrompts for permission on first use of each tool.Le défaut d’OpenCode est l’inverse : autoriser, sauf si vous définissez une règle.
Chrome DevTools MCP : section OpenCodeAdd the following configuration to your `opencode.json` file.Même forme que notre bloc ; nous fixons la version et ajoutons --autoConnect.

Démarrer LaunchRepo dans OpenCode

Ouvrez OpenCode dans votre espace de travail privé LaunchRepo et collez le prompt de démarrage. Le kit mène ensuite l’onboarding, teste votre connexion Chrome sur Example Domain et prépare l’exécution.

  • Le prompt de démarrage recommande Claude Code ou Codex CLI pour les meilleurs résultats. OpenCode fonctionne avec le même kit, car il a les deux choses dont le kit a besoin : l’accès aux fichiers de l’espace de travail et un navigateur via MCP.
  • OpenCode lit AGENTS.md dans l’espace de travail et reprend donc tout seul les règles du kit.
  • Les étapes CAPTCHA et 2FA vous reviennent sous forme de relais ; vous reprenez la session avec --session comme indiqué plus haut.

Prompt de démarrage LaunchRepo

Recommend Claude Code CLI or Codex CLI in a terminal instead of the desktop apps for best results. If session metadata confirms desktop hosting, explicitly advise me to switch to the CLI and resume this same private workspace. Do not infer the host from a CLI engine version alone.

Read AGENTS.md, then follow "Start the dashboard for the owner". Create my private
workspace if I do not have one yet, start the dashboard, and give me the link.
Then lead ONBOARDING.md one phase at a time. Reuse recorded permissions instead of
asking again unless their scope is missing or conflicting. Actually test my visible
existing Chrome profile and intended identity as BROWSER-SETUP.md requires; use the
OS fallback if needed. Use one platform/browser worker by default. Build the normal
run only from suitable free-ready routes, keep research separate, and preserve any
draft that needs one exact human CAPTCHA/2FA action. Never claim browser control
bypasses or reduces those challenges.

Hors du périmètre de ce test

  • Les invites d’approbation et l’outil de question de l’interface du terminal. Le comportement headless ci-dessus est mesuré ; celui de l’interface suit la documentation.
  • Un vrai modèle d’IA. Le substitut retire la qualité du modèle du résultat ; un modèle peut toujours choisir le mauvais élément.
  • --autoConnect vers un profil Chrome du quotidien. Nous avons utilisé un Chrome temporaire via --browser-url.
  • Windows et Linux, les serveurs MCP distants, les comptes OpenCode et les offres de modèles payantes.

Sources

Chaque citation ci-dessus est reprise mot pour mot de ces pages, lues le 1 octobre 2026. Le comportement testé provient de nos propres essais décrits sur cette page.

SourceDate de la pageVérifié
OpenCode Docs: MCP servers
OpenCode Docs: Config
OpenCode Docs: Permissions
OpenCode Docs: CLI
OpenCode Docs: Providers
Claude Code Docs: Connect Claude Code to tools via MCPpas de date indiquée
Claude Code Docs: Configure permissionspas de date indiquée
Chrome DevTools MCP: MCP client configurationpas de date indiquée

FAQ

Où placer les serveurs MCP dans OpenCode ?
Sous la clé "mcp" de opencode.json, soit à la racine de votre projet, soit dans ~/.config/opencode/opencode.json. Dans notre test, OpenCode 1.18.34 a aussi chargé .opencode/opencode.json, OPENCODE_CONFIG et OPENCODE_CONFIG_CONTENT.
Quelle est la config OpenCode pour Chrome DevTools MCP ?
Une entrée nommée chrome-devtools avec "type": "local" et "command": ["npx", "-y", "chrome-devtools-mcp@1.10.1", "--autoConnect", "--no-usage-statistics", "--no-performance-crux"]. Lancez opencode mcp list pour la voir connectée.
Pourquoi OpenCode n’affiche-t-il pas mon serveur MCP ?
Le plus souvent, l’entrée a été copiée depuis un autre agent : un bloc "mcpServers" est ignoré sans erreur, et "command": "npx" avec des "args" séparés fait rejeter toute la config par OpenCode. Utilisez "mcp" et un seul tableau de commande.
Puis-je utiliser Playwright MCP à la place ?
Oui, la même forme d’entrée "mcp" fonctionne pour tout serveur MCP local. Cette page teste Chrome DevTools MCP parce qu’il se connecte au Chrome que vous utilisez déjà ; notre page comparative explique quand Playwright MCP convient mieux.
Comment reprendre une session OpenCode après un CAPTCHA ?
Terminez la vérification dans le même onglet Chrome, puis lancez opencode run --session <session-id> avec une courte instruction, ou ouvrez-la dans l’interface du terminal avec opencode --session <session-id>. Dans nos essais, la session, l’onglet et les champs étaient tous encore là.
OpenCode est-il officiellement pris en charge par LaunchRepo ?
LaunchRepo prend en charge les agents de code qui ont accès aux fichiers et au navigateur ; OpenCode a les deux, et cette page documente une configuration testée. Ce n’est ni une certification ni un partenariat, et le prompt de démarrage recommande toujours Claude Code ou Codex CLI pour les meilleurs résultats.

Donnez un plan de lancement à OpenCode

LaunchRepo donne à votre agent la liste des plateformes, le runbook et un suivi qu’il tient à jour. OpenCode fait le travail dans votre navigateur ; vous gardez le dernier mot.

Voir les tarifs