<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Maguyva Blog</title><description>Technische deep-dives over MCP-code-intelligentie, AI-agentarchitectuur en lessen uit de bouw van een meertalig codezoekplatform.</description><link>https://maguyva.ai/nl/blog</link><language>nl</language><atom:link href="https://maguyva.ai/nl/rss.xml" rel="self" type="application/rss+xml"/><item><title>Context die met je meereist</title><link>https://maguyva.ai/nl/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/context-that-travels</guid><description>Cursors indexer is uitstekend binnen Cursor. Maguyva is de gehoste MCP-kaart die dezelfde agent kan bevragen vanuit andere editors, CLI&apos;s en CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cursors indexer is uitstekend binnen Cursor. Tab-aanvulling, inline bewerken, chat, en de agent in dat venster steunen al op een projectindex die Cursor beheert voor de geopende werkruimte. Als Cursor de enige omgeving is waarin je schrijft, en die index vindt al de juiste bestanden, blijf daar. Dat is het eerlijke ‘blijf-waar-je-bent’-geval, en het opent terecht deze pagina.&lt;/p&gt;
&lt;p&gt;Dit stuk gaat over de andere helft van een gewone week. Dezelfde repository wordt ook geopend in Claude Code, bevraagd vanuit Codex CLI, beoordeeld op een tweede machine, of bevraagd door een agent die in CI draait. De vraag is niet ‘welke indexer is beter’. De vraag is of de kaart waar de agent in het ene venster op vertrouwt, dezelfde kaart is waar hij in het volgende op vertrouwt.&lt;/p&gt;
&lt;p&gt;Maguyva is die kaart die met je meereist. Het is een externe MCP-contextlaag voor de codebase. De agent bevraagt het op dezelfde manier als elk ander MCP-hulpmiddel. Resultaten komen terug als gerangschikte paden met regelnummers. Cursor blijft de editor. De context is wat verplaatst.&lt;/p&gt;
&lt;h2 id=&quot;waar-cursors-indexer-voor-dient&quot;&gt;Waar Cursors indexer voor dient&lt;/h2&gt;
&lt;p&gt;Cursors ingebouwde indexering bestaat zodat chat, agent en zoeken binnen de editor relevante code kunnen ophalen in plaats van alleen te vertrouwen op wat past in het ruwe contextvenster van het model. Dat is het juiste ontwerp voor een IDE. Deze index is nativ voor Cursor. Het is geen MCP-server en is vanuit geen enkele andere client bereikbaar.&lt;/p&gt;
&lt;p&gt;Zo werkt het, zoals beschreven in Cursors publieke documentatie en Cursors eigen weergave op het moment van schrijven: het belangrijkste zoekpad is niet langer een cloud-embeddingindex. Cursors team heeft op hun communityforum verklaard dat toegewijd semantisch, op embeddings gebaseerd zoeken wordt afgebouwd ten gunste van grep-gebaseerd ophalen, omdat huidige modellen een levende boom al goed genoeg zelf kunnen doorzoeken. In de plaats daarvan staat Instant Grep, een lokale zoekindex opgebouwd uit n-grammen, omgekeerde lijsten en Bloomfilters, bewaard in een in het geheugen gemapte opzoektabel, zodat query’s worden opgelost op de eigen machine van de ontwikkelaar in plaats van op een server.&lt;/p&gt;
&lt;p&gt;De index zelf leeft in de eigen &lt;code&gt;.git/cursor/&lt;/code&gt;-map van de repository, verankerd aan een specifieke git-commit; wijzigingen sinds die commit stapelen zich erbovenop in plaats van een nieuwe scan te starten, en de index wordt alleen herbouwd wanneer de lokale toestand ver is afgeweken van waarop hij gebouwd was. Omdat hij zich binnen &lt;code&gt;.git&lt;/code&gt; bevindt, wordt hij nooit getrackt en nooit gepusht — verwijder de map, en de index is weg. &lt;code&gt;.gitignore&lt;/code&gt; wordt gerespecteerd door constructie, aangezien alleen door git getrackte inhoud in aanmerking komt, en &lt;code&gt;.cursorignore&lt;/code&gt; wordt afgedwongen op het leespad. Er is op dat pad geen server-side embeddingstap en geen externe vectordatabase meer. Eerdere documentatie beschreef een cloud-ondersteund ontwerp — versleuteling van chunks, synchronisatie via een Merkle-boom, hergebruik van de index tussen teamgenoten — en Cursors eigen team heeft inmiddels gezegd dat dat ontwerp wordt afgebouwd, dus deze tekst beschrijft het niet langer als actueel.&lt;/p&gt;
&lt;p&gt;Een opvallend sterk punt binnen de editor is Cursors Explore-subagent. Die kan meerdere parallelle zoekopdrachten starten in zijn eigen contextvenster op een sneller model en alleen de relevante bevindingen teruggeven, zodat het hoofdgesprek niet opzwelt van zoekresultaten. Dat is een echte kracht binnen de editor. Behoud die.&lt;/p&gt;
&lt;p&gt;Multi-root werkruimtes worden ondersteund: de context van elke geopende map is beschikbaar voor Agent. Sommige git-afhankelijke functies, zoals worktrees, zijn uitgeschakeld in multi-root-opstellingen, en Cloud Agents ondersteunen multi-root werkruimtes helemaal niet.&lt;/p&gt;
&lt;p&gt;Niets daarvan is een reden om Cursor te verlaten. Het is een precieze beschrijving van een kaart die uitstekend is waar hij leeft.&lt;/p&gt;
&lt;h2 id=&quot;wat-meereizen-echt-betekent&quot;&gt;Wat ‘meereizen’ echt betekent&lt;/h2&gt;
&lt;p&gt;Een kaart reist met je mee wanneer dezelfde vragen hetzelfde soort antwoord opleveren, met citaten die je kunt openen, vanuit meer dan één client.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In Cursor: ‘Waar is &lt;code&gt;parseConfig&lt;/code&gt; gedefinieerd, en wie roept het aan?’&lt;/li&gt;
&lt;li&gt;In Claude Code, op dezelfde repo: dezelfde vraag.&lt;/li&gt;
&lt;li&gt;In Codex CLI, op een reviewmachine die het Cursor-venster nooit heeft geopend: dezelfde vraag.&lt;/li&gt;
&lt;li&gt;In een CI-agent die MCP spreekt: dezelfde vraag, tegen dezelfde gehoste snapshot.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Als elke omgeving zijn eigen privé-index bouwt, heb je geen ene kaart. Je hebt meerdere caches die uit elkaar drijven. De editorindex kan actueel zijn voor de boom op schijf. De CLI-sessie kan een dag achterlopen. De CI-taak kan naar een andere checkout kijken. En de agent zal toch zelfverzekerd blijven klinken.&lt;/p&gt;
&lt;p&gt;Cursors indexer hoort dat niet op te lossen. Omdat hij binnen de editor leeft, is de context die hij bouwt voor die editor. Een lezer die ook een CLI, een CI-pipeline, of een andere editor nodig heeft, heeft een apart hulpmiddel nodig voor die omgevingen. Dat is een feit over reikwijdte, geen tekortkoming. Maguyva is dat aparte hulpmiddel.&lt;/p&gt;
&lt;p&gt;Een gepubliceerd aantal talen voor Cursors indexer wordt niet vermeld in het materiaal dat deze tekst mag gebruiken. Maguyva publiceert ondersteuning voor meer dan 279 talen en tekstgebaseerde technologieën. Cursors prijzen worden hier ook niet overgenomen; zie hun prijspagina. Maguyva rekent per werkruimte, niet per plek, met gepubliceerde plannen van $0, $19, $49 en $149, afhankelijk van de geïndexeerde omvang en de grootte van de werkruimte.&lt;/p&gt;
&lt;h2 id=&quot;eén-gehoste-kaart-elke-mcp-client&quot;&gt;Eén gehoste kaart, elke MCP-client&lt;/h2&gt;
&lt;p&gt;Maguyva is een externe MCP-server. Je koppelt GitHub, kiest de repositories, en de cloudpipeline bouwt symbolen, grafrandjes en een gerangschikte kaart. Je voegt een API-sleutel toe aan de MCP-configuratie van de client die je al gebruikt. Maguyva heeft installatiegidsen voor 24 gedocumenteerde MCP-clients — inclusief Cursor — en kan verbinding maken met andere MCP-compatibele clients die standaardconfiguratie ondersteunen.&lt;/p&gt;
&lt;p&gt;De &lt;a href=&quot;https://maguyva.ai/nl/for-cursor&quot;&gt;Cursor-installatiepagina&lt;/a&gt; is het editorspecifieke pad als je daar werkt. Dezelfde server beantwoordt Claude Code, VS Code, Windsurf, Codex CLI en de rest. Je wisselt niet van editor. Je geeft elke agent hetzelfde hulpmiddeloppervlak: 11 klantgerichte MCP-hulpmiddelen voor zoeken, symbolen, afhankelijkheidsanalyse, bestandsophaling, repository-context en deterministische hulpwerkstromen. Semantisch, structureel, graaf- en tekstzoeken worden samengevoegd tot gerangschikte resultaten.&lt;/p&gt;
&lt;p&gt;Dat is het voordeel van overdraagbaarheid. De citaten die je vanmorgen in Cursor hebt gecontroleerd, hebben dezelfde vorm als de citaten die Codex CLI vanavond teruggeeft. Bestandspad en regelnummer. Open ze. Als ze verkeerd zijn, zie je dat. Als ze kloppen, heeft de volgende wijziging een plek om te landen. De goedgekeurde bewering is minder gehallucineerde wijzigingen, niet de belofte dat elke wijziging correct is.&lt;/p&gt;
&lt;p&gt;Versheid is gepubliceerd. Snapshots zijn van een tijdstempel voorzien, zodat de agent weet welke versie van de boom hij leest. De herbouwfrequentie is dagelijks in het gratis plan en elk uur in de betaalde plannen. De eerlijke beperking is niet-gesynchroniseerd lokaal werk: een wijziging die alleen bestaat in een werkboom staat nog niet in de gehoste kaart. Die beperking is hetzelfde ongeacht vanuit welke client je bevraagt, en dat is precies het punt. Drift tussen clients is niet langer een tweede, verborgen beperking.&lt;/p&gt;
&lt;p&gt;De &lt;a href=&quot;https://maguyva.ai/nl/docs&quot;&gt;documentatie&lt;/a&gt; geeft de activeringslus die voor elke client geldt: indexeer een repo die je al kent, verbind de client, stel één vraag die je kunt verifiëren. Doe dat eenmaal in Cursor. Doe het opnieuw vanuit de CLI die je echt gebruikt op reviewdagen. Als beide antwoorden dezelfde handler citeren, is de kaart daadwerkelijk met je meegereisd.&lt;/p&gt;
&lt;h2 id=&quot;hoe-de-twee-kaarten-naast-elkaar-bestaan&quot;&gt;Hoe de twee kaarten naast elkaar bestaan&lt;/h2&gt;
&lt;p&gt;Gebruik beide. Het zijn geen alternatieven in de zin van een vergelijkingspagina.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Laat Cursors indexer aan staan voor het project op schijf. Laat Explore, Instant Grep en de agent binnen de editor het gebruiken. Die lus is nativ en snel.&lt;/li&gt;
&lt;li&gt;Voeg Maguyva toe als MCP-server in Cursor, zodat dezelfde sessie ook de gehoste werkruimtekaart kan bevragen. Cursor is een gedocumenteerde Maguyva-client. Je kiest niet de ene index en wist de andere.&lt;/li&gt;
&lt;li&gt;Voeg dezelfde Maguyva-server toe aan Claude Code, Codex CLI, of elke andere MCP-client die de repo raakt. Eén API-sleutelvorm. Eén werkruimte.&lt;/li&gt;
&lt;li&gt;Als een CI-agent MCP-compatibel is, wijs hem naar dezelfde server. Hij leest dezelfde tijdgestempelde snapshot die de laptop las.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;De editorindex blijft het beste hulpmiddel voor ‘wat staat er nu op schijf in dit venster’. De gehoste kaart is het beste hulpmiddel voor ‘hoe ziet deze werkruimte eruit voor elke agent die hem vandaag raakt’. Die zinnen concurreren niet.&lt;/p&gt;
&lt;p&gt;Werkruimtequota worden gepubliceerd op de &lt;a href=&quot;https://maguyva.ai/nl/pricing&quot;&gt;prijspagina&lt;/a&gt;: repo’s, geïndexeerde regels en gebruikers, gefactureerd per werkruimte. Agenten en mensen delen hetzelfde gebruikersaantal. Begin gratis met een repo die je al kunt beoordelen. Verhoog de werkruimte pas nadat de citaten het contact met de boom hebben overleefd.&lt;/p&gt;
&lt;h2 id=&quot;wat-deze-pagina-niet-beweert&quot;&gt;Wat deze pagina niet beweert&lt;/h2&gt;
&lt;p&gt;Hij beweert niet dat Cursors indexer zwak, onvolledig, of een reden is om van editor te wisselen. De eerste zin van deze tekst zegt het tegenovergestelde.&lt;/p&gt;
&lt;p&gt;Hij beweert niet dat Maguyva Instant Grep of de Explore-subagent vervangt. Dat zijn Cursor-functies. Ze blijven in Cursor.&lt;/p&gt;
&lt;p&gt;Hij verzint geen aantal talen, geen latentiecijfer, en geen tokenbesparing voor een van beide producten. Onbekende cijfers blijven ongepubliceerd.&lt;/p&gt;
&lt;p&gt;Hij doet niet alsof niet-gepusht lokaal werk in de gehoste kaart staat. Tijdgestempelde snapshots maken die beperking zichtbaar. Ze verwijderen hem niet.&lt;/p&gt;
&lt;p&gt;De test is gewoon. Indexeer een repo die je al kent. Stel één vraag die je kunt verifiëren, eerst in Cursor, dan in een tweede MCP-client. Context die met je meereist is hetzelfde citaat op beide plekken.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>Eerst de kaart, dan de review</title><link>https://maguyva.ai/nl/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/map-first-review-second</guid><description>Verankeer de codeeragent in een repo-kaart voordat hij schrijft. Laat Greptile daarna de pull request beoordelen. Een complementair duo, geen vervanging.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Twee verschillende taken staan aan weerszijden van een pull request. Voordat de agent schrijft, heeft hij een kaart nodig van de boom die hij op het punt staat te wijzigen. Nadat de agent een PR opent, zou iets die wijziging moeten lezen tegen de rest van het systeem en commentaar moeten achterlaten waarop een mens kan handelen.&lt;/p&gt;
&lt;p&gt;Die taken lijken op elkaar van veraf omdat beide ‘de codebase begrijpen’ inhouden. Het is niet hetzelfde product. De ene beantwoordt ‘waar zou deze wijziging moeten landen?’. De andere beantwoordt ‘wat heeft deze diff kapotgemaakt dat een regel-voor-regel linter zal missen?’. Ze door elkaar halen levert een slechter eerste concept en een luidruchtigere review op.&lt;/p&gt;
&lt;p&gt;Dit stuk is een gids voor een gezamenlijke workflow. Maguyva is de kaart die de agent eerst bevraagt. Greptile is de reviewagent die de PR daarna becommentarieert. Het duo is complementair door constructie: Maguyva beoordeelt geen pull requests, en Greptile vervangt niet de contextlaag die de agent gebruikte om ze te schrijven.&lt;/p&gt;
&lt;h2 id=&quot;waarom-deze-opsplitsing-nuttig-is&quot;&gt;Waarom deze opsplitsing nuttig is&lt;/h2&gt;
&lt;p&gt;Een codeeragent die vertrekt vanuit trainingspriors plus een paar geplakte bestanden zal een aannemelijk pad verzinnen en het bewerken. Dat is de mislukking van ‘het verkeerde bestand’, en het is een ophaalprobleem. Maguyva is een externe MCP-contextlaag voor de codebase: semantisch, structureel (AST), graaf-/afhankelijkheids- en tekstueel ophalen samengevoegd tot gerangschikte resultaten, plus symboolzoeken en bestandsophaling. Onderbouwde antwoorden komen terug als &lt;code&gt;path/file.ext:line&lt;/code&gt;, zodat je een misser kunt afwijzen voordat er een patch bestaat. De bewering blijft bescheiden: minder gehallucineerde wijzigingen. Het model kan nog steeds gokken. Alleen stopt de eerste stap met gokken zijn.&lt;/p&gt;
&lt;p&gt;Greptile is een AI-code-reviewagent. In hun eigen woorden beoordeelt het automatisch elke pull request met volledig begrip van de codebase, en zet dat af tegen traditionele linters die bestanden geïsoleerd controleren in plaats van het hele systeem. De installatie bestaat uit het installeren van de GitHub- of GitLab-app en het selecteren van repositories. Er is geen lokale index die jij moet draaien. De hosting is Greptile Cloud (ze verklaren SOC 2 Type II-naleving, met een rapport beschikbaar op verzoek), met een self-hosted optie aangeboden aan bedrijven.&lt;/p&gt;
&lt;p&gt;Hun eigen genummerde flow is: verbinden en een afhankelijkheidsgraaf bouwen van elke functie, klasse en afhankelijkheid; bij elke pull request de wijziging analyseren met die volledige repo-graaf en bevindingen publiceren als PR-commentaar met voorgestelde correcties, in ongeveer drie minuten; elk commentaar kan het probleem doorgeven aan een codeeragent die het team al gebruikt. Ze verklaren ook dat ze in de loop van de tijd eerdere menselijke PR-commentaren lezen, om de codestandaarden van een team te leren en luidruchtige suggesties te verminderen. Hun leersysteem heeft naar eigen zeggen 2-3 weken nodig om zich aan te passen.&lt;/p&gt;
&lt;p&gt;Dat is review, geen concept schrijven. Greptiles sterke punt is de context van de volledige repo-graaf op de wijziging die al in een PR is geland, gevolgd door een gesloten lus die de bevinding naar Claude Code, Codex, Conductor, Cursor, of Devin stuurt. Maguyvaas sterke punt is de gerangschikte kaart die de agent bevroeg voordat die wijziging werd geschreven. Gebruik beide. Vraag geen van beide om het werk van de ander te doen.&lt;/p&gt;
&lt;p&gt;Een first-party productintegratie tussen Maguyva en Greptile is niet vermeld. Die heb je ook niet nodig. Maguyva praat met de agent via MCP. Greptile praat met GitHub of GitLab via hun eigen app. Ze ontmoeten elkaar bij de pull request. Geen lijmscript, geen cron die het ene hulpmiddel met het andere verbindt. Het duo doet het zonder bash omdat elk product al op het oppervlak zit dat het toebehoort.&lt;/p&gt;
&lt;h2 id=&quot;wat-dit-niet-is&quot;&gt;Wat dit niet is&lt;/h2&gt;
&lt;p&gt;Dit is geen sloop van Greptile. Het is geen ‘wissel je reviewer’-pagina. Greptile lanceerde op Hacker News op 5 maart 2024 als een Y Combinator W24-bedrijf, en die thread is hoe veel mensen het product voor het eerst leerden kennen. Als je ze zo hebt gevonden, blijf ze gebruiken. Deze pagina is de ontbrekende voorste helft van die lus: de agent op voorhand verankeren, zodat de PR die Greptile ziet al op de juiste bestanden mikt.&lt;/p&gt;
&lt;p&gt;Greptiles marketingmateriaal leidt met beweringen over reviewsnelheid en het vinden van bugs. Behandel die als Greptiles eigen beweringen, niet als onafhankelijk geverifieerde cijfers. Deze tekst herhaalt ze niet als feiten.&lt;/p&gt;
&lt;p&gt;Taaldekking is dezelfde soort eerlijkheid. Greptile kadert ondersteuning als dekking van alle programmeertalen in plaats van een opgesomde lijst; een precies aantal wordt niet vermeld. Maguyva publiceert ondersteuning voor meer dan 279 talen en tekstgebaseerde technologieën, met een technische opsplitsing (parser-ondersteunde AST versus alleen tekst) op de site wanneer de vraag technisch is. Dat zijn verschillende producten die verschillende beweringen doen. Meng ze niet.&lt;/p&gt;
&lt;p&gt;Greptiles prijzen worden niet vermeld in het materiaal dat deze tekst mag gebruiken. Betaalde plannen bestaan; zie hun prijspagina. Maguyva rekent per werkruimte, niet per plek. Plannen beginnen gratis. De &lt;a href=&quot;https://maguyva.ai/nl/pricing&quot;&gt;prijspagina&lt;/a&gt; somt de gepubliceerde niveaus op als je de werkruimtecijfers nodig hebt.&lt;/p&gt;
&lt;h2 id=&quot;workflow&quot;&gt;Workflow&lt;/h2&gt;
&lt;p&gt;Drie benoemde fasen. Voer ze in deze volgorde uit. Sla er geen over de eerste keer dat je het duo probeert.&lt;/p&gt;
&lt;h3 id=&quot;1-maguyva-context&quot;&gt;1. Maguyva-context&lt;/h3&gt;
&lt;p&gt;Indexeer één repository die je al kent. Verbind de MCP-client waarin je al schrijft — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, of een andere MCP-compatibele client. Maguyva heeft installatiegidsen voor 24 gedocumenteerde MCP-clients en kan verbinding maken met andere clients die standaard MCP-configuratie ondersteunen.&lt;/p&gt;
&lt;p&gt;Stel een vraag die je kunt beoordelen voordat iemand een regel schrijft. ‘Waar wordt het verlopen van de sessie afgehandeld, en wat roept dat aan?’ is een betere eerste zet dan ‘los auth op’. Eis citaten. Open de &lt;code&gt;file.ext:line&lt;/code&gt;-resultaten. Volg het symbool. Bevestig de afhankelijkheid die je op het punt staat aan te raken.&lt;/p&gt;
&lt;p&gt;Maguyva stelt 11 klantgerichte MCP-hulpmiddelen beschikbaar voor zoeken, symbolen, afhankelijkheidsanalyse, bestandsophaling, repository-context en deterministische hulpwerkstromen. Vier ophaalmodi worden samengevoegd tot gerangschikte resultaten; &lt;code&gt;find_symbol&lt;/code&gt; is een apart hulpmiddel als je de naam al kent. De &lt;a href=&quot;https://maguyva.ai/nl/docs&quot;&gt;documentatie&lt;/a&gt; beschrijft het kortste pad: begin gratis, indexeer een repo die je al kent, verbind de client, stel dan één vraag die je kunt verifiëren.&lt;/p&gt;
&lt;p&gt;Snapshots zijn van een tijdstempel voorzien, zodat de agent kan zeggen welke versie van de boom hij leest. De eerlijke beperking is niet-gesynchroniseerd lokaal werk. Als de wijziging alleen bestaat in een werkboom en niet is gepusht, bevat de gehoste kaart hem nog niet. Instructiebestanden (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) horen hier nog steeds thuis, voor conventies en wat niet aangeraakt moet worden. Het zijn geen levende kaart. Gebruik ze voor gedrag. Gebruik Maguyva voor feiten.&lt;/p&gt;
&lt;p&gt;Laat de agent geen PR openen voordat de citaten het contact met de repo hebben overleefd. Die poort is het hele punt van deze fase.&lt;/p&gt;
&lt;h3 id=&quot;2-pr-van-de-agent&quot;&gt;2. PR van de agent&lt;/h3&gt;
&lt;p&gt;Dezelfde agent schrijft nu de wijziging in de client waarvoor je al betaalt. Maguyva is geen editor en geen reviewer. De agent produceert nog steeds de diff. Je opent nog steeds de pull request op GitHub of GitLab zoals je al doet.&lt;/p&gt;
&lt;p&gt;Wat anders zou moeten zijn, is het eerste bestand. De PR zou de handler moeten noemen die het gedrag echt implementeert, de aanroeper die zal breken, en de test die zal falen als de wijziging fout is. Als fase 1 is overgeslagen, besteedt fase 3 zijn commentaar aan een wijziging die in het verkeerde package is geland. Greptile kan nog steeds systemische problemen vinden. Het zou daarnaast niet ook moeten moeten herstellen van een gehallucineerd pad.&lt;/p&gt;
&lt;p&gt;Houd de PR beperkt. Een onderbouwd eerste bestand is geen vrijbrief om de module te herschrijven. Dit complementaire duo werkt wanneer de agent één taak deed met een kaart, en daarna een reviewer vroeg een andere taak te doen op een afgebakende diff.&lt;/p&gt;
&lt;h3 id=&quot;3-greptile-review&quot;&gt;3. Greptile-review&lt;/h3&gt;
&lt;p&gt;Greptile is al met de repository verbonden via de GitHub- of GitLab-app. Op de nieuwe pull request analyseert het de wijziging met de volledige repo-graaf die het heeft gebouwd, en publiceert bevindingen als commentaar met voorgestelde correcties. Hun eigen materiaal plaatst die doorloop op ongeveer drie minuten.&lt;/p&gt;
&lt;p&gt;Lees het commentaar zoals je een zorgvuldige teamgenoot zou lezen: open de geciteerde locatie, beslis of de bevinding echt is, handel dan. Waar Greptile ‘Fix with your Agent’ aanbiedt, stuurt het het probleem — bestandspaden, regelnummers, voorgestelde code — naar Claude Code, Codex, Conductor, Cursor, of Devin. ‘Fix All’ stuurt alle problemen van de review tegelijk. Ze leveren ook een Greptile MCP en een Claude Code-plug-in voor die overdracht. Maguyva staat niet op die genoemde doellijst; die afwezigheid is geen probleem. Maguyva heeft zijn werk al gedaan in fase 1. De codeeragent die de PR schreef, is degene die de correctiepayload zou moeten ontvangen.&lt;/p&gt;
&lt;p&gt;Verwacht ruis in de eerste 2-3 weken terwijl Greptiles leersysteem zich aanpast aan het commentaar dat je team echt achterlaat. Dat is hun verklaarde tijdlijn, geen gebrek van het duo. Menselijke review blijft in de lus. Greptile is de geautomatiseerde eerste doorloop, niet de mergeknop.&lt;/p&gt;
&lt;p&gt;Als een Greptile-commentaar wijst naar een bestand dat de agent in fase 1 nooit heeft bevraagd, is dat een nuttig signaal. Ofwel miste de kaart een aanroeper, ofwel sloeg de agent een citaat over. Corrigeer het concept op basis van het commentaar. Schakel de reviewer niet uit.&lt;/p&gt;
&lt;h2 id=&quot;hoe-je-dit-complement-eerlijk-houdt&quot;&gt;Hoe je dit complement eerlijk houdt&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva altijd eerst. Een review van een PR met het verkeerde bestand blijft een review van het verkeerde bestand.&lt;/li&gt;
&lt;li&gt;Greptile altijd daarna. Een goed geciteerd concept heeft nog steeds een leesbeurt van de diff nodig op het niveau van het hele systeem.&lt;/li&gt;
&lt;li&gt;Vraag Maguyva niet om PR-commentaar te plaatsen. Dat doet het niet.&lt;/li&gt;
&lt;li&gt;Vraag Greptile niet om de eerste ophaallaag van de agent te zijn terwijl die nog een pad aan het kiezen is. Dat is niet het werk waarvoor hun GitHub- of GitLab-app is bedraad.&lt;/li&gt;
&lt;li&gt;Verzin geen bash-pipeline die ze ‘synchroniseert’. De PR is de interface.&lt;/li&gt;
&lt;li&gt;Verifieer beide kanten onafhankelijk. Indexeer een repo die je al kent. Stel één vraag die je kunt verifiëren. Open dan een kleine PR en lees wat Greptile echt becommentarieert.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De lus is gewoon zodra je hem een naam geeft. Eerst de kaart. Dan de PR van de agent. Dan de review. Elk product blijft aan de kant van de pull request waar het goed in is.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Een AI-agent context geven van een grote repo zonder lokale indexer</title><link>https://maguyva.ai/nl/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/large-repo-context-without-a-local-indexer</guid><description>Hoe je een codeeragent een doorzoekbare kaart geeft van een grote repository vanuit de cloud, zonder een lokale indexer op je laptop te draaien.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Een grote repository past niet in een contextvenster, en als je ooit een laptopindexer op een echte monorepo hebt losgelaten, weet je dat hij daar ook niet comfortabel past — het RAM-gebruik schiet omhoog, de eerste indexering duurt een uur, en je agent begint de volgende sessie nog steeds met gokken welke bestanden ertoe doen.&lt;/p&gt;
&lt;p&gt;Het gebruikelijke antwoord is een indexer naast de editor te draaien, en voor een repo die comfortabel op één machine past, is dat een goed antwoord. Als jouw monorepo al snel indexeert in Cursor en dat de enige plek is waar je de kaart nodig hebt, heeft dit stuk niets toe te voegen — sla het over.&lt;/p&gt;
&lt;p&gt;Dit stuk gaat over het andere geval — wanneer een agent een doorzoekbare kaart van een grote repo nodig heeft, en jij daarvoor geen lokale indexer wilt draaien.&lt;/p&gt;
&lt;h2 id=&quot;wanneer-een-lokale-indexer-het-verkeerde-hulpmiddel-is&quot;&gt;Wanneer een lokale indexer het verkeerde hulpmiddel is&lt;/h2&gt;
&lt;p&gt;Een lokale index gaat ervan uit dat de code leeft op de machine die hem bevraagt, en op de schaal van een echte monorepo raakt die aanname zelfs binnen één editor onder spanning. De repo is simpelweg groter dan je ‘warm’ wilt houden op een laptop: je werkt in één package terwijl de impactradius drie mappen verderop ligt, en een eerste koude indexering van een boom van twee miljoen regels is niet iets wat je twee keer wilt doorstaan — niet op je eigen machine, niet op een CI-runner die die boom nog nooit eerder heeft gekloond. Of een teamgenoot zou dezelfde kaart als jij moeten kunnen bevragen, zonder te wachten tot zijn eigen machine zich door dezelfde index heeft geworsteld.&lt;/p&gt;
&lt;p&gt;Niets daarvan is een reden om een goede editorindexer weg te gooien. Het is een reden om daarnaast ook een gehoste kaart te hebben die elk van je agenten via MCP kan bevragen.&lt;/p&gt;
&lt;p&gt;En het schaalprobleem gaat dieper dan ‘te veel bestanden om te plakken’. Op een grote boom is de interessante vraag bijna nooit ‘laat me dit bestand zien’ — het is welk bestand, welk symbool, welke aanroepers, welke tests. Een agent die begint met het opsommen van &lt;code&gt;src/&lt;/code&gt; en de eerste drie resultaten lezen, mist vrolijk de handler in &lt;code&gt;apps/api&lt;/code&gt; en de gegenereerde client in &lt;code&gt;packages/sdk&lt;/code&gt;. Wat je nodig hebt, is ophalen dat gebouwd is vanuit de hele boom, dan gerangschikt, dan geciteerd.&lt;/p&gt;
&lt;h2 id=&quot;wat-context-van-een-grote-repo-echt-betekent&quot;&gt;Wat ‘context van een grote repo’ echt betekent&lt;/h2&gt;
&lt;p&gt;Bestanden in de prompt dumpen is geen context — het is een kleinere, slechtere kopie van de boom. Wat je agent echt nodig heeft, is vragen stellen en geciteerde antwoorden terugkrijgen: waar dit symbool is gedefinieerd en wie het aanroept, wat afhangt van de module die ik op het punt sta te wijzigen, welk testbestand dit gedrag dekt, en hoe de boom er &lt;em&gt;nu&lt;/em&gt; uitziet, niet vorig kwartaal.&lt;/p&gt;
&lt;p&gt;Die antwoorden moeten komen uit een index die van jouw repo is opgebouwd, niet uit het geheugen van het model over andermans repo’s, en de index moet ergens buiten het contextvenster van de agent leven. Voor dit probleem zou hij ook ergens buiten je laptop moeten leven.&lt;/p&gt;
&lt;p&gt;Nog iets wat instructiebestanden niet voor je kunnen doen: &lt;code&gt;CLAUDE.md&lt;/code&gt; en &lt;code&gt;AGENTS.md&lt;/code&gt; zijn de juiste plek voor conventies en gedrag, maar het zijn geen levende, gerangschikte, doorzoekbare kaart van een boom van twee miljoen regels. Gebruik regels voor gedrag; gebruik repo-intelligentie voor feiten.&lt;/p&gt;
&lt;h2 id=&quot;we-bouwen-de-kaart-in-de-cloud-we-bevragen-hem-vanuit-elke-client&quot;&gt;We bouwen de kaart in de cloud, we bevragen hem vanuit elke client&lt;/h2&gt;
&lt;p&gt;Maguyva is een externe MCP-contextlaag voor de codebase. Je koppelt GitHub, kiest je repositories, en je kunt weglopen terwijl cloudpipelines de boom parsen, symbolen en grafrandjes bouwen, en een gerangschikte kaart onderhouden — nooit een lokale indexer.&lt;/p&gt;
&lt;p&gt;Als je code pusht, worden gewijzigde bestanden incrementeel geparsed, en herbouwen de graaf- en rankinglagen zich volgens een schema: dagelijks in het gratis plan, elk uur in de betaalde plannen. Elke snapshot is van een tijdstempel voorzien, zodat je agent kan zeggen welke versie van de boom hij leest. De eerlijke beperking hier is niet-gesynchroniseerd lokaal werk — een wijziging die alleen bestaat in je werkboom, nooit gepusht, staat nog niet in de gehoste kaart.&lt;/p&gt;
&lt;p&gt;Daarna verbind je welke client je ook al gebruikt door een API-sleutel toe te voegen aan diens MCP-configuratie. Er zijn installatiegidsen voor 24 gedocumenteerde MCP-clients, en elke andere MCP-compatibele client die standaardconfiguratie ondersteunt, kan ook verbinding maken. Als Cursor je thuisbasis is, doorloopt de &lt;a href=&quot;https://maguyva.ai/nl/for-cursor&quot;&gt;Cursor-pagina&lt;/a&gt; dat pad; dezelfde server beantwoordt Claude Code, VS Code, Windsurf, Codex CLI en de rest.&lt;/p&gt;
&lt;p&gt;Je wisselt niet van editor. Je geeft je agent een hulpmiddeloppervlak — 11 MCP-hulpmiddelen voor zoeken, symbolen, afhankelijkheidsanalyse, bestandsophaling en repository-context — met dekking van meer dan 279 talen en tekstgebaseerde technologieën, wat meer betekent dan je zou denken op een monorepo die jaren geleden al is opgehouden één taal te zijn.&lt;/p&gt;
&lt;p&gt;Antwoorden komen onderbouwd terug, als bestandspaden met regelnummers. Semantisch, structureel, graaf- en tekstzoeken worden samengevoegd tot gerangschikte resultaten, zodat een vraag als ‘wat hangt af van parseConfig’ je geen grep-dump of één semantisch fragment geeft, maar de handvol plekken die er echt toe doen.&lt;/p&gt;
&lt;h2 id=&quot;een-concrete-aanpak&quot;&gt;Een concrete aanpak&lt;/h2&gt;
&lt;p&gt;Begin niet met het indexeren van het hele bedrijf. Hier is het pad dat werkt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Kies één repository die je al goed kent — een package die je handmatig kunt beoordelen is meer waard dan de grootste boom die je hebt.&lt;/li&gt;
&lt;li&gt;Begin gratis: 3 repo’s, 50k geïndexeerde regels, alle 11 hulpmiddelen, geen maandelijkse queryquota. Als jouw representatieve repo groter is, somt de &lt;a href=&quot;https://maguyva.ai/nl/pricing&quot;&gt;prijspagina&lt;/a&gt; de werkruimteniveaus op ($0, $19, $49, $149) naar geïndexeerde omvang — niet naar aantal plekken.&lt;/li&gt;
&lt;li&gt;Verbind GitHub en wacht tot de eerste indexering klaar is. Je compileert niets lokaal.&lt;/li&gt;
&lt;li&gt;Verbind de MCP-client — een paar regels configuratie. Maguyva is een externe MCP-server, dus er zijn geen plug-ins, geen extensies, en geen tweede editor om over te nemen.&lt;/li&gt;
&lt;li&gt;Stel één vraag die je kunt verifiëren. ‘Wat hangt af van parseConfig?’ of ‘Waar wordt het verlopen van de loginsessie afgehandeld?’ Open dan de geciteerde &lt;code&gt;file.ext:line&lt;/code&gt;-resultaten en controleer ze tegen de boom voor je.&lt;/li&gt;
&lt;li&gt;Pas nadat de citaten dat contact hebben overleefd, laat je de agent bewerken.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Als de eerste repo goed past en je boom is groot, verhoog dan de werkruimte om overeen te komen met je geïndexeerde regels en herbouwfrequentie. Mensen en agenten delen hetzelfde gebruikersaantal — Maguyva rekent per werkruimte, niet per plek — dus een derde agent toevoegen aan de lus kost je niets.&lt;/p&gt;
&lt;p&gt;De activeringstest is dezelfde die de &lt;a href=&quot;https://maguyva.ai/nl/docs&quot;&gt;documentatie&lt;/a&gt; aanbeveelt voor elke eerste run: indexeer een repo die je al kent, stel één vraag die je kunt verifiëren. Een grote repo verandert de test niet; hij maakt alleen een verkeerd eerste bestand duurder.&lt;/p&gt;
&lt;h2 id=&quot;waar-je-op-moet-letten-na-het-verbinden&quot;&gt;Waar je op moet letten na het verbinden&lt;/h2&gt;
&lt;p&gt;Houd drie dingen in de gaten. Versheid: betaalde plannen herbouwen elk uur, gratis plannen dagelijks, en niet-gepusht lokaal werk staat niet in de kaart — dat is de afweging die je maakt. Omvang: indexeer een representatieve set repo’s, niet elke gearchiveerde fork; het gratis niveau is bewust zo groot dat je kunt uitzoeken of de antwoorden het waard zijn om te behouden. En verificatie: een kaart van een grote repo die geen paden en regelnummers kan citeren, is gewoon een tragere gokmachine, dus laat je agent de locatie tonen voordat hij de patch aflevert.&lt;/p&gt;
&lt;p&gt;Voer dan dezelfde test uit die je op een kleine repo zou uitvoeren. Indexeer een repo die je al kent. Stel één vraag die je kunt verifiëren. Als de kaart echt is, stopt je agent met beginnen vanaf een koude boom.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Waarom je AI-codeeragent bestandspaden hallucineert</title><link>https://maguyva.ai/nl/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>AI-codeeragenten verzinnen bestandspaden wanneer ze geen echte kaart van de repo hebben. Hier lees je waarom dat gebeurt, en hoe verankering leidt tot minder gehallucineerde wijzigingen.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Het teken is geen verkeerde functie-inhoud. Het is een zelfverzekerde wijziging aan een bestand dat niet bestaat, of aan een bestand dat wel bestaat maar niet het bestand is dat het gedrag implementeert.&lt;/p&gt;
&lt;p&gt;Je vroeg om een fix voor het verlopen van de sessie. De agent opende &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Dat pad is aannemelijk. Het is ook fout. De echte handler leeft in &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, twee refactors geleden hernoemd. De agent loog niet tegen je. Hij vulde een string in de vorm van een pad aan op basis van trainingspriors plus wat al in het contextvenster stond.&lt;/p&gt;
&lt;p&gt;Dit is het gebruikelijke faalpatroon op een echte repository. Het model kan code schrijven. De misser zit in het kiezen van de verkeerde plek om het te schrijven.&lt;/p&gt;
&lt;h2 id=&quot;waarom-agenten-paden-verzinnen&quot;&gt;Waarom agenten paden verzinnen&lt;/h2&gt;
&lt;p&gt;Een codeeragent is een model dat het volgende token voorspelt, met hulpmiddelen. Als je zegt ‘los het verlopen van de sessie op’, moet hij eerst een bestand noemen voordat hij iets kan lezen of patchen. Als hij nog geen verankerde kaart heeft, construeert hij een pad uit:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Naamgevingsconventies die hij in andere repositories heeft gezien. &lt;code&gt;src/auth/session.ts&lt;/code&gt; is een veelvoorkomende vorm.&lt;/li&gt;
&lt;li&gt;Bestanden die al in het gesprek staan, die misschien de bestanden zijn die je vorige week hebt geplakt, niet de bestanden die nu ertoe doen.&lt;/li&gt;
&lt;li&gt;Mapoverzichten die hij toevallig heeft uitgevoerd, onvolledig op een grote boom.&lt;/li&gt;
&lt;li&gt;Instructiebestanden. &lt;code&gt;CLAUDE.md&lt;/code&gt; en &lt;code&gt;AGENTS.md&lt;/code&gt; vertellen de agent hoe hij zich moet gedragen. Ze zijn geen levende index van symbolen, aanroepers, of huidige paden.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Geen van deze bronnen is vandaag een kaart van deze repository. Het model vult de leemte op dezelfde manier waarop het elke leemte vult: met een vervolg met hoge waarschijnlijkheid. Dat vervolg ziet er vaak uit als een echt pad. Soms bestaat het bestand en ligt het naast het juiste. Soms bestond het op een branch die vorige maand is gemerged. Soms heeft het nooit bestaan.&lt;/p&gt;
&lt;p&gt;Grep redt je hier niet als de agent nooit naar de juiste string zoekt. De agent gokte een pad, las vervolgens wat dat pad teruggaf, en bewerkte het toen. De eerste verkeerde stap was het pad, niet de patch.&lt;/p&gt;
&lt;p&gt;Bestanden lezen is ook niet hetzelfde als de juiste vinden. Claude Code, Cursor, Codex, en soortgelijke hulpmiddelen kunnen openen waar je ze ook naar wijst. De vraag is of ze betrouwbaar de juiste bestanden vinden, de belangrijke symbolen, de afhankelijkheden, de tests, en de impactradius voordat ze bewerken. Bestandstoegang zonder kaart begint nog steeds met een gok.&lt;/p&gt;
&lt;h2 id=&quot;de-wijziging-van-het-verkeerde-bestand-is-een-ophaalprobleem&quot;&gt;De wijziging van het verkeerde bestand is een ophaalprobleem&lt;/h2&gt;
&lt;p&gt;Behandel het verzonnen pad als een ophaalmisser, niet als een karaktergebrek.&lt;/p&gt;
&lt;p&gt;Als de agent &lt;code&gt;path/file.ext:line&lt;/code&gt; zou moeten teruggeven voordat hij mag bewerken, zouden er twee dingen gebeuren. Ten eerste zou je het citaat kunnen openen en het werk binnen tien seconden kunnen afwijzen. Ten tweede zou de agent iets moeten bevragen dat de boom echt kent.&lt;/p&gt;
&lt;p&gt;Dat is het werk van een codebase-contextlaag. Alleen semantisch zoeken is niet genoeg. Een fragment dat ‘klinkt als het verlopen van de sessie’ kan nog steeds landen in een verouderd package. Je hebt ook exacte tekst nodig als je de string kent, symboolzoeken als je de naam kent, structureel zoeken als je de vorm kent, en een afhankelijkheidsgraaf als je aanroepers en impactradius nodig hebt.&lt;/p&gt;
&lt;p&gt;Maguyva is die laag voor MCP-compatibele codeeragenten. Het is geen editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf, en andere MCP-clients blijven waar ze zijn. De agent bevraagt een gerangschikte kaart voordat hij een regel aanraakt.&lt;/p&gt;
&lt;p&gt;De bewering is bewust bescheiden: minder gehallucineerde wijzigingen. Maguyva ontneemt het model niet het vermogen om te gokken. Het verandert de standaard eerste stap van ‘verzin een aannemelijk pad’ naar ‘vraag om gerangschikte, geciteerde locaties’.&lt;/p&gt;
&lt;h2 id=&quot;hoe-een-onderbouwd-antwoord-eruitziet&quot;&gt;Hoe een onderbouwd antwoord eruitziet&lt;/h2&gt;
&lt;p&gt;Een nuttig antwoord op ‘waar wordt het verlopen van de sessie afgehandeld’ is geen alinea. Het is een korte lijst van locaties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - de handler&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - de aanroeper&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - de test die zal falen als de wijziging fout is&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je kunt deze regels openen. Als ze fout zijn, stop je. Als ze kloppen, mag de agent bewerken. De verificatie is het punt, geen slogan.&lt;/p&gt;
&lt;p&gt;Maguyva stelt 11 klantgerichte MCP-hulpmiddelen beschikbaar voor zoeken, symbolen, afhankelijkheidsanalyse, bestandsophaling, repository-context en deterministische hulpwerkstromen. Vier ophaalmodi (semantisch, structureel, graaf/afhankelijkheid en tekstueel) worden samengevoegd tot gerangschikte resultaten; symboolzoeken is een apart MCP-hulpmiddel (&lt;code&gt;find_symbol&lt;/code&gt;). Onderbouwde antwoorden komen terug met bestandspaden en regelnummers, zodat je ze kunt beoordelen tegen de boom voor je.&lt;/p&gt;
&lt;p&gt;De &lt;a href=&quot;https://maguyva.ai/nl/docs&quot;&gt;documentatie&lt;/a&gt; beschrijft het kortste pad: begin gratis, indexeer een repo die je al kent, verbind de client, stel dan één vraag die je kunt verifiëren.&lt;/p&gt;
&lt;h2 id=&quot;een-lus-die-de-eerste-wijziging-verandert&quot;&gt;Een lus die de eerste wijziging verandert&lt;/h2&gt;
&lt;p&gt;Je hebt geen nieuwe workflowreligie nodig. Je hebt één extra stap nodig voor de eerste keer schrijven.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stel een vraag die je al kunt beoordelen. ‘Welke code behandelt inloggen en het verlopen van de sessie?’ is beter dan ‘los auth op’.&lt;/li&gt;
&lt;li&gt;Eis citaten. Bestandspad en regelnummer, geen samenvatting van ‘de auth-module’.&lt;/li&gt;
&lt;li&gt;Open de geciteerde bestanden. Volg het symbool. Bevestig de afhankelijkheid die je op het punt staat aan te raken.&lt;/li&gt;
&lt;li&gt;Pas dan laat je de agent patchen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Als stap 2 niets nuttigs teruggeeft, heeft de agent niet het recht om een pad te improviseren. Hij zoekt opnieuw, of jij wijst het aan. Precies die ene poort levert minder gehallucineerde wijzigingen op. Het model is hetzelfde model. De kaart is wat is veranderd.&lt;/p&gt;
&lt;p&gt;Instructiebestanden blijven belangrijk. Behoud ze. Gebruik ze voor conventies, reviewregels, en wat niet aangeraakt moet worden. Vraag ze niet om de index te zijn. Een &lt;code&gt;CLAUDE.md&lt;/code&gt; die drie belangrijke mappen opsomt, is verouderd de week na een package-splitsing. Een doorzoekbare kaart wordt bijgewerkt wanneer de repo wordt bijgewerkt.&lt;/p&gt;
&lt;p&gt;Een verwante mislukking is het bijna-juiste bestand: de agent opent &lt;code&gt;auth.ts&lt;/code&gt; terwijl het gedrag in &lt;code&gt;auth-client.ts&lt;/code&gt; leeft, of patcht een gegenereerd bestand in plaats van de bron, of bewerkt de kopie in &lt;code&gt;packages/legacy&lt;/code&gt; omdat de naam overeenkwam. Citaten maken deze fouten niet onmogelijk. Ze maken ze zichtbaar voordat de diff landt.&lt;/p&gt;
&lt;h2 id=&quot;wat-een-kaart-niet-voor-je-oplost&quot;&gt;Wat een kaart niet voor je oplost&lt;/h2&gt;
&lt;p&gt;Wees helder over wat je krijgt. Een onderbouwde kaart maakt niet elke wijziging correct — je agent kan nog steeds een slechte patch schrijven in precies het juiste bestand. Als jouw codebase leunt op dynamische dispatch, reflectie, of monkey-patching, komen sommige symboolzoekopdrachten dunner terug dan je zou willen, omdat dat is wat runtime-indirectie doet met elke statische index. En als je hoopt op een percentage — ‘gehallucineerde paden met X% verminderd’ — vind je dat hier niet, omdat niemand behalve jij dat cijfer eerlijk kan meten voor jouw repo.&lt;/p&gt;
&lt;p&gt;Wat je kunt verwachten is smaller en nuttiger: de agent stopt met zijn wijzigingen te openen met een geraden pad. Die eerste stap wordt verankerd in een echte kaart, en daar komen minder gehallucineerde wijzigingen vandaan. Alles na het citaat — de diff lezen, de patch beoordelen — blijft nog steeds jouw werk, net als altijd.&lt;/p&gt;
&lt;p&gt;De test kost je bijna niets: indexeer een repo die je al kent en stel één vraag die je kunt verifiëren. Begin met een pad waar je eerder door bent gebrand. Als de citaten fout zijn, zie je dat meteen. Als ze kloppen, heeft de volgende wijziging van je agent een betere plek om te landen.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Waarom we code search hebben geüpgraded naar voyage-4-large</title><link>https://maguyva.ai/nl/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/upgrading-code-search-to-voyage-4-large</guid><description>We hebben onze code-embeddings verplaatst naar voyage-4-large — momenteel bovenaan het publieke RTEB code-retrieval-leaderboard. De eerlijke versie: de afweging die we maken, wat we daadwerkelijk indexeren, en waarom we betalen voor premium embeddings.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Benchmarkcijfers in deze post weerspiegelen de RTEB-leaderboards op het moment van publicatie (juni 2026). Leaderboards veranderen; behandel de ranglijsten als een momentopname, geen permanent feit.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Semantisch zoeken is slechts zo goed als de embeddings eronder.&lt;/p&gt;
&lt;p&gt;Wanneer een agent Maguyva vraagt “waar handelen we retries af”, grept hij niet naar het woord “retry”. Hij vraagt naar de &lt;em&gt;betekenis&lt;/em&gt; — de backoff-lus, de circuit breaker, het ding dat een onbetrouwbare call omhult. Die vraag wordt beantwoord door een vectormodel dat code omzet in een punt in de ruimte en de buren vindt. Kies een beter model en elke semantische query in het product wordt in stilte scherper.&lt;/p&gt;
&lt;p&gt;Dus veranderden we het onze. Sinds juni 2026 draaien de code-embeddings van Maguyva op &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, ter vervanging van &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;de-benchmark&quot;&gt;De benchmark&lt;/h2&gt;
&lt;p&gt;We hebben deze beslissing niet op gevoel genomen. De publieke &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; rangschikt embeddingmodellen op echte retrievaltaken, en op het &lt;strong&gt;Code&lt;/strong&gt;-leaderboard staat &lt;code&gt;voyage-4-large&lt;/code&gt; op &lt;strong&gt;#1 overall (90,86)&lt;/strong&gt; — vóór &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) en, opvallend genoeg, vóór het model dat we al gebruikten, &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, #3).&lt;/p&gt;
&lt;p&gt;Dat is een klein absoluut verschil. Maar het is een verschil in de juiste richting, op een publieke benchmark, op precies de taak waar het ons om gaat: code ophalen op betekenis.&lt;/p&gt;
&lt;h2 id=&quot;de-afweging-die-we-accepteren-binary-quantization&quot;&gt;De afweging die we accepteren: binary quantization&lt;/h2&gt;
&lt;p&gt;Dit is het deel dat de meeste “we hebben ons model geüpgraded”-posts weglaten.&lt;/p&gt;
&lt;p&gt;Maguyva slaat geen full-precision vectoren op. We slaan &lt;strong&gt;binary-quantized&lt;/strong&gt; embeddings op: elke 2048-dimensionale vector wordt gereduceerd tot een 2048-bit-signature — &lt;strong&gt;256 bytes per vector&lt;/strong&gt;. Die signatures worden doorzocht met Hamming-afstand, geïndexeerd en gepartitioneerd per tenant.&lt;/p&gt;
&lt;p&gt;Dat is een bewuste afweging. Binary quantization levert wat retrievalprecisie in, in ruil voor drastisch kleinere opslag en snelle, goedkope afstandsberekeningen zonder een aparte vectordatabase om te beheren. Voor een product dat hele repositories per workspace indexeert, weegt die economie zwaarder dan de laatste fractie van een benchmarkpunt eruit persen.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; past in dit ontwerp zonder een migratie van de opslaglaag te forceren: het produceert 2048-dimensionale output, net als &lt;code&gt;voyage-code-3&lt;/code&gt;, dus onze &lt;code&gt;bit(2048)&lt;/code&gt;-kolommen en Hamming-zoekpad zijn niet veranderd. Het model werd beter; het schema bleef staan.&lt;/p&gt;
&lt;h2 id=&quot;code-was-slechts-het-begin&quot;&gt;Code was slechts het begin&lt;/h2&gt;
&lt;p&gt;Maguyva is een code-intelligentietool. Maar we zijn ook onze eigen eerste klant, en we richten het ook op iets anders: de markdown die in onze repo’s naast de code leeft. Architecture decision records, runbooks, contracten, finance- en policydocumenten — allemaal onder versiebeheer in Git, allemaal achter dezelfde MCP-server, een semantische index over de &lt;em&gt;documenten&lt;/em&gt;, niet alleen de bron.&lt;/p&gt;
&lt;p&gt;Dat is precies waarom de breedte van voyage-4-large ertoe doet. Op dezelfde familie van RTEB-leaderboards staat het &lt;strong&gt;#1 op finance, #1 op healthcare, en #1 op overall text retrieval&lt;/strong&gt; — vóór Google’s Gemini Embedding, Cohere’s Embed v4, en OpenAI’s text-embedding-3-large. (Voyage is een medeontwikkelaar van RTEB, dus we lezen het als een sterk publiek signaal in plaats van een volstrekt neutrale scheidsrechter — maar het wordt kop-aan-kop gebenchmarkt tegen elk groot commercieel model, op private hold-out-sets.) Dezelfde index die de juiste functie vindt voor een agent, vindt de juiste clausule in een contract of de juiste regel in een policy — en op die domeinen is voyage-4-large geen compromis, het is de koploper.&lt;/p&gt;
&lt;h2 id=&quot;waarom-we-betalen-voor-premium-embeddings&quot;&gt;Waarom we betalen voor premium embeddings&lt;/h2&gt;
&lt;p&gt;Er is een goedkopere manier om te zoeken, en veel daarvan is gratis. Lexicaal zoeken — BM25 en zijn verwanten — matcht keywords, draait lokaal, en kost niets. Open-source-embeddingmodellen zoals BGE, Nomic en embeddinggemma leveren écht &lt;em&gt;behoorlijke&lt;/em&gt; semantische retrieval, en je kunt ze self-hosten voor de prijs van een GPU. Maguyva gebruikt de gratis kant ook: elke query voegt tekst-, AST-, graaf- en semantisch zoeken samen. Waar we niet op beknibbelen, is de semantische laag.&lt;/p&gt;
&lt;p&gt;We betalen per token voor premium embeddings — &lt;code&gt;voyage-4-large&lt;/code&gt; — in plaats van een gratis model zelf te hosten, om twee redenen. Ten eerste kan keywordzoeken alleen niet antwoorden op “waar handelen we retries af” wanneer de code &lt;code&gt;backoff&lt;/code&gt; en &lt;code&gt;circuit breaker&lt;/code&gt; zegt en nooit het woord “retry” gebruikt — betekenis is het hele punt van de embedding, en op de domeinen die we bedienen lopen de open modellen achter op de premium modellen: een paar punten achter op algemene tekst, en verder achter in niches zoals code, contracten en finance. Ten tweede bepaalt retrievalkwaliteit in onze ervaring het uiteindelijke antwoord meer dan het model aan de andere kant — een sterke agent die de verkeerde context krijgt, antwoordt nog altijd fout, en hij ziet nooit het document dat hem nooit werd gegeven.&lt;/p&gt;
&lt;p&gt;Premium embeddings zijn dus een per-token-rekening die meeschaalt met elke repo en elk document dat we indexeren — en we betalen die met opzet. Voor het resultaat dat onze gebruikers krijgen, de juiste functie of de juiste clausule, denken we dat die afweging het waard is.&lt;/p&gt;
&lt;h2 id=&quot;het-eerlijke-deel&quot;&gt;Het eerlijke deel&lt;/h2&gt;
&lt;p&gt;Voyage’s eigen documentatie noemt &lt;code&gt;voyage-code-3&lt;/code&gt; nog altijd het code-geoptimaliseerde model. Waarom dan overstappen?&lt;/p&gt;
&lt;p&gt;Omdat we de publieke benchmark lezen, niet alleen de modeltabel van de vendor, en de benchmark zette &lt;code&gt;voyage-4-large&lt;/code&gt; bovenaan voor code-retrieval. Dit was een toekomstgerichte beslissing: het nieuwere, over het algemeen sterkere model nemen en het valideren tegen een publiek leaderboard op de taken die ertoe doen. We voelen ons comfortabel bij die weddenschap omdat het bewijs breed is — voyage-4-large wint niet alleen op code, het leidt ook op finance, healthcare en overall retrieval.&lt;/p&gt;
&lt;h2 id=&quot;het-onopvallende-fundament&quot;&gt;Het onopvallende fundament&lt;/h2&gt;
&lt;p&gt;Elke tool die we blootstellen — semantisch zoeken, task-context gathering, onderbouwde Q&amp;amp;A — komt uiteindelijk neer op retrieval. Wanneer de retriever verbetert, krijgt de agent aan de andere kant beter bewijs, maakt hij minder verkeerde afslagen, en verankert hij zijn antwoorden in de juiste code — of de juiste clausule, of de juiste policy. Een scherper embeddingmodel is geen opzichtige feature. Het is het fundament onder al het andere, en dat hebben we net versterkt. Je zult het niet merken. Dat is precies het punt.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Recursieve zelfverbetering voor talen: code-intelligentie aanscherpen voor ~280 talen</title><link>https://maguyva.ai/nl/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/autonomous-quality-loops-language-grind</guid><description>We ondersteunen code-intelligentie voor ~280 talen. Geen mens kan dat handmatig auditen. Dus bouwden we een recursieve zelfverbeteringslus voor talen — steekproeven nemen, LLM-as-judge, één ding repareren, opnieuw valideren — en draaien die met een vloot geïsoleerde agents totdat extractie daadwerkelijk klopt, niet alleen groen is.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cijfers in deze post weerspiegelen het systeem op het moment van publicatie (mei 2026). Zie onze &lt;a href=&quot;https://maguyva.ai/nl/team&quot;&gt;teampagina&lt;/a&gt; voor actuele cijfers.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva extraheert symbolen, referenties en een afhankelijkheidsgraaf uit broncode in ruwweg 280 talen. Elke taal heeft een eigen tree-sitter-handler — queries, heuristieken, edge cases — en elke handler kan op zijn eigen subtiele manier fout zitten. Een method-call die als een read wordt uitgezonden. Een functie toegeschreven aan de verkeerde omsluitende scope. Een relatie die er simpelweg niet is.&lt;/p&gt;
&lt;p&gt;Dat kun je niet handmatig auditen. Geen team kan extractie-output over 280 grammatica’s lezen en de slechte edges eruit pikken. De interessante vraag is dus niet “klopt onze extractie” — het is “hoe &lt;em&gt;ontdek je&lt;/em&gt; dat die fout is, op deze schaal, zonder dat er bij elke lus een mens aan te pas komt.” Ons antwoord is recursieve zelfverbetering voor talen: een kwaliteitslus aangedreven door taalagents, een LLM die als rechter optreedt, en één regel die we steeds opnieuw leren: groen is niet hetzelfde als correct.&lt;/p&gt;
&lt;h2 id=&quot;groen-is-niet-correct&quot;&gt;Groen is niet correct&lt;/h2&gt;
&lt;p&gt;Elke taal heeft een fixture suite, en een releasegate scoort die op vijf dimensies — accuratesse, structurele integriteit, volledigheid, kwaliteit en performance. Een taal wordt pas &lt;strong&gt;GREEN&lt;/strong&gt; wanneer, op zijn fixtures, precisie ≥ 0,95, recall ≥ 0,99 en F1 ≥ 0,97 is, met minstens 20 verwachte edges voor statistische betrouwbaarheid. Daaronder is het YELLOW of RED, en wordt het niet uitgeleverd.&lt;/p&gt;
&lt;p&gt;Die gate is noodzakelijk maar niet voldoende. Fixturetests toetsen alleen de gevallen &lt;em&gt;die wijzelf hebben geschreven&lt;/em&gt;. Ze leggen de gevallen vast waar we al aan hadden gedacht. Een handler kan foutloos zijn op zijn fixtures en toch een patroon verminken dat alleen in echte code voorkomt — een macro-idioom, een generic-bound method, een taalkenmerk waar niemand een fixture voor heeft geschreven. GREEN betekent dat de fixtures slagen. Het betekent niet dat een echte repository netjes extraheert. Dus moet de lus de fixtures achter zich laten en echte code onderzoeken.&lt;/p&gt;
&lt;h2 id=&quot;de-binnenste-lus-steekproef-beoordelen-repareren-bewijzen&quot;&gt;De binnenste lus: steekproef, beoordelen, repareren, bewijzen&lt;/h2&gt;
&lt;p&gt;De kernlus draait één taal per keer:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Een paar dingen zorgen ervoor dat dit werkt in plaats van zinloos ronddraait.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;De rechter is de agent, niet een API-call.&lt;/strong&gt; Met “LLM-as-judge” bedoelen we dat de taalagent zelf elke gesamplede edge naast de echte bron leest en die classificeert volgens een vaste vijfcategorierubriek: is deze edge correct, een fout-positief, de juiste relatie met het verkeerde type, gekoppeld aan de verkeerde scope, of met verkeerde metadata? Die beoordelingscriteria zijn doorslaggevend — “23% foutpercentage” betekent niets totdat je weet of dat echte defecten zijn of dat de rechter verkeerd telt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repareer één ding, en bewijs het dan.&lt;/strong&gt; Elke iteratie wijzigt precies één bewerkbaar onderdeel, draait dan opnieuw tegen een vaste harness, en behoudt de wijziging alleen als F1 verbetert en de herclassificatie er beter uitziet. Zo niet, dan wordt hij teruggedraaid. Geen batch aan speculatieve edits, geen “zou beter moeten zijn”. Een wijziging verdient zijn plek of verdwijnt. En wanneer een fix beklijft, wordt die gepromoveerd naar de fixture suite — zodat de bug die hij verhielp nooit stilzwijgend kan terugkeren. Die promotiestap is wat de lus &lt;em&gt;recursief&lt;/em&gt; maakt in plaats van louter herhalend: elke doorgang versterkt het toetsingskader waar de volgende doorgang op voortbouwt.&lt;/p&gt;
&lt;h2 id=&quot;de-les-die-we-steeds-opnieuw-leren-metrieken-overrapporteren&quot;&gt;De les die we steeds opnieuw leren: metrieken overrapporteren&lt;/h2&gt;
&lt;p&gt;Dit is de valkuil, en we liepen er recht in. De secundaire corpusmetrieken — hoe vaak een geëxtraheerd target geen oplosbaar symbool heeft, hoeveel symbolen er “verweesd” uitzien, enzovoort — overschatten het aantal problemen enorm. Het zijn meestal &lt;em&gt;paradigma-artefacten&lt;/em&gt;, geen bugs.&lt;/p&gt;
&lt;p&gt;Het duidelijkste voorbeeld: &lt;code&gt;llvm&lt;/code&gt; vertoonde ooit een “source-zonder-symbool”-percentage van 73% en werd als catastrofaal bestempeld. We doken erin. De werkelijke accuratesse was &lt;strong&gt;98,5%&lt;/strong&gt;. De “ontbrekende symbolen” waren bijna allemaal legitieme externe referenties — calls naar de standaardbibliotheek, naar frameworks, naar code die buiten de repo leeft. De metriek mat een eigenschap van de taal, geen defect in de handler. Talen zoals Zig, COBOL en Odin vertonen “orphan”-percentages van 65–70% en zijn volkomen correct; COBOL had nul echte fouten.&lt;/p&gt;
&lt;p&gt;Als we die cijfers het werk hadden laten sturen, hadden we weken besteed aan het “repareren” van handlers die al klopten, terwijl we de talen met stille, echte bugs negeerden. De conclusie is bot: de geaggregeerde metrieken zijn hoogstens een ruw triagesignaal. &lt;strong&gt;Het echte kwaliteitssignaal is de steekproef met edge-classificatie&lt;/strong&gt; — kijken naar daadwerkelijke edges in daadwerkelijke repositories en ze één voor één beoordelen. Data boven intuïtie, maar alleen zodra je weet welke data de waarheid vertelt.&lt;/p&gt;
&lt;h2 id=&quot;de-buitenste-lus-een-vloot-geen-marathon&quot;&gt;De buitenste lus: een vloot, geen marathon&lt;/h2&gt;
&lt;p&gt;Eén taal per keer zou eeuwig duren over 280 talen, dus wordt de binnenste lus omhuld door een buitenste die er veel parallel draait.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Elke agent werkt in een wegwerp-worktree, zodat ze elkaar niet voor de voeten lopen. De orchestrator integreert hun fixes één voor één, elk achter een full-manifest-regressiecheck: een wijziging die zijn eigen taal helpt maar stilzwijgend drie andere breekt, landt niet. Integratie wordt bewaakt en bevestigd voordat er iets wordt gepusht — de regressiegate bepaalt wat &lt;em&gt;veilig&lt;/em&gt; is, een mens beslist nog altijd wat &lt;em&gt;wordt uitgeleverd&lt;/em&gt;. Vervolgens roteert de pool naar de volgende set talen en draait het geheel opnieuw.&lt;/p&gt;
&lt;h2 id=&quot;wat-nog-altijd-niet-perfect-is&quot;&gt;Wat nog altijd niet perfect is&lt;/h2&gt;
&lt;p&gt;De rechter kan het mis hebben, en die fout heeft een richting: een agent die met te weinig context draait &lt;em&gt;overrapporteert&lt;/em&gt;. In één batch werden acht talen gemarkeerd met 5–20% fouten; bij inspectie bleek er maar één echte taalspecifieke bug te zijn — de rest waren beoordelingsfouten doordat de eigen semantiek van de taal werd gemist (één brontekstregel die legitiem meerdere edges uitzendt, parameterbindingen gemodelleerd als assignments, talen met een reference-per-identifier-patroon). Daarom samplen we met twee seeds en kruiscontroleren we, en daarom wordt een meningsverschil tussen de rechter en de fixtures behandeld als het &lt;em&gt;meest&lt;/em&gt; interessante signaal, geen definitief oordeel — soms is de fixture het ding dat fout zit.&lt;/p&gt;
&lt;p&gt;We zijn ook eerlijk over het doel. Het doel is nul echte fouten, punt — maar “nul” is een richting waarin we blijven werken, taal voor taal, geen vakje dat je afvinkt. Er is altijd nog een repo met een ander idioom.&lt;/p&gt;
&lt;h2 id=&quot;verdiend-niet-beweerd&quot;&gt;Verdiend, niet beweerd&lt;/h2&gt;
&lt;p&gt;Alles wat Maguyva voor een agent doet — een symbool vinden, een afhankelijkheid traceren, een vraag beantwoorden met geciteerde code — rust op de extractie eronder die klopt. Over 280 talen kan “klopt” niet worden beweerd; het moet voortdurend worden &lt;em&gt;verdiend&lt;/em&gt; tegen echte code. De lus is hoe we het verdienen: een autonome steekproef-en-repareer-cyclus die zijn eigen metrieken met argwaan behandelt, elke wijziging bewijst, en elke fix omzet in een bescherming tegen de volgende regressie. Het is niet glamoureus. Het is het werk dat ons in staat stelt te zeggen “we ondersteunen jouw taal” en dat te menen. Groen is makkelijk. Correct is verdiend.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Zoeken met multimodale fusie: voor elke query de juiste retriever kiezen</title><link>https://maguyva.ai/nl/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/multi-modal-fusion-search</guid><description>Een query zoals &apos;waar is parseConfig gedefinieerd&apos; vraagt om een ander soort zoeken dan &apos;hoe werkt auth&apos;. Maguyva classificeert de intentie, weegt vier retrievalmodaliteiten dienovereenkomstig, en voegt de resultaten samen met gewogen Reciprocal Rank Fusion.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Opmerking over het historische ontwerp: dit artikel uit april 2026 beschrijft het routeringsontwerp van toen, niet het huidige standaardgedrag. De correctie van september hieronder betreft alleen een meetclaim. Zie &lt;a href=&quot;https://maguyva.ai/nl/docs/how-it-works&quot;&gt;Hoe het werkt&lt;/a&gt; voor de huidige routering, voorinstellingen en expliciete modaliteitsinstellingen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Een zoekquery is niet één ding.&lt;/p&gt;
&lt;p&gt;“waar is &lt;code&gt;parseConfig&lt;/code&gt; gedefinieerd” wil een exact symbool — één precieze locatie, snel. “hoe werkt authenticatie” wil betekenis — de spreiding aan gerelateerde code die een concept verklaart. “wat breekt er als ik deze functie verander” wil de afhankelijkheidsgraaf. “vind de string &lt;code&gt;ECONNREFUSED&lt;/code&gt;” wil een letterlijke match, niets slims.&lt;/p&gt;
&lt;p&gt;Grep is uitstekend voor letterlijke matches en nuttig om bepaalde referenties op te sporen, maar het is geen afhankelijkheidsgraaf en het begrijpt geen betekenis. Embeddings dekken de semantische kant, maar ze zijn het verkeerde gereedschap voor exacte strings en impactanalyse. De meeste codezoektools kiezen één engine en laten elke query met die keuze leven. Maguyva kiest niet. Het bepaalt wat voor soort vraag je stelde, en mengt dan vier retrievers in de verhouding die bij die vraag past.&lt;/p&gt;
&lt;h2 id=&quot;vier-modaliteiten&quot;&gt;Vier modaliteiten&lt;/h2&gt;
&lt;p&gt;Onder de motorkap zijn er vier onafhankelijke manieren om code te vinden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantic&lt;/strong&gt; — vectorzoeken over Voyage binary embeddings; vindt code op betekenis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;text&lt;/strong&gt; — trigram-matching; vindt letterlijke tekst, foutmeldingen, exacte identifiers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;structural&lt;/strong&gt; — AST-queries; vindt definities, signatures en taalconstructies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graph&lt;/strong&gt; — de afhankelijkheidsgraaf; vindt callers, callees en impactradius.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elk is sterk op een andere klasse vragen. De truc is bepalen hoeveel je elk moet vertrouwen voor de query die voor je ligt.&lt;/p&gt;
&lt;h2 id=&quot;intentieclassificatie&quot;&gt;Intentieclassificatie&lt;/h2&gt;
&lt;p&gt;Voordat er enige retrieval draait, sorteert een lichtgewicht classifier de query in één van zes intenties, met een confidence-score. Die is bewust goedkoop — geordende heuristieken, eerste match wint — omdat hij op het hot path draait en slechts een milliseconde of twee toevoegt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;begint met &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (confidence 0,95)&lt;/li&gt;
&lt;li&gt;“who calls”, “usages of”, “references to” → &lt;strong&gt;find_references&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;“impact”, “blast radius”, “what depends on” → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;een geciteerde &lt;code&gt;&quot;string&quot;&lt;/code&gt; of een errortoken zoals &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0,85–0,90)&lt;/li&gt;
&lt;li&gt;een &lt;code&gt;CamelCase&lt;/code&gt;- of &lt;code&gt;snake_case&lt;/code&gt;-identifier → &lt;strong&gt;find_definition&lt;/strong&gt; (0,60–0,80)&lt;/li&gt;
&lt;li&gt;“how”, “why”, “explain”, “architecture” → &lt;strong&gt;understand_code&lt;/strong&gt; (0,75)&lt;/li&gt;
&lt;li&gt;niets matcht → &lt;strong&gt;understand_code&lt;/strong&gt;, lage confidence (0,40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elke intentie draagt een gewichtsprofiel over de vier modaliteiten. Dit zijn de echte cijfers:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intent&lt;/th&gt;
&lt;th&gt;semantic&lt;/th&gt;
&lt;th&gt;text&lt;/th&gt;
&lt;th&gt;structural (AST)&lt;/th&gt;
&lt;th&gt;graph&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,3&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Dus “waar is &lt;code&gt;parseConfig&lt;/code&gt; gedefinieerd” leunt zwaar op AST (0,6). “hoe werkt auth” leunt op semantische vectoren (0,5). “wat hangt hiervan af” is bijna volledig graph (0,7). “vind &lt;code&gt;ECONNREFUSED&lt;/code&gt;” is bijna volledig trigram (0,9), waarbij het embeddingmodel volledig is uitgeschakeld — omdat semantische gelijkenis precies het verkeerde gereedschap is voor een exacte string.&lt;/p&gt;
&lt;h2 id=&quot;het-snelle-pad-en-het-samengevoegde-pad&quot;&gt;Het snelle pad, en het samengevoegde pad&lt;/h2&gt;
&lt;p&gt;Wanneer de classifier zeker is — score ≥ 0,85 — en het om een gangbare query gaat, slaat Maguyva fusie volledig over en routeert direct naar de enkele dominante modaliteit. “waar is X gedefinieerd” heeft geen vier retrievers nodig; het heeft de AST-index nodig, nu meteen. Dat directe pad wordt teruggerapporteerd als &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Alles wat ambigu is gaat door fusie. De vier (of drie, bij de standaardpreset) modaliteiten draaien parallel, elk met een eigen gerangschikte lijst, en we combineren ze.&lt;/p&gt;
&lt;h2 id=&quot;weighted-reciprocal-rank-fusion&quot;&gt;Weighted Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;Heterogene retrievers samenvoegen is lastiger dan het klinkt: een cosine similarity van 0,82 en een trigramscore van 137 en een graafcentraliteit van 0,004 zitten niet op dezelfde schaal, dus je kunt ze niet zomaar optellen. Reciprocal Rank Fusion omzeilt het probleem door de ruwe scores weg te gooien en alleen de &lt;strong&gt;rank&lt;/strong&gt; te behouden die elke engine toekende. De bijdrage van een resultaat uit één modaliteit is:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;waarbij &lt;code&gt;rank&lt;/code&gt; zijn positie is in de lijst van die modaliteit en &lt;code&gt;k&lt;/code&gt; een smoothing-constante is. Bijdragen worden opgeteld over modaliteiten heen voor elk resultaat dat door meer dan één engine werd gevonden — overeenstemming tussen retrievers stijgt van nature naar boven. We gebruiken &lt;strong&gt;k = 40&lt;/strong&gt; bij de standaardpreset en 60 bij &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; draait alleen semantisch, dus fusie komt daar nooit in beeld). Het oorspronkelijke RRF-werk kwam uit op k = 60 voor retrieval voor algemeen gebruik; wij hanteren standaard een iets scherpere afstelling, wat topgerangschikte overeenstemming tussen modaliteiten iets meer gewicht geeft — en we raden af om er handmatig aan te sleutelen.&lt;/p&gt;
&lt;p&gt;Daarbovenop dragen resultaten een &lt;strong&gt;boost op graafbelang&lt;/strong&gt;. Een hub — een functie waar de hele codebase op leunt — hoort een obscuur blad te overtreffen, zelfs bij gelijke tekstuele relevantie, dus vermenigvuldigen we elke bijdrage met:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Centraliteit komt van de vooraf berekende PageRank-/degree-metrieken van de pipeline, en de boost wordt begrensd op 1,5× zodat een populaire functie een relevantere obscure functie niet volledig kan begraven. Tot slot degraderen we resultaten uit vendor-, build- en archiefpaden, en dedupliceren we naar het beste chunk per bestand.&lt;/p&gt;
&lt;h2 id=&quot;wat-nog-altijd-niet-perfect-is&quot;&gt;Wat nog altijd niet perfect is&lt;/h2&gt;
&lt;p&gt;De intentieclassifier is een verzameling regexes, geen getraind model. Hij verwerkt veelvoorkomende queryvormen met heuristieken, en een dubbelzinnige query valt terug op &lt;code&gt;understand_code&lt;/code&gt; en een semantisch georiënteerde mix. Een eerdere versie van dit artikel beschreef een daling van het percentage zoekopdrachten zonder resultaten van ongeveer 15% naar minder dan 5% als behaald. Het voorstel uit december 2025 vermeldde in werkelijkheid een geschatte uitgangswaarde en een doel; er is geen ondersteunende queryverzameling of meetrapport verstrekt. We trekken die claim van een behaalde verbetering in; zie het &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;bronbewijs en de correctie&lt;/a&gt;. We hebben de classifier niet vervangen door een getraind model, omdat de goedkope versie snel en goed genoeg is voor de beoogde routeringsrol, en omdat een classifier die zelfverzekerd fouten maakt erger is dan een eerlijke fallback. De gewichten zelf zijn handmatig gekozen priors, niet geleerd uit klikdata die we niet verzamelen.&lt;/p&gt;
&lt;h2 id=&quot;stel-de-vraag-niet-de-tool&quot;&gt;Stel de vraag, niet de tool&lt;/h2&gt;
&lt;p&gt;Een agent zou niet hoeven weten of hij naar grep of embeddings of de call graph moet grijpen — hij zou zijn vraag in gewone taal moeten kunnen stellen en het juiste antwoord moeten krijgen. Multimodale fusie is wat &lt;code&gt;find_symbol&lt;/code&gt;, semantisch zoeken en afhankelijkheidsanalyse via één query-interface beschikbaar maakt: het systeem leest de vorm van de vraag en stelt in stilte de juiste retriever ervoor samen. Het model dat de embeddings scoort, is belangrijk, maar weten wanneer je ze &lt;em&gt;niet&lt;/em&gt; moet gebruiken is dat net zo goed. Voor elke query het juiste gereedschap kiezen, is een eigen soort kwaliteit, en dat is er een die we liever zelf dragen dan doorschuiven naar de aanroeper.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Agent-observability: hooks, Alloy en Grafana</title><link>https://maguyva.ai/nl/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/agent-observability-hooks-alloy-grafana</guid><description>We hebben Claude Code en Codex verbonden met één Grafana-stack via OpenTelemetry en Alloy, en gebruikten vervolgens traces en logs om agentgedragsproblemen bij de bron op te sporen en te verhelpen.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Agentsystemen falen op vreemde manieren.&lt;/p&gt;
&lt;p&gt;Soms is het model het probleem. Soms is de tool het probleem. Soms is je MCP-server prima in orde, maar koos de agent de verkeerde specialist, besteedde hij de halve sessie aan shellwerk dat je niet had verwacht, of joeg hij er ongemerkt geld doorheen in een lus die van buitenaf productief leek.&lt;/p&gt;
&lt;p&gt;Als je het verschil niet kunt zien, beheer je eigenlijk geen agentsysteem. Je gokt.&lt;/p&gt;
&lt;p&gt;Dus bouwden we een observability-stack voor onze eigen workflow: Claude Code, Codex, Claude-hookevents, Codex-notifyevents, native OpenTelemetry, Grafana Alloy, en aan de andere kant Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Het interessante deel is niet “we hebben een dashboard gemaakt”. Het interessante deel is dat we telemetrie moesten opsplitsen in twee verschillende streams, omdat geen enkele feed op zich het volledige beeld gaf.&lt;/p&gt;
&lt;h2 id=&quot;het-probleem-agenttelemetrie-is-gefragmenteerd&quot;&gt;Het probleem: agenttelemetrie is gefragmenteerd&lt;/h2&gt;
&lt;p&gt;Moderne coding agents zenden al enige telemetrie uit. Dat helpt, maar het is niet genoeg.&lt;/p&gt;
&lt;p&gt;Native OTEL is goed in het beantwoorden van vragen zoals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hoeveel requests hebben we gedaan?&lt;/li&gt;
&lt;li&gt;Wat heeft een sessie gekost?&lt;/li&gt;
&lt;li&gt;Waar bevinden zich de spans en traces?&lt;/li&gt;
&lt;li&gt;Piekte de latency?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Het is veel minder goed in het beantwoorden van vragen zoals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Op welke MCP-server leunde de agent?&lt;/li&gt;
&lt;li&gt;Zat deze fout in &lt;code&gt;Bash&lt;/code&gt;, een ingebouwde bestandstool, of een MCP-call?&lt;/li&gt;
&lt;li&gt;Welke skill werd daadwerkelijk geactiveerd?&lt;/li&gt;
&lt;li&gt;Welk type subagent werd ingezet?&lt;/li&gt;
&lt;li&gt;Deed de sessie nuttig werk, of ploeterde ze maar wat?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die tweede categorie vragen ligt dichter bij hooks dan bij traces.&lt;/p&gt;
&lt;p&gt;Maar het omgekeerde geldt ook: sommige van de belangrijkste performancevragen liggen dichter bij traces dan bij hooks.&lt;/p&gt;
&lt;p&gt;Als je wilt weten waar de latency zich daadwerkelijk opstapelde, welke spans traag waren, of de sessie tijd besteedde aan modelcalls versus tooluitvoering, heb je trace-data nodig naast semantische events.&lt;/p&gt;
&lt;h2 id=&quot;de-architectuur-waar-we-op-uitkwamen&quot;&gt;De architectuur waar we op uitkwamen&lt;/h2&gt;
&lt;p&gt;We draaien twee telemetriepaden naast elkaar.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Die opsplitsing is bewust.&lt;/p&gt;
&lt;p&gt;Het is ook asymmetrisch. Claude Code geeft ons een veel rijker lifecycle-hookoppervlak. Codex geeft ons native OTEL plus een notify-oppervlak, dus normaliseren we minder gedetailleerde turn-completion-events naar hetzelfde logschema in plaats van te doen alsof beide runtimes dezelfde controls bieden.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Native OTEL&lt;/strong&gt; geeft ons de basisstream: logs en traces van de runtime zelf, plus metrics waar de runtime die daadwerkelijk uitzendt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hook- en notify-events&lt;/strong&gt; geven ons de semantische laag: dingen zoals &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt;, en de geclassificeerde metadata waar het ons daadwerkelijk om gaat bij het debuggen van agentgedrag. Claude Code levert hier de rijkere eventstream. Codex levert een minder gedetailleerde maar nog altijd nuttige genormaliseerde stream.&lt;/p&gt;
&lt;h2 id=&quot;waarom-hooks-überhaupt-bestaan&quot;&gt;Waarom hooks überhaupt bestaan&lt;/h2&gt;
&lt;p&gt;Onze hookpipeline verrijkt events voordat ze Loki bereiken.&lt;/p&gt;
&lt;p&gt;In plaats van simpelweg te zeggen “er is een tool uitgevoerd”, classificeren we het event in velden zoals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: welke MCP-backend de call afhandelde&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: de shellcommandofamilie&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: welk type specialist werd ingezet&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: of de bron Claude Code of Codex was&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dat betekent dat we vragen kunnen stellen die operationeel van belang zijn:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dat zijn geen velden voor de sier. Ze maken het verschil tussen “de agent voelde traag” en “de agent besteedde de laatste tien minuten aan shell-zware git-operaties met een hoog toolfoutpercentage.”&lt;/p&gt;
&lt;p&gt;Eén implementatiedetail dat vreemder oogt dan het is: de gedeelde Loki-stream gebruikt nog altijd &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; als label, zelfs wanneer het event van Codex kwam. De echte opsplitsing tussen runtimes gebeurt op &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;waarom-alloy-in-het-midden-zit&quot;&gt;Waarom Alloy in het midden zit&lt;/h2&gt;
&lt;p&gt;Grafana Alloy is in deze opzet niet zomaar een forwarder. Het is de beleidsgrens.&lt;/p&gt;
&lt;p&gt;We wijzen de native OTEL-stream van Claude Code en Codex naar een lokale Alloy-proxy op &lt;code&gt;localhost:4318&lt;/code&gt;, en laten Alloy vervolgens de payload opschonen voordat die wordt doorgestuurd naar Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Dat is belangrijk omdat ruwe agenttelemetrie vol zit met high-cardinality-velden die nuttig zijn voor analyse maar vreselijk als geïndexeerde labels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;tokenaantallen&lt;/li&gt;
&lt;li&gt;duraties&lt;/li&gt;
&lt;li&gt;tool-parameterblobs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Als je alles indexeert, krijg je een labelexplosie en een rotdag.&lt;/p&gt;
&lt;p&gt;Dus doet Alloy drie dingen voor ons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Houdt een zeer kleine set low-cardinality-labels geïndexeerd.&lt;/li&gt;
&lt;li&gt;Verplaatst ruisrijke maar nuttige velden naar gestructureerde metadata.&lt;/li&gt;
&lt;li&gt;Laat pure ruis volledig vallen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Het belangrijkste idee is simpel: &lt;strong&gt;observeer meer, indexeer minder&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;waarom-de-hookstream-alloy-omzeilt&quot;&gt;Waarom de hookstream Alloy omzeilt&lt;/h2&gt;
&lt;p&gt;De hookstream is al gevormd voor Loki.&lt;/p&gt;
&lt;p&gt;Tegen de tijd dat &lt;code&gt;send_event.py&lt;/code&gt; een event pusht, hebben we al besloten welke velden een labelbehandeling verdienen en welke thuishoren in de gestructureerde JSON-body. Die stream gaat rechtstreeks naar de OTLP-gateway van Grafana Cloud, zonder nog een keer via Alloy te lopen.&lt;/p&gt;
&lt;p&gt;Het systeem heeft dus een duidelijke taakverdeling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; temt de ruwe native OTEL-stream.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hookverrijking&lt;/strong&gt; maakt semantische events doorzoekbaar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dat houdt de architectuur eenvoudiger dan proberen alles via één pad te forceren.&lt;/p&gt;
&lt;h2 id=&quot;wat-het-dashboard-daadwerkelijk-laat-zien&quot;&gt;Wat het dashboard daadwerkelijk laat zien&lt;/h2&gt;
&lt;p&gt;De onderstaande screenshot komt van een van de observability-dashboards achter onze agentworkflow. Het is geen benchmark, en de cijfers zijn slechts een momentopname. Het gaat om de vorm van de data: activiteitenfeed, toolcalls, fouten, prompts, en uitsplitsingen per agent, ingebouwde tools, MCP-gebruik, shellcommando’s en skills.&lt;/p&gt;
&lt;p&gt;Het nuttige deel is dat dit dashboard op dezelfde Grafana-stack leeft als de rest van de agenttelemetrie. We kunnen filteren op bronagent en toolfamilie en over runtimes heen kijken zonder voor elk systeem een ander observability-verhaal te verzinnen.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Open de screenshot van het observability-dashboard op volledige resolutie&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Grafana-dashboard met een activiteitenfeed, toolcall-aantallen, fouten, prompts en uitsplitsingen per agent, ingebouwde tools, MCP-gebruik, CLI-commando&apos;s en skills voor een agentworkflow.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Een van de live dashboards achter onze agentworkflow. Deze screenshot is slechts één momentopname van een gedeelde Grafana-stack die ook telemetrie ontvangt van onze andere agent-runtimes en -systemen. Klik op de afbeelding voor de versie in volledige resolutie.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;waarom-traces-belangrijker-zijn-dan-ze-op-het-eerste-gezicht-lijken&quot;&gt;Waarom traces belangrijker zijn dan ze op het eerste gezicht lijken&lt;/h2&gt;
&lt;p&gt;Logs vertellen ons welke categorie werk plaatsvond. Traces vertellen ons hoe het werk zich in de tijd ontvouwde.&lt;/p&gt;
&lt;p&gt;Dat onderscheid is belangrijk in agentsystemen omdat “traag” te bot is om nuttig te zijn.&lt;/p&gt;
&lt;p&gt;Een trace kan ons vertellen of de pijn kwam van:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;modellatency&lt;/li&gt;
&lt;li&gt;tooluitvoeringstijd&lt;/li&gt;
&lt;li&gt;herhaalde retries&lt;/li&gt;
&lt;li&gt;één bijzonder dure MCP-interactie&lt;/li&gt;
&lt;li&gt;een lange staart aan kleine operaties die afzonderlijk onschuldig leken&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In de praktijk gebruiken we de hookstream en Tempo-traces samen.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hooklogs&lt;/strong&gt; beantwoorden: wat voor soort gebeurtenis vond er plaats?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traces&lt;/strong&gt; beantwoorden: waar ging de tijd naartoe?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die combinatie is wat observability verandert van een dashboard in een verklaring.&lt;/p&gt;
&lt;h2 id=&quot;waar-codex-in-past&quot;&gt;Waar Codex in past&lt;/h2&gt;
&lt;p&gt;Codex maakt deel uit van dezelfde stack, maar is niet identiek aan Claude Code.&lt;/p&gt;
&lt;p&gt;Voor Codex koppelen we twee onderdelen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native OTEL van Codex naar Alloy&lt;/li&gt;
&lt;li&gt;Een notify-webhook naar &lt;code&gt;codex_notify.py&lt;/code&gt;, die turn completions afbeeldt op hetzelfde Loki-schema dat we voor hookevents gebruiken&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dat geeft ons een uniform filter zoals &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; binnen dezelfde logstream.&lt;/p&gt;
&lt;p&gt;De eerlijke kanttekening: de notify-payload van Codex is momenteel minder gedetailleerd dan de hookpayload van Claude Code, omdat het niet hetzelfde soort integratieoppervlak is. In onze huidige opzet kunnen Codex-turn-completions worden genormaliseerd naar het gedeelde schema, maar rijke tool-voor-tool-extractie werkt nog altijd beter in de native OTEL-stream dan in de notify-bridge.&lt;/p&gt;
&lt;p&gt;Dat is geen reden om deze post te vermijden. Het is precies het punt van deze post. Echte observability-systemen worden opgebouwd uit imperfecte signalen.&lt;/p&gt;
&lt;h2 id=&quot;grafana-via-mcp-verandert-het-spel&quot;&gt;Grafana via MCP verandert het spel&lt;/h2&gt;
&lt;p&gt;De grotere verschuiving is dat Grafana niet alleen een plek is die mensen in een browser bezoeken.&lt;/p&gt;
&lt;p&gt;In deze repo stellen we Grafana ook beschikbaar via MCP. Dat betekent dat een agent Loki, Prometheus en Tempo rechtstreeks kan bevragen, in plaats van te wachten tot een mens eerst handmatig de dashboards inspecteert.&lt;/p&gt;
&lt;p&gt;Dat maakt van observability een actieve input voor de workflow.&lt;/p&gt;
&lt;p&gt;Een agent kan vragen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Welke toolfamilies faalden het meest in het afgelopen uur?&lt;/li&gt;
&lt;li&gt;Welke MCP-server domineerde een sessie?&lt;/li&gt;
&lt;li&gt;Verminderden recente wijzigingen het aantal toolfouten, of verplaatsten ze het werk alleen naar meer shell-zware paden met dezelfde fouten?&lt;/li&gt;
&lt;li&gt;Welke traces vertonen de hoogste latency of herhaalde retries?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zodra je dat hebt, ben je heel dicht bij een zelfverbeteringslus.&lt;/p&gt;
&lt;h2 id=&quot;van-dashboard-naar-feedbacklus&quot;&gt;Van dashboard naar feedbacklus&lt;/h2&gt;
&lt;p&gt;Dit is het deel dat we het interessantst vinden.&lt;/p&gt;
&lt;p&gt;Zodra de observability-stack bevraagbaar is vanuit de agentlaag, houdt telemetrie op een passief rapportageoppervlak te zijn en wordt het een besturingssignaal.&lt;/p&gt;
&lt;p&gt;De lus ziet er zo uit:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agentactiviteit genereert traces, metrics en verrijkte hooklogs.&lt;/li&gt;
&lt;li&gt;Grafana slaat het bewijsmateriaal op in Loki, Tempo en Prometheus waar metrics bestaan.&lt;/li&gt;
&lt;li&gt;Agents bevragen dat bewijsmateriaal via Grafana MCP.&lt;/li&gt;
&lt;li&gt;Het systeem identificeert een slechte toolmix, broze skills, zwakke routering, of shell-zware workflows die steeds vermijdbare fouten blijven produceren.&lt;/li&gt;
&lt;li&gt;Agents of operators passen prompts, agentconfiguraties, skillbeschrijvingen, routeringsregels of tooltoegang aan.&lt;/li&gt;
&lt;li&gt;De volgende sessie produceert een nieuwe telemetrievorm, en de cyclus herhaalt zich.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Zo beweeg je van “interessant dashboard” naar “meetbaar verbetersysteem”.&lt;/p&gt;
&lt;p&gt;Het doel is niet om één toolcategorie te maximaliseren. Het doel is uit te komen op de juiste mix van CLI, ingebouwde tools, MCP-calls en skills voor het werk dat daadwerkelijk wordt gedaan.&lt;/p&gt;
&lt;h2 id=&quot;wat-dit-ons-laat-beantwoorden&quot;&gt;Wat dit ons laat beantwoorden&lt;/h2&gt;
&lt;p&gt;Zodra beide runtimes in dezelfde Grafana-stack terechtkomen, kunnen we operationele vragen veel sneller beantwoorden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Concentreren fouten zich in één toolfamilie?&lt;/li&gt;
&lt;li&gt;Veroorzaken shell-zware workflows vermijdbare fouten op plekken waar een hoger-niveau-tool zou moeten bestaan?&lt;/li&gt;
&lt;li&gt;Welke MCP-servers dragen de werklast?&lt;/li&gt;
&lt;li&gt;Betalen we voor agentactiviteit die geen betekenisvolle voortgang oplevert?&lt;/li&gt;
&lt;li&gt;Is een sessie ongezond vanwege het model, de tools, of de orchestratielaag?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dit is vooral nuttig in multi-agent-workflows, waar “de agent was bezig” je bijna niets vertelt.&lt;/p&gt;
&lt;p&gt;Als één specialist steeds wordt ingezet en hoge foutpercentages oplevert, is dat een routerings- of prompt-vormgevingsprobleem.&lt;/p&gt;
&lt;p&gt;Als één MCP-server alle calls domineert, kan dat goede architectuur zijn, of een teken dat al het andere dood gewicht is.&lt;/p&gt;
&lt;p&gt;Als toolfouten pieken terwijl de kosten hoog blijven, heb je een operationeel probleem, geen kwaliteitsprobleem.&lt;/p&gt;
&lt;p&gt;Als shellwerk steeds op voorspelbare, vermijdbare manieren mislukt op plekken waar een hoger-niveau-tool zou moeten bestaan, is dat een productsignaal.&lt;/p&gt;
&lt;p&gt;Als één skill voortdurend wordt geactiveerd maar de resultaten niet verbetert, is dat een prompt- of routeringssignaal.&lt;/p&gt;
&lt;h2 id=&quot;de-echte-les&quot;&gt;De echte les&lt;/h2&gt;
&lt;p&gt;De diepere les hier is dat agent-observability zowel &lt;strong&gt;runtime-telemetrie&lt;/strong&gt; als &lt;strong&gt;workflow-telemetrie&lt;/strong&gt; nodig heeft.&lt;/p&gt;
&lt;p&gt;Runtime-telemetrie vertelt je wat het systeem deed.&lt;/p&gt;
&lt;p&gt;Workflow-telemetrie vertelt je wat de agent dacht te doen.&lt;/p&gt;
&lt;p&gt;We hebben beide nodig.&lt;/p&gt;
&lt;p&gt;Als je alleen traces en counters bijhoudt, mis je de semantische laag. Als je alleen hookevents bijhoudt, mis je latency, spans en het bredere runtimebeeld.&lt;/p&gt;
&lt;p&gt;En als je beide bijhoudt maar ze nooit terugvoert naar de agentlaag, heb je monitoring, geen aanpassing.&lt;/p&gt;
&lt;p&gt;Die combinatie is wat het systeem uitlegbaar genoeg maakt om te beheren en afstembaar genoeg om te verbeteren.&lt;/p&gt;
&lt;h2 id=&quot;wat-nog-altijd-niet-perfect-is&quot;&gt;Wat nog altijd niet perfect is&lt;/h2&gt;
&lt;p&gt;Er zijn nog altijd ruwe randjes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Niet elk hookevent bevat de duratie- en tokendata die we zouden willen.&lt;/li&gt;
&lt;li&gt;Sommige van de beste timingweergaven komen nog altijd van Tempo-traces, niet van de hooklogs.&lt;/li&gt;
&lt;li&gt;Codex is momenteel semantisch minder rijk dan Claude Code in de verrijkte eventstream.&lt;/li&gt;
&lt;li&gt;De dashboardscreenshot is een live operations-oppervlak, geen gepolijst marketingartefact.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dat laatste punt is bewust. We laten liever het echte instrumentenpaneel zien dan doen alsof agentsystemen magisch vanzelfsprekend zijn.&lt;/p&gt;
&lt;h2 id=&quot;waarom-dit-belangrijk-is-voor-maguyva&quot;&gt;Waarom dit belangrijk is voor Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva draait om agents betere code-intelligentie geven. Maar zodra agents daadwerkelijk nuttig werk doen, duikt er meteen een nieuwe vereiste op: je moet kunnen zien hoe ze zich gedragen.&lt;/p&gt;
&lt;p&gt;Zoekkwaliteit, routeringskwaliteit, toolselectie en contextefficiëntie worden allemaal observeerbare vraagstukken.&lt;/p&gt;
&lt;p&gt;Daarom denken we dat dit de moeite van het beschrijven waard is. De toekomstige agentstack is niet alleen prompts en tools. Het is prompts, tools, en de instrumentatielaag die je vertelt of het geheel werkt.&lt;/p&gt;
&lt;p&gt;Als je serieuze agentworkflows bouwt, is observability geen optionele infrastructuur. Het is onderdeel van het product.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>De lus minen: hoe wijzigingen institutioneel geheugen worden</title><link>https://maguyva.ai/nl/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/mining-workflow-closing-the-loop</guid><description>Git-commits worden gestructureerde changelog-items en architecturale beslissingsdossiers, die vervolgens terugvloeien naar AI-agents als doorzoekbaar institutioneel geheugen.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cijfers in deze post weerspiegelen het systeem op het moment van publicatie (februari 2026). Zie onze &lt;a href=&quot;https://maguyva.ai/nl/team&quot;&gt;teampagina&lt;/a&gt; voor actuele cijfers.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Elk engineeringteam staat voor dezelfde uitdaging: wijzigingen gebeuren voortdurend, maar het &lt;em&gt;waarom&lt;/em&gt; achter die wijzigingen verdwijnt. Zes maanden later vraagt iemand “waarom hebben we DuckDB gekozen voor pipelinestages?” en het antwoord leeft alleen in het hoofd van wie die beslissing nam — als die persoon er nog is.&lt;/p&gt;
&lt;p&gt;We hebben een miningworkflow gebouwd die deze lus sluit. Wijzigingen stromen via git-commits, worden verwerkt door onze miningpipeline, worden gestructureerde changelog-items en architecturale beslissingsdossiers, en vloeien vervolgens terug naar onze AI-agents via CLI-queries. Het resultaat: institutioneel geheugen dat zowel mensen als AI kunnen raadplegen.&lt;/p&gt;
&lt;h2 id=&quot;het-probleem-beslissingen-verdampen&quot;&gt;Het probleem: beslissingen verdampen&lt;/h2&gt;
&lt;p&gt;Bekijk een typisch scenario. Een developer maakt een commit:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Deze commit vertegenwoordigt een significante architecturale keuze. Het team evalueerde opties, woog trade-offs af en koos om specifieke redenen voor DuckDB. Maar al die context leeft in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Een Slack-thread (waarschijnlijk verwijderd)&lt;/li&gt;
&lt;li&gt;Iemands geheugen (zeker vervagend)&lt;/li&gt;
&lt;li&gt;Een comment in de code (misschien, als je geluk hebt)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Drie maanden later vraagt een nieuw teamlid: “Moet ik DuckDB of SQLite gebruiken voor deze nieuwe stage?” Zonder institutioneel geheugen vinden ze het wiel opnieuw uit of maken ze inconsistente keuzes.&lt;/p&gt;
&lt;h2 id=&quot;de-lus-van-commits-naar-context&quot;&gt;De lus: van commits naar context&lt;/h2&gt;
&lt;p&gt;Onze miningworkflow transformeert git-geschiedenis naar doorzoekbare kennis:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Het belangrijkste inzicht: zowel changelogs als architecturale beslissingen stromen uit dezelfde git-geschiedenis, verwerkt via één uniforme pipeline. Dat zorgt ervoor dat niets tussen wal en schip valt.&lt;/p&gt;
&lt;h2 id=&quot;hoe-mining-werkt&quot;&gt;Hoe mining werkt&lt;/h2&gt;
&lt;h3 id=&quot;stap-1-de-index-synchroniseren&quot;&gt;Stap 1: de index synchroniseren&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit commando scant de git-geschiedenis en bouwt een index van alle commits. Het extraheert gestructureerde signalen uit elke commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conventional-commit-type (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Scope (welk package of gebied)&lt;/li&gt;
&lt;li&gt;Breaking-change-markers&lt;/li&gt;
&lt;li&gt;Aangeraakte bestanden en complexiteitsmetrieken&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;stap-2-dekkingsstatus-controleren&quot;&gt;Stap 2: dekkingsstatus controleren&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit is hoe onze huidige status eruitziet:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15.637 commits verwerkt. 476 werden architecturale beslissingen. 6.799 werden changelog-items. Elke commit geclassificeerd.&lt;/p&gt;
&lt;h3 id=&quot;stap-3-kandidaten-voor-review-ophalen&quot;&gt;Stap 3: kandidaten voor review ophalen&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit brengt commits naar boven die nog niet zijn verwerkt, met volledige context voor classificatie:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;De signalen helpen bij de classificatie: &lt;code&gt;is_releasable_type: true&lt;/code&gt; suggereert dat dit in de changelog moet verschijnen. Het grote aantal insertions en de infrastructuurbestanden suggereren dat het ook een architecturale beslissing kan zijn.&lt;/p&gt;
&lt;h3 id=&quot;stap-4-commits-classificeren&quot;&gt;Stap 4: commits classificeren&lt;/h3&gt;
&lt;p&gt;Hier splitsen twee paden zich: changelog-items en architecturale beslissingen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voor changelog-items:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit legt vast dat commit &lt;code&gt;abc123&lt;/code&gt; in de changelog moet verschijnen onder de categorie “Added”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voor architecturale beslissingen:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vraag eerst een echte decision-ID op:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Classificeer vervolgens met de decision-ID:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit koppelt de commit aan een beslissingsdossier dat wordt aangemaakt of bijgewerkt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voor batchverwerking (wat we in de praktijk doen):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Het JSONL-formaat ondersteunt beide domeinen in één doorgang:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;stap-5-outputs-renderen&quot;&gt;Stap 5: outputs renderen&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit genereert per-package &lt;code&gt;CHANGELOG.md&lt;/code&gt;-bestanden vanuit het ledger. De changelogs zijn afgeleide artefacten — verwijder ze en ze worden perfect opnieuw gegenereerd vanuit het bron-ledger.&lt;/p&gt;
&lt;h2 id=&quot;de-structuur-van-het-beslissingsdossier&quot;&gt;De structuur van het beslissingsdossier&lt;/h2&gt;
&lt;p&gt;Geëxtraheerde beslissingen worden YAML-bestanden met rijke metadata:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Elke beslissing verwijst terug naar zijn bron-commits. Elke beslissing specificeert welke bestanden hij raakt. Relaties tussen beslissingen zijn expliciet.&lt;/p&gt;
&lt;h2 id=&quot;cli-integratie-institutioneel-geheugen-bevragen&quot;&gt;CLI-integratie: institutioneel geheugen bevragen&lt;/h2&gt;
&lt;p&gt;Hier sluit de lus zich. Agents kunnen beslissingen bevragen via de CLI:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Geeft beslissingen over retrylogica, foutafhandeling, herstelpatronen.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Geeft het complete beslissingsdossier met context, onderbouwing en impact.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Toont welke architecturale keuzes recent zijn gemaakt.&lt;/p&gt;
&lt;h3 id=&quot;hoe-agents-dit-gebruiken&quot;&gt;Hoe agents dit gebruiken&lt;/h3&gt;
&lt;p&gt;De baseline-instructies van onze orchestrator omvatten:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Wanneer een agent wordt gevraagd iets te implementeren dat met DuckDB te maken heeft, kan hij eerst controleren:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En DEC-PL-142 ontdekken, waarbij hij leert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Waarom we voor DuckDB kozen (context)&lt;/li&gt;
&lt;li&gt;Hoe je het correct gebruikt (agent_guidance)&lt;/li&gt;
&lt;li&gt;Welke bestanden je moet bekijken (files)&lt;/li&gt;
&lt;li&gt;Welke gerelateerde beslissingen bestaan (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De agent vindt het wiel niet opnieuw uit. Hij bouwt voort op gevestigde patronen.&lt;/p&gt;
&lt;h2 id=&quot;de-drie-vragen-test&quot;&gt;De Drie-Vragen-Test&lt;/h2&gt;
&lt;p&gt;Niet elke commit verdient een beslissingsdossier. We gebruiken de Drie-Vragen-Test om te filteren:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Was deze beslissing moeilijk te nemen?&lt;/strong&gt; Vereiste het significante analyse, afweging van trade-offs, of discussie?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is het kostbaar om te wijzigen?&lt;/strong&gt; Zou het terugdraaien van deze beslissing significant herwerk vereisen?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heeft het systeembrede impact?&lt;/strong&gt; Raakt het meerdere packages of vestigt het patronen die anderen zullen volgen?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Als een commit “ja” antwoordt op minstens één van deze vragen, is hij een kandidaat voor beslissingsextractie. Ons typische percentage: 1-4 beslissingen per 100 commits (ongeveer 1-4%).&lt;/p&gt;
&lt;p&gt;Voor changelog-items ligt de lat lager: elke gebruikersgerichte wijziging (features, fixes, verbeteringen) wordt vastgelegd. Interne chores, documentatie-updates en refactors worden doorgaans overgeslagen. Ons typische percentage: 30-50 changelog-items per 100 commits.&lt;/p&gt;
&lt;h2 id=&quot;dataopslag-append-only-ledgers&quot;&gt;Dataopslag: append-only ledgers&lt;/h2&gt;
&lt;p&gt;Het miningsysteem gebruikt append-only JSONL-ledgers voor conflictvrije multi-agent-werking:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Het JSONL-formaat met &lt;code&gt;merge=union&lt;/code&gt; in &lt;code&gt;.gitattributes&lt;/code&gt; betekent dat meerdere agents tegelijk commits kunnen classificeren zonder merge-conflicten. Elke regel is onafhankelijk.&lt;/p&gt;
&lt;h2 id=&quot;validatiegates&quot;&gt;Validatiegates&lt;/h2&gt;
&lt;p&gt;Voor elke miningsessie draaien we validatie:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit controleert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Geldigheid van het SHA-formaat&lt;/li&gt;
&lt;li&gt;Naleving van het decision-ID-formaat&lt;/li&gt;
&lt;li&gt;Geen dubbele items voor dezelfde SHA&lt;/li&gt;
&lt;li&gt;Dat gerefereerde beslissingen daadwerkelijk bestaan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Na classificatie valideren we opnieuw voordat we wijzigingen committen.&lt;/p&gt;
&lt;h2 id=&quot;waarom-dit-ertoe-doet&quot;&gt;Waarom dit ertoe doet&lt;/h2&gt;
&lt;p&gt;De feedbacklus die we hebben gebouwd, lost verschillende problemen op:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voor nieuwe teamleden:&lt;/strong&gt; In plaats van te vragen “waarom hebben we X gedaan?” kunnen ze het beslissingsregister doorzoeken. De context blijft bewaard.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voor AI-agents:&lt;/strong&gt; Ze opereren niet in een vacuüm. Ze kunnen institutionele kennis bevragen voordat ze aanbevelingen doen. Wanneer hun wordt gevraagd een nieuwe pipelinestage toe te voegen, kunnen ze het DuckDB-patroon ontdekken en volgen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voor architecturale consistentie:&lt;/strong&gt; Beslissingen zijn expliciet en doorzoekbaar. Wanneer iemand een aanpak voorstelt die in strijd is met een bestaande beslissing, kan het systeem het conflict naar boven halen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voor changeloggeneratie:&lt;/strong&gt; Release notes zijn geen last-minute gehaast geregel. Ze zijn een bijproduct van continue classificatie tijdens de ontwikkeling.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Voor onboarding:&lt;/strong&gt; Nieuwe agents erven de volledige context van de codebase. Ze zien niet alleen de code — ze zien ook de beslissingen die haar vormgaven.&lt;/p&gt;
&lt;h2 id=&quot;huidige-status&quot;&gt;Huidige status&lt;/h2&gt;
&lt;p&gt;Op dit moment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15.637 commits&lt;/strong&gt; verwerkt door de pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 architecturale beslissingen&lt;/strong&gt; geëxtraheerd en gedocumenteerd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.799 changelog-items&lt;/strong&gt; vastgelegd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100% dekking&lt;/strong&gt; over beide domeinen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elke commit sinds we begonnen is geclassificeerd. Het institutionele geheugen is compleet en doorzoekbaar.&lt;/p&gt;
&lt;h2 id=&quot;aan-de-slag&quot;&gt;Aan de slag&lt;/h2&gt;
&lt;p&gt;Als je iets vergelijkbaars wilt implementeren:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Begin met conventional commits.&lt;/strong&gt; De miningpipeline werkt het best wanneer commits gestructureerde prefixes hebben (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Definieer je domeinen.&lt;/strong&gt; Wij gebruiken domeinen zoals &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. Die organiseren beslissingen per gebied.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bouw de classificatiegewoonte op.&lt;/strong&gt; Mining werkt wanneer teams regelmatig commits classificeren. Batchverwerking met LLM-ondersteuning helpt bij het opschalen.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Maak beslissingen bevraagbaar.&lt;/strong&gt; De waarde stapelt zich op wanneer agents beslissingen kunnen doorzoeken via de CLI. Structureer je output voor machineconsumptie.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sluit de lus.&lt;/strong&gt; Beslissingen moeten toekomstig werk beïnvloeden. Neem decision-referenties op in agentinstructies en code-reviewchecklists.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Het doel is geen perfecte documentatie. Het doel is het &lt;em&gt;waarom&lt;/em&gt; achter wijzigingen toegankelijk maken voor zowel mensen als AI, vandaag en over zes maanden. Wanneer wijzigingen institutioneel geheugen worden, bouwen teams voort op gevestigde patronen in plaats van ze opnieuw uit te vinden.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;De miningworkflow maakt deel uit van onze orchestration engine, specifiek de context engine-module in ons orchestration-package.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Skill mining: van 3.500 kandidaten naar 466 capaciteiten</title><link>https://maguyva.ai/nl/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/skill-mining-3500-and-counting</guid><description>We screenden 3.500 skillkandidaten en namen er 466 over. Een systematische mining- en ingestielus voor het bouwen van een coherente AI-agent-skillbibliotheek op schaal.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cijfers in deze post weerspiegelen het systeem op het moment van publicatie (januari 2026). Zie onze &lt;a href=&quot;https://maguyva.ai/nl/team&quot;&gt;teampagina&lt;/a&gt; voor actuele cijfers.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;het-probleem-van-de-3500-skills&quot;&gt;Het probleem van de 3.500 skills&lt;/h2&gt;
&lt;p&gt;Toen we begonnen met het bouwen van een agent-orchestratiesysteem, stonden we voor een interessante uitdaging: er zijn duizenden potentiële skills verspreid over het AI-ecosysteem. GitHub-repositories, vendordocumentatie, communityprojecten, interne patronen — skills bestaan overal. Maar welke zijn belangrijk? Welke werken? En hoe onderhoud je een coherente skillbibliotheek die agents daadwerkelijk kunnen gebruiken?&lt;/p&gt;
&lt;p&gt;Ons antwoord: een systematische mining- en ingestielus.&lt;/p&gt;
&lt;h2 id=&quot;de-cijfers-vandaag&quot;&gt;De cijfers vandaag&lt;/h2&gt;
&lt;p&gt;Iets meer dan drie maanden nadat Anthropic Agent Skills lanceerde op 16 oktober 2025, is dit waar we stonden toen deze post werd gepubliceerd op 27 januari 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metriek&lt;/th&gt;
&lt;th&gt;Aantal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Geïdentificeerde kandidaten&lt;/td&gt;
&lt;td&gt;3.500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overgenomen skills&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor-skills&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interne skills&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Actieve vendors&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemiddeld aantal tokens per skill&lt;/td&gt;
&lt;td&gt;2.834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gerefereerde tools&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unieke tags&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;We hebben meer dan 3.500 skillkandidaten beoordeeld. We hebben er 466 overgenomen. Dat is een adoptiepercentage van 13% — en die selectiviteit is met opzet.&lt;/p&gt;
&lt;h2 id=&quot;het-kennis-tiersysteem&quot;&gt;Het kennis-tiersysteem&lt;/h2&gt;
&lt;p&gt;Niet alle skills zijn gelijk. We organiseren ze in vijf kennislagen (K0-K4), elk met een andere reikwijdte van toepasbaarheid:&lt;/p&gt;
&lt;h3 id=&quot;k0-foundations-universeel&quot;&gt;K0: Foundations (universeel)&lt;/h3&gt;
&lt;p&gt;Skills die elke agent zou moeten hebben. Deze vertegenwoordigen “goede denker”-capaciteiten die overal werken.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;K0-skills zijn overdraagbaar naar elk project, elk domein, elke stack. Ze coderen universele cognitieve patronen.&lt;/p&gt;
&lt;h3 id=&quot;k1-identities-discipline&quot;&gt;K1: Identities (discipline)&lt;/h3&gt;
&lt;p&gt;“Goede engineer”- of “goede onderzoeker”-skills die van toepassing zijn over projecten heen binnen een discipline.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-domains-vakexpertise&quot;&gt;K2: Domains (vakexpertise)&lt;/h3&gt;
&lt;p&gt;“Goede database-expert”- of “goede security-engineer”-skills die overdraagbaar zijn binnen een vakgebied.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-stacks-technologie&quot;&gt;K3: Stacks (technologie)&lt;/h3&gt;
&lt;p&gt;“Goede Supabase-gebruiker”- of “goede Cloudflare-developer”-skills voor specifieke technologiestacks.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-project-organisatie&quot;&gt;K4: Project (organisatie)&lt;/h3&gt;
&lt;p&gt;Skills specifiek voor onze organisatie en workflows.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;de-mininglus&quot;&gt;De mininglus&lt;/h2&gt;
&lt;h3 id=&quot;fase-1-ontdekking&quot;&gt;Fase 1: ontdekking&lt;/h3&gt;
&lt;p&gt;Skills komen overal vandaan:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vendor-repositories&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase en communitybijdragers publiceren skillcollecties. We volgen 25+ vendor-roots.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Communityprojecten&lt;/strong&gt;: GitHub staat vol met Claude Code-templates, agentpatronen en workflowdefinities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interne patronen&lt;/strong&gt;: Terwijl ons team problemen oplost, ontstaan patronen. Die worden geformaliseerd tot skills.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentatiemining&lt;/strong&gt;: technische documentatie bevat vaak impliciete skills — procedures, checklists, beslisbomen.&lt;/p&gt;
&lt;p&gt;Ontdekking is continu. We gebruiken een skillbacklog om kandidaten bij te houden vóór formele evaluatie.&lt;/p&gt;
&lt;h3 id=&quot;fase-2-evaluatie&quot;&gt;Fase 2: evaluatie&lt;/h3&gt;
&lt;p&gt;Elke kandidaat wordt aan dezelfde beoordelingscriteria getoetst:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Aan alle vijf productcriteria moet worden voldaan. Daarom wordt 87% van de kandidaten afgewezen.&lt;/p&gt;
&lt;p&gt;Vervolgens doorloopt elke kandidaat een aparte trust review. We behandelen een officiële vendor-repository, een bekende community-maintainer en een willekeurige GitHub-repo niet als gelijkwaardige sources of truth.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vertrouwde vendors krijgen een lichtere herkomstreview, maar geen vrijbrief. Niet-vertrouwde of onbekende bronnen krijgen een diepere handmatige audit, en we voeren gebundelde scripts pas uit nadat ze zijn gelezen, afgebakend en als veilig geclassificeerd.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gap-analyse&lt;/strong&gt;: vóór we iets overnemen, doorzoeken we ons register:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Als we het al hebben, hebben we het niet nodig. Als we iets vergelijkbaars hebben, mergen we het misschien liever dan het over te nemen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scoren op diepgang en standaarden&lt;/strong&gt;: we scoren ook hoe volledig een kandidaat het agent-skill-model gebruikt. Een losstaande &lt;code&gt;SKILL.md&lt;/code&gt; kan nog altijd nuttig zijn, maar diepere skills zijn waardevoller wanneer ze instructies scheiden van referenties, scripts en assets, zoals &lt;code&gt;agentskills.io&lt;/code&gt; aanmoedigt.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GitHub-sterren kunnen een credibility-score een beetje verhogen, maar ze redden nooit een oppervlakkige of onveilige skill. Een repo met veel sterren en één vage &lt;code&gt;SKILL.md&lt;/code&gt; met ondoorzichtige scripts scoort lager dan een kleinere repo met een precieze beschrijving, samengestelde &lt;code&gt;references/&lt;/code&gt;, en atomaire helpers die de volledige skillcapaciteit daadwerkelijk benutten.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Structurele analyse&lt;/strong&gt;: we controleren skillkwaliteit:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Als een kandidaat scripts bevat, wordt die review strenger. Een goede skill is niet alleen nuttig; hij moet ook leesbaar, afgebakend en veilig zijn om aan een agent te geven. Dat veiligheidsfilter alleen al diskwalificeert een aanzienlijk deel van verder interessante kandidaten.&lt;/p&gt;
&lt;h3 id=&quot;fase-3-ingestie&quot;&gt;Fase 3: ingestie&lt;/h3&gt;
&lt;p&gt;Wanneer een skill de evaluatie doorstaat, komt hij in het register. Maar skills worden nooit ongewijzigd overgenomen. Ze worden aangepast om in ons systeem te passen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aanpassingen bij overname&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Metadatanormalisatie&lt;/strong&gt;: elke skill krijgt ons frontmatter-schema&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;K-tiertoewijzing&lt;/strong&gt;: skills worden in de juiste kennislaag geplaatst&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tagverrijking&lt;/strong&gt;: tags worden toegevoegd voor vindbaarheid&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tooldeclaratie&lt;/strong&gt;: toegestane tools worden expliciet gedeclareerd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sectie-uitlijning&lt;/strong&gt;: inhoud wordt geherstructureerd om overeen te komen met onze template&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Een typische skill-YAML na ingestie:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-4-scopetoewijzing&quot;&gt;Fase 4: scopetoewijzing&lt;/h3&gt;
&lt;p&gt;Skills worden toegewezen aan scopes — categorieën die bepalen welke agents welke skills laden:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Agents declareren hun scopes, en skills worden automatisch toegewezen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-5-materialisatie&quot;&gt;Fase 5: materialisatie&lt;/h3&gt;
&lt;p&gt;Skills bestaan niet als YAML in productie. Ze worden gerenderd naar SKILL.md-bestanden die Claude Code kan laden:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit commando:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Leest alle skill-YAML-definities&lt;/li&gt;
&lt;li&gt;Rendert ze via Jinja-templates&lt;/li&gt;
&lt;li&gt;Schrijft SKILL.md-bestanden naar &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Organiseert per K-tier (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;De uiteindelijke outputstructuur:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;het-dormant-scope-patroon&quot;&gt;Het dormant-scope-patroon&lt;/h2&gt;
&lt;p&gt;Een van onze krachtigste patronen is “overgenomen-maar-niet-geladen”-skills. We noemen deze dormant scopes.&lt;/p&gt;
&lt;p&gt;Denk aan scientific-computing-skills uit de k-dense-scientific-repository. We hebben er 120+ overgenomen die bio-informatica, scheikunde, quantum computing en klinische informatica bestrijken. Maar de meeste van onze agents hebben geen molecular docking of gene expression analysis nodig.&lt;/p&gt;
&lt;p&gt;In plaats van alle 120 skills in elke agent te laden (wat contextvensters opblaast), gaan we als volgt te werk:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Neem&lt;/strong&gt; de skills &lt;strong&gt;op&lt;/strong&gt; met een specifieke scope (bijv. &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Houd ze &lt;strong&gt;dormant&lt;/strong&gt; — geregistreerd maar niet geladen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activeer&lt;/strong&gt; ze alleen wanneer een agent die scope declareert&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit patroon laat ons 466 skills in het register hebben, terwijl typische agents er slechts 40-60 relevante laden.&lt;/p&gt;
&lt;h2 id=&quot;skilltypes&quot;&gt;Skilltypes&lt;/h2&gt;
&lt;p&gt;Skills komen in drie cognitieve patronen:&lt;/p&gt;
&lt;h3 id=&quot;workflow&quot;&gt;Workflow&lt;/h3&gt;
&lt;p&gt;Geordende procedurele stappen: “1. Doe X, 2. Dan Y, 3. Tot slot Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;discipline&quot;&gt;Discipline&lt;/h3&gt;
&lt;p&gt;Gedragsmatige guardrails: “Doe altijd X”, “Doe nooit Y”, “Geef de voorkeur aan Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;checklist&quot;&gt;Checklist&lt;/h3&gt;
&lt;p&gt;Verificatiecriteria: “Bevestig X”, “Verifieer Y”, “Controleer Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;kwaliteitsgates&quot;&gt;Kwaliteitsgates&lt;/h2&gt;
&lt;p&gt;Elke skill moet validatie doorstaan voordat hij wordt uitgeleverd:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Beschrijvingen moeten 50-400 tekens zijn met triggerzinnen (“Use when…”, “When you need…”) zodat Claude Code weet wanneer hij ze moet voorstellen.&lt;/p&gt;
&lt;p&gt;We valideren continu:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;het-vendor-ecosysteem&quot;&gt;Het vendor-ecosysteem&lt;/h2&gt;
&lt;p&gt;Onze 373 vendor-skills komen van:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Skills&lt;/th&gt;
&lt;th&gt;Domein&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Cloudservices&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Documentgeneratie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Edge computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;Scientific computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Data science&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Browserautomatisering&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Elke vendor-root wordt gedeclareerd in metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Wanneer &lt;code&gt;orkestra sync&lt;/code&gt; draait, worden vendor-skills gesymlinkt naar &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; met hun provider-namespace.&lt;/p&gt;
&lt;h2 id=&quot;wat-we-hebben-geleerd&quot;&gt;Wat we hebben geleerd&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Selectiviteit loont.&lt;/strong&gt; Het is verleidelijk om alles over te nemen wat er nuttig uitziet. Maar elke skill kost tokens. Met gemiddeld 2.834 tokens per skill doet bloat snel pijn. Ons adoptiepercentage van 13% houdt agents slank.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Structuur maakt ontdekking mogelijk.&lt;/strong&gt; Het K-tiersysteem is niet zomaar organisatie — het gaat om overdraagbaarheid. K0-skills kunnen overal worden hergebruikt. K4-skills zijn opzettelijk projectspecifiek. Deze helderheid helpt zowel mensen als agents vinden wat ze nodig hebben.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dormant scopes schalen.&lt;/strong&gt; Je kunt honderden skills overnemen zonder ze allemaal te laden. Scopes laten je een uitgebreid register bouwen terwijl de contextvensters van individuele agents behapbaar blijven.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aanpassing bij overname is essentieel.&lt;/strong&gt; Ruwe vendor-skills passen zelden in jouw systeem. Het ingestieproces — metadata toevoegen, tiers toewijzen, tags verrijken — laat externe skills intern werken.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mining is continu.&lt;/strong&gt; Het getal van 3.500 blijft groeien. Nieuwe vendor-repo’s verschijnen. Communitypatronen ontstaan. Interne workflows krijgen vaste vorm. De lus stopt nooit.&lt;/p&gt;
&lt;h2 id=&quot;wat-komt-hierna&quot;&gt;Wat komt hierna&lt;/h2&gt;
&lt;p&gt;We werken aan verschillende verbeteringen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Geautomatiseerde gap-detectie&lt;/strong&gt;: waarschuwen wanneer veelvoorkomende agentfouten kunnen worden verholpen door een niet-overgenomen skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill-deprecationworkflows&lt;/strong&gt;: formeel proces voor het uitfaseren van skills die zijn vervangen of niet worden gebruikt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-skill-afhankelijkheden&lt;/strong&gt;: expliciete declaratie van skillvereisten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gebruiksanalytics&lt;/strong&gt;: bijhouden welke skills agents daadwerkelijk aanroepen versus alleen laden&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;De skill-mininglus is infrastructuur. Het is niet glamoureus. Maar het is wat 41 agents coherent laat samenwerken met 466 capaciteiten terwijl ze binnen contextlimieten blijven.&lt;/p&gt;
&lt;p&gt;Zo brengen we 3.500 kandidaten terug tot 466 skills. Niet door 3.000 te negeren — door ze systematisch te evalueren en alleen over te nemen wat werkt.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Wil je het skillsysteem in actie zien? Bekijk &lt;code&gt;uv run orkestra skills list&lt;/code&gt; om ons huidige register te verkennen.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Progressive disclosure: CLI-vensters naar agentsystemen</title><link>https://maguyva.ai/nl/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/progressive-disclosure-cli-into-agents</guid><description>Agentsystemen zijn standaard ondoorzichtig. Progressive disclosure geeft operators gelaagde CLI-weergaven, van snelle statuscontroles tot volledige agent-internals en decision traces.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cijfers in deze post weerspiegelen het systeem op het moment van publicatie (januari 2026). Zie onze &lt;a href=&quot;https://maguyva.ai/nl/team&quot;&gt;teampagina&lt;/a&gt; voor actuele cijfers.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agentsystemen zijn van nature ondoorzichtig. Ze nemen beslissingen, roepen tools aan en coördineren werk over tientallen specialisten heen. Maar wanneer er iets misgaat — of wanneer je simpelweg wilt begrijpen wat er gebeurt — waar kijk je dan?&lt;/p&gt;
&lt;p&gt;Het antwoord is progressive disclosure: een gelaagde interface die precies zoveel complexiteit onthult als je nodig hebt, precies wanneer je het nodig hebt.&lt;/p&gt;
&lt;h2 id=&quot;het-ondoorzichtigheidsprobleem&quot;&gt;Het ondoorzichtigheidsprobleem&lt;/h2&gt;
&lt;p&gt;Een modern agent-orchestratiesysteem kan het volgende hebben:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ gespecialiseerde agents, elk met eigen capaciteiten&lt;/li&gt;
&lt;li&gt;700+ skills die interne automatisering en vendor-integraties omvatten&lt;/li&gt;
&lt;li&gt;470+ architecturale beslissingen die gedrag vormgeven&lt;/li&gt;
&lt;li&gt;Tientallen MCP-toolservers die externe capaciteiten bieden&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deze complexiteit is opzettelijk. Agents hebben toegang tot rijke context nodig — domeinkennis, code-intelligentie, databaseschema’s — om goede beslissingen te nemen. Maar diezelfde rijkdom creëert een zichtbaarheidsprobleem.&lt;/p&gt;
&lt;p&gt;Hoe weet je welke agent databasemigraties afhandelt? Welke beslissingen hebben het rankinggedrag van het zoeksysteem gevormd? Tot welke tools heeft de architecture advisor toegang?&lt;/p&gt;
&lt;p&gt;Zonder gestructureerde toegang rest je niets anders dan broncode te lezen of te hopen dat de documentatie actueel is.&lt;/p&gt;
&lt;h2 id=&quot;progressive-disclosure-als-architectuur&quot;&gt;Progressive disclosure als architectuur&lt;/h2&gt;
&lt;p&gt;Progressive disclosure is niet zomaar een UI-patroon. Het is een architecturaal principe: organiseer informatie in lagen, elk dieper dan de vorige, zodat gebruikers kunnen stoppen op het niveau dat hun vraag beantwoordt.&lt;/p&gt;
&lt;p&gt;Voor agentsystemen vertaalt zich dat naar CLI-commando’s op toenemende diepte:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Niveau&lt;/th&gt;
&lt;th&gt;Commando&lt;/th&gt;
&lt;th&gt;Beantwoorde vraag&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Is alles gezond?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Welke agents bestaan er?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wat doet deze agent?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Waarom werkt het op deze manier?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Maguyva MCP-tools&lt;/td&gt;
&lt;td&gt;Laat me de code zien.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Elk niveau beantwoordt een natuurlijke vervolgvraag. Je hoeft zelden direct naar niveau 5 te springen.&lt;/p&gt;
&lt;h2 id=&quot;niveau-1-systeemgezondheid&quot;&gt;Niveau 1: systeemgezondheid&lt;/h2&gt;
&lt;p&gt;De eerste vraag is altijd: werkt alles?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Eén commando. Vier cijfers. Genoeg om te weten dat het systeem geconfigureerd is en de registers gevuld zijn.&lt;/p&gt;
&lt;p&gt;Als een agentaantal onverwacht daalt of skills niet laden, zie je dat hier het eerst. Geen logs induiken nodig.&lt;/p&gt;
&lt;h2 id=&quot;niveau-2-agentinventaris&quot;&gt;Niveau 2: agentinventaris&lt;/h2&gt;
&lt;p&gt;Zodra je weet dat het systeem gezond is, is de volgende vraag: wat is er beschikbaar?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit geeft gestructureerde data terug — agentnamen, beschrijvingen, modelvoorkeuren, domeindekking. De output is standaard JSON, wat het makkelijk maakt om te pipen naar &lt;code&gt;jq&lt;/code&gt; voor filtering:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Wil je agents die databasewerk afhandelen? Het zoekcommando maakt het specifieker:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit scant namen, beschrijvingen en capaciteiten. Je vindt de juiste specialist zonder 40 agentdefinities te lezen.&lt;/p&gt;
&lt;h2 id=&quot;niveau-3-agent-deep-dive&quot;&gt;Niveau 3: agent-deep-dive&lt;/h2&gt;
&lt;p&gt;Een relevant lijkende agent gevonden? Het commando &lt;code&gt;info&lt;/code&gt; onthult alles:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;De output bevat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt;: naam, categorie, modelvoorkeur, beschrijving&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domains&lt;/strong&gt;: welke kennisgebieden deze agent bestrijkt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: karaktertrekken (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Toolgidsen&lt;/strong&gt;: welke tooldocumentatie in de context wordt geïnjecteerd&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools&lt;/strong&gt;: de volledige lijst MCP-tools die deze agent beschikbaar heeft&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hier is een voorbeeld van wat je ziet:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit vertelt je precies wat de agent kan doen. Geen broncode nodig.&lt;/p&gt;
&lt;h2 id=&quot;niveau-4-decision-archaeology&quot;&gt;Niveau 4: decision archaeology&lt;/h2&gt;
&lt;p&gt;Agents gedragen zich volgens gedocumenteerde beslissingen. Wanneer je wilt begrijpen &lt;em&gt;waarom&lt;/em&gt; iets op een bepaalde manier werkt, is het decisions-register de source of truth.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit geeft de bijpassende architecturale beslissingen terug:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Van elke beslissing is de volledige herkomst vastgelegd — wanneer die werd genomen, waarom, welke trade-offs werden overwogen, welke commits haar implementeerden:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit is architecturale documentatie die actueel blijft omdat ze wordt gemined uit commits, niet handmatig onderhouden.&lt;/p&gt;
&lt;h2 id=&quot;niveau-5-directe-code-intelligentie&quot;&gt;Niveau 5: directe code-intelligentie&lt;/h2&gt;
&lt;p&gt;Wanneer je de daadwerkelijke implementatie moet zien — niet metadata erover — bieden de MCP-tools van Maguyva directe toegang.&lt;/p&gt;
&lt;p&gt;Vanuit een agentsessie:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit routeert automatisch over semantisch, tekst- en AST-zoeken om relevante code te vinden. Voor specifieke symbolen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Voor afhankelijkheidsanalyse:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit zijn geen simpele grep-vervangers. Ze zijn graafbewust, semantisch geïndexeerd, en geïntegreerd met dezelfde code-intelligentie die de agents zelf aandrijft.&lt;/p&gt;
&lt;h2 id=&quot;uniform-zoeken-over-registers-heen&quot;&gt;Uniform zoeken over registers heen&lt;/h2&gt;
&lt;p&gt;Soms weet je niet welk register het antwoord bevat. Het uniforme zoeken bestrijkt alles:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 matches over vijf registers. De samenvatting vertelt je waar je verder moet zoeken. Verwijder &lt;code&gt;--summary&lt;/code&gt; voor gedetailleerde resultaten, of voeg &lt;code&gt;--limit 5&lt;/code&gt; toe om de output behapbaar te houden.&lt;/p&gt;
&lt;h2 id=&quot;waarom-dit-ertoe-doet&quot;&gt;Waarom dit ertoe doet&lt;/h2&gt;
&lt;p&gt;Progressive disclosure gaat niet alleen over gemak. Het verandert hoe je met complexe systemen omgaat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Debuggen wordt behapbaar.&lt;/strong&gt; Wanneer een agent een onverwachte beslissing neemt, grep je niet door logs. Je controleert tot welke tools hij toegang heeft (&lt;code&gt;agents info&lt;/code&gt;), welke beslissingen zijn gedrag vormgeven (&lt;code&gt;decisions search&lt;/code&gt;), en traceert indien nodig de implementatie (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Onboarding versnelt.&lt;/strong&gt; Nieuwe teamleden hoeven niet de hele codebase te lezen. Ze beginnen met &lt;code&gt;system status&lt;/code&gt;, verkennen met &lt;code&gt;agents list&lt;/code&gt;, en gaan pas dieper wanneer ze iets tegenkomen dat ze niet begrijpen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentatie blijft actueel.&lt;/strong&gt; Omdat de CLI leest uit dezelfde registers die de agents configureren, is de output altijd accuraat. Er is geen drift tussen wat de documentatie zegt en wat het systeem doet.&lt;/p&gt;
&lt;h2 id=&quot;de-cli-als-interface&quot;&gt;De CLI als interface&lt;/h2&gt;
&lt;p&gt;We hadden een webdashboard kunnen bouwen. We hadden uitgebreide documentatie kunnen schrijven. In plaats daarvan bouwden we een CLI die leest uit de source of truth.&lt;/p&gt;
&lt;p&gt;De CLI heeft voordelen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Composeerbaar&lt;/strong&gt;: pipe output door &lt;code&gt;jq&lt;/code&gt;, integreer met scripts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scriptbaar&lt;/strong&gt;: automatiseer checks, genereer rapporten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snel&lt;/strong&gt;: geen paginaladingen, geen authenticatieflows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accuraat&lt;/strong&gt;: leest de daadwerkelijke configuratie, geen gecachte representatie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voor systemen waar correctheid belangrijker is dan esthetiek, wint de CLI.&lt;/p&gt;
&lt;h2 id=&quot;je-eigen-progressive-disclosure-bouwen&quot;&gt;Je eigen progressive disclosure bouwen&lt;/h2&gt;
&lt;p&gt;Als je agentsystemen bouwt, bedenk dan hoe gebruikers ze zullen inspecteren:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Begin met health checks.&lt;/strong&gt; Eén commando dat je vertelt of dingen werken.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bied inventarisweergaven.&lt;/strong&gt; Geef een overzicht van wat er bestaat voordat je uitlegt wat het doet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maak gerichte queries mogelijk.&lt;/strong&gt; Zoeken verslaat bladeren op schaal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Toon herkomst.&lt;/strong&gt; Laat gebruikers beslissingen terugtraceren naar hun oorsprong.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Koppel aan code-intelligentie.&lt;/strong&gt; Uiteindelijk moeten gebruikers de implementatie kunnen zien.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Elke laag beantwoordt een vervolgvraag. Bouw ze op volgorde van frequentie — de meeste gebruikers stoppen bij laag 2 of 3. Alleen powerusers bereiken laag 5.&lt;/p&gt;
&lt;p&gt;Het doel is niet om alles bloot te leggen. Het is om precies te tonen wat nodig is, precies wanneer het nodig is. Dat is progressive disclosure toegepast op agentarchitectuur.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: AI-agents verankeren in de realiteit</title><link>https://maguyva.ai/nl/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/ground-truths-anchoring-ai-to-reality</guid><description>AI-agents hallucineren met overtuiging. Ground truths zijn geversioneerde, afgebakende feiten die agentgedrag verankeren in de realiteit. Dit is hoe we ze hebben gebouwd en afdwingen.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cijfers in deze post weerspiegelen het systeem op het moment van publicatie (januari 2026). Zie onze &lt;a href=&quot;https://maguyva.ai/nl/team&quot;&gt;teampagina&lt;/a&gt; voor actuele cijfers.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI-agents zijn opmerkelijk capabel. Ze kunnen redeneren, synthetiseren en genereren. Maar ze hebben een fundamentele zwakte: ze verzinnen dingen. Niet kwaadwillig, maar wel overtuigend. Een agent kan API-parameters bedenken die niet bestaan, verwijzen naar configuraties die nooit zijn gedefinieerd, of patronen uit zijn trainingsdata toepassen die in strijd zijn met jouw daadwerkelijke architectuur.&lt;/p&gt;
&lt;p&gt;De standaardoplossing is “geef de agent meer context”. Maar context kan tegenstrijdig zijn. Documentatie raakt los van de implementatie. Comments liegen. Zelfs code kan misleidend zijn wanneer die wordt gelezen zonder de bedoeling te begrijpen.&lt;/p&gt;
&lt;p&gt;We hadden iets explicieters nodig. Iets dat niet genegeerd of verkeerd geïnterpreteerd kon worden. Iets dat agents zou verankeren in verifieerbare realiteit.&lt;/p&gt;
&lt;p&gt;We noemen ze Ground Truths.&lt;/p&gt;
&lt;h2 id=&quot;wat-is-een-ground-truth&quot;&gt;Wat is een Ground Truth?&lt;/h2&gt;
&lt;p&gt;Een ground truth is een expliciete, geversioneerde feitelijke bewering die agents moeten respecteren. Het is geen documentatie. Het is geen comment. Het is een first-class entiteit in het systeem met:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Een unieke identifier&lt;/strong&gt; (zoals &lt;code&gt;GT-MAG-015&lt;/code&gt; of &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Een levenscyclusstatus&lt;/strong&gt; (current, tentative, of deprecated)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Een scope&lt;/strong&gt; (platformbreed, package-specifiek, of domeingebonden)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bewijs&lt;/strong&gt; (bestandspaden, URL’s, of referenties die de bewering staven)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent guidance&lt;/strong&gt; (expliciete do/avoid-instructies)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hier is een voorbeeld uit ons Maguyva code-intelligentieplatform:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit is geen proza. Het is een contract. Wanneer een agent deze ground truth tegenkomt, weet hij:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Het standaardgedrag is deterministisch (lege resultaten, geen vage gissingen)&lt;/li&gt;
&lt;li&gt;Er zijn specifieke parameters (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) met gedefinieerd gedrag&lt;/li&gt;
&lt;li&gt;Er bestaat bewijs in specifieke bestanden dat geverifieerd kan worden&lt;/li&gt;
&lt;li&gt;De bewering is geverifieerd op een specifieke datum&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;de-anatomie-van-een-ground-truth-register&quot;&gt;De anatomie van een Ground Truth-register&lt;/h2&gt;
&lt;p&gt;Ground truths leven in YAML-registers onder &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Elk package of domein kan zijn eigen register hebben. De structuur is:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Het register bevat metadata over de collectie zelf, renderconfiguratie voor documentatiegeneratie, en de beweringen zelf. Elke bewering volgt een strikt schema dat wordt gevalideerd door Pydantic-modellen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;hoe-agents-toegang-krijgen-tot-ground-truths&quot;&gt;Hoe agents toegang krijgen tot Ground Truths&lt;/h2&gt;
&lt;p&gt;Ground truths worden via meerdere kanalen beschikbaar gesteld:&lt;/p&gt;
&lt;h3 id=&quot;1-gerenderde-documentatie&quot;&gt;1. Gerenderde documentatie&lt;/h3&gt;
&lt;p&gt;Het commando &lt;code&gt;orkestra sync&lt;/code&gt; transformeert YAML-registers naar leesbare markdown:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit genereert &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt;-bestanden die worden opgenomen in de agentcontext. De gerenderde output groepeert beweringen op status en categorie:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-cli-zoeken&quot;&gt;2. CLI-zoeken&lt;/h3&gt;
&lt;p&gt;Agents met shelltoegang kunnen ground truths programmatisch doorzoeken:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;De zoekfunctie scoort matches over meerdere velden met gewogen relevantie:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-contextcompositie&quot;&gt;3. Contextcompositie&lt;/h3&gt;
&lt;p&gt;Wanneer agents worden gerenderd vanuit YAML-definities, kan hun context verwijzen naar ground truth-registers:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit zorgt ervoor dat relevante ground truths worden geladen voordat de agent aan het werk gaat.&lt;/p&gt;
&lt;h2 id=&quot;categorieën-van-ground-truths&quot;&gt;Categorieën van Ground Truths&lt;/h2&gt;
&lt;p&gt;Als we over onze registers heen kijken, clusteren ground truths in verschillende patronen:&lt;/p&gt;
&lt;h3 id=&quot;productprincipes&quot;&gt;Productprincipes&lt;/h3&gt;
&lt;p&gt;Beperkingen op wat het product wel en niet is:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maguyva is read-only ten aanzien van gebruikersrepositories; het enige niet-herbouwbare asset is de betaalde embeddings-cache.” (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;architectuurgrenzen&quot;&gt;Architectuurgrenzen&lt;/h3&gt;
&lt;p&gt;Waar verantwoordelijkheden liggen en waarom:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“De grenzen tussen pipeline en Maguyva zijn opzettelijk: pipeline is herbruikbaar, Maguyva bevat codespecifieke logica, en CQRS scheidt stage-writes van server-reads.” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;anti-hallucinatieregels&quot;&gt;Anti-hallucinatieregels&lt;/h3&gt;
&lt;p&gt;Expliciete regels die toolcontracten deterministisch houden, zodat agents niet hoeven te gissen:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Fuzzy symboolmatching gebeurt opt-in via &lt;code&gt;find_similar=true&lt;/code&gt;. Standaardgedrag geeft lege resultaten voor niet-bestaande symbolen; &lt;code&gt;exact_match=true&lt;/code&gt; dwingt strikte matching af en schakelt alle fuzzy fallbacks uit.” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;kwaliteitsgates&quot;&gt;Kwaliteitsgates&lt;/h3&gt;
&lt;p&gt;Standaarden die gehandhaafd moeten worden:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Wijzigingen aan gedeelde infrastructuur (post_filters.py, relationship extractors, gedeelde handlers) MOETEN vóór commit worden gevalideerd tegen ALLE ondersteunde talen via full manifest generation. Een validatie voor één taal is onvoldoende voor gedeelde code.” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;codepatronen&quot;&gt;Codepatronen&lt;/h3&gt;
&lt;p&gt;Implementatievereisten:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Gebruik &lt;code&gt;asyncio.to_thread()&lt;/code&gt; voor CPU-bound werk in async-contexten; het verouderde &lt;code&gt;loop.run_in_executor()&lt;/code&gt;-patroon mag niet worden gebruikt in nieuwe code.” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;de-levenscyclus-van-een-ground-truth&quot;&gt;De levenscyclus van een Ground Truth&lt;/h2&gt;
&lt;p&gt;Ground truths zijn niet statisch. Ze evolueren via een gedefinieerde levenscyclus:&lt;/p&gt;
&lt;h3 id=&quot;tentative&quot;&gt;Tentative&lt;/h3&gt;
&lt;p&gt;Een voorgestelde waarheid die wordt geëvalueerd. De bewering is vastgelegd maar kan nog wijzigen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;current&quot;&gt;Current&lt;/h3&gt;
&lt;p&gt;Een geverifieerde waarheid die agents moeten respecteren. Het bewijs is gevalideerd:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;deprecated&quot;&gt;Deprecated&lt;/h3&gt;
&lt;p&gt;Een waarheid die niet langer van toepassing is. Bewaard als historische referentie met een verwijzing naar wat ervoor in de plaats is gekomen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;waarom-niet-gewoon-documentatie&quot;&gt;Waarom niet gewoon documentatie?&lt;/h2&gt;
&lt;p&gt;Documentatie dient een ander doel. Ze legt uit. Ze onderwijst. Ze mag vaag zijn, mag kwalificaties gebruiken zoals “over het algemeen” of “doorgaans”.&lt;/p&gt;
&lt;p&gt;Ground truths mogen niet vaag zijn. Het zijn beweringen. Ze gelden, of ze gelden niet.&lt;/p&gt;
&lt;p&gt;Bekijk het verschil:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentatie:&lt;/strong&gt; “De API geeft over het algemeen lege resultaten wanneer een symbool niet wordt gevonden, hoewel fuzzy matching in sommige configuraties ingeschakeld kan zijn.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; “Standaardgedrag geeft lege resultaten voor niet-bestaande symbolen; &lt;code&gt;exact_match=true&lt;/code&gt; dwingt strikte matching af en schakelt alle fuzzy fallbacks uit.”&lt;/p&gt;
&lt;p&gt;De eerste is nuttig voor mensen die het systeem leren kennen. De tweede is bruikbaar voor agents die beslissingen nemen.&lt;/p&gt;
&lt;h2 id=&quot;agent-guidance-wat-te-doen-en-te-vermijden&quot;&gt;Agent guidance: wat te doen en te vermijden&lt;/h2&gt;
&lt;p&gt;Sommige ground truths bevatten expliciete agent guidance:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit neemt ambiguïteit weg. Een agent die dit leest, weet niet alleen wat waar is, maar ook welke acties die waarheid impliceert.&lt;/p&gt;
&lt;h2 id=&quot;verificatie-en-onderhoud&quot;&gt;Verificatie en onderhoud&lt;/h2&gt;
&lt;p&gt;Ground truths vereisen onderhoud. We houden bij:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: Wanneer iemand heeft bevestigd dat de bewering nog steeds klopt&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: Bestanden die de bewering staven (kunnen op bestaan worden gecontroleerd)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: Waar de waarheid vandaan komt (CLI-inspectie, architectuurreview, post-incident-leren)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Een ground truth met verouderde verificatiedatums of gebroken bewijslinks is een signaal om te onderzoeken. Of de waarheid is nog steeds geldig en heeft herverificatie nodig, of de realiteit is veranderd en de waarheid moet worden bijgewerkt.&lt;/p&gt;
&lt;h2 id=&quot;echte-voorbeelden-uit-productie&quot;&gt;Echte voorbeelden uit productie&lt;/h2&gt;
&lt;h3 id=&quot;beveiligingsgrens&quot;&gt;Beveiligingsgrens&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Deze ground truth voorkomt een klasse van misplaatste “beveiligingsverbeteringen” die het product zouden breken.&lt;/p&gt;
&lt;h3 id=&quot;nauwkeurigheid-op-extractiemoment&quot;&gt;Nauwkeurigheid op extractiemoment&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit kwam voort uit een pijnlijke ervaring. Agents patchten falende taalpakketten door validator-only filters toe te voegen die de testharness groener lieten ogen, terwijl de live Maguyva-extractor nog altijd de verkeerde edges uitzond. De regel dwingt fixes terug naar het echte pad: YAML-config, queries, of handlers.&lt;/p&gt;
&lt;h3 id=&quot;meerlaagse-filtering&quot;&gt;Meerlaagse filtering&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dit voorkomt dat agents filters op de verkeerde plek toevoegen, een veelvoorkomende fout die accuratesse-regressies veroorzaakte.&lt;/p&gt;
&lt;h2 id=&quot;integratie-met-het-orchestratiesysteem&quot;&gt;Integratie met het orchestratiesysteem&lt;/h2&gt;
&lt;p&gt;Ground truths zijn één laag van een breder contextsysteem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Architecturale beslissingen (ADR’s)&lt;/strong&gt; - Leggen vast waarom we aanpak A boven B kozen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truths&lt;/strong&gt; - Stellen vast wat op dit moment definitief waar is&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domeinpatronen&lt;/strong&gt; - Beschrijven hoe je dingen correct doet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anti-patronen&lt;/strong&gt; - Beschrijven wat je moet vermijden en waarom&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Een agent die in het systeem werkt, heeft toegang tot alle vier. Ground truths bieden het feitelijke anker, terwijl beslissingen de geschiedenis verklaren, patronen de implementatie sturen, en anti-patronen waarschuwen voor valkuilen.&lt;/p&gt;
&lt;h2 id=&quot;de-impact-meten&quot;&gt;De impact meten&lt;/h2&gt;
&lt;p&gt;Sinds we ground truths hebben geïntroduceerd, zien we:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Minder “repareer de gehallucineerde fix”-cycli&lt;/li&gt;
&lt;li&gt;Zelfverzekerdere agentbeslissingen wanneer feiten duidelijk zijn&lt;/li&gt;
&lt;li&gt;Betere PR-reviews omdat verwachtingen expliciet zijn&lt;/li&gt;
&lt;li&gt;Kortere onboardingtijd voor nieuwe agents (en mensen)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De investering in het onderhouden van ground truths betaalt zich terug in minder debuggen en helderdere systeemgrenzen.&lt;/p&gt;
&lt;h2 id=&quot;aan-de-slag&quot;&gt;Aan de slag&lt;/h2&gt;
&lt;p&gt;Om een ground truth toe te voegen aan jouw systeem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Maak een &lt;code&gt;ground_truths.yaml&lt;/code&gt; aan in de &lt;code&gt;ai_assets/reference/&lt;/code&gt;-directory van je package&lt;/li&gt;
&lt;li&gt;Definieer metadata en renderconfiguratie&lt;/li&gt;
&lt;li&gt;Voeg beweringen toe volgens het schema&lt;/li&gt;
&lt;li&gt;Voer &lt;code&gt;uv run orkestra sync&lt;/code&gt; uit om documentatie te genereren&lt;/li&gt;
&lt;li&gt;Neem het register op in de agentcontextcompositie&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Begin met de feiten die de meeste verwarring veroorzaken of de beperkingen die het vaakst worden overtreden. Dat zijn je meest waardevolle ground truths.&lt;/p&gt;
&lt;h2 id=&quot;conclusie&quot;&gt;Conclusie&lt;/h2&gt;
&lt;p&gt;AI-agents zullen hallucineren. Dat zit in hun aard. Maar we kunnen omgevingen creëren waarin hallucinatie wordt beperkt, waarin bepaalde feiten niet onderhandelbaar zijn, waarin agents hun aannames kunnen toetsen aan geverifieerde realiteit.&lt;/p&gt;
&lt;p&gt;Ground truths zijn geen complete oplossing. Ze vereisen onderhoud. Ze kunnen verouderen. Ze voegen overhead toe aan het ontwikkelproces.&lt;/p&gt;
&lt;p&gt;Maar ze bieden iets waardevols: een gedeeld vocabulaire van feiten dat zowel mensen als agents kunnen vertrouwen. In een wereld waarin agents steeds meer deelnemen aan softwareontwikkeling, wordt dat gedeelde fundament essentieel.&lt;/p&gt;
&lt;p&gt;Het alternatief is eindeloze cycli van agents die overtuigd fouten maken en mensen die ze corrigeren. Ground truths doorbreken die cyclus door de correcties expliciet en duurzaam te maken.&lt;/p&gt;
&lt;p&gt;Jouw agents verdienen te weten wat waar is. Vertel het ze.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: AI-agents orkestreren op schaal</title><link>https://maguyva.ai/nl/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/nl/blog/orkestra-agent-orchestration</guid><description>Eén orchestrator routeert werk naar gespecialiseerde AI-agents, elk met eigen skills en geheugen. Hoe Orkestra 46 agents en 466 skills coördineert in productie.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Cijfers in deze post weerspiegelen het systeem op het moment van publicatie (januari 2026). Zie onze &lt;a href=&quot;https://maguyva.ai/nl/team&quot;&gt;teampagina&lt;/a&gt; voor actuele cijfers.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Toen we begonnen te bouwen met Claude Code, liepen we tegen een probleem aan dat elk team dat AI-codeerassistenten gebruikt vroeg of laat tegenkomt: één agent kan niet alles goed doen.&lt;/p&gt;
&lt;p&gt;Je kunt een agent prompten om een databasespecialist te zijn. Of een securityauditor. Of een frontend-engineer. Maar zodra je hem vraagt alle drie tegelijk te zijn, lijdt de kwaliteit. Context verwatert. Instructies conflicteren. De agent wordt een generalist die overal middelmatig in is.&lt;/p&gt;
&lt;p&gt;Dus bouwden we Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;wat-is-orkestra&quot;&gt;Wat is Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra is een agent-orchestratiesysteem voor Claude Code en vergelijkbare AI-codeertools. Het coördineert meerdere gespecialiseerde agents, elk met eigen expertise, onder één orchestrator die werk routeert naar de juiste specialist.&lt;/p&gt;
&lt;p&gt;Zie het als een uitzendbureau voor AI-agents. De orchestrator ontvangt een taak, identificeert welke specialist die moet afhandelen, en delegeert met de juiste context. Zodra het werk klaar is, vloeien resultaten terug naar de orchestrator voor synthese.&lt;/p&gt;
&lt;p&gt;De cijfers vertellen het verhaal:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Aantal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gespecialiseerde agents&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Herbruikbare skills&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identiteitsarchetypes&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mindsets&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Communicatiestijlen&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kennisdomeinen&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;het-karaktersysteem-dd-voor-agents&quot;&gt;Het karaktersysteem: D&amp;amp;D voor agents&lt;/h2&gt;
&lt;p&gt;Het kerninzicht achter Orkestra is dat agentgedrag ontstaat uit drie combineerbare primitieven:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity&lt;/strong&gt; definieert &lt;em&gt;wat&lt;/em&gt; de agent is. Een architect ontwerpt systeemstructuren. Een debugger traceert fouten naar hun grondoorzaak. Een guardian handhaaft compliance- en beveiligingsgrenzen. We hebben 27 identiteitsarchetypes die gemengd kunnen worden.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset&lt;/strong&gt; definieert &lt;em&gt;hoe&lt;/em&gt; de agent denkt. Een analytische mindset onderbouwt beweringen met bewijs en kwantificeert onzekerheid. Een sceptische mindset stelt aannames ter discussie en zoekt weerleggend bewijs. Een verkennende mindset omarmt ambiguïteit en probeert meerdere aanpakken.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Style&lt;/strong&gt; definieert &lt;em&gt;hoe&lt;/em&gt; de agent communiceert. Een technische stijl bevat exacte waarden en verwijst naar specifieke bestanden. Een beknopte stijl snijdt franje weg en begint met het antwoord. Een diplomatieke stijl balanceert eerlijkheid met tact.&lt;/p&gt;
&lt;p&gt;Een agent combineert deze primitieven:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Deze compositie creëert een agent die systemen ontwerpt (architect), kennis verbindt over domeinen heen (knowledge-architect), strategische richting bepaalt (strategist), denkt in bewijs en data (analytical), en communiceert zonder franje (concise).&lt;/p&gt;
&lt;p&gt;De kracht zit in combinatorische explosie. 27 identities keer 11 mindsets keer 10 styles levert bijna 3.000 mogelijke agentpersoonlijkheden op. Maar je definieert alleen de combinaties die ertoe doen voor jouw werk.&lt;/p&gt;
&lt;h2 id=&quot;skills-herbruikbare-capaciteitsmodules&quot;&gt;Skills: herbruikbare capaciteitsmodules&lt;/h2&gt;
&lt;p&gt;Skills zijn de kennis en workflows die agents kunnen aanroepen. Ze volgen een gelaagd systeem gebaseerd op scope:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Naam&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Voorbeeld&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Foundations&lt;/td&gt;
&lt;td&gt;Universele methodologie&lt;/td&gt;
&lt;td&gt;Test-first-discipline, bewijsgebaseerde afronding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identities&lt;/td&gt;
&lt;td&gt;Rolgebaseerde workflows&lt;/td&gt;
&lt;td&gt;CLI-interfacestandaarden, prestatie-playbook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domains&lt;/td&gt;
&lt;td&gt;Domeinspecifieke kennis&lt;/td&gt;
&lt;td&gt;Database-migratiepatronen, authenticatievalidatie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stacks&lt;/td&gt;
&lt;td&gt;Technologiespecifiek&lt;/td&gt;
&lt;td&gt;Cloudflare-deployment, Supabase-operaties&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;Alleen deze codebase&lt;/td&gt;
&lt;td&gt;Projectspecifieke workflows en conventies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skills worden lazy-loaded. Een agent ziet skillnamen en -beschrijvingen bij het opstarten, maar de volledige skillinhoud wordt pas geladen wanneer die wordt getriggerd. Dat houdt de context slank terwijl honderden skills toch vindbaar blijven.&lt;/p&gt;
&lt;p&gt;Elke skill bevat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Duidelijke triggervoorwaarden (“Use when migrating database schemas”)&lt;/li&gt;
&lt;li&gt;Stap-voor-stap-begeleiding&lt;/li&gt;
&lt;li&gt;Toegestane tools voor de workflow&lt;/li&gt;
&lt;li&gt;Succescriteria en herstelpaden bij falen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De 466 skills in ons register bestrijken alles van git worktree-isolatie tot webresearchworkflows tot deployment health validation.&lt;/p&gt;
&lt;h2 id=&quot;waarom-orchestratie-ertoe-doet&quot;&gt;Waarom orchestratie ertoe doet&lt;/h2&gt;
&lt;p&gt;Single-agent-architecturen lopen snel tegen muren aan:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contextverwatering.&lt;/strong&gt; Een contextvenster van 200k tokens klinkt groot totdat je databaseschema’s, API-documentatie, testfixtures en domeinkennis laadt. Specialisten kunnen werken met gerichte context.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instructieconflicten.&lt;/strong&gt; Een agent vertellen om “grondig maar snel” te zijn en “alles te verifiëren maar niet te over-engineeren” creëert spanning. Specialisten lossen dit op door een duidelijke scope te hebben.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expertisediepgang.&lt;/strong&gt; Een generalistische agent weet een beetje over alles. Een gespecialiseerde agent, samengesteld met de juiste identity en skills, kent zijn domein diepgaand.&lt;/p&gt;
&lt;p&gt;Orkestra implementeert flat orchestration: één orchestrator coördineert meerdere specialisten. Specialisten kunnen geen subspecialisten spawnen. Dat voorkomt complexiteitsexplosie terwijl parallel werk mogelijk blijft.&lt;/p&gt;
&lt;p&gt;De orchestrator heeft toegang tot 2,2 miljoen tokens aan effectieve capaciteit: zijn eigen venster van 200k plus 10 gelijktijdige subagents met elk 200k. Werk dat een enkele agent zou uitputten, verloopt moeiteloos over de vloot.&lt;/p&gt;
&lt;h2 id=&quot;de-renderpipeline&quot;&gt;De renderpipeline&lt;/h2&gt;
&lt;p&gt;Agentdefinities leven in YAML. Claude Code leest Markdown. Orkestra overbrugt dat gat met een deterministische renderpipeline:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Operators bewerken de YAML-bron. Voer &lt;code&gt;orkestra sync&lt;/code&gt; uit. Gerenderde Markdown verschijnt in &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code pikt de wijzigingen op.&lt;/p&gt;
&lt;p&gt;Deze scheiding bedient verschillende doelgroepen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;YAML-bron&lt;/strong&gt; bevat levenscyclusmetadata, tags, validatieregels en deprecation-notities voor tooling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gerenderde Markdown&lt;/strong&gt; bevat alleen wat het model nodig heeft: beschrijving, tools, skills en gedragsrichtlijnen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De pipeline stelt identities, mindsets, styles en skills samen tot één coherente prompt. Een architect-analytical-concise-agent krijgt een heel andere systeemprompt dan een debugger-skeptical-technical-agent, zelfs als ze enkele onderliggende skills delen.&lt;/p&gt;
&lt;h2 id=&quot;domeinkennis-het-vierbestandenpatroon&quot;&gt;Domeinkennis: het vierbestandenpatroon&lt;/h2&gt;
&lt;p&gt;Elk kennisdomein volgt een consistente structuur:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Deze structuur dient het laden van agentcontext. Een agent die aan authenticatie werkt, laadt &lt;code&gt;authentication/patterns.md&lt;/code&gt; voor begeleiding en &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; om bekende valkuilen te vermijden. De bestanden zijn afgestemd op efficiënt contextladen: gefocust genoeg om nuttig te zijn, uitgebreid genoeg om gezaghebbend te zijn.&lt;/p&gt;
&lt;p&gt;We onderhouden 21 topleveldomeinen, waaronder analytics, authenticatie, data science, infrastructuur, machine learning, performance, security en meer. Elk domein kan subdomeinen hebben voor fijnere granulariteit.&lt;/p&gt;
&lt;h2 id=&quot;values-het-besturingssysteem&quot;&gt;Values: het besturingssysteem&lt;/h2&gt;
&lt;p&gt;Alle agents delen een basislaag aan values die bepalen hoe ze opereren:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eenvoud eerst.&lt;/strong&gt; Gebruik de eenvoudigste oplossing die werkt. Voeg alleen complexiteit toe wanneer dat gerechtvaardigd is.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Los grondoorzaken op.&lt;/strong&gt; Bestrijd nooit alleen de symptomen van een fout. Als een pipeline faalt, debug de pipeline. Als een test faalt, repareer de code of de test.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Op bewijs gebaseerd.&lt;/strong&gt; Label beweringen als “verified” (met benchmarks) of “estimated” (met aannames). Een gedetecteerd patroon staat niet gelijk aan een bevestigd probleem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context-economie.&lt;/strong&gt; MCP-tools kosten 0,1% van de context. Bestanden lezen kost elk 2%. Pas domeinexpertise toe voordat je code gaat verkennen.&lt;/p&gt;
&lt;p&gt;Deze values propageren naar elke specialist via de renderpipeline. Een agent kan ze niet omzeilen door compositie.&lt;/p&gt;
&lt;h2 id=&quot;cli-het-controlevlak&quot;&gt;CLI: het controlevlak&lt;/h2&gt;
&lt;p&gt;Orkestra wordt geleverd met een CLI voor het beheren van het agent-ecosysteem:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;De CLI is de single source of truth voor welke agents bestaan, welke skills ze hebben, en of het systeem gezond is. Hij draait validatie vóór sync om problemen vroegtijdig op te vangen.&lt;/p&gt;
&lt;h2 id=&quot;overwegingen-rond-open-source&quot;&gt;Overwegingen rond open source&lt;/h2&gt;
&lt;p&gt;We bouwden Orkestra om ons eigen probleem op te lossen: AI-agents op schaal coördineren voor een complexe codebase. De patronen die we ontdekten zijn niet specifiek voor ons domein.&lt;/p&gt;
&lt;p&gt;Het karaktercompositiesysteem (identity + mindset + style) is toepasbaar op elk team dat agentpersoonlijkheden definieert.&lt;/p&gt;
&lt;p&gt;Het skill-tiersysteem (K0-K4) biedt een mentaal model voor het organiseren van herbruikbare capaciteiten per scope.&lt;/p&gt;
&lt;p&gt;Het renderpipelinepatroon (YAML-bron + templates + gegenereerde artefacten) scheidt wat de tooling nodig heeft van wat het model nodig heeft.&lt;/p&gt;
&lt;p&gt;Het flat-orchestration-model (één coördinator, veel specialisten) vermijdt complexiteit terwijl het parallellisme mogelijk maakt.&lt;/p&gt;
&lt;p&gt;Of Orkestra open source wordt, hangt af van of deze patronen waarde hebben voor anderen die bouwen met Claude Code. Als jij tegen de muren aanloopt die we hebben beschreven, kan deze architectuur helpen.&lt;/p&gt;
&lt;h2 id=&quot;wat-we-hebben-geleerd&quot;&gt;Wat we hebben geleerd&lt;/h2&gt;
&lt;p&gt;Het bouwen van Orkestra leerde ons dat orchestratie niet gaat over agents slimmer maken. Het gaat over ze gefocuster maken.&lt;/p&gt;
&lt;p&gt;Eén agent met perfecte instructies raakt nog altijd door zijn context heen. Eén agent met alle skills raakt nog altijd in de war over welke toe te passen. Eén agent die probeert alles te zijn, levert overal middelmatige resultaten.&lt;/p&gt;
&lt;p&gt;Veertig specialisten, elk uitstekend in hun domein, gecoördineerd door een orchestrator die weet wanneer te delegeren: zo leveren wij op.&lt;/p&gt;
&lt;p&gt;De cijfers doen er minder toe dan de architectuur. Je hebt misschien vijf agents nodig, of vijftig. Het principe blijft: compositie boven capaciteit, specialisatie boven generalisatie, coördinatie boven individueel heldendom.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra vormt de motor achter het agent-ecosysteem van Maguyva, ons code-intelligentieplatform. Wil je meer weten? Neem contact op met het team.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>