Limit dolunca kodlama ajanını devretmek

Her gün dört kodlama ajanı kullanıyorum. Biri işin ortasında limite takılınca konuşma kalıyor. Switchyard oturumları yerelde arşivliyor, sohbeti yeni hesaba taşıyor ve devri ancak yeni sohbet cevap verince sayıyor.

Demo modunda Switchyard konuşmalar ekranı: kullanım limitine takılan bir Claude Code oturumunu devralan Codex sohbeti, solda proje listesi

Her gün dört kodlama ajanıyla çalışıyorum: Codex, Claude Code, OpenCode ve Antigravity. Çoğu gün sorun yok. Sonra biri bir işin ortasında kullanım limitine takılıyor ve konuşma o hesapta, o araçta kalıyor. Bağlam diskte bir yerde duruyor ama onu yalnızca o araç okuyabiliyor. Switchyard'ı bu durumdan çıkmak için yaptım. Yerel bir panel, MIT lisansıyla açık kaynak. Lab sayfası devir ekranını gösteriyor, kod GitHub'da.

Bu sadece benim sorunum değil

Açık kaynağa çevirmeden önce başkalarının da aynı duvarlara çarpıp çarpmadığına baktım. 23 Ekim 2026 itibarıyla:

  • Erken dolan limitler: claude-code#16157 695, #38335 475, codex#28879 365 beğeni almış.
  • Limiti aşmak için ikinci hesap: çoklu hesap talepleri #18435 941, #36151 767 beğenide. Oturum limiti dolunca devam etmeyi isteyen #13354 209'da.
  • Zamanlanmış görevler: #95966 çalışma saatini sessizce atlayan görevleri anlatıyor. #95272 ve #89811 başarılı görünüp hiçbir şey yapmayan koşumları.

Aynı üç şey benim haftamda da vardı. Limitin arkasında kalan bir konuşma. Dört araca dağılmış, bir araç güncellenince ya da temizlik yapınca kaybolan geçmiş. "Başarılı" deyip arkasında hiçbir şey bırakmayan zamanlanmış koşumlar.

Araçlara kanca takmak yerine dosyaları okumak

İlk karar oturumlara nasıl ulaşacağımdı. Her araca bir eklenti, bir proxy ya da CLI'ını saran bir katmanla kanca takabilirdim. Ya da her aracın zaten yazdığı dosyaları okuyabilirdim.

Kancalar daha çok şey görür ama her araç için ayrı bir tane gerekir ve güncellemelerde bozulurlar. Dosya okumak, Switchyard'dan önceki oturumları da kapsıyor. Bu yüzden Switchyard yerel dosyaları salt okunur açıyor. Onlara yalnızca bir düğme bunu açıkça söylediğinde yazıyor, örneğin zamanlanmış bir görevi duraklatırken, ve önce dosyanın yedeğini alıyor. Bedeli şu: haber vermeden değişen, araçlara özel disk formatlarına bağımlıyım. Ayrıştırıcılar sürümlü; format değişince yeniden içe aktarma başlıyor.

Veritabanı sunucusu yok, tek SQLite dosyası

Arşiv, Node'un yerleşik node:sqlite modülüyle tek bir SQLite dosyası. Tek makinede yaşayan bir araç için veritabanı sunucusu, kurulup ayakta tutulması gereken bir süreç daha demek. Tek dosya, araç güncellemelerinden ve temizliklerden etkilenmiyor ve kopyalanabiliyor. Bedeli Node sürümü: Switchyard 22.13 ya da üstünü istiyor. Değişmeyen oturum dosyaları eşitlemede atlanıyor, yani tekrar çalıştırmak ucuz. Kendi makinemde gerçek modda yapılan bir içe aktarma, dört araçtan 693 oturumu hatasız okudu.

SSE ve dosya izlemeyle canlı görünüm

Canlı görünüm, araç bir mesajı yazar yazmaz onu göstermeli. Orada veri tek yönde akıyor, diskten tarayıcıya. Bu yüzden WebSocket yerine dosya izleme üzerinden server-sent events kullandım. Cevaplar ters yönde, aracın kendi CLI'ı üzerinden gidiyor ve yerel oturumu sürdürüyor. Cevap bir kopyaya değil, aracın tanıdığı oturuma düşüyor.

Teslimin neden kanıta ihtiyacı var

En çok önemsediğim kısım devir. Bir hesap limitine takılınca Switchyard bir devam paketi hazırlıyor: turları, dokunulan dosyaları, açık işleri ve git durumunu içeren bir Markdown özet, maskelenmiş bir transkript, bayt bayt aynı yerel oturum dosyası ve projenin talimat dosyaları. Her dosyanın SHA-256 özeti alınıyor ve dosyalar atomik yazılıyor. Yarım yazılmış bir paket tamammış gibi görünemiyor.

Sonra paketi yeni bir Claude Desktop hesabına teslim ediyor. Teslimi saymak için akla ilk gelen an, prompt'un gönderildiği an. Ama bu, en önemli durumlarda başarı bildiriyor: yeni hesabın da limiti dolmuş, uygulama bir hata kartı göstermiş ya da mesaj yanlış klasöre düşmüş. Bu yüzden her öğe benzersiz bir işaret taşıyor. Switchyard yerel oturum kaydını okuyor, işareti buluyor ve ardından gelen gerçek bir asistan cevabını bekliyor; API hatası ya da sentetik bir mesaj sayılmıyor. Çalışma dizini eşleşmeli, sohbet başlığı geri okunuyor. Öğe ancak o zaman teslim edilmiş sayılıyor.

