Setup agente · OpenCode

LaunchRepo con OpenCode: setup del browser MCP, testato

Un solo blocco in opencode.json dà a OpenCode un vero Chrome. Ci abbiamo fatto passare l’intero passaggio di consegne del lancio: compilare un form, fermarsi alla verifica, lasciarla completare a una persona, riprendere la stessa sessione e inviare una sola volta.

In breve

  • Metti la voce chrome-devtools sotto la chiave "mcp" di opencode.json, con "type": "local" e l’intero comando in un unico array. Il blocco è qui sotto.
  • OpenCode 1.18.34 l’ha caricata dal file globale, da un opencode.json di progetto (anche se avviato in una sottocartella), da .opencode/opencode.json e da entrambe le variabili d’ambiente.
  • Ha poi offerto 30 strumenti browser chiamati chrome-devtools_… e ha passato al modello lo snapshot completo della pagina, 44.167 caratteri, senza accorciarlo.
  • Dopo un passaggio CAPTCHA o 2FA, riprendi la stessa conversazione con opencode run --session <session-id>. Ha funzionato in headless in ogni run: stessa scheda, stessi campi, un solo invio.
  • Per impostazione predefinita OpenCode consente la maggior parte delle azioni, quindi aggiungi una riga di permessi se vuoi approvare tu le azioni nel browser.

LaunchRepo funziona con qualsiasi agente di coding in grado di leggere e scrivere file nel tuo workspace e di controllare un browser. OpenCode fa entrambe le cose. Questa pagina documenta un setup testato; non è una certificazione né una partnership.

Aggiungi il browser a opencode.json

OpenCode unisce i suoi file di config invece di sostituirli. Per questo il setup è sicuro: aggiungi una chiave e tutte le impostazioni che hai già restano come sono.

  1. Apri opencode.json nella root del tuo workspace LaunchRepo, oppure crealo. Per tutti i progetti insieme, usa invece ~/.config/opencode/opencode.json.
  2. Aggiungi il blocco "mcp" qui sotto accanto alle chiavi esistenti. Se il file ha già una chiave "mcp", aggiungi al suo interno solo la voce chrome-devtools.
  3. Nel Chrome che avvii tu, apri chrome://inspect/#remote-debugging e attiva il debug remoto (Chrome 144+). È a questo che si collega --autoConnect.
  4. Esegui opencode mcp list. Una voce funzionante mostra la riga qui sotto; poi chiedi a OpenCode di aprire https://example.com e leggere il titolo della pagina.

Aggiungi a 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"
      ]
    }
  }
}

Riga attesa in opencode mcp list opencode mcp list

✓ chrome-devtools connected

--autoConnect usa il Chrome che hai già aperto. Per un Chrome separato solo per i lanci, usa invece --browser-url=http://127.0.0.1:9222; è così che il nostro test si è collegato al suo Chrome temporaneo.

Mantieni le tue impostazioni

  • Non incollare mai il blocco al posto di un intero file esistente. Aggiungi la chiave; OpenCode unisce i file, quindi provider, modello e altri server restano.
  • Un opencode.json di progetto sovrascrive il file globale solo per le chiavi che imposta. Nel nostro test, un file di progetto con solo "mcp" ha mantenuto attivi il modello e il provider globali.
  • Per spegnere il browser in un solo progetto senza toccare il file globale, imposta "enabled": false per chrome-devtools in quel progetto. Ha funzionato in tutti i run.

Quali file di config carica OpenCode

Stessa voce del server, posizioni e forme diverse. “Caricato” significa che gli strumenti chrome-devtools_… sono arrivati nella richiesta di OpenCode al modello.

