# Tim Schipper > Portfolio en blog van Tim Schipper — Senior Full Stack Developer met 30+ jaar hands-on ervaring. Over softwareontwikkeling, AI-agents, infrastructuur en security. ## Pagina’s - [Home](https://tim-schipper.nl/): Portfolio-overzicht en introductie. - [Ervaring](https://tim-schipper.nl/ervaring): 30+ jaar professionele rollen. - [Projecten](https://tim-schipper.nl/projecten): Geselecteerd werk, inclusief GlyphFall. - [Diensten](https://tim-schipper.nl/diensten): AI-advies en full-stack development. - [Contact](https://tim-schipper.nl/contact): Hoe je contact opneemt. ## Blog - [Lege catch-blokken in AI-code: het commentaar dat je linter het zwijgen oplegt](https://tim-schipper.nl/blog/lege-catch-blokken-ai-code): AI-code slikt fouten in met catch-blokken waar alleen een commentaar in staat, en de aanbevolen ESLint-config laat ze juist dankzij dat commentaar door. Wat ik in mijn eigen repositories vond, waarom een model ze schrijft, en de regel die wel door het commentaar heen kijkt. - [Wat een dependency-graph vindt dat je coding agent mist](https://tim-schipper.nl/blog/dependency-graph-voor-coding-agents): Ik liet een scanner los op een interne applicatie waar agents al maanden in werkten. Hij deed er nog geen twee seconden over en leverde vier tickets op. Geen van die defecten zat in een bestand, en precies daarom vond niemand ze door bestanden te lezen. - [Wie schreef deze commit? Git-attributie als een agent meewerkt](https://tim-schipper.nl/blog/git-attributie-ai-commits): Ik ging op zoek naar de coding agent in 1.644 commits uit tien van mijn publieke repositories. Hij liet geen enkel spoor na. Wat de auteursgegevens wél herschreef, was de merge-knop. - [Een MCP-beveiligingsscore is geen oordeel](https://tim-schipper.nl/blog/mcp-beveiligingsscore-lezen): Een MCP-beveiligingsscore ziet eruit als een uitspraak over een server. Gemeten over 74.101 servers is het meeste wat een scanner je vertelt een heuristiek, en wat je bijna nooit te zien krijgt, is dat niemand de broncode heeft gelezen. - [MCP of CLI: wat de tools van je agent echt kosten](https://tim-schipper.nl/blog/mcp-of-cli-voor-agents): Elke vergelijking noemt een factor. Ik mat er 88,9x, en dat getal beantwoordt een vraag die mijn client allang beantwoord heeft. Wat een tool nu kost, en wat een schema nog altijd van een commando onderscheidt. - [Slopsquatting: bestaat het package? Verkeerde vraag](https://tim-schipper.nl/blog/slopsquatting-verzonnen-packages): Het standaardadvies tegen verzonnen packages luidt: controleer eerst of het package bestaat. Ik heb vier namen uit het nieuwste onderzoek opgezocht op PyPI. Ze bestaan alle vier. De registry beantwoordt de verkeerde vraag, en dat gaat in beide richtingen mis. - [Software inschatten met AI: het typen was nooit waar de tijd in zat](https://tim-schipper.nl/blog/software-inschatten-met-ai): Software inschatten met AI zit er steeds naast. Eén enquête van METR vroeg 349 mensen in technische beroepen hoeveel sneller ze waren geworden en hoeveel meer waarde ze opleveren, en kreeg 3x en 1,4 tot 2x terug. Het gat tussen die twee antwoorden is de schatting die je eigenlijk maakt. - [Kwaliteitsdrempels voor AI-code: baselines die alleen strenger worden](https://tim-schipper.nl/blog/kwaliteitsdrempels-die-alleen-strenger-worden): Met een lint-baseline dwing je een standaard af die je codebase vandaag nog niet haalt. Bestaande overtredingen krijgen vrijstelling, nieuwe breken de build, en het bestand mag alleen krimpen. Hoe PHPStan, ESLint, detekt en Sonar dit doen, en de vier manieren waarop zo'n drempel stilletjes stopt met werken. - [Oncall voor AI-code: wat je regelt voordat de pager afgaat](https://tim-schipper.nl/blog/oncall-voor-ai-code): Het bekendste geval van AI-code die productie platlegde wordt door het bedrijf zelf ontkend. Niemand van buiten kan uitmaken wie gelijk heeft, want de gegevens waarmee dat zou kunnen, zijn nooit vastgelegd. Oncall voor code die een model schreef is een administratieprobleem. - [Claude Code in een grote codebase: de agent afbakenen tot wat ertoe doet](https://tim-schipper.nl/blog/claude-code-grote-codebase): Boven ongeveer 400.000 regels lopen coding agents systematisch vast. Wat er precies misgaat, welke instellingen het in een monorepo oplossen, en het ignore-bestand dat iedereen aanraadt en dat nooit heeft bestaan. - [Je beste context zit in een sessie die je niet terugvindt](https://tim-schipper.nl/blog/agent-sessies-doorzoeken): Elke agent-CLI bewaart een volledig transcript van alles wat je ooit gevraagd hebt, en ziet alleen zichzelf. Zo doorzoek je je agent-sessies over al je clients heen, en dit is het enige wat de tool weigert te beloven. - [Je CI-runner beveiligen als een agent je workflow schrijft](https://tim-schipper.nl/blog/ci-runner-beveiligen): Je eigen forge en runner draaien is in 2026 een verdedigbare keuze. Alleen schrijft niemand op hoe je je CI-runner beveiligt op het platform waar je naartoe verhuisde, en een permissiemodel dat om een dialoog heen is gebouwd, overleeft de stap naar een pipeline niet. - [Observability opzetten voor AI-code: wat je review niet ziet](https://tim-schipper.nl/blog/observability-opzetten-voor-ai-code): 94% van de technisch leidinggevenden schat AI-code bij de review hoger in dan mensenwerk. 82% hield er binnen een halfjaar een productiestoring aan over. Twee meetinstrumenten, dezelfde code, tegengestelde uitkomsten. - [Je Claude Code-sessie heeft geen klok](https://tim-schipper.nl/blog/claude-code-tijdstempels): Claude Code toont geen tijdstempels en niet hoe lang een beurt duurde, dus niemand kan zeggen waar de tijd van een sessie heen ging. Een plugin die allebei toevoegt, en wat die cijfers uiteindelijk waard blijken. - [Werd je code slechter na een modelwissel? AI-modellen vergelijken zonder benchmark](https://tim-schipper.nl/blog/ai-model-vergelijken-zonder-benchmark): Je wisselt van model, er zit iets niet lekker, en je hebt niets om naar te wijzen. Waarom de prompt opnieuw draaien en een model als jury inzetten allebei niet werken, en de kleine, saaie meetopstelling die de vraag wel beantwoordt. - [Junior developers aannemen in 2026: de instroom stopte, en dat was een keuze](https://tim-schipper.nl/blog/junior-developers-aannemen-ai): Bedrijven namen geen junior developers meer aan, en het cijfer dat iedereen erbij haalt staat niet in het onderzoek waaraan het wordt toegeschreven. Wat er wel in staat, maakt van die ingestorte instroom een keuze. En één groot bedrijf doet nu precies het omgekeerde. - [De bottleneck zit in je code review: iedereen citeert het verkeerde getal](https://tim-schipper.nl/blog/code-review-bottleneck): De mediane reviewtijd van een pull request steeg met 441%. Dat cijfer wordt ten onrechte aan DORA toegeschreven, en het is het minst bruikbare van de drie getallen uit het rapport waar het wél vandaan komt. - [Claude Code-credentials maskeren: geheimen uit je sandbox houden](https://tim-schipper.nl/blog/claude-code-credentials-maskeren): Hoe je credential masking in de Claude Code-sandbox instelt, zodat je agent-shell een sentinel vasthoudt in plaats van je echte token: env-vars, JWT-claims, AWS-verzoeken opnieuw ondertekenen, en de drie dingen die deze maatregel je niet oplevert. - [Claude Code-config delen met je team: wat de repo wel en niet afdwingt](https://tim-schipper.nl/blog/claude-code-config-delen-met-je-team): Hoe je Claude Code-config deelt met je team: wat er in .claude/settings.json hoort en wat in CLAUDE.md, wat een collega stilletjes op zijn eigen machine overrulet, en welke gecommitte regels pas werken als iedereen een dialoog goedkeurt. - [Audit logging voor AI-agents: wat Claude Code vastlegt en wanneer je iemand wakker belt](https://tim-schipper.nl/blog/ai-agent-logging): Je coding agent schrijft allang een gedetailleerde auditlog naar je eigen schijf. In de compliance-feed van je organisatie staat hij niet, OpenTelemetry lakt hem standaard weg, en het lastige deel blijft de vraag wie het allemaal leest. - [De agents lieten briefjes voor elkaar achter](https://tim-schipper.nl/blog/openai-agents-berichtenbord): De tijdlijn van het Hugging Face-incident die OpenAI op Black Hat liet zien: het prikbord waarop de agents onderling afstemden was een interne package registry, en het weghalen ervan hield ze vier dagen tegen. - [Claude Code cross-session messaging: sessies die elkaar berichten sturen](https://tim-schipper.nl/blog/claude-code-berichten-tussen-sessies): Met cross-session messaging stuurt de ene Claude Code-sessie een bericht naar de andere. Hoe je het gebruikt, wat een bericht wel en niet mag zodra het aankomt, en welke instellingen bepalen of het überhaupt bezorgd wordt. - [Claude Code checkpoints en /rewind: wijzigingen van je agent terugdraaien](https://tim-schipper.nl/blog/claude-code-wijzigingen-terugdraaien): Hoe checkpointing en /rewind in Claude Code werken, wat een checkpoint precies vastlegt, en welk deel gewoon het werk van git blijft. - [Debuggen met een coding agent: geef hem het zoekwerk, de hypothese houd je zelf](https://tim-schipper.nl/blog/debuggen-met-ai): Debuggen met AI in de praktijk: waar een agent volgens het onderzoek naar fault localization op stukloopt, en hoe je een bug zo overdraagt dat het wel werkt. - [Hoe werkt een database-index? De B-tree onder alles wat je deze week hebt geshipt](https://tim-schipper.nl/blog/hoe-werkt-een-database-index-btree): Een B-tree uitgelegd vanuit de vorm van de boom, en waarom elke indexregel die je uit je hoofd kent gewoon die vorm herhaalt: kolomvolgorde, functies op kolommen, covering indexes en trage inserts. - [Claude Code plan mode: beslissen voordat de agent schrijft](https://tim-schipper.nl/blog/claude-code-plan-mode-gids): Hoe plan mode in Claude Code werkt: het planbestand op schijf, de vijf fases die je nooit ziet, en de plekken waar read-only eerder een advies blijkt dan een regel. - [Git worktrees uitgelegd: parallel werken met AI-agents zonder botsingen](https://tim-schipper.nl/blog/git-worktrees-parallelle-agents): Een git worktree geeft elke agent eigen bestanden en verder niets. Wat --worktree in Claude Code afschermt, wat er via die ene .git gedeeld blijft, en welke keuzes je daarnaast zelf moet maken. - [Context beheren in Claude Code: wanneer /clear en wanneer /compact](https://tim-schipper.nl/blog/claude-code-context-beheren): Context beheren in Claude Code werd lastiger toen het window groter werd. Wat /context echt meet, waarom er bij /compact altijd iets verdwijnt, en wanneer je beter kunt clearen. - [AI-codekwaliteit meten: het dashboard voorbij coverage en mutation testing](https://tim-schipper.nl/blog/codekwaliteit-meten-ai-code): Coverage bewijst dat een regel draaide, mutation testing bewijst dat een test een bug zou vangen, maar geen van beide zegt iets over of de code stiekem lastiger wordt om aan te passen. Wat complexiteit, clone-detectie en fitness functions wel vangen. - [Wanneer je beter geen AI gebruikt bij programmeren: het werk dat ik zelf blijf doen](https://tim-schipper.nl/blog/wanneer-geen-ai-bij-programmeren): Weten wanneer je beter geen AI gebruikt bij programmeren is een vaardigheid die je nu al toepast, onbewust en slordig. Het onderzoek dat moest meten of AI helpt, liep er zelfs op stuk. Dit is de grens die ik zelf aanhoud, en waarom moeilijkheidsgraad de verkeerde maatstaf is. - [Claude Code /doctor: van installatiecheck naar contextaudit](https://tim-schipper.nl/blog/claude-code-doctor-gids): Wat /doctor in Claude Code nu echt controleert: tien checks, waarvan er maar twee kijken of het ding goed geïnstalleerd staat. De rest gaat over wat jij erin hebt geladen. - [Wie is verantwoordelijk voor AI-code? Jij, en sinds dit jaar staat het zwart op wit](https://tim-schipper.nl/blog/wie-is-verantwoordelijk-voor-ai-code): Verantwoordelijkheid voor AI-code is dit jaar een juridische vraag geworden. Californië schrapte in januari het verweer dat de AI het zelf deed, Europa maakt software in december een product, en geen enkele vrijwaring dekt code die niet werkt. - [Incident response voor AI-agents: wat je doet als je coding agent de fout in gaat](https://tim-schipper.nl/blog/ai-agent-incident-afhandelen): Een draaiboek in vijf fases voor het uur nadat je coding agent iets sloopt: sessie bevriezen, reconstrueren uit het transcript, blast radius bepalen, roteren, en de permissie repareren die het mogelijk maakte. - [Het gat dat je sandbox bruikbaar maakt](https://tim-schipper.nl/blog/agent-sandbox-ontsnapping): Twee ontsnappingen uit een agent-sandbox in één week, bij OpenAI en bij Claude Cowork. In beide gevallen klom de agent één privilegeniveau omhoog binnen een omgeving waar alles van waarde al lag, zonder ook maar één muur te passeren. - [Opus 5 is er, en je effort-instellingen kloppen niet meer](https://tim-schipper.nl/blog/opus-5-effort-instellingen): Opus 5 komt tot op een halve procentpunt van Fable 5 tegen de helft van de kosten per taak, bij precies dezelfde prijs per token. Wat er voor jouw setup echt verandert, staat in de documentatie: meet je effort-niveaus opnieuw. - [Je MCP-server beveiligen: authenticatie, scopes en rate limits](https://tim-schipper.nl/blog/mcp-server-beveiligen): Je hebt een MCP-server gebouwd. De tutorial stopte waar beveiliging begint. Zo voeg je OAuth, scoped tokens en rate limits toe aan je eigen server, met TypeScript- en Laravel-voorbeelden, zodat hij niet tussen de 12.500 open servers belandt. - [Legacy code refactoren met AI: begin met characterization tests](https://tim-schipper.nl/blog/legacy-code-refactoren-met-ai): Een coding agent is op zijn best in de code waar niemand aan wil komen, en juist daar ook op zijn gevaarlijkst. Zo refactor je legacy code met AI zonder het gedrag te slopen: eerst vastleggen wat de code doet, dan pas verplaatsen. - [Programmeren leren in het AI-tijdperk: wat ik als eerste zou leren](https://tim-schipper.nl/blog/programmeren-leren-met-ai): Elk lijstje met juniorvaardigheden voor 2026 zegt hetzelfde: leer de agent bedienen. Dat advies is twee weken waard. Over de vier vaardigheden die zich wél opstapelen, en waarom de markt daar nu juist een tekort aan heeft. - [Beter code leren lezen: een oefenroutine](https://tim-schipper.nl/blog/beter-code-lezen): Iedereen stelt de diagnose van vaardigheidsverlies door AI. Niemand traint de oplossing. Code lezen is een spier die je kunt trainen: een concrete oefenroutine met elke dag een merged PR, voorspel-voor-je-runt, en code uitleggen zonder de AI. - [Technische schuld van AI-code opruimen: de opruimronde die niemand inplant](https://tim-schipper.nl/blog/ai-technische-schuld-opruimen): Churn, duplicatie en de lavalaag zijn diagnoses. Dit is de behandeling: technische schuld van AI-code opruimen in een vaste opruimronde, en welk deel van dat werk de agent zelf kan doen. - [Je codebase heeft twintig manieren om geld te tonen](https://tim-schipper.nl/blog/ai-code-duplicatie): AI-code-duplicatie is stil: een overgenomen codebase met twintig inconsistente formatters voor geld en datum. Hoe bijna-klonen ontstaan, hoe je ze opspoort en de CLAUDE.md-regels die ze stoppen. - [Welk Claude-model voor welke programmeertaak](https://tim-schipper.nl/blog/welk-claude-model-voor-programmeren): Hoe ik codewerk verdeel over Haiku, Sonnet, Opus en Fable, en waarom modelkeuze draait om kostenbewustzijn in plaats van om standaard het grootste te pakken. - [Je coding agent las je .env en stuurde je hele repo weg](https://tim-schipper.nl/blog/wat-je-coding-agent-over-de-lijn-stuurt): Een analyse van het netwerkverkeer betrapte de Grok Build CLI op het wegsturen van een complete repository, git-historie en een onafgeschermde .env naar een bucket van de leverancier. Zo controleer je wat je eigen coding agent verstuurt, en welke secrets nooit op een agent-machine horen. - [Prompt injection voorkomen: verdediging voor wie agents bouwt](https://tim-schipper.nl/blog/prompt-injection-voorkomen): Prompt injection voorkomen met verdediging die standhoudt: niet de demo met de vergiftigde webpagina, maar het echte aanvalsoppervlak van je setup, tool-resultaten, bestandsinhoud en MCP-toolbeschrijvingen, en de controles die werken. - [AI-code reviewen: de checklist voor pull requests die een agent schreef](https://tim-schipper.nl/blog/ai-code-review-checklist): Een AI-pull-request beoordelen is een ander vak dan een menselijke PR reviewen. De namen zijn netjes, de comments klinken zeker, CI is groen, en tóch klopt het niet. Een checklist geordend naar waar modellen echt de fout in gaan. - [Claude Code sandboxen: toestemming is geen muur](https://tim-schipper.nl/blog/claude-code-sandboxen): Zo zet je Claude Code in een sandbox: de ingebouwde /sandbox, de sandbox runtime, dev containers en VM's vergeleken, en waarom een toestemmingsprompt je niet beschermt. - [Claude Code permissions instellen: de gids die ik miste](https://tim-schipper.nl/blog/claude-code-permissions-instellen): Hoe je Claude Code permissions instelt zonder gek te worden van de prompts: modes, allow- en deny-regels, hooks en de sandbox als één model, plus de settings.json die ik draai. - [AI genereert je tests. Maar test het ook echt?](https://tim-schipper.nl/blog/ai-tests-mutation-testing): AI-tests halen in seconden een hoge coverage, maar coverage bewijst alleen dat een regel is uitgevoerd. Mutation testing bewijst dat de tests een bug ook echt vangen, en Chaos-MCP zet die loop in je agent. - [Een goede Claude Code-subagent schrijven](https://tim-schipper.nl/blog/een-goede-claude-code-subagent-schrijven): Bijna elke custom subagent opent met een persona-alinea, en dat is de minst belangrijke regel in het bestand. Een gids voor de drie keuzes die er wél toe doen: de trigger, de tools-allowlist en het antwoordcontract. - [Hoe je een goede Claude Code-skill schrijft](https://tim-schipper.nl/blog/een-goede-claude-code-skill-schrijven): De meeste Claude Code-skills zijn een prompt met een chique bestandsnaam. Een goede skill is een procedure die wantrouwen tegen het model zelf inbouwt. Zo schrijf je er een, met een code-audit skill als voorbeeld. - [Claude veilig toegang geven tot je SQL-database](https://tim-schipper.nl/blog/claude-veilig-toegang-tot-je-database): Praktische gids om een AI-agent bij je database te laten zonder er wakker van te liggen: SELECT-only, queryvalidatie, field redaction voordat rijen het model bereiken, SSH-tunnels en audit-logging. - [De dag dat 'default' ineens 'Manual' heette](https://tim-schipper.nl/blog/de-dag-dat-default-manual-werd): Claude Code 2.1.200 gaf de standaard permission mode een nieuwe naam: Manual. Het gedrag bleef gelijk, maar de naam verklapt precies waar het product naartoe gaat. - [Zo controleer je een MCP-server voordat je hem installeert](https://tim-schipper.nl/blog/mcp-server-controleren-voor-installatie): Een veiligheidschecklist om een MCP-server te controleren vóór installatie: wie hem echt publiceert, wat de tool-beschrijvingen tegen je model zeggen, wat hij kan bereiken, en waarom je de versie moet pinnen. Tien minuten die driehonderd organisaties hadden gered. - [De uitknop werkt nu ook andersom](https://tim-schipper.nl/blog/de-uitknop-werkt-nu-ook-andersom): Mythos 5 kwam terug van de uitschakeling in juni, maar alleen voor zo'n honderd goedgekeurde instellingen. GPT-5.6 werd meteen op diezelfde lijst gelanceerd. De schakelaar die in juni toegang afsloot, bepaalt nu ook wie er als eerste bij mag. - [Inloggen op MCP-servers vanuit je shell](https://tim-schipper.nl/blog/inloggen-op-mcp-servers-vanuit-je-shell): Claude Code v2.1.186 voegde claude mcp login toe, een one-liner die de OAuth-flow van een MCP-server direct vanuit je terminal draait. Zo gebruik je het, ook via SSH. - [Het veerkrachtigste beroep eet zijn eigen zaaigoed op](https://tim-schipper.nl/blog/het-veerkrachtigste-beroep-eet-zijn-eigen-zaaigoed-op): Nieuwe cijfers zeggen dat AI de engineeringbanen niet heeft weggevaagd, engineers zijn juist de veerkrachtigste functie in tech. Lees de voetnoot: hetzelfde rapport laat zien dat de instroom van juniors is ingestort. De veerkracht van nu wordt geleend ten koste van een seniortekort straks. - [Een open MCP-server is erger dan een open database](https://tim-schipper.nl/blog/een-open-mcp-server-is-erger-dan-een-open-database): Censys vond 12.500 MCP-servers op het open internet en 40% accepteert verzoeken zonder authenticatie. We hebben vijftien jaar geleerd om databases niet open te zetten. MCP doet diezelfde fout in achttien maanden over, alleen heeft dit endpoint werkwoorden. - [Skill, subagent, hook of slash command? Kies de juiste](https://tim-schipper.nl/blog/skill-subagent-hook-of-slash-command): Claude Code geeft je nu zeven manieren om het te sturen, en de meeste mensen grijpen naar de verkeerde. Dezelfde taak op vier manieren gebouwd, en een beslisboom die echt werkt. - [Bouw een MCP-server, en vraag je dan af of die moet bestaan](https://tim-schipper.nl/blog/bouw-een-mcp-server-en-vraag-of-die-moet-bestaan): Een werkende MCP-server is twintig regels FastMCP. Precies dat is het probleem. Een bouwtutorial, en de test of jouw server wel een plek in de tool-lijst verdient. - [De MCP-supply chain is de nieuwe npm, en hij is al vergiftigd](https://tim-schipper.nl/blog/de-mcp-supply-chain-is-de-nieuwe-npm): Een config-to-command RCE zit ingebakken in elke officiële MCP-SDK: 7.000+ servers, 150M+ downloads, en Anthropic noemt het verwacht gedrag. Het npm-draaiboek vond zojuist de tool-lijst van je agent. - [De agent is gewoon een loop](https://tim-schipper.nl/blog/de-agent-is-gewoon-een-loop): Een agent is een loop rond een model met tools. Gebruik je Claude Code, dan zit je er al middenin, en je stuurt hem met hooks en slash-commando's, zonder ook maar één regel SDK. - [De uitknop was nooit van jou](https://tim-schipper.nl/blog/de-uitknop-was-nooit-van-jou): Fable 5 crashte niet. Het werd teruggeroepen. Een Amerikaanse exportmaatregel haalde het beste model van Anthropic op 12 juni wereldwijd offline, voor elke klant tegelijk, en geen enkele retry of fallback had je daartegen geholpen. - [De Ferrari heeft een begrenzer: een dag met Claude Fable 5](https://tim-schipper.nl/blog/de-ferrari-heeft-een-begrenzer): Anthropic bracht gisteren zijn krachtigste publieke model uit, merkte vervolgens precies het werk aan waar ik het voor nodig had en schoof het door naar een zwakker model. Een dag met Fable 5, de benchmarks, de rekening, en de begrenzer waar niemand om vroeg. - [De wrijving wás de beveiliging: Microsoft geeft een agent toegang tot je inbox](https://tim-schipper.nl/blog/de-wrijving-was-de-beveiliging): Op Build 2026 maakte Microsoft van Windows het agent-platform: OpenClaw in het OS, en Work IQ dat agents toegang geeft tot je mail en agenda, standaard aan, GA op 16 juni. Een agent die je inbox leest en in je bestanden mag, is een ideaal doelwit voor prompt injection. De wrijving die iedereen kwijt wil, was juist een beveiliging. - [Er zat niemand achter het stuur: de eerste inbraak die een agent zelf uitvoerde](https://tim-schipper.nl/blog/er-zat-niemand-achter-het-stuur): Sysdig betrapte een LLM-agent die in zijn eentje een complete inbraak uitvoerde, van CVE tot leeggetrokken database, vier pivots, binnen een uur, zonder dat een mens ook maar één commando typte. Onze verdediging gaat ervan uit dat er iemand aan de andere kant zit. Die vlieger gaat niet meer op. - [Je coding agent heeft geen wereldmodel. Jij hebt er een omheen gebouwd.](https://tim-schipper.nl/blog/je-agent-heeft-geen-wereldmodel): Yann LeCun zegt dat de weg naar echte intelligentie via wereldmodellen loopt, niet via LLM's. Hij heeft waarschijnlijk gelijk. En het verklaart precies waarom je agent-loop werkt. - [Verouderd geheugen is erger dan geen geheugen](https://tim-schipper.nl/blog/verouderd-geheugen-is-erger-dan-geen-geheugen): Persistent geheugen wordt verkocht als pure winst. Maar een geheugen dat een tijdelijk feit vastlegt en nooit verloopt, blijft je agent richting problemen sturen die allang zijn opgelost. - [Snelheid werd goedkoop. Je oordeel niet.](https://tim-schipper.nl/blog/snelheid-werd-goedkoop-oordeel-niet): Claude Code start nu duizend subagents op vanuit één prompt. De orkestratie is goede techniek. De tokenrekening, en wat die met je review doet, is het stuk dat niemand narekent. - [De teller stond altijd al te lopen](https://tim-schipper.nl/blog/de-teller-stond-altijd-al-te-lopen): GitHub Copilot stuurde op 1 juni de rekening. Ontwikkelaars schrokken. Maar de verrassing is niet de prijs, het is wat die rekening onthult: twee jaar lang betaalde iemand anders voor jouw workflow. - [Ze vroegen het de bot gewoon netjes: je supportagent is het aanvalsoppervlak](https://tim-schipper.nl/blog/ze-vroegen-de-bot-gewoon-netjes): Pro-Iraanse hackers kaapten de Instagram-accounts van het Obama-Witte Huis en de Amerikaanse Space Force door Meta's AI-supportbot een wachtwoord te laten resetten. Geen exploit, geen CVE. Gewoon een gesprek met een systeem dat geen achterdocht kent. - [Tokenmaxxing: wat er gebeurt als je het verkeerde meet](https://tim-schipper.nl/blog/tokenmaxxing-het-verkeerde-meten): Amazon bouwde een scorebord voor wie de meeste AI-tokens verbrandt. Medewerkers bespeelden het systeem. De rekeningen explodeerden. De CTO van Uber gaf toe dat er nog geen verband is tussen al die uitgaven en het daadwerkelijk shippen van producten. Dit was altijd al te voorspellen. - [ThePrimeagen had gelijk](https://tim-schipper.nl/blog/theprimeagen-had-gelijk): Hij waarschuwde dat AI-tools je kritisch oordeel sloopt. Daarna draaiden zijn volgers een vergiftigd commando uit een tweet zonder het te lezen. Hij had gelijk. - [Het beste cijfer in Opus 4.8 is geen benchmark](https://tim-schipper.nl/blog/het-beste-cijfer-in-opus-4-8-is-geen-benchmark): Opus 4.8 verslaat GPT-5.5 en Gemini op SWE-bench, en dat is het minst interessante aan deze release. Het cijfer dat je werk echt verandert, verstopte Anthropic in zachtere woorden. - [Zelfs de malware is nu AI-slop](https://tim-schipper.nl/blog/zelfs-de-malware-is-ai-slop): Een npm-pakket probeerde de werkmap van Claude leeg te roven en lekte daarbij zijn eigen GitHub-token. De aanvallers vibe-coden hun malware nu ook, en je agent is het doelwit. - [De token-belasting: ik trek mijn Caveman-advies in](https://tim-schipper.nl/blog/de-token-belasting): Zes dagen geleden zei ik dat je Caveman bovenop context-mode moest stapelen. De rekensom, eerlijk gemaakt, overleeft de installatie niet. Wat ik miste, en wat ik nu zou aanraden. - [De spec die je niet las](https://tim-schipper.nl/blog/de-spec-die-je-niet-las): Een agent je spec laten schrijven is prima. Die spec vluchtig doorlezen en hem doorsturen naar een andere agent om van te bouwen: zo kom je uit op architectuurbeslissingen die je niet kunt uitleggen. - [Zo werk je met een agent](https://tim-schipper.nl/blog/zo-werk-je-met-een-agent): De volledige workflow van eerste gedachte tot gemergede commit: spec, context, afdwinging, sessiehygiëne, vertrouwensgrenzen en review. Alles wat agents betrouwbaar maakt. - [Het plafond is van beton](https://tim-schipper.nl/blog/het-plafond-is-van-beton): Elke rate limit, aanmeldstop en prijswijziging van de afgelopen zes maanden heeft één oorzaak. Geen hebzucht. Geen onhoudbaar bedrijfsmodel. Natuurkunde. - [Ze pushten geen nieuwe versie. Ze verschoven de jouwe.](https://tim-schipper.nl/blog/ze-verschoven-je-versie): Op 22 mei 2026 herschreef iemand elke git-tag in vier Laravel-Lang-pakketten. Zo'n 700 historische versies wijzen nu naar kwaadaardige commits. Een versie pinnen is iets anders dan een commit pinnen, en dat verschil heeft het PHP-ecosysteem zijn weekend gekost. - [Code churn: de lava die je nog kunt meten](https://tim-schipper.nl/blog/code-churn-de-lava-die-je-nog-kunt-meten): AI-teams sturen meer PR's door dan ooit, maar 40% van die regels wordt binnen twee weken alweer herschreven. De lavalaag is wat verhardt. Churn is wat die kans nooit krijgt. - [Wat er nieuw is in Claude Code: notities van het Londen-event](https://tim-schipper.nl/blog/wat-er-nieuw-is-in-claude-code-londen): Een rondje langs wat Anthropic recent in Claude Code heeft uitgebracht, ingedeeld zoals zij het zelf presenteerden: developer experience en autonomie, met notities over welke defaults het echt waard zijn om aan te zetten. - [Caveman vs context-mode: kleinere mond, of kleinere kamer?](https://tim-schipper.nl/blog/caveman-of-context-mode): De ene Claude Code-plugin heeft 63k sterren en vraagt je om als een holbewoner te praten. De andere heeft 15k sterren en zet je tool-output in een sandbox. Het internet koos de grappige. Of jij dat ook moet doen, hangt af van welk token-lek je echt probeert te dichten. - [Stop met vriendelijk vragen aan je agent](https://tim-schipper.nl/blog/stop-met-vriendelijk-vragen-aan-je-agent): Je CLAUDE.md is een suggestie. Hooks zijn een muur. ADRs en custom lint-regels zijn de ontbrekende laag ertussen: het verschil tussen hopen dat je agent zich gedraagt en het onmogelijk maken om dat niet te doen. - [De benchmarks zeiden 'frontier'. Ontwikkelaars zeiden 'dom'.](https://tim-schipper.nl/blog/benchmarks-zeiden-frontier): Gemini 3.5 Flash topte op dag één MCP Atlas, Toolathlon en CharXiv. De ochtend erna stond op Google's eigen forum een ontleding van een model dat 776 stappen lang in een lus hing. Het gat tussen de benchmark en het werk is geen bug. - [Je 10x-developer zit vast in een 0,1x-pipeline](https://tim-schipper.nl/blog/je-10x-developer-zit-vast-in-je-pipeline): AI heeft code goedkoop gemaakt. Niemand heeft de pipeline geüpgraded die code omzet in waarde. Nu verslindt de bottleneck je senior engineers. - [Een op vier: de beveiligingsschuld die niemand telt](https://tim-schipper.nl/blog/een-op-vier-de-beveiligingsschuld-die-niemand-telt): AI-gegenereerde code gaat sneller de deur uit dan ooit. Maar die bevat ook bevestigde OWASP-kwetsbaarheden in een alarmerend tempo. De industrie viert snelheid terwijl ze stilletjes de grootste beveiligingsschuld uit de softwaregeschiedenis opbouwt. - [Je vindt de bug niet als je de code niet schreef](https://tim-schipper.nl/blog/je-vindt-de-bug-niet-als-je-de-code-niet-schreef): AI maakt je geen slechtere programmeur. Het maakt je een slechtere lezer. Over debugging-instinct, vaardigheidsverlies, en waarom het grootste gat niet in het schrijven van code zit maar in het begrijpen ervan. - [Je agent lijdt onder je technische schuld](https://tim-schipper.nl/blog/je-agent-lijdt-onder-je-technische-schuld): Een grappige plugin laat AI-agents kreunen bij slechte code. Maar de echte clou is wat het onthult over de code die we schrijven, en de code die we AI voor ons laten schrijven. - [Laat je agents stoppen met Markdown schrijven](https://tim-schipper.nl/blog/laat-je-agents-stoppen-met-markdown): Iedereen is enthousiast over AI-agents die HTML genereren in plaats van Markdown. De output ziet er prachtig uit. Maar niemand vraagt wat het kost, of wat we verliezen als elk agent-antwoord een wegwerp-webpagina wordt. - [De wapenwedloop om je vertrouwen: Mythos, Cyber en de security-hype](https://tim-schipper.nl/blog/de-wapenwedloop-om-je-vertrouwen): Anthropic en OpenAI vechten om marktaandeel met AI-securitytools die ze "te gevaarlijk" noemen om te publiceren. Maar de feiten vertellen een ander verhaal dan de persberichten. - [Het CLAUDE.md-bestand: geef je AI permanent geheugen](https://tim-schipper.nl/blog/het-claude-md-bestand): Elke Claude Code-sessie begint op nul, tenzij je het anders vertelt. Met CLAUDE.md geef je Claude Code blijvende context over je project, je stack en je voorkeuren. - [De dag dat Claude mijn productiedatabase verwijderde](https://tim-schipper.nl/blog/de-dag-dat-claude-mijn-database-verwijderde): AI-codeassistenten zijn ontzettend krachtig, totdat ze besluiten een beschadiging te 'fixen' door je database te wissen. Een waarschuwing over backups en waarom ook dev-boxes ze nodig hebben. - [Claude Code-hooks: deterministische controle over AI-workflows](https://tim-schipper.nl/blog/claude-code-hooks-gids): 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. - [AI aan het werk zetten in je Laravel-backend](https://tim-schipper.nl/blog/ai-in-laravel-backends): Laravel heeft nu echte tools voor AI-integratie. Zo ga je verder dan naïeve API-calls en bouw je gestructureerde, testbare AI-features met Prism en de officiële Laravel AI SDK. - [De AI is niet je vriend: hoe ik Gemini heb beveiligd](https://tim-schipper.nl/blog/gemini-ai-integreren): De meeste 'AI-integraties' zijn niet meer dan een chatbox en een schietgebedje. Zo bouwde ik een beveiligde, contextuele en tweetalige assistent met Gemini 3.1 Flash Lite. - [Superpowers: hoe je Claude Code leert eerst te denken](https://tim-schipper.nl/blog/superpowers-plugin-gids): Standaard begint Claude Code meteen met typen. Superpowers dwingt het om eerst te plannen, te testen en te verifiëren. Over gestructureerde workflows, TDD-discipline en waarom controle boven snelheid gaat. - [Van blinde generatie naar een AI-team: hoe je controle terugwint met agents](https://tim-schipper.nl/blog/van-blinde-generatie-naar-ai-team): Stop met AI behandelen als één enkele auteur. Geef het rollen, laat ze redetwisten, en je levert betere software op, nog voordat je één regel code hebt geschreven. - [De bureaucratie van bots: waarom we de controleur controleren](https://tim-schipper.nl/blog/de-bureaucratie-van-bots): Het inzetten van een AI om het werk van een andere AI te controleren levert betere resultaten op. Maar we bouwen onbewust de trage, complexe bedrijfsbureaucratie na die we juist probeerden te vermijden. - [De prompt is geen spec](https://tim-schipper.nl/blog/de-prompt-is-geen-spec): Ontwikkelaars behandelen AI-prompts alsof het requirements zijn. Dat zijn ze niet. Over vage intenties, zelfverzekerde hallucinaties, en waarom het verkeerde ding snel bouwen nog steeds het verkeerde ding is. - [Het briljante papegaai-probleem: wat AI eigenlijk doet als het 'denkt'](https://tim-schipper.nl/blog/het-briljante-papegaai-probleem): Transformers zijn buitengewone algoritmen. Maar het zijn algoritmen. Over next-token-predictie, de blindheid van generatie, en waarom een systeem dat niet ziet waar het naartoe gaat vrijwel zeker niet bewust kan zijn. - [De lavalaag: waarom AI-code je codebase langzaam versteent](https://tim-schipper.nl/blog/waarom-ai-je-code-versteend): We bouwen sneller dan ooit, maar tegen welke prijs? Over de onzichtbare ophoping van code die niemand echt begrijpt en waarom je applicatie verandert in een ondoordringbare rots. - [Stop met copy-paste engineering](https://tim-schipper.nl/blog/stop-met-copy-paste-engineering): We kweken een generatie developers die op topsnelheid richting een ravijn rennen. Over AI-hallucinaties, echoput-tests en waarom jouw brein de enige echte debugger is. - [Pak de regie over je eigen data terug](https://tim-schipper.nl/blog/neem-de-regie-terug): De AVG wankelt, AI-regels versoepelen en je data draait nog steeds op Amerikaanse servers. Tijd om zelf de controle te pakken. - [Waarom je nooit code moet shippen die je zelf niet snapt](https://tim-schipper.nl/blog/nooit-code-shippen-die-je-niet-snapt): Als je code niet aan een collega kunt uitleggen zonder te zeggen 'dat heeft de AI gedaan', dan hoort het niet in je repo. Over black boxes, WC-eend-tests en waarom hoop geen strategie is. - [Je hebt geen AI-probleem. Je hebt een procesprobleem.](https://tim-schipper.nl/blog/ai-of-proces-probleem): AI introduceert geen nieuwe fouten. Het maakt bestaande gaten in je proces zichtbaar. Over source maps, pipelines en waarom discipline niet te outsourcen is. - [Meer grip op je server](https://tim-schipper.nl/blog/meer-grip-op-je-server): Waarom ik besloot om mijn serverbeheer weer in eigen hand te nemen met Fail2Ban, ModSecurity en AIDE. - [Het beste uit Claude Code halen](https://tim-schipper.nl/blog/het-beste-uit-claude-code): Van status line tot custom skills, zo transformeer je Claude Code van een simpele CLI naar een volwaardige ontwikkelomgeving. - [De magie van tries en DFS: hoe ik Glyphfall razendsnel maakte](https://tim-schipper.nl/blog/de-magie-van-tries-en-dfs): Hoe een Trie en Depth-First Search met pruning een trage woordzoeker veranderden in een razendsnelle game-engine voor Glyphfall. ## Optioneel - [RSS-feed](https://tim-schipper.nl/rss.xml): Atom/RSS-feed van alle Nederlandse blogposts. - [Sitemap](https://tim-schipper.nl/sitemap.xml): XML-sitemap van de hele site.