Przejdź do głównej zawartości

Zarządzanie kontekstem w różnych interfejsach Codex

Zarządzanie kontekstem w Codex polega na tym, by stały prefiks wątku (instrukcje, AGENTS.md, narzędzia MCP i skille) był mały, a rozmowa na tyle krótka, żeby wczesne ograniczenia przetrwały. Codex CLI 0.157.1 kompaktuje historię automatycznie i na żądanie (/compact). Przy długiej pracy sprawdza się łańcuch krótkich wątków połączonych plikiem przekazania, a testy są dowodem.

Ta strona jest dla programistów, którzy uruchamiają Codex przy wielogodzinnych zadaniach, i dla tech leadów, którzy chcą, żeby takie sesje kończyły się tak samo u każdego w zespole. Sytuacja jest znajoma: masz za sobą 40 tur migracji rozliczeń, a Codex edytuje trasę v1, którą wykluczyłeś w trzeciej turze, ponownie czyta pliki, które już streścił, i zadaje pytanie, na które odpowiedziałeś godzinę temu. Model nie zgłupiał. Pogorszył się kontekst, z którego pracuje.

Jeśli nie masz jeszcze skonfigurowanego config.toml ani serwerów MCP, zacznij od konfiguracji Codex i konfiguracji MCP.

Co daje zdyscyplinowane zarządzanie kontekstem w Codex

Dział zatytułowany „Co daje zdyscyplinowane zarządzanie kontekstem w Codex”
  • Sposób, by zmierzyć, co niesie wątek, zanim obwinisz model: /status, /mcp i codex debug prompt-input.
  • Regułę decyzyjną: kiedy kompaktować, forkować, zadać pytanie na boku, a kiedy zacząć nowy wątek.
  • Plik przekazania i dwa prompty, które przenoszą zadanie między wątkami bez planowania od nowa.
  • Sposób, by udowodnić, że długa sesja trzyma się ograniczeń, bez czytania transkryptu.
  • Jasność, co przechodzi z CLI do aplikacji desktopowej, IDE i Codex cloud, a co nie.

Każda tura wysyła do modelu jedno wejście. Składa się z dwóch części, które psują się na różne sposoby.

CzęśćCo zawieraJak ją zobaczyćJak ją zmniejszyć
Stały prefiks, płacony w każdej turzeInstrukcje samego Codex, globalny ~/.codex/AGENTS.md, łańcuch projektowych AGENTS.md, nazwy i opisy skilli, definicje narzędzi MCPcodex debug prompt-input "ping" renderuje część instrukcyjną jako JSON; /mcp pokazuje podłączone narzędzia; /skills pokazuje skillePrzytnij łańcuch AGENTS.md i przenieś procedury do skilli; wyłącz serwery MCP, których repozytorium nie potrzebuje
Rozmowa, rośnie z każdą turąTwoje prompty, odpowiedzi agenta, wywołania narzędzi, wyjście poleceń i zawartość przeczytanych plików/status pokazuje zużycie tokenów i okno kontekstu bieżącego modelu/compact, /side, subagenty i nowe wątki

Dla bieżących modeli OpenAI Codex używa domyślnie okna 272K tokenów. Możesz je powiększyć kluczem model_context_window w config.toml, do limitu katalogu 872K (szczegóły per model: przegląd modeli). Większe okno odsuwa kompakcję. Nie sprawia jednak, że model przykłada tę samą uwagę do tury 3 i tury 300, a każda tura ponownie wysyła wszystko, co nadal jest w oknie. Dlatego ta strona traktuje okno jako budżet do zarządzania, a nie liczbę do maksymalizowania.

