Przejdź do głównej zawartości

Triki na wydajność w Codexie to jednorazowe ustawienia i nawyki, które usuwają powtarzalne tarcie z codziennych sesji Codex CLI: autouzupełnianie i aliasy powłoki do wznawiania i review, klucze config.toml dla powiadomień, paska statusu i klikalnych ścieżek plików oraz profile przełączające model i wysiłek rozumowania. Każdy trik sprawdzono na Codex CLI 0.157.1 i każdy zostawia bramkę weryfikacji na miejscu.

Ta strona jest dla programistów, którzy codziennie pracują z Codexem w terminalu i wciąż tracą minuty na te same rzeczy: wpisują te same flagi, patrzą na spinner zamiast pracować, godzinę później odkrywają, że tura czekała na zatwierdzenie, i powtarzają całe zadanie, bo „gotowe” agenta wcale nie było gotowe. Same komendy opisuje strona Komendy Codex CLI, komendy slash i skróty; tutaj chodzi o konfigurację wokół nich. Jeśli nie masz jeszcze skonfigurowanego Codexa, zacznij od szybkiego startu z Codexem.

  • Trzy funkcje powłoki, które zamieniają wznawianie, review i fork w krótkie komendy.
  • Blok config.toml, który daje znać, kiedy tura się kończy albo czeka na ciebie, i pokazuje limity w trakcie pracy.
  • Dwa profile, quick i deep, dzięki którym wysiłek i model zmieniasz jedną flagą, a nie objazdem w środku sesji.
  • Bramkę weryfikacji, którą szybciej uruchomić, niż pominąć, więc tempo nie zamienia się w poprawki.
  • Trzy prompty do skopiowania i rozwiązania dla ustawień, które zawodzą po cichu.

Zacznij od góry tabeli. Każdy wiersz usuwa koszt, który płacisz w każdej sesji, a nie raz w tygodniu.

TrikKonfiguracjaCo usuwaPo czym poznasz, że działa
Funkcje powłoki do resume, review i forkTrzy linie w profilu powłokiPrzepisywanie flag i tłumaczenie kontekstu od nowacxl otwiera ostatnią sesję z całym zapisem rozmowy
Powiadomienia o końcu tury i o zatwierdzeniuDwa klucze w [tui]Pilnowanie spinnera; tury utknięte na zatwierdzeniuPowiadomienie systemowe, gdy przełączysz okno
Pasek statusu z limitami i kontekstemJeden klucz w [tui]Niespodziewane zatrzymania na limicie i ciche kompaktowanieStopka pokazuje pozostały kontekst i okna limitów
Profile quick i deepDwa małe plikiZmianę nazwy na wysokim wysiłku albo trudny błąd na niskim/status pokazuje model i wysiłek z profilu
Jedna komenda check, którą uruchamiacie ty i agentJeden skrypt i jedna linia w AGENTS.md„Gotowe”, które godzinę później wywraca CIOstatnia wiadomość agenta kończy się wynikiem sprawdzenia
Klikalne odwołania do plikówJeden kluczKopiowanie ścieżek z transkryptu do edytorasrc/api/users.ts:42 otwiera się w linii 42

Załaduj autouzupełnianie, a potem opakuj trzy komendy sesji, które wpisujesz najczęściej. Wstaw to do ~/.zshrc (po compinit) albo do ~/.bashrc:

Okno terminala
# Terminal: profil powłoki
eval "$(codex completion zsh)" # bash: eval "$(codex completion bash)"
# Kontynuuj najnowszą sesję z tego katalogu, opcjonalnie z kolejnym poleceniem
cxl() { codex resume --last "$@"; }
# Review zmian staged, unstaged i nieśledzonych w świeżym kontekście
cxrev() { codex review --uncommitted; }
# Rozgałęź ostatnią sesję w nowy wątek, opcjonalnie z innym poleceniem
cxfork() { codex fork --last "$@"; }

W fish uruchom codex completion fish | source z config.fish. codex completion generuje też skrypty dla elvish i powershell.

W wersji 0.157.1 zarówno codex resume, jak i codex fork przyjmują prompt na końcu, więc cxl "Testy już przechodzą; przejdź do kroku 3" otwiera sesję i wysyła polecenie jedną komendą. cxrev nie przyjmuje promptu, bo codex review odrzuca własne instrukcje razem z --uncommitted albo --base; do review z konkretnym celem użyj /review w TUI albo codex review "Skup się na logice ponowień" bez flagi zakresu. cxfork celowo pomija --worktree: w wersji 0.157.1 codex fork --worktree wymaga jawnego UUID sesji i kończy się błędem z --last. --last widzi tylko sesje uruchomione w bieżącym katalogu; --all, nazwy sesji i codex queue do całej reszty opisuje strona o komendach CLI.

