Naar de inhoud
NLEN
← Apps-overzicht

Claude Code: technische tutorial

Claude Code: 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 is voor developers die Claude Code verder willen inrichten dan de standaard: instellingenbestanden en hun volgorde, permissieregels, hooks, MCP-servers, de sandbox, headless gebruik in scripts en CI, en een eigen gateway. Alle sleutels en commando's zijn gecontroleerd tegen de officiële documentatie (stand september 2026, Claude Code 2.1.28x).

Instellingenbestanden en hun volgorde

Claude Code leest instellingen uit vijf lagen. Een hogere laag wint van een lagere:

  1. Managed settings (managed-settings.json, MDM of de beheerconsole): door je organisatie, niet te overschrijven.
  2. Commandoregel: claude --settings '<json-of-pad>', alleen voor die sessie.
  3. Project lokaal: .claude/settings.local.json, alleen voor jou, komt niet in git.
  4. Project gedeeld: .claude/settings.json, gaat mee in de repository.
  5. Gebruiker: ~/.claude/settings.json, voor al je projecten.

De bestanden zijn strikte JSON: een //-commentaar of een komma te veel geeft een foutmelding bij de volgende start. Zet bovenaan de schema-regel voor autocomplete in je editor:

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "claude-opus-5-5"
}

Controleer na een wijziging met /status welke bronnen geladen zijn. Eén waarde tijdelijk proberen zonder iets op te slaan kan met --settings, met een eigen vlag (--model, --effort) of een omgevingsvariabele (ANTHROPIC_MODEL).

Permissies

Elke regel noemt een tool en wat die mag. Dit voorbeeld laat lint- en testcommando's toe zonder te vragen en blokkeert het lezen van .env-bestanden:

{
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run test *)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  }
}

Let op de spatie in Bash(npm run test *): de * maakt het een prefix-match. Zonder spatie matcht Bash(git diff*) ook git diff-index.

De standaardmodus (permissions.defaultMode) bepaalt hoeveel er gevraagd wordt. De modi auto en bypassPermissions werken alleen vanuit je gebruikers- of managed settings, niet vanuit een projectbestand: een gekloonde repository kan zichzelf dus geen vrijbrief geven.

Hooks

Hooks zijn shellcommando's die op vaste momenten draaien, ongeacht wat het model besluit. Daarmee dwing je dingen af die in CLAUDE.md alleen een verzoek zijn. De structuur is: gebeurtenis → lijst van matchers → per matcher een lijst hooks.

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/lint.sh"
          }
        ]
      }
    ]
  }
}

Veelgebruikte gebeurtenissen:

Hooks kunnen in elk instellingenbestand staan, maar ook in een plugin (hooks/hooks.json) of in de frontmatter van een skill of subagent.

MCP-servers koppelen

Een externe (HTTP-)server:

claude mcp add --transport http github https://api.githubcopilot.com/mcp/

Een lokale server die via stdio draait; de -- scheidt de opties van Claude Code van het commando van de server:

claude mcp add --transport stdio --env API_KEY=xyz mijn-server -- npx -y mijn-mcp-server

Met --scope bepaal je waar de configuratie komt:

Een .mcp.json ziet er zo uit:

{
  "mcpServers": {
    "docs": { "type": "http", "url": "https://example.com/mcp" },
    "lokaal": { "type": "stdio", "command": "npx", "args": ["-y", "server-package"] }
  }
}

In een sessie toont /mcp de status van elke server, en daar rond je ook een OAuth-login af.

Beveiliging. Een .mcp.json in een repository die je net hebt gekloond, is code van iemand anders. Interactief vraagt Claude Code per server om toestemming. Bij claude -p gebeurt dat niet (zie hieronder).

De sandbox

De sandbox laat Claude de meeste shellcommando's draaien zonder telkens te vragen. In ruil daarvoor bepaal jij welke bestanden en domeinen die commando's mogen raken. Het besturingssysteem dwingt dat af: Seatbelt op macOS, bubblewrap op Linux en WSL 2. Native Windows wordt niet ondersteund.

Op Linux installeer je eerst de afhankelijkheden:

sudo apt-get install bubblewrap socat

Het paneel /sandbox toont de status en laat je een modus kiezen. In settings.json:

{
  "sandbox": {
    "enabled": true,
    "filesystem": {
      "allowWrite": ["/tmp/build"],
      "denyRead": ["~/.ssh"]
    },
    "network": {
      "allowedDomains": ["github.com", "*.npmjs.org"]
    }
  }
}

Standaard draait Claude Code gewoon door zonder sandbox als die niet kan starten, met alleen een waarschuwing. Moet de sandbox een harde eis zijn, zet dan sandbox.failIfUnavailable op true. Wil je niet dat Claude een geblokkeerd commando buiten de sandbox opnieuw probeert, gebruik dan "allowUnsandboxedCommands": false.

Headless: scripts en CI

Met -p (of --print) draait Claude Code zonder interactie. De exitcode is 0 bij succes, zodat je script erop kan reageren.

claude -p "Draai de tests en repareer wat faalt" \
  --allowedTools "Bash,Read,Edit" \
  --permission-mode acceptEdits

Belangrijke opties:

Een voorbeeld met jq:

claude --bare -p "Vat README.md samen" --allowedTools "Read" \
  --output-format json | jq -r '.result'

Let op: zonder --bare laadt een -p-run de hooks uit .claude/settings.json en de servers uit .mcp.json van de map waarin hij draait, zonder vertrouwensvraag. Draai claude -p dus nooit zonder --bare in een onbekende repository.

Via een eigen LLM-gateway

Draai je een gateway voor sleutelbeheer, kostenbewaking of logging, dan wijs je Claude Code erheen met ANTHROPIC_BASE_URL en geef je een gatewaysleutel mee. De gateway moet een ondersteund API-formaat aanbieden, het Anthropic-formaat voorop. Twee valkuilen:

Zet de variabelen blijvend in het env-blok van ~/.claude/settings.json, zodat je ze niet per shell hoeft te exporteren.

Kosten beperken

Veelvoorkomende fouten

Documentatie: code.claude.com/docs.