Çoğu gün Codex açık ve aynı anda üç dört iş dönüyor. Bir kısmını tamamen devredip arkasına bakmıyorum. Bir kısmını ise satır satır okumadan hiçbir şeyin girmesine izin vermiyorum. Nasıl çalıştığım aşağı yukarı bu ayrımdan ibaret ve başka bir modelin bir şeye bakmasını isteyene kadar gayet iyi işliyor.
Sürtünme orada başlıyor. İkinci bir terminal açıyorum, planı ya da diff'i yapıştırıyorum, cevabı okuyorum, işime yarayan kısmı geri yapıştırıyorum. Bu gidiş gelişlerin her biri oturumun zaten bildiği şeyi çöpe atıyor. Ne kadar saçma olduğunu kabul etmem iki haftamı aldı.
Ne yaptım
İki tool'u olan bir Codex plugin'i: ask_claude ve ask_fugu, arkalarında sekiz model. Fable 5.1, Opus 5, Sonnet ve Haiku Claude Code üzerinden geliyor. Fugu, Fugu Ultra v1.1 ve v1.0, bir de Fugu Cyber, Sakana'nın kurulumunun çoktan Codex config'ime yazdığı fugu profili üzerinden.
Hiçbir yerde API key yok. Claude zaten ödediğim abonelikle çalışıyor, Fugu tarafı da ben işe başlamadan önce ~/.codex/config.toml içinde duran provider bloğunu kullanıyor. İki CLI da kuruluysa ve giriş yapılmışsa plugin'in kuracak bir şeyi kalmıyor.
Kontrol Codex'te. Ortada scheduler yok, plan durumu yok, arkanda dönen bir şey yok. Bir tool çağrısı, bir modelde bir tur demek, sonra geri dönüyor.
Neyi devrediyorum, neyi kontrol ediyorum
Opus'a yanılmanın pahalıya patladığı işleri veriyorum: mimari kararlar, güvenliğe dokunan değişiklikler, bir tur debug'ı atlatmış bir bug. Fable plan eleştirisine ve yazının önemli olduğu her şeye bakıyor. Fugu'yu kendimi bir şeye ikna ettiğimden şüphelendiğim anda çağırıyorum, çünkü gün boyu kullandığım iki modelden farklı bir frontier model kümesine dağıtıyor.
Haiku sıkıcı işleri alıyor ve yaptıklarının neredeyse hiçbirini kontrol etmiyorum.
Her koşulda okuduğum şey diff. Ona aşağıda döneceğim.
Aramadığım bir hata
Bunu bulmaya çalışmıyordum.
Makinemde claude-fugu kurulu. Claude Code'u Sakana'nın gateway'ine yalnızca ANTHROPIC_* ortam değişkenleriyle yönlendiriyor. Temiz bir tasarım, ta ki bir şey Claude Code'u alt süreç olarak başlatana kadar. Benim shell'imi miras alan bir çocuk süreç Opus isteyip bambaşka bir modelden cevap alabilir, sessizce, üstelik cevap gayet normal görünür.
Çözüm, ortamı filtrelemeyi bırakıp sıfırdan kurmak oldu. Çocuk süreç bir allowlist alıyor ve o kadar: PATH, HOME, locale, SHELL. Listede olmayan hiçbir şey sürece ulaşmıyor. Adaptör sonra cevaptaki modelUsage alanını okuyup, cevaplayan model istediğim ailenin dışındaysa cevabı reddediyor.
Bir agent CLI'ını dışarıdan çağıran bir şey yazıyorsan bunu kendi makinende bir kontrol et. Blocklist sadece aklına gelen değişkenleri durdurur.
Windows'un öğrettikleri
Codex Desktop'ım Windows'ta çalışıyor, repo'larım, Claude girişim ve Fugu profilim ise WSL'de duruyor. Bu yüzden plugin'in bir köprü modu var: Codex Windows tarafında server'ı wsl.exe üzerinden başlatıyor, server da Codex'in gönderdiği yolları çeviriyor.
wslpath C:\Users\me\repo biçimini çeviriyor, \\wsl.localhost\Ubuntu\home\me\repo biçimini ise reddediyor. İkincisi tam olarak WSL'de duran bir projenin ürettiği biçim, dolayısıyla o durumu elle yazmak zorunda kaldım. Yol benim çalıştığımdan başka bir distro'nun adını taşıyorsa server tahmin etmek yerine reddediyor, çünkü tahmin etmek, yazma yetkisi olan bir modeli birebir aynı görünen ama başka olan bir dizine bırakmak demek.
Sonra test suite'ini Windows yorumlayıcısıyla koşturdum ve Linux'un asla göstermeyeceği üç şey çıktı.
claude_route modül seviyesinde pwd import ediyordu. O modül Windows'ta yok, yani server tek bir isteğe cevap vermeden import sırasında ölüyordu. Plugin orada hiç çalışmamıştı ve benim haberim yoktu.
Server stdin'i locale kodlamasıyla okuyordu. MCP telde UTF-8 ama 3.15 altındaki Python stdio'yu platformun kod sayfasıyla açıyor. Prompt'taki tek bir Türkçe karakter oturumu bozmaya yetiyordu.
Bir de kendi yol kontrolüm yanlıştı. Server WSL içinde değilse \\wsl.localhost\... yolunu reddediyordum, oysa native Windows o paylaşıma doğrudan erişiyor. Köprüyü yazma sebebim olan kurulumu kendi elimle bozmuşum.
Bir arıza da başka türlü benim hatamdı. İlk testim %LOCALAPPDATA% altına yazıyordu, içinde bulunduğum terminal ise orayı WSL'in göremediği sanal bir dizine yönlendiriyor. Köprü on dakika boyunca bozuk göründü ve aslında hiç bozulmamıştı.
Bunun sana kazandırmadıkları
Bu bir ikinci agent değil. Burada hiçbir şey çağrılar arasında durum tutmuyor, yani sorduğun modelin bir önce sorduğunu hatırlaması ya da konuşmanı görmesi mümkün değil. Bedelini prompt uzunluğuyla ödüyorsun: her çağrı kendi bağlamını taşımak zorunda, taşımazsa cevap kötüleşiyor.
İkinci görüşü doğru da yapmıyor. İki modelin aynı fikirde olması sadece iki kere sorduğun anlamına gelir. Ayrıldıkları yerde ise bir şey öğreniyorum.
İnce yazı
Her çağrı, verdiğin dizinde tam yetkiyle çalışıyor. Claude bütün tool'larını ve bypassPermissions'ı alıyor. Fugu sandbox'sız koşuyor. Hiçbiri sana bir şey sormak için durmuyor.
Bir delegeden istediğim şey bu, ve bunu bir config dosyasının dibine gömmektense açıkça yazmayı tercih ederim. workdir bir ipucu değil, verilen bir yetki. Geri gelen şey de diskte çoktan olmuş bitmiş değişikliklerin raporu, o yüzden güvenmeden önce diff'i oku.
147 test, Linux'ta ve native Windows'ta yeşil. macOS'ta çalışması lazım ama kanıtlayacak bir Mac'im yok, README de tam olarak bunu yazıyor.
