Toto je starší verze dokumentu!
Automatická kompaktace a kontextové okno v Codex CLI
Vytvořeno: 28.7.2026 | Aktualizováno: 28.07.2026 10:45
Codex CLI při dlouhé práci automaticky zkracuje historii konverzace. Tento zápisek zachycuje řízený test přes ChatGPT OAuth, který ověřil praktický práh kompaktace pro GPT-5.6 Luna, viditelnost události a možnost automatickou kompaktaci blokovat.
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 sice umí automatickou kompaktaci před provedením zastavit, ale zároveň zastaví celý turn. Nejde tedy o ekvivalent pokračování v práci s nezměněným kontextem; jde o ochranu před tichou ztrátovou transformací.
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ý hook
Následující postup byl ověřen v izolovaném testu. Dočasný profil nastavil práh na jeden token, aby se hook vyvolal bez dlouhého požadavku. Hook obdržel trigger: „auto“, vrátil continue: false a Codex již neposlal očekávanou další modelovou odpověď.
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. Se stejným nezměněným kontextem se při dalším pokusu vyvolá znovu. Pokračování proto vyžaduje ruční /compact, zkrácení aktivního kontextu 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.
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
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.
Rozdíl je výraznější než pouhá konfigurace. Po nastavení autoCompactEnabled: false Claude Code nepřerušuje turn jen proto, že dosáhl vlastního prahu pro automatickou kompaktaci; ponechává nezměněnou historii, dokud se požadavek vejde do skutečného kontextového okna. Uživatel tak může v rámci dostupné kapacity pokračovat bez kompaktace a sám rozhodnout, kdy provede ztrátovou transformaci.
V Codexu blokující PreCompact hook funguje jinak: v okamžiku jeho interního prahu klient zastaví turn před dalším modelovým krokem. Hook tedy zajišťuje, že Codex historii potichu nezmění, ale nedává možnost pokračovat se stejným kontextem za tímto prahem. Pro ručně řízenou práci je to zásadní provozní i UX rozdíl.