Toto je starší verze dokumentu!
Automatická kompaktace a kontextové okno v Codex CLI
Vytvořeno: 28.7.2026 | Aktualizováno: 28.07.2026 10:54
Codex CLI při dlouhé práci automaticky zkracuje historii konverzace. Tento zápisek zachycuje řízené testy přes ChatGPT OAuth, které ověřily praktický práh kompaktace pro GPT-5.6 Luna, viditelnost události a chování blokujícího hooku.
Shrnutí
Codex provedl automatickou kompaktaci ještě před odesláním dalšího velkého požadavku. Stalo se to i po jednorázovém nastavení model_auto_compact_token_limit=1000000, protože tato volba nastavuje práh, nikoli vypnutí.
V testovaném neinteraktivním režimu Codex uživatele na kompaktaci neupozornil: na standardní výstup vrátil pouze OK. Událost context_compacted byla dohledatelná až ve strojovém transcriptu JSONL.
Codex nemá jednoduchý boolean přepínač pro zákaz automatické kompaktace. Hook PreCompact umí automatickou kompaktaci před provedením zastavit, ale tím zastaví celý turn před odesláním přeteklého požadavku na backend. Chrání tedy před tichou ztrátovou transformací, nikoli před fyzickým limitem kontextového okna.
Rozsah testu
Test běžel přes ChatGPT OAuth, nikoli přes API klíč, s těmito parametry:
- Codex CLI
0.145.0, - model
gpt-5.6-luna, - reasoning
low, - nová čistá session,
- jednorázově nastavený práh
model_auto_compact_token_limit=1000000.
Modelový katalog doručený Codexu pro tento účet uváděl metadata context_window: 272000 a effective_context_window_percent: 95. Codex proto v transcriptu hlásil provozní okno model_context_window: 258400 tokenů.
Výsledek testu prahu
Dva velké požadavky prošly bez kompaktace:
- přibližně 214 938 vstupních tokenů,
- přibližně 252 983 vstupních tokenů.
Při dalším rozšíření kontextu Codex před odesláním dalšího požadavku vytvořil v transcriptu událost:
{
"type": "context_compacted"
}
Praktický práh pro tento běh byl tedy přibližně 258 400 tokenů. Test neurčil nejvyšší velikost požadavku, kterou by ještě přijal backend: Codex historii zkompaktoval dřív, než bylo možné odeslat větší nezkrácený požadavek.
Viditelnost kompaktace
V neinteraktivním režimu Codexu s JSON výstupem se kompaktace neobjevila jako běžné uživatelské sdělení. Její výskyt byl potvrzen pouze v uloženém rollout JSONL jako context_compacted.
Toto zjištění se vztahuje k testovanému neinteraktivnímu běhu. Chování TUI nebylo v tomto testu ověřeno, proto z něj nelze vyvozovat, zda interaktivní rozhraní událost zobrazuje jinak.
Blokování automatické kompaktace
model_auto_compact_token_limit nastavuje práh, ne zákaz automatické kompaktace. Aktuální implementace Codexu podle zdrojového kódu OpenAI Codex omezuje nakonfigurovanou hodnotu na interní kontextový limit. Vyšší hodnota proto nemůže zajistit zachování nezkrácené historie.
Místo booleanu typu disable_auto_compaction je možné použít hook PreCompact. Matcher ^auto$ zachytí pouze automatickou kompaktaci; ruční /compact tím zůstane dostupný. Hook musí vrátit continue: false, aby Codex zastavil běh před ztrátovou transformací.
Ověřený end-to-end test hooku
Test s uměle nízkým prahem ověřil celý průběh:
- První modelový krok v novém threadu vrátil
FIRST. - Dočasný globální
PreCompacthook blokoval pouzetrigger: „auto“. - Při druhém požadavku Codex hook skutečně zavolal s tímto vstupem:
{
"hook_event_name": "PreCompact",
"trigger": "auto"
}
- Codex už neposlal promptem požadovanou odpověď
SECOND.
Hook tedy neodešle přeteklý požadavek na backend. Turn je ukončen před kompaktací i před další modelovou odpovědí. Další pokus ve stejném nezměněném kontextu narazí na tutéž bránu znovu.
Konfigurace může být jednou globálně v ~/.codex/config.toml, takže ji není nutné přidávat do každého projektu:
[[hooks.PreCompact]] matcher = "^auto$" [[hooks.PreCompact.hooks]] type = "command" command = "/absolutni/cesta/block-auto-compact.sh" timeout = 5 statusMessage = "Automatic compaction blocked"
Skript block-auto-compact.sh může vracet například:
#!/bin/sh printf '%s\n' '{"continue":false,"systemMessage":"Automatická kompaktace zastavena."}'
Hook je nutné při prvním použití schválit přes /hooks. Nejde o přepnutí interní politiky Codexu: klient se stále pokusí automatickou kompaktaci vyvolat, ale hook zastaví celý turn před zkrácením historie. Pokračování vyžaduje ruční /compact, zkrácení aktivního kontextu, nový thread se selektivním handoffem nebo změnu zadání.
Kontext a výstupní rozpočet
Celé kontextové okno sdílejí zdrojová data, instrukce, výsledky nástrojů, reasoning a viditelný výstup:
zdrojová data + instrukce a tool output + reasoning + viditelný výstup <= celkové context window
Hodnota 128 tisíc tokenů je maximální výstup na jeden požadavek, ne další kapacita nad zaplněné kontextové okno. Při aktivním vstupu kolem 253 tisíc tokenů proto nezbývá prostor pro 128 tisíc tokenů výstupu; zbývající rozpočet dále snižují systémové instrukce, tool output a reasoning.
Kompaktace se týká historie před dalším požadavkem, ne právě generovaného výstupu. Během generování se odpověď nekompaktuje: po vyčerpání dostupného výstupního rozpočtu se odpověď ukončí. Její hotový obsah se může stát předmětem až některé budoucí kompaktace.
Dopad na workflow
Vzniká trade-off mezi věrností podkladů a prostorem pro další reasoning či výstup:
- Bez kompaktace: zůstane doslovný primární kontext, ale při velkém vstupu může zbýt jen malý prostor pro reasoning a odpověď.
- S kompaktací: uvolní se prostor pro další práci, ale část historie nahradí ztrátové shrnutí. Dlouhá nebo elegantní odpověď pak nemusí vycházet z úplného podkladu.
- S blokujícím hookem: Codex nezmění historii automaticky, ale přeruší aktuální turn. Bez manuální změny kontextu nebo ruční kompaktace nelze v práci pokračovat.
Pokud je současně potřeba zachovat celý původní raw kontext, pokračovat v témž threadu a získat další reasoning nebo výstup, po zaplnění context window je to fyzicky nemožné. Žádný klient tento limit neobejde.
Pro kritický primární materiál je bezpečnější zachovat původní kontext, chtít kratší strukturovaný výstup nebo práci rozdělit do etap. Pokud je shrnutí přijatelné, je vhodné spustit ruční kompaktaci, zkontrolovat její výsledek a teprve potom pokračovat.
Srovnání s Claude Code a OpenCode
Claude Code také ve výchozím nastavení používá automatickou kompaktaci; může mazat starší tool outputy a sumarizovat konverzaci. Na rozdíl od Codexu ji lze přímo vypnout přes nastavení autoCompactEnabled: false.
Hlavní praktický rozdíl: dostupná kapacita
Porovnání se vztahuje k aktuálně používanému modelu v Claude Code s kontextovým oknem 1 000 000 tokenů a k testovanému Codexu s provozním prahem 258 400 tokenů. Claude Code proto bez kompaktace udrží přibližně 3,9× více původního kontextu, než Codex dovolí před zásahem do historie nebo zastavením turnu.
Oba nástroje nakonec narazí na fyzický limit. Nejde ale o stejně vzdálený problém: Codex v tomto testu vyžaduje rozhodnutí o kompaktaci přibližně o 741 600 tokenů dříve. Pro dlouhé analytické nebo agentní workflow, kde je důležité zachovat doslovnou historii, je to hlavní provozní rozdíl.
Jak se nástroje chovají na svém limitu
- Claude Code s vypnutou kompaktací: zachovává historii až k přibližně jednomu milionu tokenů. Po dosažení svého skutečného limitu také nemůže pokračovat se všemi původními raw daty a vytvořit další reasoning nebo výstup.
- OpenCode s vypnutou kompaktací: pokusí se požadavek odeslat a backend vrátí
context_length_exceeded. - Codex s blokujícím hookem: zastaví už klient před odesláním, takže místo backendové chyby vznikne kontrolované zastavení turnu zhruba kolem 258 400 tokenů v testované konfiguraci.
Claude Code má navíc přímý a transparentní přepínač. Codex vyžaduje globální hook, který je potřeba vytvořit a schválit. Přesto je rozdíl v dostupném nezkráceném kontextu důležitější než rozdíl v UX ovládání.