Workbranch › Handleidingen
HandleidingHooks gebruiken in Claude Code
Je wilt dat iets elke keer gebeurt, zoals een bestand opmaken nadat Claude het heeft bewerkt of een seintje als Claude op je wacht, zonder te hopen dat Claude het onthoudt. Hooks doen precies dat. Deze handleiding legt uit wat ze zijn, loopt een eerste hook met je door en laat zien waar je ze neerzet.
Kort antwoord: een hook is een shellcommando dat Claude Code automatisch op een vast moment uitvoert, bijvoorbeeld voordat een tool draait, nadat een bestand is bewerkt of als Claude je input nodig heeft. Je voegt hooks toe onder een sleutel hooks in een instellingenbestand zoals ~/.claude/settings.json (alle projecten) of .claude/settings.json (één project), en typt daarna /hooks om te controleren of Claude Code ze ziet.
De namen van events, bestandslocaties en het gedrag hieronder komen uit de documentatie van Anthropic over Claude Code van oktober 2026. Claude Code wordt vaak bijgewerkt, dus voer claude update uit als er iets ontbreekt.
Wat hooks zijn en waarom ze helpen
Instructies in een prompt of een CLAUDE.md-bestand zijn suggesties: Claude volgt ze meestal, maar beslist zelf. Een hook is anders. Claude Code voert je commando zelf uit zodra het event plaatsvindt, dus de actie is deterministisch. Typische toepassingen uit de handleiding van Anthropic:
- Meldingen als Claude wacht op een toestemming of op je antwoord.
- Automatisch opmaken van elk bestand nadat Claude het heeft bewerkt of geschreven.
- Blokkeren van bewerkingen aan gevoelige bestanden zoals
.envof alles in.git/. - Context toevoegen, bijvoorbeeld Claude aan de projectconventies herinneren nadat het gesprek is gecomprimeerd.
Enkele van de meestgebruikte events zijn SessionStart (een sessie begint of wordt hervat), UserPromptSubmit (je verstuurt een prompt), PreToolUse (vóór een toolaanroep; kan die blokkeren), PostToolUse (nadat een toolaanroep is gelukt), Notification, Stop (Claude is klaar met antwoorden), PreCompact en SessionEnd. De volledige lijst in de hooks-referentie is veel langer.
Je eerste hook instellen: een melding op je bureaublad
Dit voorbeeld, gebaseerd op het stappenplan van Anthropic, waarschuwt je op macOS zodra Claude Code je aandacht nodig heeft.
- Open
~/.claude/settings.jsonin een teksteditor. Maak het bestand aan als het niet bestaat. - Voeg een object
hookstoe met een vermeldingNotification. Daarin komt een lijst met matchergroepen; elke groep heeft eenmatcher(laat die als lege tekenreeks staan om bij elke melding af te gaan) en een lijsthooksmet één item van"type": "command". - Stel het commando in op
osascript -e 'display notification "Claude Code needs your attention" with title "Claude Code"'. Op Linux gebruikt het voorbeeld van Anthropic in plaats daarvannotify-send. Vergeet niet de binnenste dubbele aanhalingstekens in JSON te escapen. - Heeft het bestand al een sleutel
hooks, voegNotificationdan toe naast de bestaande events in plaats van het hele object te vervangen. - Typ in Claude Code
/hooks. De hooks-browser zou je nieuwe hook onder Notification moeten tonen. Druk op Esc om terug te gaan. - Vraag Claude om iets waarvoor toestemming nodig is en ga naar een ander venster. Er zou een melding moeten verschijnen.
Wil je dat de hook alleen bij sommige meldingen afgaat, stel de matcher dan in op een type zoals permission_prompt (een toestemmingsvraag wacht al zo'n zes seconden) of idle_prompt (Claude is klaar en je hebt ongeveer een minuut niets getypt).
Een tweede voorbeeld: bestanden opmaken na bewerkingen
Voor een projecthook zet je de configuratie in .claude/settings.json in de hoofdmap van het project. Gebruik het event PostToolUse met de matcher Edit|Write, zodat hij alleen draait na tools die bestanden bewerken. Het voorbeeldcommando van Anthropic leest het bewerkte pad uit de JSON die Claude Code via standaardinvoer doorgeeft en geeft het aan Prettier: jq -r '.tool_input.file_path' | xargs npx prettier --write. Daarvoor moet jq geïnstalleerd zijn. Een geslaagde hook toont niets in het gesprek; je ziet alleen dat het bestand opnieuw is opgemaakt.
Waar hooks worden ingesteld
| Locatie | Geldt voor | Gedeeld? |
|---|---|---|
~/.claude/settings.json | Al je projecten | Nee, alleen je eigen computer |
.claude/settings.json | Eén project | Ja, kan worden gecommit |
.claude/settings.local.json | Eén project | Nee, blijft buiten git |
| Beheerde beleidsinstellingen | De hele organisatie | Ingesteld door beheerders |
De hooks/hooks.json van een plugin | Zolang de plugin aanstaat | Meegeleverd met de plugin |
| Frontmatter van een skill | De rest van de sessie nadat de skill is aangeroepen | In het skillbestand |
| Frontmatter van een subagent | Zolang die subagent draait | In het subagentbestand |
Wil je hooks uitschakelen, zet dan "disableAllHooks": true in een instellingenbestand. Hooks uit beheerde instellingen blijven draaien, tenzij het daar ook is ingesteld.
Hoe een hook antwoordt
Als een event plaatsvindt, stuurt Claude Code de details ervan als JSON naar de standaardinvoer van je commando. Je commando antwoordt met zijn exitcode:
- Exit 0: ga door. Bij sommige events, zoals
SessionStart, wordt gewone tekst die naar standaarduitvoer wordt geschreven aan de context van Claude toegevoegd. - Exit 2: blokkeer de actie, waar het event dat toestaat. Schrijf de reden naar standaardfout; bij
PreToolUsekrijgt Claude die te zien en kan het van koers veranderen. - Andere codes: worden meestal behandeld als een niet-blokkerende fout; de actie gaat door en het transcript toont een hook error.
Voor fijnere controle eindig je met exit 0 en schrijf je in plaats daarvan een JSON-object. Kies per hook één aanpak.
Goed om te weten
- Commandohooks kunnen zelf geen slash-commando's uitvoeren of tools aanroepen.
- De standaard time-out voor commandohooks is 10 minuten, korter bij een paar events; stel per hook
timeout(in seconden) in om dat te wijzigen. PostToolUsekan niets ongedaan maken, want de tool heeft al gedraaid. GebruikPreToolUseom een actie te voorkomen.Stopgaat af elke keer dat Claude een antwoord afrondt, niet alleen als een taak klaar is.
Als het niet werkt
- De hook gaat nooit af: voer
/hooksuit en controleer of hij onder het juiste event staat. Matchers zijn hoofdlettergevoelig en moeten precies overeenkomen met de toolnaam, bijvoorbeeldEdit, nietedit. - "/hooks" toont niets: controleer of de JSON geldig is (geen komma's aan het eind of commentaar) en in het juiste bestand staat. Wijzigingen worden normaal automatisch opgepikt; zo niet, start de sessie dan opnieuw.
- "hook error" in het transcript: test het script door er voorbeeld-JSON in te pipen en
echo $?te controleren. Gebruik absolute paden of$CLAUDE_PROJECT_DIRvoor scripts, installeerjqals het ontbreekt en maak scripts uitvoerbaar metchmod +x. - Geen melding op macOS: voer het commando
osascriptéén keer uit in Terminal en zet daarna Sta berichtgeving toe aan voor Scripteditor in Systeeminstellingen > Berichtgeving (in het Engels: Allow Notifications, Script Editor, System Settings > Notifications).
Houd bij wat elke sessie openlaat
De Workbranch-plugin voor Claude Code gebruikt een samenvatting bij de start van een sessie: in een map die aan een Workbranch-project is gekoppeld, laat hij zien wat er nog openstaat als een sessie begint, en als je "save this to Workbranch" zegt, legt hij de taken, beslissingen en open vragen van de sessie vast in dat project. Zie Workbranch voor Claude. Nieuw bij Claude Code? Begin met aan de slag met Claude Code.
Bronnen
- Use Claude Code with your Pro or Max plan (Claude Help Center, gecontroleerd op 30 oktober 2026)
- Automate actions with hooks (Claude Code docs, gecontroleerd op 30 oktober 2026)
Veelgestelde vragen
Kan Claude een hook voor me schrijven?
Ja. Volgens de handleiding van Anthropic kun je de hook die je wilt beschrijven in de prompt van Claude Code en Claude vragen hem aan je instellingen toe te voegen. Controleer het resultaat daarna met /hooks.
Kan een hook Claude ook in bypass mode tegenhouden?
Een PreToolUse-hook die een deny-beslissing teruggeeft, blokkeert de tool in elke permissiemodus, ook in bypassPermissions. Daardoor zijn hooks handig voor regels die mensen niet kunnen uitschakelen door van modus te wisselen.
Zijn er hooks die een model gebruiken in plaats van een script?
Ja. Naast shellcommando's kan een hook een HTTP-verzoek zijn, een aanroep van een MCP-tool, één prompt die door een Claude-model wordt beoordeeld, of een experimentele agent-hook met toegang tot tools.