Emin olamadığında duruyor. Belirsiz durumdaki bir öğe asla otomatik olarak yeniden gönderilmiyor. Yeni hesapta aynı sohbetin ikinci kopyası, beni bekleyen bir partiden daha kötü.

Zamanlanmış görevler ekranı da aynı fikri kullanıyor. Her Claude koşumu, kendi transkriptindeki son gerçek cevapla eşleştiriliyor. Başarılı olduğunu söyleyip hiç cevap bırakmayan bir koşum, hiçbir şey yapmamış olabilecek bir koşum olarak görünüyor.

Demo modunda Switchyard zamanlanmış görevler ekranı: üç koşumlu gecelik bağımlılık denetimi, biri No assistant reply in the archive, this run may have done nothing uyarısıyla işaretli
Demo modunda koşum geçmişi. Ortadaki koşumun transkriptinde cevap yok, bu yüzden başarılı gösterilmek yerine işaretleniyor. Sentetik veri.

Kilitler ve arayüzde kırılgan bir el

Claude Desktop'ta başka bir hesapta sohbet açmak için bir API yok, bu yüzden Switchyard uygulamayı kendisi sürüyor. Windows'ta küçük bir yardımcı UI Automation kullanıyor. Orijinal klasörde yeni bir sohbet açıyor, prompt'u yapıştırıyor, kontrol ediyor, gönderiyor ve sohbetin adını değiştiriyor. Her girdiden önce öndeki pencerenin Claude'a ait olduğuna bakıyor; odak kayarsa işi bırakıyor.

Yine de iki şey ters gidebilir. İki parti aynı pencere için çekişebilir; bu yüzden global bir arayüz kilidi ve paket başına bir kilit var. Sohbet yanlış hesaba da gidebilir; bu yüzden hedef hesap yerel Desktop metadata'sından okunuyor ve kaynaktan farklı olmak zorunda.

Tasarımın en zayıf yeri UI otomasyonu. Pencereyi değiştiren bir uygulama güncellemesi onu bozabilir; o zaman yardımcı tahmin etmek yerine duruyor. Windows kontrolcüsü, gerçek bir yeni hesapta yapılan bir pilotla ve sahte adaptörlü testlerle doğrulandı. Aylarca kullanımla doğrulanmış değil.

Hesap değiştirmek, sohbetin etrafındakileri de taşımak demek. Hesap taşıma, Claude Desktop zamanlanmış görevlerini yeni hesaba kopyalıyor; skill'ler makinedeki her Claude hesabına eşitleniyor.

Kişisel bir araçtan açık bir repoya

Switchyard, içinde benim yollarım, betiklerim ve verim olan kişisel bir araç olarak başladı. Yayınlamadan önce yalnızca bana anlamlı gelen kısımları çıkardım: kendi betiklerime bağlı bir ekip sekmesi, kendi yerel kurulumuma göre yazılmış bir model değiştirici ve ayarları sırlarla birlikte taşıyan bir paketleme betiği. Koda gömülü yollar, isimler ve saat dilimi ayara dönüştü.

Özel geçmişi yayınlamadım. Açık repo özellik özellik yeniden kuruldu ve her commit tek başına tip kontrolünden geçiyor. Hiçbir şey push edilmeden önce çalışma ağacını ve her commit'i isimler, host adları, e-postalar, ev dizini yolları, token'lar ve kimlikler için taradım. Demo modu sentetik bir ev klasörü üretiyor ve bu klasör gerçek ev dizinine denk gelirse çalışmayı reddediyor. Böylece bir ekran görüntüsü gerçek konuşmaları sızdıramıyor. Bu sitedeki her Switchyard ekran görüntüsü o moddan geliyor.

Kod benim yönetimimde Claude Code ve Codex ile yazıldı. Artık böyle çalışıyorum: mimari ve yukarıdaki kararlar bendeydi, değişiklikleri inceledim, doğrulamayı ben yaptım. Repoda boş olmayan yaklaşık 19.800 satır var, bunun yaklaşık 15.300'ü TypeScript; 53 React bileşeni, 21 API rotası ve 17 dosyada 80 test.

Sınırlar

  • Desktop teslimi yalnızca Windows'ta ve Claude Desktop ile çalışıyor. macOS'ta arşiv ve paketler çalışıyor, arayüz üzerinden teslim kapalı.
  • Alıcı taraf Codex olduğunda yalnızca yazılı talimat alıyor.
  • UI otomasyonu, uygulama güncellenince bozulabilir.
  • Devir, model durumu değil; bir özet ve kanıt. Gizli akıl yürütme ve çalışan süreçler taşınmıyor.

Sırada ne var

Gerçek hesaplarda pilottan sonra bir macOS teslim adaptörü. Bir sohbetin Windows ile macOS arasında taşınabilmesi için çalışma dizini eşlemesi. OpenCode için canlı takip. VS Code Copilot Chat ve Cursor için listelemenin ötesinde arşive aktarma. Ve Node'u ön koşul olmaktan çıkaran paketlenmiş bir sürüm.

Birden fazla kodlama ajanı kullanıyorsanız demoyla başlayın: npm ci, ardından npm run demo, sonra http://127.0.0.1:3011 adresini açın. Gerçek hiçbir şey okumuyor. Ürün sitesi: switchyard.huseyinkaplan.dev.

Bu yazı İngilizce aslından Türkçeye çevrilmiştir.

Çözmeye değer bir problemin mi var?Birlikte çözelim

Konuşmaya başla

Full-stack ve uygulamalı AI rollerine açığım, uzaktan veya hibrit.

Rolü, ekibi ve problemi anlat.