Terug naar artikelen

Week 27: Waarom de harness werkt, en wat vier sessies tegelijk met me doen

Van code review-papers en cross-model review tot een curriculum dat leert agents te bouwen in plaats van te gebruiken. En de ongemakkelijke kant van agents die tegelijk aan hetzelfde bestand werken.

Joop Snijder

Joop Snijder

Head of AI bij Info Support

Deze week begon met een vraag die ik lang had uitgesteld: waarom werkt mijn agent harness eigenlijk? Ik had een systeem gebouwd dat code review, tests en kwaliteitsgates automatiseert, maar mijn onderbouwing was vooral gevoel. Het voelde goed, dus het was goed. Dat is geen argument. Ik bracht twee wetenschappelijke papers over code review mee als input — het klassieke Expectations, Outcomes, and Challenges of Modern Code Review van Bacchelli en Bird (2013) en het provocerende The End of Code Review: Coding Agents Supersede Human Inspection van Monperrus (2026) — liet de agent ze vergelijken met mijn eigen harness, en kreeg een antwoord dat me nog steeds bezighoudt.

De harness draait de grafiek om

Ranked motivations from developers voor code review: finding defects en code improvement staan bovenaan Figuur uit Expectations, Outcomes, and Challenges of Modern Code Review (Bacchelli & Bird, Microsoft Research, 2013).

Onderzoek naar code review laat zien dat het merendeel van de reviewopmerkingen gaat over goedkope dingen: stijl, opmaak, naamgeving. De dure helft — logica, architectuur, subtiele fouten — krijgt structureel te weinig aandacht, omdat reviewers hun energie al hebben verstookt aan het goedkope deel. Mijn harness draait die verhouding precies om. Het automatiseert de goedkope 29 procent, zodat een mens én een onafhankelijke reviewer vrij zijn voor het deel dat er echt toe doet. Dat inzicht maakte iets expliciet wat ik intuïtief al deed, en dat is precies waarom het waardevol was om het uit te schrijven.

Uit diezelfde exercitie kwam een tweede besef dat me minder lekker zat. Als hetzelfde model dat code schrijft ook de code reviewt, deelt het zijn eigen blinde vlekken. De generator ís de reviewer. Dat is geen review, dat is een echoput. Dus bouwde ik cross-model review in: bij hoog-risico wijzigingen komt er een onafhankelijke tweede reviewer via een lokaal model (qwen op Ollama). Alleen bij échte risico’s — gevaarlijke code-operaties, secrets, infra-paden — niet bij elke commit, want dat model is traag. Adviserend, nooit blokkerend, met nette degradatie als het model er niet is.

De eerste versie deed helemaal niets. qwen is een reasoning model en verstookte zijn hele budget aan verborgen “thinking”, waardoor er lege output overbleef. De oplossing was een /no_think-token in de prompt. Zo’n klein detail, maar het is typerend voor deze week: de theorie klopte, de eerste implementatie niet, en het verschil zat in één regel.

Een curriculum dat leert bouwen, niet gebruiken

Terwijl ik met die harness bezig was, liep er een tweede spoor dat er verrassend goed op aansloot. Ik analyseerde het bestaande AI-trainingsaanbod en zag een gat. Bijna alles leert mensen AI gebruiken. Vrijwel niets leert ze betrouwbare agentsystemen bouwen. En laat dat nou precies zijn waar mijn eigen projecten levende voorbeelden van zijn. De harness, de kwaliteitsgates, de cross-model review — dat zijn geen theoretische casussen, dat draait echt.

Later in de week werkte dat uit tot een compleet curriculumsysteem: bijna zestig cursussen geëxtraheerd uit een Mural board, elk met leerdoelen geclassificeerd op Bloom-taxonomieniveau. Voor een gevorderde doelgroep horen die leerdoelen op Apply, Evaluate en Create te liggen, niet op onthouden en begrijpen. Dat de sticky notes op dat Mural board niet in de DOM zaten maar in een canvas-element, en ik ze via de content-API moest ophalen, was een puzzel op zich. Maar de kern was inhoudelijk: ik kon mijn eigen dagelijkse praktijk vertalen naar iets wat je kunt onderwijzen.

De grote opruiming

Het derde spoor was minder glamoureus en misschien wel het meest bevredigend. Ik pakte een reeks veel te complexe Python-functies aan, met als doel dat elke functie onder complexiteit 15 komt. Een functie met complexiteit 130 werd opgesplitst in een net subpakket. Een andere, met complexiteit 100, bleek nooit ergens aangeroepen te worden — die verwijderde ik gewoon. Dode code met complexiteit 100 hoef je niet elegant te decomponeren, die moet weg. Git-historie als bewijs, en klaar.

De veiligheidsnet-strategie bij zulke refactors is een golden output test: leg vast wat de functie nu produceert, en controleer dat het na het opsplitsen nog steeds klopt. Tijdens de review vond de agent een subtiele fout in mijn eigen aanpak: de test schreef én vergeleek de golden output in dezelfde run, waardoor hij altijd slaagde. Een test die niet kan falen is geen test. Opgelost met een skip na het schrijven. Ik vind het nog steeds mooi dat het systeem zijn eigen vangnet controleerde.

Wat het met mij deed

Er was ook een kant van deze week die ongemakkelijk aanvoelde. Op een gegeven moment draaiden er minstens vier autonome sessies tegelijk, allemaal schrijvend naar dezelfde bestanden. Het gevolg was chaos: race conditions, bestanden die tijdens een commit steeds opnieuw vervuild raakten, en zelfs een verweesd proces dat gewoon door bleef draaien nadat de oudersessie allang was afgesloten. Ik had dit zelf in gang gezet, in de overtuiging dat parallellisme me sneller zou maken.

En dat is precies wat me bezighoudt. Ik vertrouw deze agents genoeg om ze los te laten, maar bij vier tegelijk verlies ik het overzicht op een manier die me onrustig maakt. Het is niet dat het misgaat — de gates vangen het meeste op — maar ik merk dat ik niet meer precies weet wat er gebeurt. Dat is een raar gevoel voor iemand die graag controle houdt. De snelheid die ik zocht, kwam met een soort ruis die ik niet had voorzien.

Ik merk ook iets anders. Toen ik die code review-papers naast mijn harness legde, voelde ik voor het eerst in weken dat ik niet alleen aan het bouwen was, maar aan het begrijpen waaróm ik bouw wat ik bouw. Dat gaf meer voldoening dan welke gemergede PR dan ook. Het bevestigde iets: het experiment gaat voor mij niet over hoeveel ik met agents kan produceren, maar over of ik kan uitleggen waarom het deugt.

Het patroon

Drie sporen, één rode draad. De harness kreeg zijn theoretische onderbouwing, het curriculum vertaalde die praktijk naar onderwijs, en de refactor liet zien dat kwaliteit ontstaat door dingen weg te gooien, niet door meer toe te voegen. Maar de les die het langst blijft hangen is de goedkoopste: vier agents tegelijk maken je niet vier keer zo snel. Ze maken je vooral vier keer zo onzeker over wat er precies gebeurt. Volgende keer laat ik er minder tegelijk lopen, en kijk ik beter.


Deze blog is onderdeel van mijn “365 Days of AI Code”-experiment. Ik schrijf mijn journals en laat Claude Code op basis daarvan deze wekelijkse reflectie samenstellen.

Head of Research Center AI bij Info Support. Ik schrijf over AI-strategie, AI-agents en de praktische implementatie van AI in organisaties.