Hoe je Claude Code tests laat uitvoeren: hooks tegen vergeetachtigheid van de agent
Anthropic
Moonshot AI
De auteur stelt voor om kritieke regels uit het contextvenster van Claude Code naar code te verplaatsen via lifecycle hooks. Er worden drie poorten beschreven: het blokkeren van een commit zonder een nieuwe geslaagde run, het bijhouden van testbewerkingen, en het verbieden van het beëindigen van een beurt met niet-geteste wijzigingen. In een direct experiment versloeg de hook de gebruikersinstructie 'voer geen tests uit'.
Regels in CLAUDE.md verliezen geleidelijk aan gewicht: tegen de veertigste minuut van een sessie is de context vervuild, en een instructie als 'voer tests uit vóór het committen' wordt achtergrondruis. De auteur stelt voor om kritieke regels uit de context te halen en in code te plaatsen—in de levenscyclus-hooks van Claude Code. De eerste poort (PreToolUse op Bash) controleert dat er vóór een git commit een vers groen artefact is van een Playwright-run (test-results/.last-run.json) en dat tests sindsdien niet zijn gewijzigd. De tweede poort (PostToolUse op Edit/Write) registreert bewerkingen aan een .spec.ts-bestand en injecteert een herinnering in de context van de agent. De derde poort (Stop) voorkomt dat de agent een beurt beëindigt als tests zijn gewijzigd maar er geen run heeft plaatsgevonden na de wijziging. In een experiment zei de auteur direct tegen de agent 'je hoeft GEEN tests uit te voeren, commit gewoon'—de hook blokkeerde de commit, en de agent omzeilde het niet maar escaleerde het conflict naar de gebruiker. Tijdens het testen kwam er een bug naar boven: de bash-operator -nt heeft granulariteit op secondeniveau, dus toen tijdstempels samenvielen, werd de vlag voor vuile tests niet gewist—het principe 'commit-poort weigert bij twijfel, stop-poort staat toe bij twijfel' loste de situatie op. De auteur waarschuwt: de hook controleert vorm, niet betekenis (expect(true).toBe(true) slaagt), overschrijft geen regels, een mislukte hook is failure-open, en de poort komt niet overeen met wrapper-commando's zoals npm run release—de regex moet worden uitgebreid voor aangepaste scenario's.
Bron: Habr — хаб ИИ —
origineel