Zrób to raz na repozytorium i ponownie, gdy ktoś doda serwer MCP albo duży AGENTS.md.

  1. Zacznij nowy wątek w katalogu, w którym zwykle pracujesz, i uruchom /status. Zanotuj wiersz Agents.md (które pliki instrukcji się załadowały i w jakiej kolejności), Token usage oraz Context window. Przed pierwszą turą zużycie może jeszcze nie być widoczne, więc wyślij jeden krótki prompt (na przykład ping) i ponownie uruchom /status: zużycie tokenów po tej pierwszej turze to w przybliżeniu twój prefiks.

  2. Wypisz narzędzia. Uruchom /mcp verbose. Każdy podłączony serwer dokłada definicje narzędzi. Serwer do automatyzacji przeglądarki to martwy balast przy migracji bazy danych.

  3. Wyłącz to, czego to zadanie nie potrzebuje. W .codex/config.toml projektu albo w swoim ~/.codex/config.toml:

    [mcp_servers.playwright]
    enabled = false
    [mcp_servers.github]
    enabled_tools = ["get_pull_request", "list_pull_request_files"]
  4. Sprawdź łańcuch instrukcji. Jeśli w wierszu Agents.md brakuje oczekiwanego pliku, zatrzymaj się i przejdź do opisu, jak Codex wybiera pliki AGENTS.md do załadowania. Łańcuch projektowy dzieli budżet 32 KiB (project_doc_max_bytes, domyślnie 32 768 bajtów), a gdy budżet się kończy, Codex po cichu obcina najgłębszy plik.

  5. Uruchom ponownie /status w nowym wątku po tym samym krótkim prompcie i potwierdź, że liczba tokenów spadła.

Kiedy kompaktować, forkować, pytać na boku, a kiedy zacząć nowy wątek?

Dział zatytułowany „Kiedy kompaktować, forkować, pytać na boku, a kiedy zacząć nowy wątek?”

Codex daje kilka sposobów, by zatrzymać przyrost historii wątku. Nie są wymienne.

Chcesz…UżyjCo dzieje się z kontekstem
Kontynuować to samo zadanie, ale wątek jest długi/compactRozmowa zostaje zastąpiona streszczeniem. Szczegóły, których nie powtórzysz, mogą przepaść.
Zadać szybkie pytanie bez zaśmiecania głównego wątku/side (alias /btw)Rozmowa poboczna w efemerycznym forku. Główny wątek nie rośnie.
Wypróbować inne podejście od bieżącego miejsca/fork w TUI albo codex fork --lastKopiuje wątek. Obie kopie niosą pełną historię.
Zacząć następną fazę z czystym oknem/new, potem wklej plik przekazania albo wskaż goPrzetrwa tylko to, co przekażesz.
Przenieść eksplorację gdzie indziejPoproś Codex o uruchomienie subagenta (multi-agent jest domyślnie włączony w 0.157.1; /subagents przełącza między nimi)Subagent czyta pliki we własnym wątku i zwraca raport.
Wrócić do wczorajszej pracycodex resume --last albo codex resume <SESSION_ID lub nazwa>Wczytuje zapisany wątek razem ze wszystkim, co było w jego kontekście.

Wynika z tego reguła: kompaktuj w obrębie fazy, nowy wątek zaczynaj między fazami. Faza to jednostka, którą da się zweryfikować samodzielnie, na przykład „router v2 ma szkielet, a jego testy kontraktowe przechodzą”. Kompakcja to streszczenie napisane przez model pod presją. Plik przekazania to streszczenie, które napisałeś świadomie i które możesz przeczytać.

Codex kompaktuje sam, gdy wątek zbliża się do limitu. Dwa klucze config.toml, oba obecne w Codex CLI 0.157.1, zmieniają moment kompakcji:

~/.codex/config.toml
# Kompaktuj, gdy rozmowa osiągnie tyle tokenów, zamiast tuż przed końcem okna.
model_auto_compact_token_limit = 180000
# Kompaktuj też po odpowiedzi końcowej, gdy zużycie przekroczy ten procent (od 0 do 100, sprawdzone w 0.157.1).
model_post_turn_compact_threshold_percent = 70

Zostaw oba nieustawione, żeby zachować wbudowane zachowanie Codex. Obniż je, gdy zauważysz, że pod koniec długich wątków ograniczenia się rozmywają. Wcześniejsza kompakcja daje mniejsze, częstsze streszczenia, a tury pozostają tańsze. Codex 0.157.1 emituje też zdarzenia hooków PreCompact i PostCompact, dzięki którym możesz logować moment kompakcji w sesji, którą audytujesz.

Kompakcja to zabezpieczenie, a nie plan. Codex 0.157.1 sam wyświetla ostrzeżenie: „Long threads and multiple compactions can cause the model to be less accurate. Start a new thread when possible to keep threads small and targeted.” (długie wątki i wielokrotna kompakcja obniżają dokładność modelu; gdy to możliwe, zaczynaj nowy wątek). Następna sekcja zamienia tę radę w rutynę.

