Claude Code-hooks: deterministische controle over AI-workflows
4m leestijd

Claude Code-hooks: deterministische controle over AI-workflows

Terwijl instructies in CLAUDE.md slechts suggesties zijn, bieden hooks deterministische garanties. Leer hoe je pre- en post-tool hooks gebruikt om formattering af te dwingen, gevaarlijke commando's te blokkeren en de workflow van je team te standaardiseren.

Een hook in Claude Code is een lokaal shell-commando dat Claude Code automatisch uitvoert op een vast punt in zijn eigen levenscyclus, ingesteld in .claude/settings.json in plaats van gevraagd in een prompt. Daar zit het hele verschil: een hook draait gegarandeerd, terwijl een instructie in een prompt waarschijnlijk wordt opgevolgd.

Als je al een tijdje met Claude Code werkt, gebruik je waarschijnlijk een CLAUDE.md-bestand om het model projectspecifieke instructies te geven. Je zou het bijvoorbeeld kunnen vertellen om "altijd Prettier te draaien na het bewerken van een bestand."

En meestal doet het precies dat. Maar soms... ook niet. Het blijft een AI, gewoon een loop in plaats van een strikte state machine, wat betekent dat gehoorzaamheid waarschijnlijk is, maar niet gegarandeerd.

Als iets elke keer zonder uitzondering moet gebeuren, zet je het niet in een prompt. Je zet het in een hook.

Wat zijn hooks?

Dat gegarandeerde draaien is het hele punt, en het is precies wat een prompt-instructie je niet geeft. Hooks zijn deterministisch.

Hooks configureer je in je .claude/settings.json-bestand. Omdat het configuraties op projectniveau zijn, kun je ze in je repository committen. Zo zorg je ervoor dat je hele team dezelfde geautomatiseerde workflow deelt.

Events in de levenscyclus

Bij het configureren van een hook kies je een event dat als trigger dient. Claude Code ondersteunt verschillende events:

  • userPromptSubmit: Draait onmiddellijk wanneer je een prompt indient, nog voordat Claude het verwerkt.
  • preToolUse: Draait vlak voordat een tool wordt uitgevoerd.
  • postToolUse: Draait direct nadat een tool zijn taak heeft voltooid.
  • notification: Draait wanneer Claude een melding naar de gebruiker stuurt.
  • stop: Draait wanneer Claude klaar is met reageren en de interactie is afgerond.

Je kunt een matcher opgeven om de hook te beperken tot specifieke tools (bijv. alleen laten draaien bij edit- of bash-tools).

Die lijst met events is sindsdien gegroeid, en een van de nieuwere events verandert alleen wat jij op je scherm ziet. Een plugin die elk bericht van een tijdstempel voorziet combineert allebei de soorten: één hook die alleen jouw scherm aanpast en Claude nooit bereikt, en één die Claude de tijd doorgeeft en op je scherm niets verandert.

De auto-formatter: post-tool hooks

De meest voorkomende toepassing voor hooks is het afdwingen van code-formattering. In plaats van te hopen dat Claude er na een aanpassing aan denkt het bestand te formatteren, kun je een postToolUse-hook gebruiken.

Door de matcher in te stellen op edit of multi-edit, vuurt de hook elke keer als Claude een bestand wijzigt. Je kunt het script van de hook zo configureren dat het de bestandsextensie controleert en de juiste formatter draait: Prettier voor TypeScript, gofmt voor Go, of Ruff voor Python.

Harde regels afdwingen: pre-tool hooks

Waar post-tool hooks ideaal zijn voor opruimwerkzaamheden, bieden pre-tool hooks een mechanisme voor veiligheid en compliance. Pre-tool hooks kunnen daadwerkelijk voorkomen dat Claude een tool uitvoert. Hoe die blokkade zich verhoudt tot modes, allow-regels en de sandbox staat uitgewerkt in de gids over Claude Code permissions.