Streszczenie kosztuje jeden krótki akapit, a w kilka sekund mówi ci, czy wznowiona sesja pamięta ograniczenie. Jeśli nie pamięta, popraw ją przed jakąkolwiek zmianą w plikach, a nie po niej.

Te klucze należą do ~/.codex/config.toml. Wszystkie istnieją w schemacie konfiguracji 0.157.1 (config_toml.rs i struktura [tui] w types.rs):

~/.codex/config.toml
file_opener = "cursor" # vscode, vscode-insiders, windsurf, cursor lub none
[tui]
# Powiadomienia systemowe z TUI, tylko dla tych zdarzeń
notifications = ["agent-turn-complete", "approval-requested"]
notification_condition = "unfocused" # albo "always"
# Elementy stopki, w tej kolejności
status_line = ["model-with-reasoning", "git-branch", "context-remaining", "five-hour-limit", "weekly-limit"]
# Mniej animacji i bez podpowiedzi na starcie
animations = false
show_tooltips = false

Co daje każdy z nich:

  • file_opener zamienia odwołania do plików w odpowiedziach Codexa w linki, które otwierają edytor we wskazanej linii. Wymaga terminala, który renderuje hiperłącza.
  • notifications daje w praktyce najwięcej, bo approval-requested znaczy więcej niż agent-turn-complete: tura czekająca na zatwierdzenie stoi, dopóki tego nie zauważysz. Domyślne notification_condition to unfocused, więc powiadomienie przychodzi tylko wtedy, gdy terminal nie jest na wierzchu.
  • status_line zastępuje domyślne elementy stopki tymi, które wymienisz. five-hour-limit i weekly-limit pokazują dwa okna użycia twojego planu, więc widzisz zbliżający się limit, zamiast trafić na niego w połowie zadania. Pasek możesz też zbudować interaktywnie komendą /statusline.
  • Wyłączenie animations i show_tooltips nic nie kosztuje, gdy znasz już TUI.

Powiadomienia TUI idą przez terminal. Żeby zamiast tego uruchamiać własny program, na przykład wysyłający wiadomość na telefon albo na kanał czatu, użyj klucza notify na najwyższym poziomie. Codex uruchamia komendę i dokleja jako ostatni argument ładunek JSON; jego type to agent-turn-complete, a zawiera m.in. pola cwd i last-assistant-message:

# ~/.codex/config.toml (najwyższy poziom, nie pod [tui])
notify = ["python3", "/Users/YOUR_USER/.codex/notify.py"]
#!/usr/bin/env python3
# ~/.codex/notify.py: powiadomienie systemowe w macOS przez terminal-notifier
import json, subprocess, sys
event = json.loads(sys.argv[-1])
if event.get("type") == "agent-turn-complete":
msg = (event.get("last-assistant-message") or "Turn complete")[:120]
subprocess.run(["terminal-notifier", "-title", "Codex", "-message", msg])

Zastąp YOUR_USER nazwą swojego użytkownika w macOS i zostaw ścieżkę bezwzględną. terminal-notifier zainstalujesz przez brew install terminal-notifier.

Żeby wyłapać literówki, uruchom raz codex --strict-config: kończy się błędem przy każdym nierozpoznanym polu najwyższego poziomu, np. file_openr zamiast file_opener (0.157.1 nie sprawdza kluczy wewnątrz [tui]). W trakcie sesji /debug-config pokazuje, które warstwy konfiguracji i pliki wymagań zostały zastosowane.

Częsta strata czasu to niedopasowanie wysiłku do zadania: mechaniczna zmiana nazwy na wysokim wysiłku albo błąd współbieżności na niskim, a potem robiony od nowa. Profile usuwają to niedopasowanie jedną flagą. Profil to osobny plik, $CODEX_HOME/<name>.config.toml (zwykle ~/.codex/<name>.config.toml), nakładany na konfigurację bazową przez -p albo --profile:

# ~/.codex/quick.config.toml: edycje mechaniczne, wyszukiwanie, drobne poprawki
model = "gpt-6-luna"
model_reasoning_effort = "low"
# ~/.codex/deep.config.toml: pytania projektowe, trudne błędy, ryzykowne migracje
model = "gpt-6-astra"
model_reasoning_effort = "high"
Okno terminala
codex -p quick "Rename getUser to fetchUser across src/api and run npm run check"
codex -p deep "Find why the order-sync job double-charges when two workers pick the same batch"

