Przejdź do głównej zawartości

Zaawansowane porady Codex

Zaawansowane techniki Codex obejmują orkiestrację wielopowierzchniową CLI, App i Cloud, konfigurację niestandardowych dostawców modeli dla proxy, modeli lokalnych i Azure, integrację programową przez SDK i strumień zdarzeń JSON oraz obserwowalność OpenTelemetry i dostrajanie sandboxa dla środowisk wymagających wysokiego bezpieczeństwa. Razem zmieniają Codex z asystenta kodowania w komponent infrastruktury deweloperskiej.

Opanowałeś podstawy każdej powierzchni Codex. Wiesz, jak działają worktree, twoja konfiguracja jest dostrojona, a AGENTS.md ma odpowiednią strukturę. Teraz chcesz pójść dalej: uruchomić Codex jako serwer MCP konsumowany przez inne agenty, skierować go na lokalne modele przez Ollama, przekierować ustrukturyzowane wyjście do swojego systemu budowania i śledzić każde wywołanie API przez OpenTelemetry. To techniki, które zmieniają Codex z asystenta kodowania w komponent infrastruktury deweloperskiej.

  • Wzorce orkiestracji wielopowierzchniowej łączące App, CLI i Cloud
  • Konfiguracje niestandardowych dostawców modeli dla proxy, modeli lokalnych i Azure
  • Programowa integracja przez @openai/codex-sdk i strumień zdarzeń codex exec --json
  • Konfiguracja obserwowalności z OpenTelemetry do śledzenia użycia Codex
  • Zaawansowane dostrajanie sandboxa dla środowisk wymagających wysokiego poziomu bezpieczeństwa

Każda powierzchnia ma swój optymalny zastosowanie. Łącz je dla maksymalnego efektu:

  1. Zacznij w CLI dla szybkiej diagnozy:

    Okno terminala
    codex "What's causing the TypeScript errors in src/services/?"
  2. Przejdź do App dla równoległej implementacji:

    • Otwórz wątek Worktree dla poprawki
    • Otwórz kolejny wątek Worktree dla testów
    • Przeglądaj diffy wizualnie w panelu diff aplikacji
  3. Prześlij do Cloud w celu weryfikacji:

    Okno terminala
    codex cloud exec --env staging --attempts 2 \
    "Run the full integration test suite against these changes"
  4. Wróć do CLI na finalny commit:

    Okno terminala
    codex exec --sandbox workspace-write "Create a PR with a summary of all changes"

App i CLI współdzielą konfigurację, AGENTS.md i umiejętności — ale nie historię wątków. Aby przekazać kontekst między powierzchniami:

  • Użyj zintegrowanego terminala w App do uruchamiania poleceń CLI
  • Kopiuj istotne podsumowania z wątków App do promptów CLI
  • Użyj codex resume, aby kontynuować sesję z App w CLI

Gdy rozszerzenie IDE i App są zsynchronizowane, współdzielą widoczność wątków i automatyczny kontekst. To najpłynniejszy przepływ międzypowierzchniowy.

model = "gpt-5.6-sol"
model_provider = "proxy"
[model_providers.proxy]
name = "OpenAI via internal proxy"
base_url = "http://proxy.internal.company.com"
env_key = "OPENAI_API_KEY"

Ollama i LM Studio są zarezerwowanymi, wbudowanymi dostawcami lokalnymi. Wybierz domyślnego kluczem najwyższego poziomu oss_provider; nie definiuj ich ponownie pod [model_providers]:

oss_provider = "ollama" # lub "lmstudio"

Następnie uruchom codex --oss "Explain this function" albo wybierz jednorazowo codex --oss --local-provider lmstudio. Interaktywny Codex zapyta o dostawcę, gdy żadna opcja nie jest ustawiona; codex exec --oss zakończy się błędem zamiast zgadywać.

[model_providers.azure]
name = "Azure"
base_url = "https://YOUR_PROJECT.openai.azure.com/openai"
env_key = "AZURE_OPENAI_API_KEY"
query_params = { api-version = "2025-04-01-preview" }
wire_api = "responses"
[model_providers.openai]
request_max_retries = 4
stream_max_retries = 10
stream_idle_timeout_ms = 300000

Zwiększ stream_idle_timeout_ms, jeśli widzisz błędy timeout przy długotrwałych zadaniach. Zwiększ liczbę ponownych prób przy niestabilnych warunkach sieciowych.

Jeśli potrzebujesz jedynie skierować wbudowanego dostawcę OpenAI na inny endpoint (np. ze względu na rezydencję danych):