Przy zadaniu na kilka dni sprawdza się łańcuch: jeden wątek planuje, a każdy kolejny implementuje jedną fazę na podstawie pliku w repozytorium. Plik jest jedyną rzeczą, która przekracza granicę wątku, więc możesz go przejrzeć i wersjonować.

  1. Zaplanuj w pierwszym wątku. Poproś o fazy, pliki, których dotyka każda faza, i testy, które dowodzą, że faza jest skończona.

  2. Zapisz przekazanie na dysku. Niech Codex zapisze docs/plans/invoice-v2.md promptem poniżej. Przeczytaj go sam; z założenia jest krótki. To jedyny artefakt w łańcuchu, który sprawdzasz linijka po linijce.

  3. Każdą fazę zaczynaj w nowym wątku przez /new, wskaż plik i nazwij wątek przez /rename invoice-v2-phase-1, żeby codex resume invoice-v2-phase-1 znalazło go później.

  4. Kończ każdą fazę aktualizacją pliku. Wątek zapisuje, co się zmieniło, jakie decyzje podjął i które polecenie testowe przeszło. Kolejny wątek startuje od tego stanu, zamiast odkrywać go na nowo.

W fazach uruchamianych skryptem codex exec obsługuje ten sam łańcuch. Świadomie wybierz między kontynuacją sesji a czystym startem:

Okno terminala
# terminal: kontynuacja ostatniej sesji exec, z całym transkryptem i jego kosztem kontekstu
codex exec resume --last "Implement phase 2 from docs/plans/invoice-v2.md, then run its tests."
# terminal: czysty start; przechodzi tylko plik przekazania
codex exec "Implement the phase marked next in docs/plans/invoice-v2.md, run its tests, update the file."

Czysty start to domyślny wybór dla nowej fazy. Wznawiaj, gdy poprzednie uruchomienie przerwano w połowie fazy i nadal potrzebujesz wyniku jego narzędzi. W interaktywnym TUI odpowiednikami są codex resume --last i /new. O --json, --output-schema i --ephemeral w potokach przeczytasz w artykule o nieinteraktywnym Codex.

Najszybciej zapełnia okno wątek implementujący, któremu pozwalasz czytać kod. Dwa nawyki utrzymują go w ryzach.

  • Deleguj czytanie. Poproś subagenta, żeby zmapował kod i zwrócił krótki raport. Zawartość plików zostaje w wątku subagenta. Wzorce znajdziesz w artykule o przepływach wieloagentowych w Codex.
  • Proś o symbole, nie o pliki. „Przeczytaj createInvoice i miejsca wywołań” kosztuje ułamek tego, co „przeczytaj services/api/src/”.

Jak udowodnić, że długa sesja trzymała się ograniczeń?

Dział zatytułowany „Jak udowodnić, że długa sesja trzymała się ograniczeń?”

W długim wątku najłatwiej ukryć dryf, a czytanie 300 tur, żeby go znaleźć, przekreśla sens delegowania. Umieść dowód w artefaktach, które sprawdzisz w minutę.

  • Ograniczenia jako kontrole, nie proza. „Nie zmieniaj tras v1” staje się kontrolą w CI, która pada, gdy diff dotyka src/routes/v1/. Regułę, którą agent może zapomnieć po kompakcji, powinien egzekwować build. Jako krok CI:

    Okno terminala
    git fetch origin main
    base=$(git merge-base origin/main HEAD) || exit 1
    changed=$(git diff --name-only "$base" HEAD) || exit 1
    if printf '%s\n' "$changed" | grep -q '^src/routes/v1/'; then
    echo 'Trasy v1 są zamrożone'; exit 1
    fi

    Krok potrzebuje historii sięgającej bazy scalenia, na przykład fetch-depth: 0 w actions/checkout. Na płytkim klonie git merge-base zawodzi i krok kończy się błędem, zamiast po cichu przejść. Przy wyzwalaczu pull_request plik workflow pochodzi z samego pull requesta, więc ten sam diff może usunąć sprawdzenie: działa ono tylko wtedy, gdy /.github/ jest w CODEOWNERS, a ochrona gałęzi albo ruleset wymaga review właściciela kodu.

  • Polecenie testowe dla każdej fazy w pliku przekazania, uruchamiane przez wątek kończący fazę i wklejane do pliku razem z wynikiem.

  • Review w świeżym kontekście. Po każdej fazie uruchom /review w nowym wątku albo codex exec review z terminala. Recenzent nie widział rozumowania implementującego, więc ocenia diff, a nie narrację. Zobacz code review z Codex.

  • Kontrola zakresu diffu. /diff na koniec fazy, porównany z listą plików w przekazaniu. Plik spoza listy to pierwszy sygnał, że wątek zgubił plan.

  • Zapis. /export zapisuje rozmowę jako Markdown. Dołącz go do pull requesta, gdy recenzent musi prześledzić decyzję, zamiast wklejać transkrypty na czat.