VarianteFile o variabileRisultato
File di config globale~/.config/opencode/opencode.json Caricato, 30 strumenti (3/3)
File JSONC globale con commenti e virgola finale~/.config/opencode/opencode.jsonc Caricato, 30 strumenti (3/3)
File di progetto nella root del workspaceopencode.json Caricato, 30 strumenti (3/3)
File di progetto, OpenCode avviato in una sottocartellaopencode.json Caricato, 30 strumenti (3/3)
Dentro la cartella .opencode.opencode/opencode.json Caricato, 30 strumenti (3/3)
File personalizzato tramite una variabile d’ambienteOPENCODE_CONFIG=<file> Caricato, 30 strumenti (3/3)
JSON inline tramite una variabile d’ambienteOPENCODE_CONFIG_CONTENT Caricato, 30 strumenti (3/3)
Blocco "mcpServers" copiato da Claude Code o Cursoropencode.json Non caricato, nessun errore (3/3)
"command": "npx" più "args" (la forma usata dalla maggior parte degli altri agenti)opencode.json Config rifiutata, OpenCode si ferma con exit code 1 (3/3)
Voce con "enabled": falseopencode.json Non caricato, nessun errore (3/3)
Voce globale, il file di progetto imposta solo "enabled": falseopencode.json Non caricato, nessun errore (3/3)

Le due righe insidiose: un blocco "mcpServers" incollato viene ignorato senza una parola (opencode mcp list dice “No MCP servers configured”), e un comando in forma di stringa ferma OpenCode prima ancora che parta (“Expected array, got "npx"”). La forma ad array qui sopra risolve entrambi i casi.

Il passaggio di consegne, passo per passo

OpenCode 1.18.34 con Chrome DevTools MCP 1.10.1, Google Chrome 154.0.8037.92, macOS, Node 22, il 1 ottobre 2026. Ogni run ha usato una home directory nuova e un profilo Chrome nuovo, quindi nessuna impostazione personale è stata letta o modificata.

Non è stato coinvolto alcun modello di IA. Un piccolo sostituto locale ha risposto alle richieste al modello di OpenCode con chiamate a strumenti fisse e ha letto gli ID degli elementi solo da ciò che OpenCode gli inviava davvero. Così ogni run è identico e gratuito, e testa ciò che OpenCode controlla: config, strumenti, ciò che vede il modello, permessi e sessioni. Non testa quanto bene pianifica un modello.

Passaggio di consegne sul form demo della nostra guida ai CAPTCHA: 5 run. Varianti di config: 3 run ciascuna.

OpenCode ha aperto il form demo, l’ha compilato, si è fermato alla verifica simulata e ha chiuso il run. Uno script ha fatto la parte della persona e ha completato la verifica nella stessa scheda. Poi un secondo opencode run con --session ha proseguito la stessa conversazione e l’ha portata a termine. CAPTCHA e 2FA nei workflow con agenti: passaggio di mano controllato →

ControlloRun superati
opencode mcp list mostra il server come connesso 5/5
Strumenti Chrome DevTools offerti al modello 5/5
Lo snapshot completo della pagina arriva al modello con le impostazioni predefinite 5/5
Apre il form demo nel Chrome collegato 5/5
Compila tre campi e li rilegge 5/5
Si ferma alla verifica, stato prepared_needs_human 5/5
Scheda e campi compilati sopravvivono alla fine del run 5/5
L’ID di sessione compare in opencode session list 5/5
La persona completa la verifica nella stessa scheda 5/5
opencode run --session prosegue la stessa sessione 5/5
La sessione ripresa contiene ancora i passaggi precedenti 5/5
Il run ripreso trova e seleziona la stessa scheda 5/5
Campi invariati dopo la pausa 5/5
Invia esattamente una volta 5/5
Run headless con "ask": chiamata al browser rifiutata, nessun prompt 5/5
Stessa regola con --auto: la chiamata al browser viene eseguita 5/5
"deny": strumenti browser rimossi dall’elenco del modello 5/5
Run headless: nessuno strumento di domanda offerto al modello 5/5
Run headless con stdin lasciato aperto: resta in attesa finché non viene fermato dopo 20 s 3/3
Screenshot scattato da OpenCode tramite Chrome DevTools MCP durante la pausa: campi compilati, stato in attesa della persona.
Screenshot scattato da OpenCode tramite Chrome DevTools MCP durante la pausa: campi compilati, stato in attesa della persona.

Riprendi dopo che la persona ha finito

Ogni opencode run stampa il suo ID di sessione nell’output --format json, e anche opencode session list --format json lo elenca.

Prosegui con lo stesso ID. Nei nostri run la sessione ripresa aveva tutti i passaggi precedenti, ha ritrovato la stessa scheda tramite Chrome DevTools MCP, ha visto i campi invariati e ha inviato una sola volta.

Preferisci l’interfaccia da terminale? opencode --session <session-id> apre lì la stessa conversazione.

