# Claude Code technische tutorial: configuratie en automatisering | llmnet Apps

[Naar de inhoud](#lm-inhoud)Netwerk/NL[EN](/en/)[Hubhub.llmnet.nlModellen vergelijken op taak, taal, kosten en licentie.](https://hub.llmnet.nl/)[Communitycommunity.llmnet.nlPrompttechnieken, patronen en systeemprompts.](https://community.llmnet.nl/)[APIapi.llmnet.nlLLM's robuust in software: rate limits, routing, structured output.](https://api.llmnet.nl/)[Consultancyconsultancy.llmnet.nlAI invoeren in een organisatie, van pilot tot productie.](https://consultancy.llmnet.nl/)[Nieuwsnieuws.llmnet.nlOntwikkelingen in AI, geduid voor Nederland.](https://nieuws.llmnet.nl/)[Benchmarkbenchmark.llmnet.nlZelf meten wat AI-kwaliteit is, voor jouw taken.](https://benchmark.llmnet.nl/)[Vacaturesvacatures.llmnet.nlAI-rollen, salarissen en carrièrepaden in Nederland.](https://vacatures.llmnet.nl/)[Lerenleren.llmnet.nlAI-concepten in gewoon Nederlands, van beginner tot bouwer.](https://leren.llmnet.nl/)[Gidsgids.llmnet.nlAI privé draaien op eigen Mac, pc, NAS of thuisserver.](https://gids.llmnet.nl/)[Directorydirectory.llmnet.nlHet AI-ecosysteem in kaart: tools, modellen, bedrijven.](https://directory.llmnet.nl/)[Radarradar.llmnet.nlSignalen uit X, onderzoek en communities voor indie developers.](https://radar.llmnet.nl/)[Appsapps.llmnet.nlReviews van AI-apps en open-source repo's, met tips voor wie zelf bouwt.](https://apps.llmnet.nl/)[Trendingtrending.llmnet.nlElke dag de AI-trends van X, geduid in het Nederlands.](https://trending.llmnet.nl/)[llmnet.nl — hoofdsite](https://llmnet.nl/)[](https://x.com/intent/post?url=https%3A%2F%2Fapps.llmnet.nl%2Fclaude-code-tutorial&text=Claude%20Code%20technische%20tutorial%3A%20configuratie%20en%20automatisering)[](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fapps.llmnet.nl%2Fclaude-code-tutorial)[](https://www.reddit.com/submit?url=https%3A%2F%2Fapps.llmnet.nl%2Fclaude-code-tutorial&title=Claude%20Code%20technische%20tutorial%3A%20configuratie%20en%20automatisering)[](#)

[← Apps-overzicht](/)

# Claude Code: technische tutorial

Claude Code: [Review](/claude-code-review)[Installeren & instellen](/claude-code-installatie)[Nieuws](/claude-code-nieuws)[Technische tutorial](/claude-code-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:

- Managed settings (managed-settings.json, MDM of de beheerconsole): door je organisatie, niet te overschrijven.

- Commandoregel: claude --settings '<json-of-pad>', alleen voor die sessie.

- Project lokaal: .claude/settings.local.json, alleen voor jou, komt niet in git.

- Project gedeeld: .claude/settings.json, gaat mee in de repository.

- 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:

- PreToolUse: vóór een toolaanroep; geschikt om iets te blokkeren.

- PostToolUse: na een geslaagde toolaanroep, zoals lint of formatteren na een bewerking.

- UserPromptSubmit: als jij een bericht verstuurt.

- SessionStart en SessionEnd: begin en einde van een sessie.

- Stop: als Claude klaar is met antwoorden.

- PreCompact: vlak voordat de context wordt samengevat.

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:

- local (standaard): alleen dit project, alleen voor jou, opgeslagen in ~/.claude.json.

- project: in .mcp.json in de projectroot, bedoeld om mee te committen.

- user: al je projecten, alleen voor jou.

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:

- --bare: slaat het automatisch laden van hooks, skills, plugins, MCP-servers, auto memory en CLAUDE.md over. Aanbevolen voor CI, omdat het resultaat dan niet afhangt van wat er op de machine staat. In bare mode gebruikt Claude Code je abonnementslogin niet; zet ANTHROPIC_API_KEY.

- --output-format json: het tekstresultaat staat in .result, plus session_id en een kostenschatting (total_cost_usd). Met --json-schema krijg je gestructureerde uitvoer in .structured_output.

- --output-format stream-json --verbose: gebeurtenissen als losse JSON-regels.

- --permission-mode: dontAsk weigert alles wat anders een vraag zou opleveren, handig voor dichtgetimmerde CI. acceptEdits laat bestandsbewerkingen toe. auto laat een classifier meekijken.

- --permission-prompts none (vanaf 2.1.259): voor onbewaakte runs; alles wat een vraag zou opleveren, wordt geweigerd.

- --continue of --resume <session_id>: een eerdere run voortzetten.

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 je alleen ANTHROPIC_BASE_URL zonder gatewaysleutel, dan blijft je claude.ai-login de actieve credential, met de limieten en facturatie van je abonnement.

- Anthropic ondersteunt het niet om Claude Code via een gateway naar niet-Claude-modellen te sturen. Dat kan technisch soms werken, maar functies kunnen dan stilletjes breken.

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

## Kosten beperken

- Kies per taak een model met /model, en de denkinspanning met /effort. Niet elke taak vraagt het zwaarste model.

- Houd CLAUDE.md onder de 200 regels. Zet taakspecifieke instructies in skills of in regels met paths:-frontmatter, zodat ze alleen laden als ze nodig zijn.

- Gebruik --bare in scripts, zodat er geen onnodige context meelaadt.

- Kijk bij scripted runs naar total_cost_usd in de JSON-uitvoer. Dat is een schatting aan de kant van de client, geen factuur.

## Veelvoorkomende fouten

- claude: command not found na installatie — ~/.local/bin staat niet in PATH; open een nieuwe terminal of voeg het pad toe.

- Settings Error bij het starten — Ongeldige JSON (commentaar of een komma te veel) in een instellingenbestand; claude doctor wijst het bestand aan.

- Claude negeert je AGENTS.md — Er staat ergens boven je werkmap een CLAUDE.md of CLAUDE.local.md; zet in /config Project instructions op claude-md-and-agents-md.

- MCP-server ontbreekt in een -p-run — Ongeldige entry in --mcp-config; controleer mcp_server_errors in de system/init-gebeurtenis van stream-json.

- Sandbox doet niets op Linux — bubblewrap of socat ontbreekt; /sandbox laat zien wat er mist.

Documentatie: [code.claude.com/docs](https://code.claude.com/docs/en/overview).
