Naar de inhoud
NLEN
← Apps-overzicht

OpenCode: technische tutorial

OpenCode: ReviewInstalleren & instellenNieuwsTechnische tutorial

Stand september 2026, samengesteld uit onze eigen notities en nieuwsarchief; tekst machinaal opgesteld en redactioneel gecontroleerd. Controleer versies en commando's in de officiële documentatie.

Deze tutorial gaat over het inrichten van OpenCode voor serieus werk: configuratielagen, eigen en lokale modelproviders (ook via je eigen router), eigen agents, permissies op patroon, MCP-servers en onbewaakt gebruik via opencode run, opencode serve en GitHub Actions. Sleutels en commando's zijn gecontroleerd tegen de officiële documentatie (stand september 2026).

Configuratie: bestanden en volgorde

OpenCode leest opencode.json of opencode.jsonc (JSON met commentaar). De lagen worden samengevoegd, niet vervangen; een latere laag wint bij hetzelfde veld:

  1. Configuratie op afstand (.well-known/opencode, voor organisaties).
  2. Globaal: ~/.config/opencode/opencode.json.
  3. Een eigen pad via de omgevingsvariabele OPENCODE_CONFIG.
  4. Project: opencode.json in de root.
  5. Inline configuratie.
  6. Beheerde configuratiebestanden en, op macOS, beheerde voorkeuren (de hoogste prioriteit).

Zet altijd de schema-regel bovenaan voor autocomplete en validatie in je editor. Twee soorten variabelen houden geheimen uit je bestanden:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "anthropic/claude-opus-5-5",
  "small_model": "anthropic/claude-haiku-4-5",
  "instructions": ["./docs/conventies.md", "packages/*/AGENTS.md"],
  "share": "disabled",
  "autoupdate": "notify"
}

Eigen, lokale en router-providers

Elke dienst met een OpenAI-compatibele API voeg je toe via het pakket @ai-sdk/openai-compatible. Eerst de sleutel: /connect → Other → een eigen ID → sleutel plakken. Daarna in de configuratie:

{
  "provider": {
    "mijnrouter": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Eigen LLM-router",
      "options": { "baseURL": "https://router.example.com/v1" },
      "models": {
        "code":      { "name": "Router: code" },
        "goedkoop":  { "name": "Router: goedkoop" }
      }
    }
  },
  "model": "mijnrouter/code",
  "small_model": "mijnrouter/goedkoop"
}

Zo loopt al het verkeer van OpenCode via één router, die zelf de sleutels van de providers beheert en kosten per client kan bijhouden. De modelnamen zijn dan aliassen die de router vertaalt.

Lokaal met Ollama:

{
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Ollama (lokaal)",
      "options": { "baseURL": "http://localhost:11434/v1" },
      "models": { "qwen3-coder:30b": { "name": "Qwen3 Coder 30B" } }
    }
  }
}

Voor LM Studio gebruik je http://127.0.0.1:1234/v1 als baseURL. Modellen moet je bij beide handmatig opsommen. Kleine lokale modellen gaan vaak slecht om met toolaanroepen; test een model eerst met een kleine taak in Plan-modus.

Agents

OpenCode heeft twee hoofdagents, waartussen je met Tab wisselt:

Daarnaast zijn er subagents die je met @ aanroept:

Eigen agents definieer je als markdownbestand in .opencode/agents/ (per project) of ~/.config/opencode/agents/ (globaal). Een voorbeeld, .opencode/agents/reviewer.md:

---
description: Beoordeelt code op beveiliging en onderhoudbaarheid
mode: subagent
model: anthropic/claude-opus-5-5
temperature: 0.1
permission:
  edit: deny
  bash: deny
---
Je bent een strenge code-reviewer. Zoek naar injectie, lekken van
geheimen en ontbrekende foutafhandeling. Noem per bevinding het
bestand en de regel. Wijzig zelf niets.

Permissies op patroon

Elke tool heeft een permissie met de waarde allow, ask of deny. Bekende sleutels zijn read, edit, glob, grep, bash, task, skill, webfetch, websearch, external_directory en doom_loop. De meeste staan standaard op allow. Uitzonderingen: external_directory (buiten je project werken) en doom_loop (een agent die in een herhaling vastzit) staan op ask, en read weigert standaard .env-bestanden.

Voor bash en andere tools kun je per patroon kiezen. De laatste regel die past, wint, dus zet de algemene regel bovenaan:

{
  "permission": {
    "*": "ask",
    "read": "allow",
    "grep": "allow",
    "bash": {
      "*": "ask",
      "git *": "allow",
      "npm test": "allow",
      "rm *": "deny",
      "git push *": "deny"
    },
    "webfetch": "ask"
  }
}

* staat voor willekeurige tekens, ? voor precies één teken.

MCP-servers

In opencode.json onder mcp. Een lokale server; let op dat command een array is:

{
  "mcp": {
    "database": {
      "type": "local",
      "command": ["npx", "-y", "mijn-db-mcp"],
      "environment": { "DATABASE_URL": "{env:DATABASE_URL}" },
      "enabled": true
    }
  }
}

Een externe server:

{
  "mcp": {
    "docs": {
      "type": "remote",
      "url": "https://docs.example.com/mcp",
      "headers": { "Authorization": "Bearer {env:DOCS_TOKEN}" },
      "enabled": true
    }
  }
}

OAuth wordt bij externe servers automatisch herkend. Zet "oauth": false als je dat niet wilt, bijvoorbeeld omdat je met een vaste header werkt. Met "enabled": false zet je een server tijdelijk uit zonder de configuratie te verwijderen. Elke server voegt tools toe aan de context, dus zet alleen aan wat je voor het project nodig hebt.

Onbewaakt: run, serve en GitHub

opencode run voert één opdracht uit zonder interface:

opencode run --agent plan -m anthropic/claude-opus-5-5 \
  "Beschrijf de architectuur van dit project in vijf punten"

opencode run --format json "Draai de tests en repareer wat faalt" > run.jsonl

opencode serve start een headless HTTP-server, zodat je OpenCode vanuit andere programma's aanstuurt. Zet altijd een wachtwoord:

OPENCODE_SERVER_PASSWORD="sterk-wachtwoord" opencode serve

Stel die server nooit zonder wachtwoord bloot aan een netwerk: wie erbij kan, kan commando's op je machine laten draaien.

GitHub Actions: opencode github install zet een workflow in je repository. In de action draait opencode github run de agent, bijvoorbeeld als reactie op een opmerking in een issue of pull request. Zet de sleutels als repository-secrets en geef de agent in CI geen ruimere permissies dan nodig.

Problemen oplossen

Documentatie: opencode.ai/docs.