Sliding Window и hladna vala: Kada kontekst agenta eksploduje i treba arhivirati bez gubitka
Објављено 26 April 2026
Sažetak
После 48 сесија на једном пројекту и 150+ укупно, система управљања Eager/Lazy који сам пажљиво конструирао је започео да се задавља. Датотеке агенata, које су требало да буду лаге, вежиле су 5200 укупних линија. Аутоматски учитан контекст је растеобрже од моjeg могушта да га контролам. Овај članak прича о томе kako sam концептуализовао резервни механизам копирања — међу sliding window и идентичној hladном valу — да одржам лаган активни контекст без губитка čega god.
Signal: 5200 linija
Нахожу се у среди сесије 048 на`magic-stick`, moj projekat za izgradnju live ISO Linux-a. Opencode me gleda. Kao uvek, on je automatski učitao moje Eager fajlove na početku sesije —AGENT.adoc, PROMPT_REPRISE.adoc, `.agents/INDEX.adoc`Ništa nije neobično.
Osim toga, nešto ne valja. Odgovori su sporiji. Razmišljanje je više razvedreno. Agent zaboravljava detalje koje je imao pred sobom pre dva poruke.
Отварам терминал и упишем:
wc -l .agents/INDEX.adoc .agents/SESSIONS_HISTORY.adoc \
.agents/archives/COMPLETED_TASKS_ARCHIVE_2026-04.adoc
260 linija za INDEX. 55 za SESSIONS_HISTORY.1756 za COMPLETED_TASKS_ARCHIVE.
Dossier`sessions/`доба још ~3200 линија. Укупно :5200 linijekonteksta koji se učitavaju, na jedan ili drugi način, u privremenom mozku agenta.
Strategija Eager/Lazy koju sam teorizovao u prethodnom članku radi — ali ima rodni nedostatak kojeg nisam prevideo: ona neнема механизма старења. Svaka sesija dodaje jednu liniju u INDEX, jedan pasaj u COMPLETED_TASKS, fajl u sessions/. Ništa nikad ne izlazi. Kontekst je snežna kugla koja se povećava svaki put prilikom nove sesije.
@startuml skinparam backgroundColor #FEFEFE skinparam handwritten false title Rast konteksta agenta — Sesije 1 do 48 rectangle "Сесија 1-10" as S10 #E8F5E9 rectangle "Sesija 11-20" as S20 #C8E6C9 rectangle "Сесија 21-30" as S30 #A5D6A7 rectangle "Сесија 31-40" as S40 #81C784 rectangle "Sesija 41-48" as S48 #66BB6A note right of S10 INDEX : ~50 lignes SESSIONS : ~10 lignes ARCHIVE : ~100 lignes **Total : ~300 lignes** end note note right of S20 INDEX : ~100 lignes SESSIONS : ~20 lignes ARCHIVE : ~400 lignes **Total : ~800 lignes** end note note right of S30 INDEX : ~160 lignes SESSIONS : ~30 lignes ARCHIVE : ~900 lignes **Total : ~1800 lignes** end note note right of S40 INDEX : ~220 lignes SESSIONS : ~45 lignes ARCHIVE : ~1400 lignes **Total : ~3200 lignes** end note note right of S48 INDEX : **260 lignes** SESSIONS : **55 lignes** ARCHIVE : **1756 lignes** **Total : 5200 lignes** ⚠️ end note S10 -[#green]-> S20 S20 -[#green]-> S30 S30 -[#FF9800]-> S40 S40 -[#red]-> S48 @enduml
Ovo nije greška, to je izravna posledica procedure za završetak sjednice koja pažljivo arhivira svaki detalj. Sistem je žrtva svog vlastitog uspeha.
Дијагностика: трострука редунданција
Zahtevam od agenta da dijagnostikuje problem. Njegov odgovor je odmah i hirurški precizan.
Fajl |
Линије |
Uloga |
Problem |
|
260+ |
EAGER (samopuno) |
Tabela svih sesija od 001 —+1 red po sesiji |
|
55 |
žedan |
Табела сажетка —redundantnost sa INDEX |
|
1756 |
EAGER (implicirana) |
Potpuni detalji svih aprilskih sesija |
|
~5200 total |
LEN (pretpostavljeno) |
individualne arhive, alinekorišćenezbog sve je već u COMPLETED_TASKS |
Agent identificuje četiri osnovna uzroka :
-
COMPLETED_TASKS_ARCHIVE absorbuje sve— Umesto da pokazuje ka arhivama`.sessions/`, on kopira sav sadržaj svake sesije.
-
INDEX.adoc služi kao kompletn istorijat— Табела "Последње сесионе" садржи 30+ уносова.
-
SESSIONS_HISTORY.adoc redundantan— Isto kao INDEX, drugačiji format.
-
Pravilo LAZY nije poštovano— COMPLETED_TASKS je implicitno EAGER jer sve sadrži.
Njegova predloga je radikalna: ograničiti INDEX na 10 sesija, prazniti COMPLETED_TASKS, premestiti SESSIONS_HISTORY u čist LAZY. Odmahna korist :~1900 linije sačuvane.
To je čisto, efikasno, logično. Ali imam problem sa ovim pristupom.
Zašto sam odbio evidentno rešenje
Rešenje agenta je to koje kod inženjera koji optimizuje keš. Ograničiti. Sačiniti. Ukloniti redundancije.
Ali ove "redundance" nisu. Svaki fajl upravljanja zapamtírazličit ugaoна истој стварности :
-
INDEKS= makro pogled, izvršna ploča
-
ISTORIJA_SESIJA = линеарна хронолошка табела, оценњена
-
COMPLETED_TASKS_ARCHIVE= detaljni narativ sa metričkim podacima
-
sessions/*.adoc` = individualne arhive, pun kontekst
Ово није глупо дуплирање. Ово је одvišestruka strukturisana perspektiva. Ovo je tačno ono što je potrebno za destilaciju — da kasnije čovek (ili budući LLM bolje treniran) može prekrstiti uglove i izvući uzorce.
Umajini data scientist koji vam kaže: «Uklonimo tri kolone od šest, one su korelisane.» Šta mu odgovorite? Da korelacija nije redundantnost kada svaka kolona uhvata različitu dimenziju istog fenomena. To je presično ova dimenzionalna bogatost koja čini skup podataka koristan.
To je moja intuicija. Ja je branim protiv hladne racionalnosti agenta.
_ Ne vidim tiho sveukupno u mojoj ideji. Ne bačimo sve, premještamo strukturirani rezultat procedure završetka sesije — svaki fajl sa svojim uglom, svojim redundantnim podacima koji su zapravo unapređenje. To je višedimenzionalni materijal koji će biti bolji za destilaciju. _
Агент прима удара. И исправља се.
Предлог: Идентична хладна таласа
Agent zatim ponuđuje finiji mehanizam koji poštuje moju intuiciju o bogatom datasetu, dok u isto vreme rešava tehnički problem konteksta koji eksploduje.
Princip je jednostavan i direktno se inspiše uzorcomVruć/topla/hladna skladištaprimenjeno u upravljanju arhivama:
-
toplo (EAGER)= 10 poslednjih sesija u INDEX, PROMPT_REPRISE sesije N+1, 2 poslednja fajla sesije
-
Toplo (LENTO)SESSIONS_HISTORY нови, SCRIPT_VERIFICATION, цела референтна документација
-
hladno (backup/)= sve ostalo, pomerenoнеповређен, без трансформације, без реиндексације
----
----
.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...
----
Ključ mehanizma :**Backup nije centralni indeks, već je tačna kopija prošle vala**. Kada prelaziš horizont od 10 aktivnih sesija, ne briše se ništa. Ne reindexuje se ništa. Ne spaja se ništa. Uzmemo paket fajlova agenata kako je bio u sesiji N-10, i pomeramo ga u`backup/`.
Aktivni fajlovi, oni, su sečeni :
* INDEX : samo poslednjih 10 linija (sliding window)
* SESSIONS_HISTORY : isto
* COMPLETED_TASKS_ARCHIVE : novi fajl za tekući period
* sessions/ : samo poslednje 2 sesije
[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 Arhitektura Hot / Warm / Cold agenta konteksta
package "HOT (EAGER)
Učitan automatski
~300 linija" as HOT #FFCDD2 {
file "INDEX.adoc
(10 sesija)" as IDX_HOT
file "PROMPT_REPRISE
(sesija N+1)" as PRO_HOT
file "AGENT.adoc
(apsolutna pravila)" as AG_HOT
}
package "WARM (LAZY)
Учитаван на захтев
~500 линија" as WARM #FFF9C4 {
file "SESSIONS_HISTORY
(10 poslednjih)" as HIS_WARM
file "SCRIPT_VERIFICATION\n(последња)" as VER_WARM
file "PROCEDURES.adoc\n(шаблони)" as PRO_WARM
file "*_REFERENCE.adoc
(технички документ)" as REF_WARM
}
package "COLD (backup/)
Nikad nije učitan
Samo ljudsko čitanje" as COLD #BBDEFB {
folder "Y2026-001-039/" as WAVE {
file "INDEX (kompletan)" as IDX_COLD
file "SESSIONS_HISTORY\n(kompletan)" as HIS_COLD
file "COMPLETED_TASKS\n(complet)" as ARCH_COLD
folder "sesije/ (001-039)" as SESS_COLD
}
folder "Y2026-040-???\n(budućnost)" as FUTURE
}
HOT --> WARM : "Agent podiže se ako je potrebno"
WARM --> COLD : "nikad automatski
čovjek ide tamo sam"
note bottom of COLD
Règle : COPIE INTÉGRALE
Pas de transformation
Pas de réindexation
Read-only après archivage
end note
@enduml
----
Odmakavna dobit je ogromna : kontekst EAGER prelazi sa**~5200 linija do ~300 linija**. Подјело на 17. Није изгубио ниједну линију историјских података.
== Zašto nije sve u jednom
Агент, у првој итерацији, је бојао се да`backup/`postane crna kutija — fajl u koji bacamo fajlove koje nikada nećemo pročitati. To je legitiman strah. Ali se temeli na zabludi.
Смешак је када bacimo datoteke**без структуре, без конвенције, без логике групирања**. Ovde, rezervna kopija je strukturisana po periodu (Y2026-001-039), i svaki folder rezervne kopije sadrži**иста структура**da je fajl`.agents/`aktivan : INDEX, SESSIONS_HISTORY, COMPLETED_TASKS_ARCHIVE, sessions/
Ово није сабирање свега. Ово је**snapshot временски обележен**Moglo bi se čak reći da je pojednostavljena verzija mehanizma versioninga — osim toga što ne verzionira pojedinačne fajlove, već ceo paket upravljanja u jednom trenutku T.
Kada želite da pronađete staru informaciju, ne treba vam centralni indeks. Imate dve opcije :
1. **grep` ciljani**:`grep -r "zsh" backup/Y2026-001-039/`— i nađete sve što spominje zsh u tom periodu, bez obzira na ugao (INDEX, SESSIONS_HISTORY, arhiva sesije).
2. **Ručna reintegracija**Privremeno kopirate folder sa rezervnom kopijom u aktivni kontekst, i zatežete agenta da analizira ovaj konkretan period.
Indeks je implicitan. On je u samoj strukturi fajlova — svaki je već indeks iz svog vlastitog ugla.
== Метафора полица
Da bih mehanizam učinio intuituivnim, ja ga sam konceptualizovao u tri police:
* **Polica 1 (EAGER)**— план радова. Шта ми је потребно *сада*. INDEX рецент, PROMPT_REPRISE, апсолутна правила. Лаган, немедијан, критичан.
* **Polica 2 (LAZY)**— biblioteka za konsultacije. Šta mogu da preuzmem na zahtev. Tehničke reference, nedavna istorija, procedura. Veći zapremine, ali ne učitan u memoriju.
* **Пећинa (backup/)**— hladni arhivi. Sve što je prošlo, ali ja ne želim da bacim. Agent nikad ne ulazi tamo. Čovjek spušta se tamo kad hoće da destilira.
Agent je inicijalno ponudio četvrtu policu — jedan`index-backup.adoc`Koji bi bio LAZY i sadržavao sadržaj cijelog backupa. Odbio sam. Bio bi bila dodatna redundantnost u sustavu koji već pati zbog linearnog rasta. Struktura arhiviranih datoteka već je indeks.
== Сензор са два спустача
Konceptualizacija bila je čvrsta, ali je ostala jedna slepa tačka :**Kada tačno pokrenuti rotaciju?**Prvi članak ga je identificirao kao otvoreno pitanje. Dani dva kasnije, odgovor je kodiran u fajlovima upravljanja šest projekata: senzor sa dva pokretača.
=== Automatski Pokretač — `N % 10 == 0
Први тригер је математички. Када је број сесије множе 10 — сесије 10, 20, 30, 40 — ротација резервне копије извршава се аутоматијски у оквиру процедуре завршетка сесије, одмах након корака 6.
Deset sesija, u tempu od jedne do dve sesije dnevno, pokriva približno jednu nedjelju rada — dovoljno da agent zapamti nedavne odluke, ali ne toliko da kontekst eksplodira.
=== Trigger po pragu — 500 linija EAGER
Drugi pokretač je dinamičan. Bez obzira na broj sesije, ako se akumulovani fajlovi EAGER pređu**500 redova**, rotacija se pokreće.
Ovaj prag štiti od scenarija u kojem su sesije izuzetno produktivne — veliko sadržaja napisano u malo sesija. Sesija koja proizvede 120 linija uređivačkog sadržaja ubrzano povećava COMPLETED_TASKS_ARCHIVE nego sesija debugovanja koja ispravi dvije linije. Prag od 500 linija, meren preko`wc -l .agents/INDEX.adoc .agents/archives/COMPLETED_TASKS_ARCHIVE_*.adoc PROMPT_REPRISE.adoc`, uhvata ove asimetriju.
=== ručni pokretač — "rotation backup
Konačno, čovek drži kontrolu. Ključne reči`rotation backup`, `backup rotation` ou `lance la rotation backup`pokreću proceduru na zahtev, nezavisno od kraja sesije. Korisno kada osjećate da kontekst postaje tešak ali još niste u množestu od 10, ili kada želite da arhivirate fazu rad pre nego što poćnete novu.
[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 Резервни сензор за ротацију — Три триггера
start
:Procédure de fin de session;
note right: Mots-clés "kraj sesije"\nou "Zaustavljamo se ovde."
:É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
----
Овај дијаграм показује тачно убацивање сензора у процедури завршетка сеanse. Корак 7 је опциона — извршава се само ако је једно од два услова испуњено — али се 체계сно *проверено*. Коначна чек-листа включаје`[✅] 7. Backup roté (si applicable)`.
=== Zatvorena petlja
Ovaj senzor zatvara otvorenu petlju iz prethodnog članka. Upravljanje Eager/Lazy je rešilo problem memorije agenta između dva sesija. Mehanizam Hot/Warm/Cold je rešio problem memorije koja se povećava. Senzor sa dva triggera rešava problem *kad* — uklanjajući ljudskom biću mentalno opterećenje praćenja veličine konteksta.
[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 Tri sloja agentskog upravljanja
left to right direction
package "Слој 1 — Меморија
(Члан 0108)" as C1 #E8F5E9 {
rectangle "**EAGER**
Табло
Аутоматски унет" as EAG
rectangle "**LAZY**
Vlasnički priručnik
Učitano na zahtev" as LAZ
EAG -[hidden]right-> LAZ
}
package "Слой 2 — Старење
(Член 0110)" as C2 #FFF9C4 {
rectangle "**HOT**
10 aktivnih sesija
~300 linija" as HOT
rectangle "**WARM**
Reference
Proceduri" as WRM
rectangle "**COLD**
backup/
hladna vala" as CLD
HOT -[hidden]right-> WRM
WRM -[hidden]right-> CLD
}
package "Слој 3 — Тригер
(Данас)" as C3 #BBDEFB {
rectangle "**automatski**
N % 10 == 0" as AUTO
rectangle "**Prag**
> 500 linija" as SEUIL
rectangle "**Manuel**
rotacija rezervne kopije" as MAN
AUTO -[hidden]right-> SEUIL
SEUIL -[hidden]right-> MAN
}
C1 --> C2 : "Меморија расте
→ потребан је механизам
старения"
C2 --> C3 : "Starenje
→ potrebno je imati pokretač
da se izvrši"
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
----
Tri sloja se logično stavljaju jedan na drugi. Prvi sloj agentu daje memoriju. Drugi sloj sprecava da memorija dusni agenta. Treći sloj automatizira održavanje ove memorije kako bi čoveku nije trebalo da o njemu misli.
=== Efektivna migracija na cheroliv.com
Механизам није остао 이론ски. На`cheroliv.com`, prva rezervna rotacija je izvršena 29. aprila 2026 — sesije -6 do 2 su se premestile ka`.agents/backup/Y2026-sessions-neg6-a-002/`:
|===
|Файл |Пред ротацију |Posle rotacije |dobitak |`.agents/INDEX.adoc` |19 navedenih sesija |10 sesija (3-12) |-9 zapisi |`.agents/SESSIONS_HISTORY.adoc` |18 sesija |10 sesija |-8 ulaza |`COMPLETED_TASKS_ARCHIVE` |161 linija (sesija 1-12) |135 linija (sesije 3-12) |-26 linija |`sessions/` |20 fajlova |10 fajlova |-10 datoteka |**rezervna kopija/** |nepostajeći |1 hladna val (10 arhivirih sesija) |+1 hladan paket
|===
Poboljšanje u linijama je bilo skromno — projekat je mlad, 12 sesija — ali važno je što je**Mehanizam je na mestu**. Sledeća automatska rotacija će se aktivirati u sesiji 20, ili prethodno ako se dostignu 500 EAGER linija.
== Lekcija Čovjek-Agent
Ova sesija 048 me je naučila nešto temeljno o suradnji sa agentom veštačke inteligencije.
Agent ima prirodni bijas: potražuje da**оптимизовати**, à **поједноставити**, à **Уклонити редундантности**. To je pristrasnost sistema koji je treniran da daje čiste i kratke odgovore. U kontekstu bogatog i multidimenzionalnog dataseta, njegov prvotni refleks je da ga smanji na najjednostavniji izraz.
Čovek, on, ima drugu intuíció: oseća da je strukturirana redundancija jedna**prednost**, nije greška. Da raznolikost uglova na istoј stvarnosti jest tačno ono što će kasnje omogućiti kvalitetnu distilaciju.
Nije da agen krivi. Nego to što je njegov "optimum" nije moj. Agen optimizuje za**садашњи**— neposredni kontekst, brži odgovor na postavljeno pitanje. Čovek optimizuje za**budućnost**— способност да нађе, прекрижи, дестила у три месеца или три године.
____ Šta želim je neobrađeni materijal. Tvoje razmišljanja, tvoje dileme, tvoje odgovori na moja pitanja. Ne tvoja sinteza. Sintezu znam da napravim bolje od tebe. Željem sirov materijal. ____
Ова реченица коју сам му рекао на крају сесије саžима све. Агент је алат за производњу. Човек је алат за дистилацију. Управа није направљена да агент разуме све сам по себе — она је направљена да човек касније може да ради са произведеним материјалом.
Идентичан хладан вал је архитектурно превеђење ове filozofije: не бацамо ништа, не спајамо ништа, не реиндексирамо ништа. Премештамо цео пакет. Дисталација ће доћи позје, руком људи.
== Logični nastavak prethodnog člana
Ako ste pročitalilink:/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[članak o strategiji Eager/Lazy], ćete prepoznati prirodni napredak:
1. **Član 0108**— Upravljanje Eager/Lazy : *comment* strukturisanje konteksta agenta u dva nivoa dostupnosti
2. **Овај чланак 0110**— Mehanizam rezervnog kopiranja: *kako* da postariš ovaj kontekst bez da ga gubi kada postane prevelik
Prvi članak je odgovorio na pitanje : « Agent ne pamti ništa između dva sesija, kako mu dati memoriju ?
Ovaj odgovara na pitanje koje neizbežno proizlazi iz prvog: « Memorija raste na svakoj sesiji, kako je sprečiti da dusiti agenta bez njezinog brisanja?
Odgovor se mieštu jedan obrasc:**vruć/topao/hladan**, primenjen na datoteke upravljanja. I kao jedan princip :**nikad nista ne gubiti, uvek sve premestiti**.
== Линкови
* Prethodni članak :link:/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[Upravljanje agentom AI pomoću AsciiDoc]
* Мој сајт : https://cheroliv.com
* Пројекат`magic-stick`: https://github.com/cheroliv/magic-stick
---
*Dobar sistem upravljanja nikad ne briše podatke. On ih skladišti.*
----