Toto je starší verze dokumentu!


Automatická kompaktace a kontextové okno v Codex CLI

Vytvořeno: 28.7.2026 | Aktualizováno: 28.07.2026 10:50

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.

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.

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ů.

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.

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.

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í.

Test s uměle nízkým prahem ověřil celý průběh:

  1. První modelový krok v novém threadu vrátil FIRST.
  2. Dočasný globální PreCompact hook blokoval pouze trigger: „auto“.
  3. Při druhém požadavku Codex hook skutečně zavolal s tímto vstupem:
{
  "hook_event_name": "PreCompact",
  "trigger": "auto"
}
  1. 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í.

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.

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.

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.

Claude Code s vypnutou automatickou kompaktací nemá vyšší fyzickou kapacitu. Po zaplnění skutečného kontextového okna nemůže ani on pokračovat se všemi původními raw daty a současně vytvořit další reasoning nebo výstup. Jeho výhoda je přímý a transparentní přepínač, kterým uživatel ovlivňuje okamžik ztrátové transformace.

Rozdíl mezi klienty je především ve způsobu zastavení:

  • 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.
  • Claude Code s vypnutou kompaktací: má stejný fundamentální limit, ale uživatel ho řídí přímo jedním nastavením místo globálního hooku.
  • ai/platformy/codex/autokompakce-a-kontextove-okno.1785228621.txt.gz
  • Poslední úprava: 28.07.2026 10:50
  • autor: Petr Nosek