Trova la sessione
opencode session list --format json
Prosegui in headless
opencode run --session <session-id> "The check is done. Re-read the form and submit once."
Prosegui nell’interfaccia da terminale
opencode --session <session-id>

Approvazioni: ask, allow, deny

Senza un blocco di permessi, OpenCode esegue gli strumenti browser senza chiedere. Basta una riga per cambiarlo. Abbiamo eseguito ogni regola in headless, come gli script chiamano OpenCode:

RegolaIn un opencode run headless
"chrome-devtools_*": "ask"Rifiutata subito con “The user rejected permission to use this specific tool call.” Il run termina comunque con exit code 0.
Stessa regola più --autoLa chiamata al browser viene eseguita. Le regole deny esplicite valgono comunque, secondo la documentazione.
"chrome-devtools_*": "deny"Gli strumenti browser spariscono dall’elenco degli strumenti del modello.

Approva tu ogni azione nel browser

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

Usa "ask" nell’interfaccia da terminale, dove OpenCode chiede una volta, sempre o rifiuta. Per i run headless, accetta che "ask" blocchi il browser oppure usa --auto consapevolmente, su un profilo Chrome dedicato ai lanci.

Se arrivi da Claude Code

Il server è lo stesso, la config no. Quattro differenze decidono se la tua voce funziona:

TemaOpenCodeClaude Code
Dove sta la voceChiave "mcp" in opencode.json"mcpServers" in .mcp.json
Forma del comando"command" è un unico array, più "type": "local"Stringa "command" più array "args"
Nomi degli strumenti nelle regolechrome-devtools_take_snapshotmcp__chrome-devtools__take_snapshot
Approvazioni predefiniteMaggior parte delle azioni consentitaChiede al primo uso di ogni strumento

Tre cose che fanno perdere tempo

Un blocco "mcpServers" incollato tace
OpenCode ignora del tutto la chiave: nessun errore, exit code 0, nessuno strumento browser. Sposta la voce sotto "mcp" e trasforma il comando in un unico array.
I run headless aspettano su uno stdin aperto
Quando uno script avvia opencode run con stdin lasciato aperto come pipe, OpenCode aspetta un input che non arriva mai. In tutti e 3 i run è rimasto bloccato finché non è stato fermato; con stdin da /dev/null ha risposto subito.
"ask" negli script significa no
In un run headless non c’è nessuno a rispondere, quindi ogni "ask" diventa un rifiuto. Decidi run per run se il browser può agire da solo.
TemaTestoCosa abbiamo osservato
OpenCode: server localiAdd local MCP servers using type to "local" within the MCP object.La forma "type": "local" più array è stata caricata in ogni run.
OpenCode: più fileConfiguration files are merged together, not replaced.Confermato: un file di progetto con solo "mcp" ha mantenuto il modello e il provider globali.
OpenCode: quale file vinceProject config has the highest precedence among standard config files - it overrides both global and remote configs.Confermato: un "enabled": false di progetto ha spento la voce globale.
OpenCode: nomi degli strumentiMCP server tools are registered with server name as prefixGli strumenti sono arrivati come chrome-devtools_take_snapshot e così via.
OpenCode: permessi predefinitiIf you don’t specify anything, OpenCode starts from permissive defaults:Gli strumenti browser sono stati eseguiti senza prompt finché non abbiamo aggiunto una regola.
OpenCode: --autoExplicit "deny" rules are still enforced.Abbiamo testato --auto con "ask"; con "deny" gli strumenti non sono stati proprio offerti.
OpenCode: dimensione del contestoMCP servers add to your context, so you want to be careful with which ones you enable.Chrome DevTools MCP aggiunge 30 strumenti. Tieni spenti gli altri server mentre lanci.
OpenCode: flag --sessionSession ID to continueHa funzionato in headless in ogni run, a differenza degli agenti che riprendono solo nella loro interfaccia da terminale.
Claude Code: file di progettoProject-scoped servers enable team collaboration by storing configurations in a .mcp.json file at your project’s root directory.File e chiave diversi da OpenCode; la stessa voce non si trasferisce.
Claude Code: nomi degli strumenti nelle regolemcp__puppeteer__* matches every tool from the puppeteer serverOpenCode usa invece un solo underscore dopo il nome del server.
Claude Code: modalità predefinitaPrompts for permission on first use of each tool.Il default di OpenCode è l’opposto: consentire, a meno che tu non imposti una regola.
Chrome DevTools MCP: sezione OpenCodeAdd the following configuration to your `opencode.json` file.Stessa forma del nostro blocco; noi fissiamo la versione e aggiungiamo --autoConnect.

