Eigen werk, naast het consultancy-werk. Gemene deler: open source waar het kan, eigen hardware waar het moet, en saai-maar-auditeerbaar boven slim.
Wordsworth — soevereine PII-straat
Een documentstraat die overheidsdocumenten omzet in een doorzoekbaar, privacy-veilig corpus: ingest → pseudonimisering → indexering → hybride zoeken en vraag-antwoord, alles self-hosted (PostgreSQL, OpenSearch, lokale LLM via Ollama, S3-compatibele object-store) — er verlaat geen document en geen modelaanroep het eigen ijzer.
De pseudonimisering is omkeerbaar met sleutel-gated reveal: detectie draait deterministisch (BSN-elfproef, IBAN mod-97) plus ML-entiteiten, waarden worden vervangen door stabiele tokens, en alleen wie een geldige grant én de cryptografische sleutel heeft, kan per PII-type onthullen. De index bevat nooit klare persoonsgegevens; de append-only audittabel is tegelijk de state machine van de pijplijn. Envelope-encryptie via OpenBao Transit; fail-closed bij elke twijfel.
- Demo (synthetische data): mwest2020.github.io/wordsworth-demo
- Code: github.com/MWest2020/wordsworth (EUPL-1.2)
Boomhuis — en het patroon erachter
Boomhuis is de communicatielaag van mijn agent-ecosysteem: een zelf-gehoste buzz-relay (Nostr-protocol) met kanalen waarin ik en een handvol chat-native agents — bouwer, reviewer, architect, marketing — asynchroon samenwerken. Elke identiteit (mens én agent) heeft een eigen sleutelpaar; alles is doorzoekbaar en auditeerbaar; bereikbaar alleen via het eigen tailnet. De repo is privé (er leven identiteiten in), maar het patroon is het delen waard.
Het patroon: scheid de lagen, en geef elke laag één taak.
- Git is de waarheid. Code, verdicts en audit-sporen leven in git. Chatberichten zijn coördinatie en spiegel — nooit gezaghebbende state.
- Executie zit in een kooi. Agents die code bouwen draaien als Kubernetes-Jobs met deny-by-default allowlists per rol (habitat, EUPL-1.2), zonder toegang tot de relay of tot secrets. Communicatie en uitvoering raken elkaar alleen via git.
- Kennis heeft één vaste plek. Eén repo (handbook) is de inventaris en het startpunt; documentatie aggregeert dáár, niet in elke chat opnieuw.
- Identiteit is een sleutelpaar, geen accountnaam. Agents zijn relay-leden met eigen keys, rollen en kanaal-rechten — toevoegen, roteren en intrekken zijn gewone, auditeerbare operaties.
- Zacht advies, harde grenzen. Wat een agent hoort te doen staat in conventies; wat een agent niet mag wordt afgedwongen op de runtime-grens. (Waarom dat onderscheid ertoe doet: de shift-left-sessie.)
Geen platform gekocht, geen SaaS: een relay, een cluster, een paar repo’s en strakke afspraken. Het schaalt niet naar duizend man — het hoeft maar naar één mens en een handvol agents.
netnl — meetbaar internet, in bulk
Een command-line client voor de batch-API van Internet.nl: test een hele vloot domeinen op IPv6, DNSSEC, RPKI en TLS in plaats van één domein per browser-tab. Submit een hostlijst, poll tot de run klaar is (hervatbaar na een dichtgeklapte laptop), en krijg het resultaat als diffbare tabel of JSON voor pipelines. Er zit een GitHub Action bij, zodat je build faalt zodra je score zakt — een CI-gate op je eigen standaarden-compliance in plaats van een screenshot in een auditmap.
Huisregel: meet je eigen hosts vrij, die van een ander alleen waar de meting er een is die de beheerder al uitnodigt — en dan één keer, niet in een lus.
De batch-API vraagt een account, en dáár haakt bijna iedereen af. Daarom draait er inmiddels een complete keten: een eigen batch-instance op een VPS, bereikbaar over een tailnet, met daarvoor een facade in het homelab die tenants, limieten en een auditspoor regelt. Wie meebetaalt aan de stroom krijgt automatisch een sleutel gemaild; de webhook mint hem, verstuurt hem één keer, en bewaart hem nergens terug te halen.
Elke ochtend meet het zichzelf, en de actuele stand staat op de demopagina — inclusief het domein dat er duidelijk slechter af komt. Dat cijfer blijft er met opzet staan: dat domein is publiek dicht, en een scorebord dat alleen groene vinkjes laat zien meet niets.
Zelf hosten kan, maar het is een dienst en geen script. De vier valkuilen die me dagen kostten staan apart gedocumenteerd, inclusief de plek waar de officiële handleiding je een instance oplevert die nergens meer bij kan.
- Code: github.com/MWest2020/internetnl-cli (MIT)
- Zelf proberen, zonder account: mwest2020.github.io/internetnl-cli-demo
- Sleutel voor de API: een koffie vanaf $2 — bèta, best-effort, geen SLA