Okno terminala
# zastąp swoim rzeczywistym regionalnym endpointem / endpointem proxy
export OPENAI_BASE_URL="https://your-region.api.openai.com/v1"
codex

Nie trzeba zmieniać konfiguracji. OPENAI_BASE_URL nadpisuje endpoint wbudowanego dostawcy OpenAI dla bieżącej powłoki.

model_reasoning_effort = "high" # Dla złożonych decyzji architektonicznych
# lub
model_reasoning_effort = "low" # Dla prostych, szybkich zadań

Bieżąca dokumentacja config.toml podaje minimal, low, medium, high i zależne od modelu xhigh. GPT-5.6 udostępnia też max w ustawieniach produktu Codex wszystkim użytkownikom z dostępem do modelu oraz wieloagentowe ultra od planu Plus wzwyż. Nie wpisuj max ani ultra do model_reasoning_effort, dopóki schemat twojej zainstalowanej wersji Codex ich nie akceptuje.

model_verbosity = "low" # Krótsze odpowiedzi, mniej wyjaśnień
model_reasoning_summary = "concise" # Zwięzłe podsumowania rozumowania

Dla logów CI całkowicie ukryj rozumowanie:

hide_agent_reasoning = true

Pozostaw te nadpisania nieustawione dla wbudowanych modeli OpenAI, chyba że masz zmierzony powód, aby skrócić okno robocze. Codex zna już ich metadane i zarządza kompaktowaniem. Jawnych wartości używaj głównie dla niestandardowego providera i dopasuj je do opublikowanego przez niego limitu:

# Tylko przykład: model niestandardowego providera z oknem kontekstowym 128K.
model_context_window = 128000
model_auto_compact_token_limit = 100000 # Kompaktuj wcześniej, aby zostawić zapas

Ustaw model_auto_compact_token_limit niżej niż skonfigurowane okno kontekstowe, aby wyzwolić kompaktowanie zanim okno wypełni się całkowicie. Dla porównania karty modeli OpenAI API podają obecnie 1 050 000 tokenów kontekstu i maksymalnie 128 000 tokenów wyjściowych dla GPT-5.6 Sol, Terra i Luna. Te limity API są czymś innym niż kontekst roboczy raportowany dla konkretnego wątku przez daną powierzchnię Codex.

Uruchom sam Codex jako serwer MCP, aby inne agenty mogły go konsumować:

Okno terminala
codex mcp-server

To uruchamia Codex przez stdio, umożliwiając innemu narzędziu lub agentowi połączenie się i używanie Codex jako narzędzia. Przydatne do budowania systemów wieloagentowych, gdzie koordynator deleguje zadania do Codex.

Gdy chcesz mieć Codex wewnątrz własnego oprzyrządowania — niestandardowego CLI, bramki CI, chatbota — masz dwie powierzchnie integracji.

Zainstaluj @openai/codex-sdk i steruj wątkami z poziomu kodu. SDK uruchamia tego samego agenta co CLI, więc twój AGENTS.md, umiejętności i konfiguracja obowiązują:

import { Codex } from '@openai/codex-sdk';
const codex = new Codex();
const thread = codex.startThread();
const result = await thread.run('Diagnose and fix the failing CI tests, then summarize what changed.');
console.log(result);
// Kontynuuj ten sam wątek lub wznów wcześniejszy po ID za pomocą codex.resumeThread(id)
await thread.run('Now add a regression test for the bug you fixed.');

Dla automatyzacji niezależnej od języka dodaj --json do codex exec, aby otrzymać zdarzenia JSON rozdzielone znakami nowej linii (jedno na zmianę stanu). Przekieruj je do jq lub dowolnego parsera, aby wpiąć Codex w krok budowania:

Każda linia niesie najwyższego poziomu .type (thread.started, turn.started, turn.completed, turn.failed, item.started, item.completed, error); rodzaj pracy, którą reprezentuje element (agent_message, command_execution, file_change, mcp_tool_call, …) znajduje się w .item.type. Aby obserwować zakończone uruchomienia poleceń i wiadomości modelu:

Okno terminala
codex exec --json --sandbox workspace-write \
"Bump every dependency to its latest minor and run the test suite" \
| jq -c 'select(.type == "item.completed") | select(.item.type == "command_execution" or .item.type == "agent_message") | .item'

Połącz --json z --output-last-message out.txt w CI, aby w jednym uruchomieniu uchwycić zarówno czytelny dla maszyny strumień zdarzeń, jak i końcowe podsumowanie w języku naturalnym.

sandbox_mode = "workspace-write"
[sandbox_workspace_write]
network_access = true
writable_roots = ["/Users/me/.pyenv/shims", "/tmp"]
exclude_tmpdir_env_var = false
exclude_slash_tmp = false

