Nieuws & Analyses

Claude Code hooks: zo vervang je irritante stopwoordjes in 4 stappen

Claude Code noemt alles 'load-bearing'? Met een MessageDisplay-hook vervang je stopwoordjes in de output. In 4 stappen werkend, inclusief script.

Claude Code hooks: zo vervang je irritante stopwoordjes in 4 stappen

Wie veel met Claude Code werkt, kent de tics: alles is ineens “load-bearing”, elke tegenwerping opent met “you’re absolutely right”. Developer Johanna Larsson schreef er op 14 juli een knipoog-tutorial over die prompt viraal ging op Hacker News (Bron: jola.dev). Haar oplossing is serieus bruikbaar: een weergave-hook die stopwoordjes automatisch vervangt. Zo zet je hem zelf op.

Wat doet een MessageDisplay-hook?

Claude Code kent hook-events: momenten in een sessie waarop het automatisch jouw script aanroept. Het event MessageDisplay vuurt telkens wanneer Claude tekst naar je scherm streamt. Jouw script krijgt dat tekstfragment binnen als JSON, mag het aanpassen, en geeft via het veld displayContent de vervangende tekst terug (Bron: Claude Code-docs).

Belangrijk om te weten: dit is puur cosmetisch. Het transcript en de context die Claude zelf ziet blijven origineel; alleen jouw weergave verandert. Je kunt er dus niets mee kapotmaken.

💡 Beginner-tip: nooit met hooks gewerkt? Begin met deze — hij kan niets blokkeren of wijzigen aan je bestanden. Onze gids Claude Code skills instellen legt de bredere configuratiemap ~/.claude uit.

Stap 1: maak het vervang-script

Maak het bestand ~/.claude/hooks/wordswap.sh met deze inhoud (Python, ondanks de .sh-extensie — de shebang regelt het):

#!/usr/bin/env python3
import json, re, sys

replacements = {
    "load-bearing": "essentieel",
    "seam": "koppelvlak",
    "you're absolutely right": "klopt",
    "honest take": "inschatting",
}

data = json.load(sys.stdin)
text = data.get("delta") or ""
for phrase, replacement in replacements.items():
    pattern = r"\b" + re.escape(phrase) + r"\b"
    text = re.sub(pattern, replacement, text, flags=re.IGNORECASE)

print(json.dumps({
    "hookSpecificOutput": {
        "hookEventName": "MessageDisplay",
        "displayContent": text,
    }
}))

Larssons origineel vervangt de frases door onzin (“load-bearing” wordt “cooked”) — leuk om de irritatie weg te lachen. In het voorbeeld hierboven staan neutrale Nederlandse vervangingen; vul de replacements-dictionary met je eigen ergernissen.

Stap 2: maak het script uitvoerbaar

chmod +x ~/.claude/hooks/wordswap.sh

Stap 3: registreer de hook in settings.json

Voeg in ~/.claude/settings.json dit toe aan het hooks-blok (of maak dat blok aan):

{
  "hooks": {
    "MessageDisplay": [
      { "hooks": [ { "type": "command", "command": "$HOME/.claude/hooks/wordswap.sh" } ] }
    ]
  }
}

MessageDisplay ondersteunt geen matchers: de hook draait op elk assistent-bericht met tekst. Berichten zonder tekst (alleen tool-aanroepen) slaan vanzelf over (Bron: Claude Code-docs).

Stap 4: start een nieuwe sessie

Hooks laden bij het opstarten. Sluit je huidige Claude Code-sessie, start een nieuwe, en vraag iets waarin een van je verboden frases zou opduiken. De vervangingen verschijnen direct in beeld.

⚡ Gevorderden: het standaard-timeout voor dit event is 10 seconden. Houd het script dus licht — pure string-vervangingen zijn geen probleem, maar netwerk-calls of zware regexen op elk stream-fragment wel. En let op: re.IGNORECASE matcht ook binnen zinnen die je misschien wilt houden; test je patronen even los via een pipe met voorbeeld-JSON.

Dat een grap-tutorial hierover viraal gaat, zegt intussen iets over hoe herkenbaar die AI-stopwoordjes zijn geworden — over dat bredere ongemak met AI-tekst schreef hetlaatsteainieuws.nl eerder in De hype-curve van juli. Meer uit Claude Code halen kan daarna met onze gids over tokens besparen met caveman-prompts.

Checklist: ben je klaar?

  • wordswap.sh staat in ~/.claude/hooks/
  • Script is uitvoerbaar (chmod +x)
  • hooks-blok met MessageDisplay staat in ~/.claude/settings.json
  • Nieuwe sessie gestart (hooks laden bij startup)
  • Vervangingen getest met een prompt die de frase uitlokt
  • Eigen replacements toegevoegd aan de dictionary

Bronnen

#claude-code #hooks #anthropic #terminal #workflow

Veelgestelde vragen

Wat zijn hooks in Claude Code?
Hooks zijn scripts die Claude Code automatisch uitvoert op vaste momenten in een sessie, bijvoorbeeld vóór een tool-actie of tijdens het tonen van een antwoord. Je registreert ze in ~/.claude/settings.json onder het hooks-blok. Ze laden bij het opstarten van een sessie, dus na een wijziging start je een nieuwe sessie. De MessageDisplay-hook uit deze gids draait telkens wanneer Claude tekst naar je scherm streamt.
Verandert een MessageDisplay-hook wat Claude zelf leest?
Nee. MessageDisplay is puur weergave: de hook herschrijft alleen wat op jouw scherm verschijnt via het veld displayContent. Het transcript en de context die Claude ziet houden de originele tekst, en in verbose-modus zie je ook het origineel terug. Je kunt er dus geen antwoorden mee blokkeren of het gedrag van het model mee sturen; daarvoor bestaan andere hook-events.
Waarom zegt Claude zo vaak 'load-bearing' of 'you're absolutely right'?
Taalmodellen hebben herkenbare lievelingsfrases die door training zijn ingesleten; bij Claude vallen 'load-bearing', 'seam' en het gretige 'you're absolutely right' op. Op de GitHub-tracker van Claude Code klagen gebruikers er al langer over. Een systeeminstructie helpt maar werkt niet waterdicht; een weergave-hook filtert de frases gegarandeerd uit beeld, want die knipt gewoon in de schermtekst.
Hoe installeer ik een hook-script in Claude Code?
Zet het script in ~/.claude/hooks/, maak het uitvoerbaar met chmod +x, en verwijs ernaar in ~/.claude/settings.json onder hooks met een command-entry. Start daarna een nieuwe sessie; hooks laden bij het opstarten. Werkt het niet, check dan of het pad klopt en of het script zelfstandig draait als je er JSON in pipet.