GPT-6.1 Sol to domyślny model wbudowany w Codexa od CLI 0.159.1; profil deep przypina GPT-6 Astra ręcznie do najtrudniejszej pracy, a GPT-6 Luna to szybki i tani wariant do łatwiejszych zadań. Oba profile wymagają CLI na tyle nowego, żeby widział ich modele (Luna wymaga wersji 0.155.0 lub nowszej). Najpierw dostrój wysiłek, a model zmieniaj dopiero wtedy, gdy twoje własne wyniki to uzasadniają. Do jednorazowej zmiany w środku sesji służy /model, który ustawia model i wysiłek bez profilu. Który model pasuje do której pracy, razem z cenami, znajdziesz w przeglądzie modeli.

Sedno jest w ostatnim zdaniu. Tani model jest szybki, gdy wie, gdzie kończy się jego zadanie; bez tej granicy improwizuje, a za improwizację płacisz czasem review.

Powiadomienia zwalniają cię z pilnowania; cztery kolejne nawyki sprawiają, że praca idzie dalej, gdy tura trwa. Klawisze i komendy opisuje strona o komendach CLI; tutaj liczy się nawyk.

  • Kolejkuj następne zadanie zamiast czekać na bieżące. Wciśnij Tab, gdy agent pracuje, żeby dodać polecenie do kolejki i wykonać je po bieżącej turze; Enter koryguje bieżącą turę. Z innego terminala codex queue --thread NAME --message "…" robi to samo dla nazwanej sesji.
  • Pytania poboczne zadawaj z boku. /side (albo /btw) otwiera rozmowę poboczną w efemerycznym forku, więc „co dopasowuje ten regex?” nie zaśmieca kontekstu głównego wątku.
  • Alternatywę sprawdzaj równolegle, a nie potem. cxfork "Try the approach with a database lock instead" rozgałęzia ostatnią sesję w nowy wątek, a oryginał zostaje bez zmian. Żeby obie próby nie edytowały tych samych plików, daj alternatywie osobny worktree Git, jak opisuje strona Worktree w Codex.
  • Mów zamiast pisać długie prompty. /voice włącza i wyłącza wprowadzanie głosowe; od wersji 0.156.0 jest domyślnie włączone. Długie pisane prompty otwieraj w edytorze prosto z pola wiadomości (klawisz znajdziesz na stronie o komendach CLI).

Tempo, które pomija weryfikację, to pożyczony czas: zaoszczędzone minuty wracają jako czerwone CI albo błąd na review. Rozwiązanie polega na tym, żeby sprawdzanie było tańsze niż jego pominięcie.

  1. Daj repozytorium jedną komendę sprawdzającą. W projekcie Node dodaj "check": "npm run lint && npm run typecheck && npm test" do package.json. W innych stosach służy do tego cel make check albo just check. Jedna komenda oznacza, że ty i agent uruchamiacie dokładnie tę samą bramkę.

  2. Każ Codexowi ją uruchamiać i pokazywać wynik. Dodaj jedną linię do AGENTS.md: „Before you say a task is done, run npm run check and paste the last 20 lines of its output. A claim of success without that output is not success.” Jak utrzymać AGENTS.md krótkim i skutecznym, opisuje strona AGENTS.md w Codex.

  3. Uruchom ją sam. Wpisz !npm run check w polu wiadomości. Transkrypt agenta to raport; twoje własne uruchomienie to dowód.

  4. Spójrz na kształt zmiany. /diff pokazuje, które pliki się zmieniły. Jeśli jednolinijkowa poprawka zmienia osiem plików, najpierw zapytaj dlaczego, a dopiero potem rób review.

  5. Zrób review w świeżym kontekście. Przed commitem uruchom cxrev. Napraw każde znalezisko P0 i P1; o P2 i P3 decydujesz sam. Pełną pętlę, łącznie z segregowaniem znalezisk, opisuje strona Przegląd zmian Codex przed commitem.

Zatwierdzasz zachowanie: zielone sprawdzenie, które uruchomiłeś sam, i review bez otwartych znalezisk P0 ani P1. Nie musisz czytać każdej linii, żeby to zrobić.