Avvia LaunchRepo in OpenCode

Apri OpenCode nel tuo workspace privato LaunchRepo e incolla il prompt di avvio. Il kit guida poi l’onboarding, testa la connessione al tuo Chrome su Example Domain e prepara il run.

  • Il prompt di avvio consiglia Claude Code o Codex CLI per i risultati migliori. OpenCode funziona con lo stesso kit perché ha le due cose che servono al kit: accesso ai file nel workspace e un browser tramite MCP.
  • OpenCode legge AGENTS.md dal workspace, quindi recepisce da solo le regole del kit.
  • I passaggi CAPTCHA e 2FA tornano a te come passaggi di consegne; riprendi la sessione con --session come mostrato sopra.

Prompt di avvio di 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.

Cosa non copre questo test

  • I prompt di approvazione e lo strumento di domanda dell’interfaccia da terminale. Il comportamento headless qui sopra è misurato; quello dell’interfaccia segue la documentazione.
  • Un vero modello di IA. Il sostituto toglie la qualità del modello dal risultato; un modello può comunque scegliere l’elemento sbagliato.
  • --autoConnect a un profilo Chrome di tutti i giorni. Abbiamo usato un Chrome temporaneo tramite --browser-url.
  • Windows e Linux, server MCP remoti, account OpenCode e piani di modelli a pagamento.

Fonti

Ogni citazione qui sopra è copiata parola per parola da queste pagine, lette il 1 ottobre 2026. Il comportamento testato viene dai nostri run descritti in questa pagina.

FonteData della paginaVerificato
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 MCPnessuna data indicata
Claude Code Docs: Configure permissionsnessuna data indicata
Chrome DevTools MCP: MCP client configurationnessuna data indicata

FAQ

Dove metto i server MCP in OpenCode?
Sotto la chiave "mcp" di opencode.json, nella root del progetto oppure in ~/.config/opencode/opencode.json. Nel nostro test OpenCode 1.18.34 ha caricato anche .opencode/opencode.json, OPENCODE_CONFIG e OPENCODE_CONFIG_CONTENT.
Qual è la config di OpenCode per Chrome DevTools MCP?
Una voce chiamata chrome-devtools con "type": "local" e "command": ["npx", "-y", "chrome-devtools-mcp@1.10.1", "--autoConnect", "--no-usage-statistics", "--no-performance-crux"]. Esegui opencode mcp list per vederla connessa.
Perché OpenCode non mostra il mio server MCP?
Il più delle volte la voce è stata copiata da un altro agente: un blocco "mcpServers" viene ignorato senza errori, e "command": "npx" con "args" separati fa rifiutare a OpenCode l’intera config. Usa "mcp" e un unico array per il comando.
Posso usare invece Playwright MCP?
Sì, la stessa forma della voce "mcp" funziona per qualsiasi server MCP locale. Questa pagina testa Chrome DevTools MCP perché si collega al Chrome che usi già; la nostra pagina di confronto spiega quando Playwright MCP è la scelta migliore.
Come riprendo una sessione OpenCode dopo un CAPTCHA?
Completa la verifica nella stessa scheda di Chrome, poi esegui opencode run --session <session-id> con una breve istruzione, oppure aprila nell’interfaccia da terminale con opencode --session <session-id>. Nei nostri run sessione, scheda e campi erano ancora tutti lì.
OpenCode è supportato ufficialmente da LaunchRepo?
LaunchRepo supporta gli agenti di coding che hanno accesso a file e browser; OpenCode li ha entrambi, e questa pagina documenta un setup testato. Non è una certificazione né una partnership, e il prompt di avvio consiglia comunque Claude Code o Codex CLI per i risultati migliori.

Dai a OpenCode un piano di lancio

LaunchRepo dà al tuo agente l’elenco delle piattaforme, il runbook e un tracker che tiene aggiornato. OpenCode fa il lavoro nel tuo browser; l’ultima parola resta a te.

Vedi i prezzi