- Codex CLI, yerel ortamda güvenli ve verimli biçimde yüksek kaliteli yazılım değişiklikleri gerçekleştiren bir ajan olarak tasarlanmıştır
- Temel yapı olan ajan döngüsü(agent loop), kullanıcı girdisini, model akıl yürütmesini ve araç çağrılarını döngüsel olarak birbirine bağlayarak anlamlı işler yürütür
- Döngü sırasında oluşturulan prompt yapısı, context window yönetimi ve prompt caching, performans ve kararlılığın temel unsurları olarak çalışır
- Codex, modelle Responses API üzerinden iletişim kurar ve her istek, stateless çalışmayı koruyan tam bir JSON payload'undan oluşur
- Bu yapı, Zero Data Retention(ZDR), prompt caching, otomatik sıkıştırma(compaction) gibi gelişmiş özellikleri mümkün kılar ve büyük ölçekli ajan tasarımının temelini oluşturur
Codex ajan döngüsüne genel bakış
- Codex CLI, kullanıcı, model ve araçlar arasındaki etkileşimi orkestre eden bir döngü yapısı etrafında çalışır
- Kullanıcı girdisini alır ve modele iletilecek prompt'u oluşturur
- Model bir yanıt üretir ya da araç çağrısı(tool call) isterse, ajan bunu çalıştırır ve sonucu tekrar prompt'a ekler
- Model artık araç çağrısı yapmayıp bir assistant mesajı ürettiğinde tek bir tur sona erer
- Her tur, konuşmanın(conversation) bir parçasıdır; önceki mesajlar ve araç çağrısı geçmişi bir sonraki isteğin prompt'una dahil edilir
- Prompt uzunluğu, modelin context window sınırından etkilendiği için Codex bunu yönetmek zorundadır
Responses API ve Codex'in iletişim yapısı
- Codex CLI, model akıl yürütmesi için Responses API'ye HTTP isteği gönderir
- API endpoint'i ayara göre değişir ve OpenAI, ChatGPT, Azure, yerel(LM Studio, Ollama vb.) ortamlarda kullanılabilir
- API isteği bir JSON payload'undan oluşur ve başlıca alanlar şunlardır
- system/developer mesajları: modelin temel bağlamını ayarlar
- instructions: modelin çağırabileceği araçların listesi
- tools: Codex CLI, Responses API ve kullanıcı tarafından(MCP sunucusu vb.) sağlanan araç tanımları
- input: konuşma geçmişi ve ortam bilgilerini içeren mesaj listesi
- Codex,
~/.codex/config.toml ayarını ve proje içindeki AGENTS.md, skills dosyalarını okuyarak kullanıcı yönergeleri ile ortam bilgilerini otomatik olarak ekler
Prompt oluşturma ve olay işleme
- Codex, her mesajı JSON nesnesi olarak(
type, role, content) oluşturup Responses API'ye gönderir
- Sunucu, bu JSON'a dayanarak model prompt'unu oluşturur ve yanıtı SSE(Server-Sent Events) akışı olarak döndürür
response.output_text.delta olayı streaming çıktı için kullanılır
response.output_item.added olayı, döngüyü sürdürmek için bir sonraki isteğin input alanına eklenir
- Önceki prompt'un yeni prompt'un tam prefix'i olacak şekilde tasarlanır; böylece prompt caching kullanılabilir
Performans optimizasyonu: caching ve stateless tasarım
- Codex,
previous_response_id kullanmadığı için tamamen stateless bir istek yapısını korur
- Bu, Zero Data Retention(ZDR) müşterilerine destek verilmesini ve veri saklamanın en aza indirilmesini mümkün kılar
- Prompt caching, aynı prefix'i yeniden kullanarak sampling maliyetini doğrusal hale getirir(linear)
- Cache hit yalnızca prompt'ta tam prefix eşleşmesi olduğunda gerçekleşir
- Araç listesi, model, sandbox ayarları ve çalışma dizini değişiklikleri cache miss'e neden olur
- MCP araçlarındaki dinamik değişiklikler cache kaybına yol açabildiğinden, Codex değişiklikleri yeni mesaj ekleme yöntemiyle yansıtır
Context window yönetimi ve otomatik sıkıştırma(compaction)
- Konuşma uzadığında context window aşımını önlemek için konuşma sıkıştırması(compaction) yapılır
- Başlangıçta
/compact komutuyla manuel özetleme yapılıyordu, ancak artık Responses API'nin /responses/compact endpoint'i otomatik olarak kullanılıyor
- Bu endpoint, modelin anlayışını korumak için
type=compaction öğesi ve şifrelenmiş encrypted_content döndürür
- Codex, auto_compact_limit aşıldığında konuşmanın sürekliliğini korumak için sıkıştırmayı otomatik olarak çalıştırır
Sonuç ve gelecekteki yönelim
- Codex'in ajan döngüsü, model akıl yürütmesini, araç çağrılarını, caching'i ve context yönetimini birleştiren temel yapıdır
- Bu yapı, yüksek performanslı, stateless ve güvenlik odaklı ajan tasarımını mümkün kılar
- Sonraki yazılarda CLI mimarisi, araç kullanımının uygulanışı ve sandbox modeli gibi Codex'in iç yapısı daha ayrıntılı ele alınacaktır
1 yorum
Hacker News yorumları
Bu blog yazısının en iyi yanı, hiç de şaşırtıcı olmaması. Codex CLI açık kaynak olduğu için tersine mühendislik yapmadan içine bakabiliyorsunuz
Eric Traut'un (Pyright ile tanınan geliştirici) iletişimi de harika. Issue ve PR'larda aktif biçimde yer alıyor
GitHub deposu
Ben de CLI'ye birkaç iyileştirme katkısında bulundum; release'leri ve PR'ları düzenli takip ederek bilgimi genişletiyorum
İlginç olan nokta, sıkıştırmanın (compaction) “modelin olası anlayışını koruyan şifrelenmiş mesajlar” ile yapılması
Codex, auto_compact_limit aşıldığında bu endpoint'i kullanarak konuşma bağlamını verimli biçimde küçültüyor
Codex'in içine bakarken beni şaşırtan şey, reasoning token'larının ajan araç çağrısı döngüsünde korunmasına rağmen kullanıcı turu her değiştiğinde silinmesi oldu
Bu yüzden bağlam birden fazla tur boyunca korunabiliyor ama birbiriyle ilişkili kullanıcı istekleri arasında bazı bağlamlar kaybolabiliyor
Ben modelin ilerleme durumunu, planını veya debug notlarını bir Markdown dosyasına kaydetmesini sağlıyorum; böylece bu dosya birden fazla bağlam penceresi arasında bir tür anlık görüntü gibi çalışıyor
GitHub deposu
Codex'te gerçekten istediğim şey Copilot tarzı checkpoint özelliği. GitHub'da bununla ilgili birkaç issue var (#2788, #3585) ama takım için öncelik gibi görünmüyor
Ajan döngüsünde kullanıcı talimatları toplanırken, çok turlu konuşmalarda bağlamı korumayı nasıl yönettiklerini merak ediyorum. Kullanıcı gereksinimleri değiştiğinde dinamik olarak uyarlanan teknikler deneyip denemediklerini de bilmek isterim
Codex'i seviyorum ama ChatGPT web arayüzünden daha yavaş hissettiriyor. Fikirleri hızlıca gidip gelmek için hâlâ web'de kopyala-yapıştır yapmak daha üretken
Codex bazen alakasız kodu değiştirmeye başlıyor; bu da geri bildirim döngüsünü yavaş ve sinir bozucu hale getiriyor. Yine de iyi çalıştığında harika. Bir gün web kadar hızlı olup aynı zamanda yerelde çalışabilecek seviyeye gelmesini umuyorum
Özellikle yeni değildi ama yine de değerli bir yazıydı. Ajan tabanlı kodlama CLI'larında döngüler veya geçmiş üzerinde daha kolay düşünebilmek (reflect) güzel olurdu. MCP üzerinden sohbet geçmişini sorgulama yöntemini denedim ama açıkça belirtmek gerektiği için rahatsız edici. Sürekli öğrenme bu tür sorunları çözebilir gibi görünüyor
Bu davranış OTEL telemetrisi ile de gözlemlenebilir. Ben sık sık headless codex exec kullanıyorum ama yerleşik telemetri desteği yetersiz olduğu için debug zorlaşıyor
Bu yüzden codex-plus'ı kendim yapıp kullanıyorum. codex exec arayüzünü birebir yansıtıyor, TypeScript SDK üzerine kurulu ve çalıştırma sonrası oturum loglarını uzak bir OpenTelemetry toplayıcısına aktararak codex-plus-log-viewer ile analiz etmeyi sağlıyor
Skill'leri açıklayan kısım bana tuhaf geldi
İlgili kod bağlantısı
Neden dosyaları doğrudan göstermek yerine modelin onları normal dosyaymış gibi istemesi sağlanmış, merak ediyorum
Codex CLI'yi ciddi biçimde kullanan biri var mı diye merak ediyordum. VSCode Codex eklentisini, Gemini CLI'ı ve Claude Code CLI'ı kullandım; hepsinin performansı berbattı.
Ama Rust ile yeniden yapılan Codex CLI'nin performansı inanılmaz. UX de kusursuz; kısayollar gibi küçük ayrıntılar bile iyi düşünülmüş. Theo “CLI optimizasyonu yerine model iyileştirmesine odaklanmalıydılar” dedi ama kullandıktan sonra buna hiç katılamıyorum
İlgili yazı: Scribe Swebench Benchmark