Jedna pułapka tempa zasługuje na osobne ostrzeżenie. Wyłączenie zatwierdzeń nie przyspiesza Codexa w sposób, który przetrwa jedną złą komendę. Jeśli zatwierdzenia ci przeszkadzają, najpierw włącz powiadomienia; jeśli nadal przeszkadzają, --approve-for-me kieruje prośby o zatwierdzenie do automatycznego review w sandboksie workspace-write. --dangerously-bypass-approvals-and-sandbox zostaw wyłącznie dla jednorazowych sandboksów z ograniczoną siecią i nigdy nie wpisuj go do aliasu.

Po wprowadzeniu zmian uruchom raz codex --strict-config. Jeśli zgłosi błąd, audyt zaproponował klucz najwyższego poziomu, który nie istnieje; usuń go. Czyste uruchomienie nie dowodzi, że klucze w [tui] są poprawne; sprawdź je w TUI albo przez /debug-config.

Sprawdź to przez tydzień, zamiast ufać wrażeniu. Wybierz trzy sygnały, które widać bez dodatkowych narzędzi:

  • Tłumaczenie od nowa. Policz sesje, w których przepisywałeś kontekst, który agent powinien był mieć. Wznawianie przez cxl powinno sprowadzić tę liczbę prawie do zera.
  • Utknięte tury. Policz, ile razy wróciłeś do tury, która czekała na zatwierdzenie. Powiadomienia o zatwierdzeniach powinny usunąć większość takich przypadków.
  • Odsetek powtórek. Policz zadania, które musiałeś uruchomić ponownie, bo pierwszy wynik nie przeszedł sprawdzenia albo review. Jeśli quick daje więcej powtórek, niż oszczędza, podnieś jego wysiłek, zanim zrezygnujesz z profilu.

/status pokazuje konfigurację bieżącej sesji i zużycie tokenów, a /usage okna użycia twojego konta; sprawdzisz nimi, czy praca na quick rzeczywiście zużywa mniej limitu. Plany i kredyty opisuje strona Kredyty, limity użycia i koszty Codex.

  • Autouzupełnianie w zsh nic nie robi. Linia eval wykonuje się przed compinit. Przenieś ją pod compinit i otwórz nową powłokę.
  • Profil jakby nie działał. Plik musi się nazywać <name>.config.toml i leżeć w $CODEX_HOME (zwykle ~/.codex), a nazwa po -p musi dokładnie odpowiadać nazwie pliku. Starsze tabele [profiles.<name>] w config.toml nadal są wczytywane; przenieś je do plików, żeby każdy profil był zdefiniowany w jednym miejscu. Wynik sprawdzisz przez /status albo /debug-config.
  • Ustawienie jest po cichu ignorowane. codex --strict-config zamienia nieznane klucze najwyższego poziomu, np. file_openr, w błąd. W 0.157.1 nie sprawdza kluczy wewnątrz tabel takich jak [tui], więc literówka w rodzaju show_tooltip nadal przechodzi po cichu. Porównaj klucze [tui] ze stroną konfiguracji albo po restarcie sprawdź efekt (podpowiedzi nadal się wyświetlają).
  • Nie przychodzą żadne powiadomienia. Przy notification_condition = "unfocused" nic nie przychodzi, gdy terminal jest aktywny; do testu ustaw "always". Jeśli nadal cisza, terminal nie obsługuje sekwencji powiadomień; ustaw notification_method na osc9 albo bel pod [tui] albo użyj notify z własnym skryptem. W macOS zezwól też aplikacji terminala na powiadomienia w Ustawieniach systemowych.
  • Skrypt z notify nigdy się nie uruchamia. notify należy do najwyższego poziomu, nie do [tui]; podaj skrypt ścieżką bezwzględną. Przetestuj go ręcznie: python3 ~/.codex/notify.py '{"type":"agent-turn-complete","last-assistant-message":"test"}'.
  • Odwołania do plików nie są klikalne. Terminal nie renderuje hiperłączy albo file_opener wskazuje edytor, którego nie masz. Poprawne wartości w 0.157.1 to vscode, vscode-insiders, windsurf, cursor i none.
  • Pasek statusu pokazuje ostrzeżenie. Identyfikator elementu ma literówkę. Zbuduj pasek od nowa przez /statusline, zamiast wpisywać identyfikatory ręcznie.
  • Profil quick popełnia więcej błędów, niż oszczędza. Podnieś model_reasoning_effort w quick.config.toml o jeden stopień, zanim zmienisz model, i zostaw w prompcie granicę „wypisz zamiast edytować”.
  • cxl otwiera nie tę sesję. --last widzi tylko sesje interaktywne z bieżącego katalogu. Ważne wątki nazwij przez /rename i wznawiaj je po nazwie.