Toto je starší verze dokumentu!


Automatická kompaktace a kontextové okno v Codex CLI

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

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.

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 ale umožňuje automatickou kompaktaci před provedením zastavit. To vrátí kontrolu uživateli, i když jde o méně přímočaré řešení než běžné nastavení.

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

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. Pak lze zvolit ruční /compact, snížit aktivní kontext nebo změnit 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. Běh se zastaví v okamžiku, kdy je potřeba učinit vědomé rozhodnutí mezi ruční kompaktací, zkrácením kontextu a rozdělením úlohy.

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.

Rozdíl tedy není v existenci kompaktace, ale v ovladatelnosti. V Codexu je pro ekvivalent ručně řízeného režimu potřeba udržovat a schválit globální PreCompact hook; Claude Code má pro tento účel přímou konfigurační volbu.

  • ai/platformy/codex/autokompakce-a-kontextove-okno.1785228094.txt.gz
  • Poslední úprava: 28.07.2026 10:41
  • autor: Petr Nosek