Gönderildi, teslim edildi demek değil
Switchyard, her gün kullandığım dört kodlama ajanı için yerel bir panel. Oturumlarını tek arşivde tutuyor, canlı gösteriyor, zamanlanmış görevlerini listeliyor ve bir hesap kullanım limitine takılınca konuşmayı başka bir hesaba taşıyor. Açık kaynak, MIT lisanslı ve 127.0.0.1 dışına çıkmıyor.
- 8araç: 4'ü arşivleniyor, 4'ü salt okunur listeleniyor
- 693oturum, tek gerçek içe aktarmada, hatasız
- 80test, 17 dosyada
- ~19.8ksatır, yaklaşık 15.3k TypeScript
- 0telemetri ya da dış çağrı
Bir devrin yerine ulaşması
Limiti dolan bir Claude hesabındaki iki sohbet, yeni bir hesaba taşınmış. Her biri ancak yeni sohbetin kendi kaydında bir cevap görününce sayılıyor.

Teslim, cevap gelince olur
Bir devir ancak yeni sohbet cevap verince sayılıyor. Prompt'u yapıştırmak kanıt değil, gönder tuşuna basmak da değil.
Bir hesap limitine takılınca Switchyard takılan sohbeti paketliyor ve yeni bir Claude Desktop hesabında yeniden açıyor. En kolay sinyal "gönderildi". Ama tam da can yakan durumlarda başarı bildiriyor: yeni hesabın da limiti dolmuş, uygulama cevap yerine bir hata kartı göstermiş ya da mesaj yanlış proje klasörüne düşmüş.
Bu yüzden paketteki her öğe benzersiz bir işaret taşıyor. Kontrolcü aracın diskteki kendi oturum kaydını okuyor, önce işareti, sonra onun ardından gelen gerçek bir asistan cevabını bekliyor: tamamlanmış bir tur, API hatası değil, sentetik bir mesaj değil. Çalışma dizini eşleşmeli, sohbet başlığı da birebir geri okunmalı. Öğe ancak o zaman reply-observed durumuna geçiyor.
function deliveryEvidence(records, marker) {
let sent = null, reply = null, error = null;
for (const record of records) {
const text = textOf(record);
if (record.type === 'user' && text.includes(marker)) sent = record;
if (!sent || record.type !== 'assistant') continue;
if (record.timestamp < sent.timestamp) continue;
if (record.isApiErrorMessage || record.message?.model === '<synthetic>') {
error = text;
} else if (text.trim() && record.message?.stop_reason === 'end_turn') {
reply = record;
error = null;
}
}
return { sent, reply, error };
}
İşin öbür yarısı, kontrolcünün emin olmadığı an. Yardımcı program, prompt belki girmişken zaman aşımına uğrarsa öğe uncertain oluyor ve belirsiz bir öğe asla otomatik olarak yeniden gönderilmiyor. Yeni hesapta aynı sohbetin ikinci kopyası, durmuş bir partiden daha kötü. O yüzden parti duruyor ve beni bekliyor.
Zamanlanmış görevler ekranı da aynı kuralı kullanıyor. Her Claude koşumu, kendi transkriptindeki son gerçek cevapla eşleştiriliyor. Başarılı görünüp hiç cevap bırakmayan bir koşum, hiçbir şey yapmamış olabilecek bir koşum olarak görünüyor.
Ne yapıyor
- Arşiv
- Codex, Claude Code, OpenCode ve Antigravity oturumlarını, araç güncellemelerinden ve temizliklerinden etkilenmeyen tek bir SQLite dosyasına alıyor. VS Code, VS Code Insiders, Cursor ve Kiro sohbetleri salt okunur listeleniyor.
- Canlı
- Dosya izleme üzerinden server-sent events, araçlar yazdıkça yeni mesajları gösteriyor. Cevap kutusu, yerel oturumu aracın kendi CLI'ı ile sürdürüyor.
- Zamanlama
- Codex otomasyonları, Claude Desktop zamanlanmış görevleri ve Antigravity zamanlamaları tek listede; koşum geçmişi her transkriptle karşılaştırılıyor.
- Paket
- Markdown özet (turlar, dokunulan dosyalar, açık işler, git durumu), maskelenmiş 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.
- Teslim
- Windows'ta yeni bir Claude Desktop hesabına, global bir arayüz kilidi ve paket başına bir kilit arkasında. Hedef hesap, yerel Desktop metadata'sından okunuyor ve kaynaktan farklı olmak zorunda. Uygulamayı küçük bir UI Automation yardımcısı sürüyor.
- Hesaplar
- Hesap taşıma, Claude Desktop zamanlanmış görevlerini yeni hesaba kopyalıyor. Skill'ler makinedeki her Claude hesabına eşitleniyor.
Kendiniz çalıştırın
- Gereken
- Node.js 22.13 ya da üstü (yerleşik
node:sqlitekullanıyor), npm ve Git. - Demo
npm ci, ardındannpm run demo, sonrahttp://127.0.0.1:3011adresini açın. Sentetik bir ev klasörü üretiyor, gerçek hiçbir şey okumuyor.- Gerçek mod
npm run buildvenpm start. Yerel dosyalar salt okunur açılıyor. Onlara yalnızca bir düğme bunu açıkça söylediğinde yazıyor ve önce yedek alıyor.- Yığın
- 127.0.0.1 üzerinde Next.js 15 ve React 19, 53 React bileşeni, 21 API rotası, telemetri yok.
- Yapım
- Benim yönetimimde Claude Code ve Codex ile yazıldı. Mimari, kararlar, inceleme ve doğrulama bendeydi.
Sınırlar
- Desktop teslimi yalnızca Windows'ta ve Claude Desktop ile çalışıyor. macOS'ta arşiv, paketler ve anlık görüntüler çalışıyor; arayüz üzerinden teslim kapalı.
- Codex alıcı taraf olduğunda yalnızca yazılı talimat alıyor. Switchyard Codex arayüzünü sürmüyor.
- Kontrolcü başka bir uygulamanın arayüzünü sürüyor. Pencere yapısını değiştiren bir güncelleme, yardımcı düzeltilene kadar onu bozabilir; o zaman tahmin etmek yerine duruyor.
- Windows kontrolcüsü, gerçek bir yeni hesapta yapılan tek bir pilotla ve sahte adaptörlü testlerle doğrulandı; birçok hesapta uzun bir koşumla değil.
- Devir, model durumu değil; bir özet ve kanıt. Gizli akıl yürütme, çalışan süreçler ve yalnızca uzakta duran geçmiş taşınmıyor.
- Araçların kendi disk formatlarını okuyor ve bu formatlar haber vermeden değişiyor. Ayrıştırıcılar sürümlü; format değişince yeniden içe aktarıyor.


Bu yazıya bırakılan notlar
Katıl
Bir yorum bırak.
Bu yazıya not eklemek için giriş yap.
Sadece adın ve avatarın kullanılır.