Użyj --add-dir zamiast rozszerzania sandboxa:

Okno terminala
codex --cd apps/frontend --add-dir ../backend --add-dir ../shared \
"Coordinate API changes between frontend and backend"

To przyznaje ograniczony dostęp do zapisu bez otwierania danger-full-access.

Użyj polecenia codex sandbox, aby przetestować, co dane polecenie może zrobić przy twoich obecnych ustawieniach:

Okno terminala
# Użyj `macos` na macOS, `linux` na Linux (aliasy: seatbelt / landlock)
codex sandbox macos -- ls /etc
codex sandbox macos -- cat /etc/passwd
codex sandbox macos -- npm test

Podkomenda platformy jest wymagana; wszystko po -- to polecenie do uruchomienia. To uruchamia polecenie pod tym samym sandboxem, którego Codex używa wewnętrznie, więc możesz zweryfikować polityki zanim agent na nie natrafi.

[otel]
environment = "production"
log_user_prompt = false # Nie eksportuj surowych promptów
[otel.exporter.otlp-http]
endpoint = "https://otel-collector.internal.company.com/v1/logs"
protocol = "binary"
headers = { "x-otlp-api-key" = "${OTLP_TOKEN}" }

Codex emituje ustrukturyzowane zdarzenia logów dla:

  • codex.conversation_starts — Model, ustawienia, polityka sandboxa
  • codex.api_request — Status, czas trwania, szczegóły błędu
  • codex.tool_decision — Zatwierdzono/odrzucono, przez konfigurację vs użytkownika
  • codex.tool_result — Czas trwania, sukces, fragment wyjścia

Codex domyślnie wysyła anonimowe dane o użyciu. Wyłącz to:

[analytics]
enabled = false

To jest niezależne od eksportu OTel — analityka trafia do OpenAI, OTel trafia do twojej infrastruktury.

notify = ["python3", "/path/to/notify.py"]

Skrypt otrzymuje argument JSON ze szczegółami zdarzenia:

#!/usr/bin/env python3
import json, subprocess, sys
def main():
notification = json.loads(sys.argv[1])
if notification.get("type") != "agent-turn-complete":
return 0
title = f"Codex: {notification.get('last-assistant-message', 'Done!')}"
subprocess.run([
"terminal-notifier",
"-title", title,
"-message", " ".join(notification.get("input-messages", [])),
"-group", "codex-" + notification.get("thread-id", ""),
])
return 0
if __name__ == "__main__":
sys.exit(main())
[tui]
notifications = ["agent-turn-complete", "approval-requested"]
notification_method = "osc9" # Powiadomienia desktopowe przez sekwencję ucieczki OSC 9
FlagaStatusCo robi
shell_snapshotStabilna, domyślnie włączonaTworzy migawki środowiska powłoki dla szybszych powtarzanych poleceń
unified_execStabilna, domyślnie włączona poza WindowsUżywa PTY-backed exec dla lepszej obsługi terminala
goalsStabilna, domyślnie włączonaUtrwala cele i obsługuje automatyczną kontynuację

Sprawdź lub świadomie nadpisz je przez:

Okno terminala
codex features list
codex features disable shell_snapshot

Dla złożonych, wieloakapitowych promptów naciśnij Ctrl + G w TUI, aby otworzyć skonfigurowany edytor. Ustaw edytor:

Okno terminala
export VISUAL=code # Lub vim, nvim, nano, itp.

Napisz pełny prompt w edytorze, zapisz i zamknij, a Codex go wyśle. To znacznie wygodniejsze niż wpisywanie długich instrukcji w kompozytorze.

  • Uwierzytelnianie niestandardowego dostawcy nie działa: Sprawdź, czy zmienna środowiskowa env_key jest ustawiona i wyeksportowana. Użyj codex login status, aby sprawdzić autoryzację.
  • Zdarzenia OTel się nie pojawiają: Sprawdź, czy exporter jest ustawiony na otlp-http lub otlp-grpc, a nie none. Zweryfikuj, czy endpoint jest osiągalny z twojej maszyny.
  • Sandbox zbyt restrykcyjny dla twojego przepływu pracy: Użyj codex sandbox, aby przetestować konkretne polecenia. Dodaj writable_roots dla katalogów, których agent potrzebuje.
  • Tryb serwera MCP się rozłącza: Codex kończy pracę, gdy klient zamknie połączenie. Upewnij się, że twój klient utrzymuje pipe stdio.
  • Flagi funkcji znikają po restarcie: Flagi funkcji są zapisywane w config.toml, ale flagi związane z profilem działają tylko gdy dany profil jest aktywny.