Mijn monitoring-agent stuurde drie weken lang ruis
Ik bouwde een agent die over al mijn systemen heen kijkt en me vertelt wat er aandacht nodig heeft. Drie weken lang vertelde hij me vooral dat er dingen gebeurden.
Sentinel is een altijd-aan agent op mijn eigen stack. Hij leest over Office 365, Close CRM, GitHub, Azure DevOps, PostHog, Notion en Billit heen. Het idee was simpel: één plek waar losse signalen samenkomen, zodat ik niet zeven systemen hoef af te lopen om te weten wat er speelt.
Technisch werkte het vanaf dag één. Alle koppelingen draaiden, de synthese was leesbaar, de escalatie via Telegram kwam netjes aan. En toch was het onbruikbaar.
Het probleem was niet te weinig informatie
Het was te veel. Elke ochtend kreeg ik een overzicht van wat er sinds gisteren veranderd was, en dat was altijd van alles. Een deal verplaatst, een pull request geopend, een factuur verstuurd, een gebruiker actief. Allemaal waar, allemaal correct opgehaald, en allemaal even belangrijk gepresenteerd.
Een agent die alles meldt, meldt niets.
Na een week las ik het diagonaal. Na twee weken opende ik het nog nauwelijks. Dat is precies het faalpatroon van elk monitoringsysteem ooit gebouwd, en ik was er met open ogen ingelopen omdat ik dacht dat een taalmodel het verschil wel zou zien.
Wat ik veranderde
Drie dingen, in volgorde van impact.
Eén: geheugen van wat al gezegd is. De eerste versie was geheugenloos. Elke run keek naar de huidige toestand en beschreef die. Dus als een deal drie weken stilstond, meldde hij drie weken lang diezelfde stilstaande deal. Ik heb er een persistent register van open lussen aan toegevoegd: elke bevinding krijgt een identiteit en een status, en de agent meldt alleen wat nieuw is of wat verslechterd is. Alleen dit al haalde ongeveer tachtig procent van het volume weg.
Twee: drempels op verandering, niet op toestand. Niet "er staan 14 openstaande facturen" maar "er staan er vier meer dan vorige week, en drie ervan zijn ouder dan zestig dagen". Een toestand is een feit. Een verandering is een signaal. Alleen het tweede vraagt iets van mij.
Drie: expliciete stilte. De agent mag niets sturen als er niets te melden is. Dat klinkt vanzelfsprekend en dat is het niet, want de verleiding is groot om een dagelijkse samenvatting te sturen "voor de volledigheid". Die volledigheid is precies wat het onleesbaar maakt. Een bericht dat aankomt betekent nu iets, en daarom lees ik het.
Wat ik onderschat had
Dat het bepalen van wat belangrijk is geen technische vraag is. Ik had gehoopt dat het model dat zelf zou uitvinden uit context. Dat doet het niet, en achteraf gezien is dat logisch: relevantie hangt af van wat ik die maand aan het doen ben, waar ik risico's zie en wat ik al weet. Dat staat nergens in de data.
Dus heb ik het opgeschreven. Letterlijk, in een configuratiebestand met drempels: wat is een bedrag dat er toe doet, hoeveel dagen stilstand is verdacht, welke klanten zijn gevoelig. Dat bestand pas ik ongeveer een keer per maand aan, en dat is precies het soort onderhoud dat een agent nodig heeft en dat de meeste projecten vergeten in te plannen.
De architectuurkeuze die ik wél goed deed
Breed lezen, smal schrijven. Sentinel heeft leesrechten op alles en schrijfrechten op vrijwel niets. Elke voorgestelde actie valt in drie categorieën: zelf uitvoeren als het onomkeerbaar niets kan breken, voorleggen als het iets verandert, en enkel signaleren als het onomkeerbaar is.
Dat is een saaie keuze en ze heeft me elke twijfel over autonomie bespaard. De agent kan me irriteren, hij kan me niet in de problemen brengen. Dat is de drempel waaronder je zo'n ding niet moet bouwen.
Wat je hieruit kan meenemen
- Bouw geheugen in voor je slimheid inbouwt. Een agent die niet weet wat hij gisteren zei, herhaalt zichzelf tot je hem negeert.
- Meld verandering, geen toestand. Toestand hoort op een dashboard, verandering hoort in je aandacht.
- Schrijf de drempels expliciet op. Het model weet niet wat er voor jou toe doet, en het kan het niet raden.
- Sta stilte toe. Een systeem dat mag zwijgen wordt gelezen als het praat.
Het bruikbare deel van Sentinel is niet het slimme deel. Het is de filter.