Wanneer een pre-tool hook vuurt, ontvangt deze de naam van de tool en de input als JSON op stdin. Het hook-script kan vervolgens de payload inspecteren en een beslissing nemen:

  • Exit code 0: Ga door met de uitvoering van de tool.
  • Exit code 2: Blokkeer de uitvoering van de tool.

Als je de uitvoering blokkeert, wordt alles wat je naar stderr print direct teruggekoppeld naar Claude. Dit betekent dat Claude begrijpt waarom hij geblokkeerd is en zijn aanpak kan aanpassen.

Zo dwing je niet-onderhandelbare regels af:

  • Blokkeer schrijfacties naar een productie-configuratiemap.
  • Blokkeer bash-commando's die rm -rf bevatten.
  • Log alle uitgevoerde commando's voor compliance-doeleinden.

Omgeving en uitvoering

Wanneer je hook-scripts schrijft, vertrouw dan op de CLAUDE_PROJECT_DIR-omgevingsvariabele. Dit zorgt ervoor dat je scripts correct draaien, ongeacht wat de huidige werkmap van Claude is op het moment dat de hook vuurt.

Sla je complexe hook-scripts op binnen je repository (bijvoorbeeld in een .claude/hooks/-map) en verwijs ernaar in je settings.json.

Stop met suggesties, begin met garanties

Hooks geven je de deterministische controle die prompts simpelweg niet kunnen bieden. Gebruik postToolUse voor formattering en logging, en gebruik preToolUse om gevaarlijke operaties te blokkeren. Nu de defaults van Claude Code richting autonomie schuiven, zijn die garanties geen luxe meer.

Twijfel je of iets een hook moet zijn of iets anders, kijk dan naar de beslisboom voor skills, subagents en hooks. Configureer ze eenmalig, commit ze in je repo, en geef je team een veiligere, betrouwbaardere AI-programmeeromgeving.

(3 van 36)
01Mijn Claude Code-setup: status line, plugins en terminal02Superpowers: hoe je Claude Code leert eerst te denken03Claude Code-hooks: deterministische controle over AI-workflows04Het CLAUDE.md-bestand: geef je AI permanent geheugen05Stop met vriendelijk vragen aan je agent06Wat er nieuw is in Claude Code: notities van het Londen-event07Het beste cijfer in Opus 4.8 is geen benchmark08Verouderd geheugen is erger dan geen geheugen09De agent is gewoon een loop10Bouw een MCP-server, en vraag je dan af of die moet bestaan11Skill, subagent, hook of slash command? Kies de juiste12Inloggen op MCP-servers vanuit je shell13Claude veilig toegang geven tot je SQL-database14De dag dat 'default' ineens 'Manual' heette15Claude Code-skills: zo schrijf je er een die werkt16Een goede Claude Code-subagent schrijven17Claude Code permissions instellen: de gids die ik miste18Claude Code sandboxen: toestemming is geen muur19Prompt injection voorkomen: verdediging voor wie agents bouwt20Het beste Claude-model voor code: welk model voor welke taak21Legacy code refactoren met AI: begin met characterization tests22Je MCP-server beveiligen: authenticatie, scopes en rate limits23Opus 5 is er, en je effort-instellingen kloppen niet meer24Incident response voor AI-agents: wat je doet als je coding agent de fout in gaat25Claude Code /doctor: wat hij controleert en wat er nieuw is26Context beheren in Claude Code: wanneer /clear en wanneer /compact27Git worktrees uitgelegd: parallel werken met AI-agents zonder botsingen28Claude Code plan mode: beslissen voordat de agent schrijft29Debuggen met een coding agent: geef hem het zoekwerk, de hypothese houd je zelf30Claude Code checkpoints en /rewind: wijzigingen van je agent terugdraaien31Claude Code cross-session messaging: sessies die elkaar berichten sturen32Audit logging voor AI-agents: wat Claude Code vastlegt en wanneer je iemand wakker belt33Claude Code-config delen met je team: wat de repo wel en niet afdwingt34Je Claude Code-sessie heeft geen klok35Claude Code in een grote codebase: de agent afbakenen tot wat ertoe doet36Een Claude Code-sessie terughalen die de resume-picker niet laat zien