Sliding Window en Koude Golf: Wanneer de Agent-context explodeert en je moet archiveren zonder verlies
Gepubliceerd op 26 April 2026
samenvatting
Na 48 sessies bij één project en meer dan 150 in totaal, begon het door mij zorgvuldig opgebouwde Eager/Lazy-governance-systeem te verstikken. De agentenbestanden, die licht hadden moeten zijn, wogen samen 5200 regels. Het automatisch geladen context nam sneller toe dan mijn vermogen om het te beheersen. Dit artikel vertelt hoe ik een back‑upmechanisme heb geconceptualiseerd — tussen sliding window en een identieke koude golf — om een lichtgewicht actief context te behouden zonder ooit iets te verliezen.
Het Signaal : 5200 regels
Ik ben midden in sessie 048 op`magic-stick`, mijn project om een live Linux ISO te bouwen. Opencode kijkt me aan. Zoals altijd, heeft het automatisch mijn Eager-bestanden geladen aan het begin van de sessie —AGENT.adoc, PROMPT_REPRISE.adoc, .agents/INDEX.adoc. Niets abnormaal.
Behalve dat er iets mis is. De antwoorden zijn langzamer. De redenering is meer verwaterd. De agent vergeet details die hij twee berichten geleden nog voor zich had.
Ik open een terminal en typ :
wc -l .agents/INDEX.adoc .agents/SESSIONS_HISTORY.adoc \
.agents/archives/COMPLETED_TASKS_ARCHIVE_2026-04.adoc
260 regels voor INDEX. 55 voor SESSIONS_HISTORY.1756 voor COMPLETED_TASKS_ARCHIVE.
Het dossier`sessions/`voeg nog ~3200 regels toe. Totaal :5200 regelscontexten die worden geladen, op een of andere manier, in het tijdelijke brein van de agent.
De Eager/Lazy-strategie die ik in het vorige artikel had geformuleerd, werkt — maar ze heeft een geboortefout die ik niet had voorzien: ze heeft nietgeen verouderingsmechanisme. Elke sessie voegt een regel toe aan INDEX, een paragraaf aan COMPLETED_TASKS, een bestand in sessions/. Niets komt er nooit uit. De context is een sneeuwbal die groeit bij elke nieuwe sessie.
@startuml skinparam backgroundColor #FEFEFE skinparam handwritten false title Groei van Agentcontext — Sessies 1 tot 48 rectangle "Sessie 1-10" as S10 #E8F5E9 rectangle "Sessie 11-20" as S20 #C8E6C9 rectangle "Sessie 21-30" as S30 #A5D6A7 rectangle "Sessie 31-40" as S40 #81C784 rectangle "Sessie 41-48" as S48 #66BB6A note right of S10 INDEX : ~50 regels SESSIES : ~10 regels ARCHIEF : ~100 regels **Totaal : ~300 regels** end note note right of S20 INDEX : ~100 regels SESSIONS : ~20 regels ARCHIEF : ~400 regels **Totaal : ~800 regels** end note note right of S30 INDEX : ~160 regels SESSIES : ~30 regels ARCHIEF : ~900 regels **Totaal : ~1800 regels** end note note right of S40 INDEX : ~220 regels SESSIONS : ~45 regels ARCHIVE : ~1400 regels **Totaal : ~3200 regels** end note note right of S48 INDEX : **260 regels** SESSIONS : **55 regels** ARCHIEF : **1756 regels** **Totaal : 5200 regels** ⚠️ end note S10 -[#green]-> S20 S20 -[#green]-> S30 S30 -[#FF9800]-> S40 S40 -[#red]-> S48 @enduml
Het is geen bug, het is een direct gevolg van de sessie-eindprocedure die elk detail nauwkeurig archiveert. Het systeem is het slachtoffer van zijn eigen succes.
De diagnose : Triple redundantie
Ik vraag de agent om het probleem te diagnosticeren. Zijn antwoord is onmiddellijk en chirurgisch.
Bestand |
Lijnen |
Rol |
probleem |
|
260+ |
EAGER (automatisch opgeladen) |
Tabel van alle sessies sinds 001 —+1 lijn per sessie |
|
55 |
greedig |
Samenvattende tabel —redundantie met INDEX |
|
1756 |
EAGER (impliciet) |
Volledige details van alle sessies van april |
|
~5200 totaal |
LUI (zogenaamd) |
Individuele archieven, maarniet gebruiktwant alles staat al in COMPLETED_TASKS |
De agent identificeert vier hoofdoorzaken:
-
COMPLETED_TASKS_ARCHIVE absorbeert alles— In plaats van te wijzen naar de archieven`.sessions/`, hij kopieert elke sessie volledig.
-
INDEX.adoc fungeert als een volledige geschiedenis— Het overzicht "Recent sessies" bevat 30+ items.
-
SESSIONS_HISTORY.adoc redundant— Zelfde informatie als INDEX, ander formaat.
-
De LAZY-regel wordt niet nageleefd— COMPLETED_TASKS is impliciet EAGER omdat het alles bevat.
Haar voorstel is radicaal: beperk INDEX tot 10 sessies, maak COMPLETED_TASKS leeg, verplaats SESSIONS_HISTORY naar een pure LAZY. Directe winst:~1900 regels bespaard.
Het is netjes, efficiënt, logisch. Maar ik heb een probleem met deze aanpak.
Waarom ik de evidente oplossing heb geweigerd
De oplossing van de agent is die van een ingenieur die een cache optimaliseert. Beperken. Afkappen. Overbodigheden verwijderen.
Maar deze "redundanties" zijn het niet. Elk governance-bestand vangt eenverschillende hoekop dezelfde realiteit :
-
INDEX= macrovieuw, directiedashboard
-
SESSIONS_HISTORY= lineaire chronologische tabel, gescoord
-
COMPLETED_TASKS_ARCHIVE= gedetailleerd verhaal met metrieken
-
sessions/*.adoc` = individuele archieven, volledige context
Het is geen domme duplicatie. Het is van demeervoudig gestructureerd perspectief. Dit is precies wat we nodig hebben om te distilleren — zodat later een mens (of een toekomstige LLM die beter is getraind) de hoeken kan kruisen en patronen kan ontdekken.
Stel je voor dat een data scientist zegt: « Laten we 3 van de 6 kolommen verwijderen, ze zijn gecorreleerd. » Wat antwoord je hem? Dat correlatie geen redundantie is wanneer elke kolom een andere dimensie vastlegt van hetzelfde fenomeen. Dat is juist deze dimensierijke rijkdom die de dataset bruikbaar maakt.
Dit is mijn intuïtie. En ik verdedig het tegen de koude rationaliteit van de agent.
_ Ik zie geen stille verzamelbak in mijn idee. We stoppen niet alles op, we verplaatsen het gestructureerde resultaat van de sessie‑eindprocedure — elk bestand met zijn hoek, zijn redundanties die eigenlijk een aanvulling zijn. Dat is dit multidimensionele materiaal dat beter zal zijn voor de distillatie. _
De agent krijgt de klap. En corrigeert zichzelf.
De Voorstel : Identieke koude golf
De agent stelt dan een fijner mechanisme voor, dat mijn intuïtie van een rijke dataset respecteert terwijl het het technische probleem van een exploderende context oplost.
Het principe is eenvoudig en put direct uit het patroonWarme/lauwe/koude opslagtoegepast op archiefbeheer :
-
heet (EAGER)= de laatste 10 sessies in INDEX, PROMPT_REPRISE van sessie N+1, de 2 meest recente sessiebestanden
-
Warm (LUI)= SESSIONS_HISTORY recent, SCRIPT_VERIFICATION, alle referentiedocumentatie
-
koud (backup/)= alles anders, verplaatstintact, zonder transformatie, zonder herindexering
----
----
----
.agents/
├── INDEX.adoc → Sessions N-9 à N (10 dernières)
├── SESSIONS_HISTORY.adoc → Sessions N-9 à N
├── SCRIPT_VERIFICATION.adoc → Dernière vérif (pas d'historique)
├── PROMPT_REPRISE.adoc → Session N+1 uniquement
├── sessions/ → Sessions N-1 à N uniquement
└── backup/
└── Y2026-sessions-001-039/ ← Vague froide, COPIE INTÉGRALE
├── INDEX.adoc → Sessions 001 à 039 (complet)
├── SESSIONS_HISTORY.adoc → Sessions 001 à 039 (complet)
├── COMPLETED_TASKS_ARCHIVE.adoc → Sessions 001 à 039 (complet)
└── sessions/ → 001.adoc, 002.adoc...
----
De sleutel van het mechanisme:**de backup is geen centrale index, het is een exacte kopie van de voorbijgaande golf**. Als we de horizon van 10 actieve sessies overschrijden, verwijderen we niets. We herindexeren niets. We samenvoegen niets. We nemen het pakket agentenbestanden zoals het was tijdens sessie N-10, en we verplaatsen het in`backup/`.
De actieve bestanden zijn echter afgekapt :
* INDEX : alleen de 10 laatste regels (sliding window)
* SESSIONS_HISTORY : zelfde
* COMPLETED_TASKS_ARCHIVE : nieuw bestand voor de huidige periode
* sessions/ : alleen de laatste 2 sessies
[plantuml, format=svg, id=diag-hot-warm-cold, alt="Architecture Hot/Warm/Cold du contexte agent — EAGER/LAZY/backup"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 200
title Architectuur Hot / Warm / Cold van de contextagent
package "HOT (EAGER)\nAutomatisch geladen\n~300 regels" as HOT #FFCDD2 {
file "INDEX.adoc\n(10 sessies)" as IDX_HOT
file "PROMPT_REPRISE\n(sessie N+1)" as PRO_HOT
file "AGENT.adoc\n(absolute regels)" as AG_HOT
}
package "WARM (LAZY)\nOp aanvraag geladen\n~500 lijnen" as WARM #FFF9C4 {
file "SESSIONS_HISTORY\n(10 laatste)" as HIS_WARM
file "SCRIPT_VERIFICATION\n(laatste)" as VER_WARM
file "PROCEDURES.adoc\n(sjablonen)" as PRO_WARM
file "*_REFERENCE.adoc\n(technisch document)" as REF_WARM
}
package "COLD (backup/)\nNooit opgeladen\nAlleen menselijke lezing" as COLD #BBDEFB {
folder "Y2026-001-039/" as WAVE {
file "INDEX (volledig)" as IDX_COLD
file "SESSIONS_HISTORY\n(volledig)" as HIS_COLD
file "COMPLETED_TASKS\n(voltooid)" as ARCH_COLD
folder "sessies/ (001-039)" as SESS_COLD
}
folder "Y2026-040-???\n(toekomst)" as FUTURE
}
HOT --> WARM : "Agent gaat omhoog\nindien nodig"
WARM --> COLD : "Nooit automatisch\nDe mens gaat er alleen heen"
note bottom of COLD
Règle : COPIE INTÉGRALE
Pas de transformation
Pas de réindexation
Read-only après archivage
end note
@enduml
----
De onmiddellijke winst is massief: de EAGER-context gaat van**~5200 regels tot ~300 regels**. Een deling door 17. Zonder een enkele regel historische gegevens te hebben verloren.
== Waarom dit geen alles-in-één-zak is
De agent, in zijn eerste iteratie, vreesde dat`backup/`wordt een zwarte doos — een map waarin je bestanden plaatst die je nooit meer zult lezen. Dat is een legitieme zorg. Maar het is gebaseerd op een verwarring.
Een rommelzooi is wanneer je bestanden weggooit**zonder structuur, zonder conventie, zonder logica van groepering**. Hier, de backup is gestructureerd per periode (Y2026-001-039), en elke backup-map bevat**dezelfde structuur**het dossier`.agents/`actief : INDEX, SESSIONS_HISTORY, COMPLETED_TASKS_ARCHIVE, sessions/.
Het is geen rommelzak. Het is een**getimestampte snapshot**. Men zou zelfs kunnen zeggen dat het een vereenvoudigd versieeringsmechanisme is — afgezien daarvan dat het de bestanden individueel niet versieert, maar het volledige pakket van bestuur op een bepaald moment T.
Als je oude informatie wilt terugvinden, heb je geen centrale index nodig. Je hebt twee opties:
1. **grep` gericht**:`grep -r "zsh" backup/Y2026-001-039/`— en u vindt alles wat zsh vermeldt in de periode, ongeacht de hoek (INDEX, SESSIONS_HISTORY, sessie-archief).
2. **Manuele reintegratie**: Je kopieert tijdelijk de backup-map in de actieve context, en je vraagt de agent om deze specifieke periode te analyseren.
De index is impliciet. Hij zit in de structuur zelf van de bestanden — elk is al een index vanuit zijn eigen perspectief.
== De metafoor van de planken
Om het mechanisme intuïtief te maken, heb ik het geconceptualiseerd in drie schappen:
* **Plank 1 (EAGER)**— het werkplan. Wat ik nodig heb *nu*. INDEX recent, PROMPT_REPRISE, absolute regels. Licht, direct, kritiek.
* **Schap 2 (LAZY)**— de raadpleegbibliotheek. Wat ik op aanvraag kan ophalen. Technische referenties, recente geschiedenis, procedures. Groter, maar niet in het geheugen geladen.
* **kelder (backup/)**— de koude archieven. Alles wat voorbij is maar wat ik niet wil weggooien. De agent komt er nooit binnen. De mens daalt er af wanneer hij wil distilleren.
De agent stelde aanvankelijk een vierde plank voor — een`index-backup.adoc`die LAZY zou zijn en een inhoudsopgave zou bevatten van de hele backup. Ik heb geweigerd. Dit zou een extra redundantie zijn in een systeem dat al lijdt onder lineaire groei. De structuur van de gearchiveerde bestanden is al een index.
== De sensor met twee triggers
De conceptualisatie was solide, maar er bleef een blinde vlek:**Wanneer moet de rotatie precies worden geactiveerd?**Het oorspronkelijke artikel identificeerde het als een open vraag. Twee dagen later is het antwoord vastgelegd in de gouvernancebestanden van zes projecten: een sensor met twee triggers.
=== De automatische trigger — `N % 10 == 0
De eerste trigger is wiskundig. Wanneer het sessienummer een veelvoud van 10 is — sessie 10, 20, 30, 40 — wordt de backup-rotatie automatisch uitgevoerd binnen de sessie-eindprocedure, direct na stap 6.
Waarom 10? Dat is het compromis tussen twee tegenovergestelde krachten: een venster dat te kort is (5 sessies) verliest de context die nodig is voor continuïteit; een venster dat te lang is (20 sessies) lost het probleem van een opgeblazen context niet op. Tien sessies, in een ritme van één tot twee sessies per dag, beslaan ongeveer een week werk — voldoende voor de agent om recente beslissingen te onthouden, maar niet genoeg voor de context om te exploderen.
=== De drempeltrigger — 500 regels EAGER
De tweede trigger is dynamisch. Ongeacht het sessienummer, als de cumulatieve EAGER-bestanden overschrijden**500 regels**, de rotatie wordt geactiveerd.
Deze drempel beschermt tegen het scenario waarin de sessies uitzonderlijk productief zijn — veel inhoud wordt in weinig sessies geschreven. Een sessie die 120 regels redactionele inhoud produceert, laat COMPLETED_TASKS_ARCHIVE veel sneller groeien dan een debug‑sessie die twee regels corrigeert. De drempel van 500 regels, gemeten via`wc -l .agents/INDEX.adoc .agents/archives/COMPLETED_TASKS_ARCHIVE_*.adoc PROMPT_REPRISE.adoc`, vangt deze asymmetrie.
=== De Handmatige Trigger — "rotation backup
Ten slotte behoudt de mens de controle. De trefwoorden`rotation backup`, `backup rotation` ou `lance la rotation backup`ze activeren de procedure op aanvraag, onafhankelijk van het einde van de sessie. Handig wanneer je voelt dat de context zwaar wordt, maar je nog niet op een veelvoud van 10 zit, of wanneer je een werkfase wilt archiveren voordat je een nieuwe begint.
[plantuml, format=svg, id=diag-capteur-trigger, alt="Les trois déclencheurs du capteur de rotation backup — automatique, seuil, manuel"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 200
title Backup-rotatiesensor — De drie triggers
start
:Procédure de fin de session;
note right: Mots-clés "einde sessie"\nou "we stoppen hier"
:Étapes 1 à 6\n(archivage standard);
note right
1. Archive sessions/N.adoc
2. MAJ PROMPT_REPRISE
3. MAJ SESSIONS_HISTORY
4. MAJ INDEX.adoc
5. MAJ TEST_COVERAGE
6. MAJ COMPLETED_TASKS
end note
if (N % 10 == 0\nOU\nEAGER cumulé > 500 lignes ?) then (oui)
:⚙️ Rotation Backup\n(étape 7);
note right
1. Créer backup/Y20XX-sessions-X-Y/
2. Copier intégrale INDEX + HISTORY
+ COMPLETED_TASKS + sessions/
3. Tronquer actifs à 10 sessions
4. Ajouter _Localisation active_
end note
else (non)
:Pas de rotation;
endif
:Checklist [✅] x 7\n(si applicable);
stop
@enduml
----
Dit diagram toont de exacte invoeging van de sensor in de sessie-eindprocedure. Stap 7 is optioneel — hij wordt alleen uitgevoerd als één van de twee voorwaarden waar is — maar hij wordt systematisch *gecontroleerd*. De eindchecklist omvat`[✅] 7. Backup roté (si applicable)`.
=== De gesloten lus
Deze sensor sluit de lus die door het vorige artikel is geopend. De Eager/Lazy-governance had het probleem van het agentengeheugen tussen twee sessies opgelost. Het Hot/Warm/Cold-mechanisme heeft het probleem van het groeiende geheugen opgelost. De sensor met twee triggers lost het probleem van het *quand* op — waarbij de menselijke mentale belasting van het monitoren van de contextgrootte wordt weggenomen.
[plantuml, format=svg, id=diag-boucle-fermee, alt="Les trois couches de la gouvernance agent — Eager/Lazy, Hot/Warm/Cold, Capteur"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
title De Drie Lagen van de Governance Agent
left to right direction
package "Laag 1 — Geheugen\n(Artikel 0108)" as C1 #E8F5E9 {
rectangle "**EAGER**\nDashboard\nAuto opgeladen" as EAG
rectangle "**LAZY**\nEigenaarshandleiding\nOp aanvraag geladen" as LAZ
EAG -[hidden]right-> LAZ
}
package "Laag 2 — Veroudering\n(Artikel 0110)" as C2 #FFF9C4 {
rectangle "**HOT**\n10 actieve sessies\n~300 regels" as HOT
rectangle "**WARM**\nReferenties\nProcedures" as WRM
rectangle "**COLD**\nbackup/\nkoude golf" as CLD
HOT -[hidden]right-> WRM
WRM -[hidden]right-> CLD
}
package "Laag 3 — Trigger\n(Vandaag)" as C3 #BBDEFB {
rectangle "**Auto**\nN % 10 == 0" as AUTO
rectangle "**Drempel**\n> 500 regels" as SEUIL
rectangle "Handleiding\nrotatie-backup" as MAN
AUTO -[hidden]right-> SEUIL
SEUIL -[hidden]right-> MAN
}
C1 --> C2 : "Het geheugen groeit\n→ Er moet een mechanisme zijn\nvan veroudering"
C2 --> C3 : "De veroudering\n→ er moet een trigger zijn\nom het uit te voeren"
note bottom of C3
✅ Déployé sur 6 projets
magic-stick · bakery-gradle
plantuml-gradle · cheroliv.com
jhipster-gradle-plugins
quizz-benchmark-gradle
end note
@enduml
----
De drie lagen stapelen zich logisch op. De eerste geeft een geheugen aan de agent. De tweede verhindert dat dit geheugen de agent verstikt. De derde automatiseert het onderhoud van dit geheugen zodat de mens er niet aan hoeft te denken.
=== Effectieve migratie op cheroliv.com
Het mechanisme is niet theoretisch gebleven. Op`cheroliv.com`, de eerste back-uprotatie is uitgevoerd op 29 april 2026 — de sessies -6 tot 2 zijn gemigreerd naar`.agents/backup/Y2026-sessions-neg6-a-002/`:
|===
|Bestand |Voor rotatie |Na rotatie |Winst |`.agents/INDEX.adoc` |19 sessies vermeld |10 sessies (3-12) |-9 items |`.agents/SESSIONS_HISTORY.adoc` |18 sessies |10 sessies |-8 invoeren |`COMPLETED_TASKS_ARCHIVE` |161 lijnen (sessies 1-12) |135 lijnen (sessies 3-12) |-26 lijnen |`sessions/` |20 bestanden |10 bestanden |-10 bestanden |**backup/** |niet bestaand |1 koude golf (10 gearchiveerde sessies) |+1 koude pakket
|===
De winst in lijnen was bescheiden — het project is jong, 12 sessies — maar het belangrijkste is dat de**mechanisme is aanwezig**. De volgende automatische rotatie wordt geactiveerd bij sessie 20, of eerder als de 500 EAGER-regels zijn bereikt.
== De les Mens-Agent
Deze sessie 048 heeft me iets fundamenteels geleerd over samenwerken met een AI-agent.
De agent heeft een natuurlijke vooroordeel: hij probeert te**optimaliseren**, à **vereenvoudigen**, à **verwijder de redundanties**. Dit is de bias van een systeem dat is getraind om nette en beknopte antwoorden te produceren. Gezien een rijke en multidimensionele dataset, is zijn eerste reflex om het te reduceren tot zijn eenvoudigste vorm.
De mens, daarentegen, heeft een andere intuïtie: hij vermoedt dat gestructureerde redundantie een**voordeel**, geen gebrek. Dat de diversiteit van hoeken op dezelfde werkelijkheid precies is wat later een distillatie van hoge kwaliteit mogelijk zal maken.
Het is niet dat de agent fout heeft. Het is dat zijn "optimum" niet het mijne is. De agent optimaliseert voor de**aanwezig**— de directe context, het snelle antwoord op de gestelde vraag. De mens optimaliseert voor het**toekomst**— het vermogen om terug te vinden, kruisen, distilleren in drie maanden of drie jaar.
</think> Wat ik wil, is het ruwe materiaal. Jouw overdenkingen, jouw aarzelingen, jouw antwoorden op mijn vragen. Niet je samenvatting. De samenvatting kan ik beter maken dan jij. Ik wil het ruwe materiaal. ____
Deze zin die ik hem aan het einde van de sessie heb gezegd vat alles samen. De agent is een productiemiddel. De mens is een distilleermiddel. Het bestuur is er niet voor dat de agent alles zelf begrijpt — het is er voor zodat de mens later kan werken aan het geproduceerde materiaal.
De identieke koude golf is de architectonische vertaling van deze filosofie: we gooien niets weg, we fusieën niets, we herindexeren niets. We verplaatsen het pakket intact. De destillatie zal later komen, met de hand, door de mens.
== De logische voortzetting van het vorige artikel
Als je hebt gelezenlink:/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[het artikel over de Eager/Lazy-strategie], u zult de natuurlijke voortgang herkennen :
1. **Artikel 0108**— De gouvernance Eager/Lazy : *comment* de agentcontext structureren in twee beschikbaarheidsniveaus
2. **Dit artikel 0110**— Het back-up mechanisme: *comment* deze context te laten verouderen zonder het te verliezen wanneer het te groot wordt
Het eerste artikel antwoordde op de vraag: « De agent herinnert zich niets tussen twee sessies, hoe geven we hem een geheugen?
Dit beantwoordt de vraag die onvermijdelijk voortvloeit uit de eerste: « Het geheugen groeit bij elke sessie, hoe voorkom ik dat het de agent verstikt zonder het te wissen?
Het antwoord past in een patroon**heet/lauw/koud**, toegepast op de bestanden van bestuur. En in één principe :**nooit iets verliezen, altijd alles verplaatsen**.
== Links
* Vorige artikel :link:/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[Een AI-agent besturen met AsciiDoc]
* Mijn site : https://cheroliv.com
* Het project`magic-stick`: https://github.com/cheroliv/magic-stick
---
*Een goed governance-systeem verwijdert nooit gegevens. Het bewaart ze.*
----
----
De sleutel van het mechanisme:**de backup is geen centrale index, het is een exacte kopie van de vorige wave**. Wanneer we de horizon van 10 actieve sessies overschrijden, verwijderen we niets. We indexeren niets opnieuw. We voegen niets samen. We nemen het pakket agentbestanden zoals dat was bij sessie N-10, en we verplaatsen het naar`backup/`Please provide the text you would like me to translate.
De actieve bestanden worden daarentegen afgekapt:
* INDEX : alleen de laatste 10 regels (sliding window)
* SESSIONS_HISTORY : idem
* COMPLETED_TASKS_ARCHIVE : nieuw bestand voor de huidige periode
* sessions/ : alleen de laatste 2 sessies
[plantuml, format=svg, id=diag-hot-warm-cold, alt="Architecture Hot/Warm/Cold du contexte agent — EAGER/LAZY/backup"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 200
title Hot / Warm / Cold Architectuur van de Agent Context
package "HOT (EAGER)\nAutomatisch geladen\n~300 regels" as HOT #FFCDD2 {
file "INDEX.adoc\n(10 sessies)" as IDX_HOT
file "PROMPT_REPRISE\n(sessie N+1)" as PRO_HOT
file "AGENT.adoc\n(absolute regels)" as AG_HOT
}
package "WARM (LAZY)\nGeladen op aanvraag\n~500 regels" as WARM #FFF9C4 {
file "SESSIONS_HISTORY\n(laatste 10)" as HIS_WARM
file "SCRIPT_VERIFICATION\n(laatste)" as VER_WARM
file "PROCEDURES.adoc\n(templates)" as PRO_WARM
file "*_REFERENCE.adoc\n(technische doc)" as REF_WARM
}
package "COLD (backup/)\nNooit geladen\nAlleen voor menselijke lezing" as COLD #BBDEFB {
folder "Y2026-001-039/" as WAVE {
file "INDEX (volledig)" as IDX_COLD
file "SESSIONS_HISTORY\n(volledig)" as HIS_COLD
file "COMPLETED_TASKS\n(volledig)" as ARCH_COLD
folder "sessions/ (001-039)" as SESS_COLD
}
folder "Y2026-040-???\n(toekomstig)" as FUTURE
}
HOT --> WARM : "Agent haalt op\nindien nodig"
WARM --> COLD : "Nooit automatisch\nDe mens gaat er zelf heen"
note bottom of COLD
Regel: VOLLEDIGE KOPIE
Geen transformatie
Geen herindexering
Alleen-lezen na archivering
end note
@enduml
----
De onmiddellijke winst is enorm: de EAGER-context gaat van**~5200 regels naar ~300 regels**. Een deling door 17. Zonder een enkele regel historische gegevens te hebben verloren.
== Waarom dit geen verzamelbak is
De agent vreesde in zijn eerste iteratie dat`backup/`wordt een black box — een map waarin bestanden worden gegooid die men nooit meer zal herlezen. Dat is een terechte angst. Maar deze is gebaseerd op een misverstand.
Een verzamelbak is wanneer je bestanden gooit**zonder structuur, zonder conventie, zonder groeperingslogica**. Hier is de backup gestructureerd per periode (Y2026-001-039), en elke backupmap bevat**dezelfde structuur**dat het dossier`.agents/`actief: INDEX, SESSIONS_HISTORY, COMPLETED_TASKS_ARCHIVE, sessions/.
Het is geen verzamelbak. Het is een**tijdstempel-snapshot**. Men zou zelfs kunnen zeggen dat het een vereenvoudigd versioning-mechanisme is — met dat verschil dat het niet de individuele bestanden versioneert, maar het volledige governance-pakket op een bepaald tijdstip T.
Wanneer u oude informatie wilt terugvinden, heeft u geen centrale index nodig. U heeft twee opties:
1. **gerichte `grep**Waiting for your text to translate...`grep -r "zsh" backup/Y2026-001-039/`— en je vindt alles wat zsh vermeldt in die periode, ongeacht de invalshoek (INDEX, SESSIONS_HISTORY, sessie-archief).
2. **Handmatige herintegratie**: u kopieert tijdelijk de back-upmap naar de actieve context en vraagt de agent om deze specifieke periode te analyseren.
De index is impliciet. Deze bevindt zich in de structuur van de bestanden zelf — waarbij elk bestand al een index is vanuit zijn eigen perspectief.
== De Metafoor van de Planken
Om het mechanisme intuïtief te maken, heb ik het geconceptualiseerd in drie planken:
* **Plank 1 (EAGER)**— het werkplan. Waar ik *nu* behoefte aan heb. Recente INDEX, PROMPT_REPRISE, absolute regels. Licht, onmiddellijk, kritiek.
* **Plank 2 (LAZY)**— de referentiebibliotheek. Wat ik op aanvraag kan opzoeken. Technische referenties, recente geschiedenis, procedures. Omvangrijker, maar niet in het geheugen geladen.
* **Cave (backup/)**— de koude archieven. Alles wat voorbij is maar wat ik niet wil weggooien. De agent komt daar nooit. De mens daalt daar af wanneer hij wil distilleren.
De agent stelde aanvankelijk een vierde plank voor — een`index-backup.adoc`die LAZY zou zijn en een inhoudsopgave van de gehele back-up zou bevatten. Ik heb geweigerd. Dat zou een extra redundantie zijn in een systeem dat al lijdt onder lineaire groei. De structuur van de gearchiveerde bestanden is al een index.
== De Sensor met Twee Triggers
De conceptualisering was solide, maar er bleef één blinde vlek:**wanneer precies de rotatie triggeren?**Het oorspronkelijke artikel identificeerde het als een open vraag. Twee dagen later is het antwoord gecodificeerd in de governancedocumenten van zes projecten: een sensor met twee triggers.
=== De Automatische Trigger — `N % 10 == 0
De eerste trigger is wiskundig. Wanneer het sessienummer een veelvoud is van 10 — sessie 10, 20, 30, 40 — wordt de backup-rotatie automatisch uitgevoerd binnen de procedure voor het beëindigen van de sessie, direct na stap 6.
Waarom 10? Het is het compromis tussen twee tegenstelde krachten: een te kort venster (5 sessies) verliest de context die nodig is voor continuïteit; een te lang venster (20 sessies) lost het probleem van de overmatige context niet op. Tien sessies, met een ritme van één tot twee sessies per dag, dekken ongeveer een week werk — genoeg om de agent recente beslissingen te laten onthouden, niet genoeg om de context te laten exploderen.
=== De Drempeltrigger — 500 Regels EAGER
De tweede trigger is dynamisch. Onafhankelijk van het sessienummer, als de cumulatieve EAGER-bestanden hoger zijn dan**500 regels**, de rotatie wordt geactiveerd.
Deze drempel beschermt tegen het scenario waarin sessies uitzonderlijk productief zijn — veel geschreven inhoud in weinig sessies. Een sessie die 120 regels redactionele inhoud produceert, doet COMPLETED_TASKS_ARCHIVE veel sneller groeien dan een debug-sessie die twee regels corrigeert. De drempel van 500 regels, gemeten via`wc -l .agents/INDEX.adoc .agents/archives/COMPLETED_TASKS_ARCHIVE_*.adoc PROMPT_REPRISE.adoc`, vangt deze asymmetrie op.
=== De Handmatige Trigger — "rotation backup
Ten slotte behoudt de mens de controle. De trefwoorden`rotation backup`, `backup rotation` ou `lance la rotation backup`activeren de procedure op verzoek, onafhankelijk van het einde van de sessie. Handig wanneer men voelt dat de context te zwaar wordt maar men nog niet bij een veelvoud van 10 is, of wanneer men een werkfase wil archiveren voordat men aan een nieuwe begint.
[plantuml, format=svg, id=diag-capteur-trigger, alt="Les trois déclencheurs du capteur de rotation backup — automatique, seuil, manuel"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 200
title Backup Rotatiesensor — De Drie Triggers
start
:Procédure de fin de session;
note right: Mots-clés "sessie beëindigd"\nou "we stoppen hier"
:Étapes 1 à 6\n(archivage standard);
note right
1. Gearchiveerde sessies/N.adoc
2. Bijwerk PROMPT_REPRISE
3. Bijwerk SESSIONS_HISTORY
4. Bijwerk INDEX.adoc
5. Bijwerk TEST_COVERAGE
6. Bijwerk COMPLETED_TASKS
end note
if (N % 10 == 0\nOU\nEAGER cumulé > 500 lignes ?) then (oui)
:⚙️ Rotation Backup\n(étape 7);
note right
1. Maak backup/Y20XX-sessions-X-Y/ aan
2. Volledig kopiëren van INDEX + HISTORY
+ COMPLETED_TASKS + sessions/
3. Actieven inkorten tot 10 sessies
4. _Actieve locatie_ toevoegen
end note
else (non)
:Pas de rotation;
endif
:Checklist [✅] x 7\n(si applicable);
stop
@enduml
----
Dit diagram toont de exacte invoeging van de sensor in de procedure voor het beëindigen van de sessie. Stap 7 is optioneel — deze wordt alleen uitgevoerd als een van de twee voorwaarden waar is — maar wordt systematisch *gecontroleerd*. De definitieve checklist bevat`[✅] 7. Backup roté (si applicable)`Please provide the text you would like me to translate.
=== De Gesloten Lus
Deze sensor sluit de open lus van het vorige artikel. De Eager/Lazy-governance had het probleem van het agent-geheugen tussen twee sessies opgelost. Het Hot/Warm/Cold-mechanisme heeft het probleem van het groeiende geheugen opgelost. De sensor met twee triggers lost het probleem van het *wanneer* op — waardoor de cognitieve belasting om de contextgrootte te bewaken bij de mens wordt weggenomen.
[plantuml, format=svg, id=diag-boucle-fermee, alt="Les trois couches de la gouvernance agent — Eager/Lazy, Hot/Warm/Cold, Capteur"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
title De Drie Lagen van Agent Governance
left to right direction
package "Laag 1 — Geheugen\n(Artikel 0108)" as C1 #E8F5E9 {
rectangle "**EAGER**\nDashboard\nAuto geladen" as EAG
rectangle "**LAZY**\nGebruikershandleiding\nGeladen op aanvraag" as LAZ
EAG -[hidden]right-> LAZ
}
package "Laag 2 — Veroudering\n(Artikel 0110)" as C2 #FFF9C4 {
rectangle "**HOT**\n10 actieve sessies\n~300 regels" as HOT
rectangle "**WARM**\nReferenties\nProcedures" as WRM
rectangle "**COLD**\nbackup/\nKoude golf" as CLD
HOT -[hidden]right-> WRM
WRM -[hidden]right-> CLD
}
package "Laag 3 — Trigger\n(Vandaag)" as C3 #BBDEFB {
rectangle "**Auto**\nN % 10 == 0" as AUTO
rectangle "**Drempel**\n> 500 regels" as SEUIL
rectangle "**Handmatig**\nbackup rotatie" as MAN
AUTO -[hidden]right-> SEUIL
SEUIL -[hidden]right-> MAN
}
C1 --> C2 : "Het geheugen groeit\n→ er is een mechanisme\nvan veroudering nodig"
C2 --> C3 : "De veroudering\n→ er is een trigger nodig\nom deze uit te voeren"
note bottom of C3
✅ Uitgezet op 6 projecten
magic-stick · bakery-gradle
plantuml-gradle · cheroliv.com
jhipster-gradle-plugins
quizz-benchmark-gradle
end note
@enduml
----
De drie lagen stapelen zich logisch op. De eerste geeft de agent een geheugen. De tweede voorkomt dat dit geheugen de agent verstikt. De derde automatiseert het onderhoud van dit geheugen, zodat de mens er niet over na hoeft te denken.
=== De effectieve migratie op cheroliv.com
Het mechanisme is niet theoretisch gebleven. Op`cheroliv.com`, de eerste backup-rotatie werd uitgevoerd op 29 april 2026 — de sessies -6 tot 2 zijn gemigreerd naar`.agents/backup/Y2026-sessions-neg6-a-002/`Please provide the text you would like me to translate.
|===
|Bestand |Vóór rotatie |Na rotatie |Winst |`.agents/INDEX.adoc` |19 sessies vermeld |10 sessies (3-12) |-9 ingangen |`.agents/SESSIONS_HISTORY.adoc` |18 sessies |10 sessies |-8 ingangen |`COMPLETED_TASKS_ARCHIVE` |161 regels (sessies 1-12) |135 regels (sessies 3-12) |-26 regels |`sessions/` |20 bestanden |10 bestanden |-10 bestanden |**back-up/** |Niet bestaand |1 koudegolf (10 gearchiveerde sessies) |+1 cold pack
|===
De winst in regels was bescheiden — het project is jong, 12 sessies — maar het belangrijke is dat het**mechanisme is in place**. De volgende automatische rotatie wordt geactiveerd bij sessie 20, of eerder als de 500 EAGER-regels zijn bereikt.
== De Mens-Agent Les
Deze sessie 048 heeft me iets fundamenteels geleerd over de samenwerking met een AI-agent.
De agent heeft een natuurlijke bias: hij probeert te**optimaliseren**, à **vereenvoudigen**, à **redundanties elimineren**. Dit is de bias van een systeem dat is getraind om schone en beknopte antwoorden te produceren. Geconfronteerd met een rijke en multidimensionale dataset, is zijn eerste reflex om deze te reduceren tot de eenvoudigste vorm.
De mens daarentegen heeft een ander intuïtief gevoel: hij vermoedt dat gestructureerde redundantie een**troef**, geen gebrek. Dat juist de diversiteit aan invalshoeken op dezelfde realiteit is die later een kwalitatieve distillatie mogelijk zal maken.
Het is niet dat de agent ongelijk heeft. Het is dat zijn "optimum" niet het mijne is. De agent optimaliseert voor het**aanwezig**— de directe context, het snelle antwoord op de gestelde vraag. De mens optimaliseert voor het**toekomst**— het vermogen om over drie maanden of drie jaar terug te vinden, te kruisen en te distilleren.
Please provide the French text you would like me to translate. Wat ik wil, is het ruwe materiaal. Je overwegingen, je twijfels, je antwoorden op mijn vragen. Niet je synthese. De synthese kan ik beter dan jij. Ik wil de grondstof. Please provide the text you would like me to translate.
Deze zin die ik hem aan het einde van de sessie zei, vat alles samen. De agent is een productiemiddel. De mens is het distillatiemiddel. Governance is er niet voor zodat de agent alles uit zichzelf begrijpt — het is er zodat de mens later het geproduceerde materiaal kan bewerken.
Dezelfde koudegolf is de architecturale vertaling van deze filosofie: er wordt niets weggegooid, niets samengevoegd, niets opnieuw geïndexeerd. Het pakket wordt intact verplaatst. De distillatie komt later, handmatig, door de mens.
== Het logische vervolg van het vorige artikel
Als u heeft gelezenlink:/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[het artikel over de Eager/Lazy-strategie], zult u de natuurlijke progressie herkennen:
1. **Artikel 0108**— De Eager/Lazy-governance: *hoe* de agent-context te structureren in twee niveaus van beschikbaarheid
2. **Dit artikel 0110**— Het back-upmechanisme: *hoe* deze context kunt laten verouderen zonder deze te verliezen wanneer deze te volumineus wordt
Het eerste artikel beantwoordde de vraag: « De agent herinnert zich niets tussen twee sessies, hoe kunnen we hem een geheugen geven?
Deze beantwoordt de vraag die onvermijdelijk volgt uit de eerste: « Het geheugen groeit bij elke sessie, hoe voorkomen we dat het de agent verstikt zonder het te wissen?
Het antwoord ligt in een pattern:**Heet/Warm/Koud**, toegepast op de governance-bestanden. En als principe:**nooit iets verliezen, altijd alles herlokaliseren**Please provide the text you would like me to translate.
== Links
* Vorige artikel:link:/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[Een AI-agent aansturen met AsciiDoc]
* Mijn website: https://cheroliv.com
* Het project`magic-stick`: https://github.com/cheroliv/magic-stick
---
Een goed governsysteem verwijdert nooit gegevens. Het archiveert ze.