Vrstvy kontextu a rozpočty
Agenti platia za každý prečítaný token. kontext odpovedá v malých, vrstvených častiach a necháva na agentovi, kedy si zaplatí za viac.
Brief
ctx_brief (alebo kontext brief) je vstupný bod, jeden blok s približne 1–2k tokenmi (brief.budget_tokens, predvolene 1400):
| Sekcia | Obsah |
|---|---|
| Hlavička | projekt, ID repozitára, vetva, About (zhrnutie prehľadu), Stack |
| Pravidlá pre agentov | AGENTS.md, CLAUDE.md, .cursorrules, inštrukcie pre Copilot a vnorené súbory AGENTS.md na cestách vo focuse |
| Zmenené od … | znalosti pridané, zmenené alebo odobrané od posledného briefu v tomto worktree, najviac päť riadkov (nižšie) |
| Governs <focus> (N) | pri focuse každý aktívny záznam, ktorého paths ho riadia, jeden kompaktný riadok na záznam, pred všetkým ostatným (nižšie) |
| Rozhodnutia | aktívne rozhodnutia, najrelevantnejšie pre focus ako prvé, každé na jeden riadok (najviac brief.max_decisions) |
| Konvencie · Poznatky a úskalia · Incidenty | každé na jeden riadok, zoradené podľa focusu |
| Flows cez focus | pri focuse flows, ktorých paths sa s ním prekrývajú (najviac štyri, s počtom krokov); brief bez focusu povie v jednom riadku, koľko flows existuje |
| Moduly | zhrnutia modulov (najviac brief.max_modules); pri moduloch vo focuse aj začiatok ich prehľadu |
| Submoduly | sekcia pre submodul s vlastnými znalosťami, keď v ňom ležia cesty z focusu alebo keď tento repozitár žiadne nemá; inak jednoriadkový odkaz |
| Lokálne poznámky | poznámky v inboxe tohto klonu (tímoví kandidáti aj súkromné poznámky), ktoré zodpovedajú focusu, inak tri najnovšie |
| Súvisiace dokumenty a história | v repozitári bez úložiska, keď už vyhľadávanie postavilo lokálny index: dokumenty a commity, ktoré zodpovedajú focusu |
| Z adaptérov | sekcie od adaptérov s operáciou brief (napr. primer zo sessions) |
| Stav | počty v inboxe, postup zavádzania, záznamy na kontrolu, záznamy na prehodnotenie, chýbajúce git hooky, varovania; miesto pre ňu je vyhradené, takže ju plný brief nevytlačí |
focus prijíma cesty (súbory alebo adresáre) a slová k téme. Záznamy, ktorých paths sa prekrývajú s cestou vo focuse, idú prvé; slová k téme sa porovnávajú s titulkami, zhrnutiami a štítkami. Keď všetky cesty vo focuse ležia v inom repozitári, brief je briefom toho repozitára (Viac repozitárov).
Položka focusu s /, glob znakom alebo známou príponou súboru je cesta, aj keď súbor ešte neexistuje, takže agent, ktorý ide vytvoriť src/billing/refunds.rs, dostane záznamy riadiace src/billing/**. Prekryv funguje oboma smermi: focus na adresár zodpovedá vzoru pod ním, aj vzorom, ktoré začínajú wildcardom (**/migrations/*.sql voči src/db) alebo úvodným lomítkom.
Čo riadi focus
Brief s focusom nikdy ticho nevyhodí riadiaci záznam. Sekcia Governs <focus> (N) je rezervovaná pred všetkými ostatnými a vypíše jeden riadok na záznam: plné id, názov, značky a · N commits since. Je zoradená podľa toho, ako špecificky paths záznamu menujú focus (súbor, potom adresár, potom glob, potom **), a potom od najstaršieho, lebo najstaršie obmedzenia nová zmena porušuje najčastejšie. Poradie neurčuje žiadny zoznam slov („never“, „must“).
Keď sa sekcia do rozpočtu nezmestí, záznamy, ktoré sa nezmestili, vymenuje jeden riadok, ktorý sa vytlačí vždy: also governing: [id] [id] …. Pod veľkosťou samotnej sekcie sa tlačia len id. Ostatné druhy sa potom orezávajú po riadkoch a každá orezaná sekcia končí riadkom s počtom: … 7 more (2 govern your focus). Celá sekcia nikdy nezmizne bez tohto riadku. Päta, ktorá agentovi povie, kde hľadať ďalej, sa ráta do rozpočtu a nahradené dokumenty modulov sa vynechajú.
Rozpočty sú v praxi od 200 do 1 400 tokenov: orchestrátor ako Peer posiela max(200, 1500 − už minuté tokeny), takže 200 až 1 000 je bežný prípad, nie okraj. Riadok Čo sa odvtedy zmenilo pod riadiacim záznamom stojí asi 25 tokenov; pri 200 tokenoch sú v riadiacej sekcii len id.
Značky
Krátky riadok nesmie nechať návrh vyzerať ako prijaté pravidlo. Riadok záznamu dostane značku, keď záznam nie je prijatá a schválená znalosť:
| Značka | Kedy |
|---|---|
(proposed), (deprecated), … | stav nie je accepted |
local, unapproved | súbor je v pracovnom strome nový, zmenený alebo stagnutý: ten text ešte nikto neschválil |
review due | uplynul jeho review_by |
challenged locally | inbox tohto klonu obsahuje námietku voči nemu |
N sources | nesie evidenciu |
Viac značiek zdieľa jedny zátvorky: Use queues for exports (proposed; local, unapproved). Prijatý a commitnutý záznam nemá žiadnu, takže bežný riadok nestojí tokeny navyše. Výsledky hľadania nesú tie isté značky vo svojich hranatých zátvorkách.
Zmenené od posledného briefu
Každý brief si zapamätá commit, ktorý videl, v cache lokálneho stavu worktree (.git/kontext/…/brief-head). Ďalší brief vypíše najviac v piatich riadkoch záznamy pridané, zmenené alebo odobrané odvtedy; nový záznam, ktorý iný nahrádza, ho pomenuje ((new, supersedes [0007] Prices are integer cents)). Bez cache — nový worktree, zmazaná cache — ukáže namiesto toho posledných 14 dní. Brief bez zmien takú sekciu nemá, takže bežný krok nepridá nič.
Sekcia má vlastný malý rozpočet a plný brief ju vypustí ako prvú; cache sa posunie, len keď sa sekcia ukázala, takže vypustená zmena príde v ďalšom briefe.
Na záznam sa odkazuje plným id ([2026-09-28-adapters-are-configuration]) alebo číslom ADR. Kratšia predpona by prestala byť jednoznačná, keď pribudne dlhšie id, a agenti tieto odkazy kopírujú do supersedes a [[odkazov]].
Claude Code, Codex a Cursor môžu dostať brief automaticky na začiatku session a riadiace záznamy pred úpravou: pozri Hooky. To, čo v jednej session vložia hooky, a ctx_brief, keď pozná session, čerpá z jedného rozpočtu [hooks] session_budget_tokens (6000).
Aktuálnosť
Záznam sa zapíše raz, ale kód, ktorý riadi, sa ďalej mení. Stav v briefe a kontext status vypíšu aktívne rozhodnutia, konvencie a poučenia, ktorých paths sa odvtedy, čo sa na ne niekto naposledy pozrel, dotklo aspoň freshness.threshold_commits commitov (predvolene 20), najviac zmenené ako prvé:
- May need a refresh (20+ commits on their paths since they were made, edited or confirmed): [0007] Prices are integer cents (34 commits), … — check them: confirm what still holds (`ctx_confirm`), supersede what no longer does.Počíta sa od najneskoršieho z troch okamihov: date záznamu, jeho potvrdenie checked a posledný commit, ktorý zmenil súbor záznamu (aj úprava je pohľad naň). Commity z dňa dátumu (alebo potvrdenia zapísaného ako deň), commity do sekundy potvrdenia a merge commity sa nepočítajú. Pri potvrdení alebo kontrole, ktorá uvádza commit, sa počíta podľa predkov: commity, ktoré HEAD dosiahne a ten commit nie, takže sa zaráta aj vetva zlúčená po pohľade. Zlyhaná kontrola nie je pohľad a počet nevynuluje; pečiatka agenta alebo bulk je pohľad. Commit sa počíta raz, nech sa zhoduje koľkokoľvek jeho súborov, a započíta sa aj presun kódu mimo riadenej cesty. Záznamy bez paths alebo bez date či checked, od ktorých by sa dalo počítať, sa neoznačia nikdy; incidenty a dokumenty modulov sa nesledujú. Označenie je výzva na kontrolu, nie verdikt: ak záznam stále platí, potvrď ho (kontext confirm <id>) a počíta sa odznova; ak nie, nahraď ho novým (supersede) alebo ho vyraď.
Pre rozsah commitov namiesto celej histórie pozri drift.
Záznamy každého druhu môžu niesť aj termín kontroly. Po ňom ich Stav v briefe vypíše ako Due for review a ich riadky majú značku review due; kontext status vypíše všetky. Oba signály sú na jednom mieste (src/freshness.rs).
Počty pochádzajú z jedného git log pre všetky sledované záznamy, od dátumu najstaršieho z nich (obmedzeného index.max_commits), a ukladajú sa do cache podľa HEAD v stavovom adresári worktree: brief nepridá žiadne volanie gitu na záznam a do ďalšieho commitu žiadne. Potvrdenie alebo úprava v pracovnom strome vynuluje počet ešte pred commitom. threshold_commits = 0 to vypne.
Úrovne: L0 · L1 · L2
Každý výsledok nesie URI. ctx_read ho vráti v úrovni, o ktorú agent požiada:
| Úroveň | Veľkosť | Použitie |
|---|---|---|
| 0 | jeden riadok | je to relevantné? |
| 1 | do ~4k znakov | väčšinou stačí na to, aby agent mohol konať (predvolené pre ctx_read) |
| 2 | celý obsah (najviac 80k znakov) | keď záleží na detailoch |
URI
| URI | Ukazuje na |
|---|---|
kx:<id> | záznam znalostí (kx:0007, kx:2026-09-28-prices-are-integer-cents alebo jednoznačná predpona ako kx:2026-09-28-prices) |
kx:<submodul>/<id> | záznam z úložiska submodulu (git:<submodul>/<sha> pre jeho commity) |
file:<path> / file:<path>#<section> | súbor v repozitári alebo jednu sekciu Markdown dokumentu |
git:<sha> | commit (L1 = správa a štatistika, L2 = celý diff) |
inbox:<id> | lokálny kandidát |
viking://…, … | čokoľvek, o čom adaptér deklaruje, že to vie prečítať (owns) |
Čítanie cez file: je obmedzené na repozitár a nikdy nevráti súbory s tajnými údajmi (.env*, kľúče, tfvars, …).
Rozpočty inde
ctx_searchvypíše výsledky ako jednotlivé riadky v rámcibudget_tokens(predvolene 1200) a povie agentovi, koľko ich odrezal.ctx_whydrží každú sekciu krátku: najviaclimitpoložiek na sekciu.ctx_threadsvracia prepis po častiach veľkýchbudget_chars(predvolene 20000), aby sa každá zmestila do jedného výsledku nástroja.- Sekcie adaptérov v briefe dostanú každá najviac tretinu zvyšného rozpočtu.
- Hooky hostiteľov čerpajú z jedného rozpočtu
[hooks] session_budget_tokensna session (ajctx_brief, keď dostanesession_idaleboCLAUDE_SESSION_ID); hook pri úprave zopakuje len záznamy, ktoré v session ešte nezazneli alebo ktorých blob sa zmenil.
Počty tokenov sa odhadujú na štyri znaky na token, zámerne jednoducho a konzervatívne.