Przejdź do głównej zawartości

Zaawansowane porady Codex

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
  • Wzorce integracji SDK do budowania własnych narzędzi
  • 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 --full-auto "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.1"
model_provider = "proxy"
[model_providers.proxy]
name = "OpenAI via internal proxy"
base_url = "http://proxy.internal.company.com"
env_key = "OPENAI_API_KEY"
[model_providers.ollama]
name = "Ollama"
base_url = "http://localhost:11434/v1"
oss_provider = "ollama"

Następnie uruchom: codex --oss "Explain this function"

[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
export OPENAI_BASE_URL="https://us.api.openai.com/v1"
codex

Nie trzeba zmieniać konfiguracji.

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

Opcje: minimal, low, medium, high, xhigh (zależne od modelu).

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
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ż okno kontekstowe, aby wyzwolić kompaktowanie zanim okno wypełni się całkowicie.

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.

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
codex sandbox -- ls /etc
codex sandbox -- cat /etc/passwd
codex sandbox --full-auto -- npm test

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_snapshotBetaTworzy migawki środowiska powłoki dla szybszych powtarzanych poleceń
unified_execBetaUżywa PTY-backed exec dla lepszej obsługi terminala
remote_compactionEksperymentalnaPrzenosi kompaktowanie kontekstu na serwer
request_ruleStabilnaInteligentne sugestie zatwierdzania na podstawie wzorców poleceń

Włącz za pomocą:

Okno terminala
codex features enable shell_snapshot
codex features enable unified_exec

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.