Tech lead zatwierdza plik przekazania i wynik CI; nikt nie zatwierdza transkryptu.

Co przechodzi między CLI, IDE, aplikacją i chmurą Codex?

Dział zatytułowany „Co przechodzi między CLI, IDE, aplikacją i chmurą Codex?”

CLI, rozszerzenie IDE, aplikacja desktopowa i Codex cloud współdzielą konfigurację i instrukcje tylko w niektórych kierunkach. Zaplanuj to, co się nie przenosi.

Skąd → dokądCo przechodziCo nie przechodzi
CLI → aplikacja desktopowa/app kontynuuje bieżącą sesję w aplikacji desktopowej (tylko macOS i Windows; linuksowe CLI nie ma /app)Niedostępne z Linuksa. Na macOS i Windows nic nie ginie, ale sprawdź, czy aplikacja otworzyła ten sam wątek
IDE → CLI/ide wciąga do TUI bieżące zaznaczenie, otwarte pliki i inny kontekst z IDEWszystko, czego nie zaznaczyłeś ani nie otworzyłeś
Lokalnie → Codex cloudTo, co jest zacommitowane w repozytorium, w tym pliki AGENTS.mdTwoja konfiguracja ~/.codex/ i globalny AGENTS.md, niezacommitowane pliki i lokalne notatki przekazania
Wątek → inny wątekPlik przekazania, jeśli jest zacommitowany albo leży na dyskuHistoria wątku; memories jest w 0.157.1 domyślnie wyłączone, więc nie oczekuj, że Codex zapamięta coś między wątkami

Wiersz o chmurze zaskakuje najczęściej. Zadanie w chmurze widzi repozytorium, a nie twój laptop. Zanim zdelegujesz, zacommituj plik przekazania i każdą regułę AGENTS.md, od której zadanie zależy. Skrypty konfiguracyjne i zmienne środowiskowe opisuje artykuł o środowiskach Codex cloud.

Co się psuje, gdy wątkowi Codex kończy się miejsce?

Dział zatytułowany „Co się psuje, gdy wątkowi Codex kończy się miejsce?”
  • Ograniczenie z początku wątku jest ignorowane. Kompakcja zgubiła je w streszczeniu. Powtórz je teraz w bieżącym prompcie, potem przenieś do pliku przekazania, a jeśli się da, do kontroli w CI. Jeśli problem wraca, obniż model_auto_compact_token_limit.
  • Tury zwalniają, a wątek w kółko czyta te same pliki. Okno jest prawie pełne i każda tura wysyła je ponownie. Zapisz plik przekazania i kontynuuj w nowym wątku; nie rób /compact po raz trzeci.
  • Przestały działać reguły z AGENTS.md modułu. Łańcuch projektowy przekroczył budżet 32 KiB i najgłębszy plik został obcięty albo przesłania go AGENTS.override.md. Sprawdź wiersz Agents.md w /status, a potem zastosuj poprawki budżetu.
  • Nie ładują się żadne instrukcje projektu. Od 0.150.0 niezaufany projekt nie dostarcza projektowego AGENTS.md. Zaufaj projektowi, gdy Codex zapyta, albo sprawdź jego wpis [projects."<path>"] w ~/.codex/config.toml.
  • Wznowiony wątek od razu jest blisko limitu. codex resume wczytuje wszystko, co wątek zawierał. Wznawiaj tylko po to, żeby dokończyć przerwaną fazę; następną zaczynaj przez /new z plikiem przekazania.
  • Zadanie w chmurze ignoruje konwencję, na której polegasz lokalnie. Reguła siedzi w ~/.codex/AGENTS.md albo w niezacommitowanym pliku. Zacommituj ją do AGENTS.md repozytorium.
  • Podniesienie model_context_window nie pomogło. Większe okno opóźnia kompakcję, ale każda tura kosztuje więcej. Najpierw przytnij prefiks i skróć wątki; jak sumuje się zużycie, opisuje artykuł o zarządzaniu kosztami.