1 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • zerostack, Rust ile yazılmış minimal bir kodlama ajanıdır ve birden fazla LLM sağlayıcısını, ayrıca özel sağlayıcıları birlikte destekler
  • Dosya okuma·yazma·düzenleme, grep, dosya bulma, dizin listeleme, izin kapısına bağlı Bash çalıştırma, MCP ve Exa web araçları sunar
  • Yaklaşık 7 bin LoC, 8.9MB ikili dosya boyutuna sahiptir; RAM kullanımı boş oturumda yaklaşık 8MB, çalışma sırasında yaklaşık 12MB, CPU kullanımı ise boştayken %0.0 olarak ölçülmüştür
  • Varsayılan sağlayıcı OpenRouter'dır; cargo install zerostack ile kurulur ve --sandbox altında Bash izolasyonu kullanmak için bubblewrap gerekir
  • code, plan, review gibi yerleşik prompt'lar, 4 izin modu, oturum sürdürme, yinelemeli döngü ve Git worktree entegrasyonu içerir

zerostack genel bakış

  • zerostack, Rust ile yazılmış minimal bir kodlama ajanıdır ve pi ile opencode'dan ilham alır
  • OpenRouter, OpenAI, Anthropic, Gemini, Ollama ve özel sağlayıcıları destekleyen çok sağlayıcılı bir yapıya sahiptir
  • Dosya okuma·yazma·düzenleme, grep, dosya bulma, dizin listeleme gibi dosya araçları ve izin kapısına bağlı Bash çalıştırma sunar
  • Oturum kaydetme·yükleme·sürdürme, bağlam penceresini korumak için otomatik sıkıştırma, crossterm tabanlı terminal arayüzü, MCP sunucu bağlantısı ve Exa tabanlı WebFetch·WebSearch araçlarını içerir
  • /worktree ile Git worktree'leri arasında geçiş yapılabilir ve uzun süreli işler için yinelemeli döngü de entegre edilmiştir

Performans ve kurulum

  • zerostack yaklaşık 7 bin LoC ölçeğindedir ve ikili dosya boyutu 8.9MB'dir
  • RAM kullanımı boş oturumda yaklaşık 8MB, çalışma sırasında yaklaşık 12MB olup, opencode veya diğer JS tabanlı kodlama ajanlarının yaklaşık 300MB kullanımıyla karşılaştırılmaktadır
  • CPU kullanımı boştayken %0.0, araç kullanımı sırasında yaklaşık %1.5 olarak ölçülmüştür; Intel i5 7. nesilde opencode ise boştayken yaklaşık %2, çalışma sırasında yaklaşık %20 ile karşılaştırılmıştır
  • Kurulum için Cargo ve git gerekir; şu komut kullanılır
    cargo install zerostack  
    
  • --sandbox kullanıldığında, tüm Bash komutlarını izole bir ortamda çalıştırmak için bubblewrap kurulmalıdır
    # Debian/Ubuntu  
    apt install bubblewrap  
    
    # Fedora  
    dnf install bubblewrap  
    
    # Arch  
    pacman -S bubblewrap  
    

Hızlı başlangıç

  • Varsayılan sağlayıcı OpenRouter'dır ve API anahtarı ortam değişkeni olarak ayarlanır
    export OPENROUTER_API_KEY="[api_key]"  
    
  • Etkileşimli oturum, varsayılan code prompt'u ile çalıştırılır
    zerostack  
    
  • Tek seferlik çalıştırma modunda prompt -p ile iletilir
    zerostack -p "Explain this project"  
    
  • Son oturum -c ile devam ettirilir
    zerostack -c  
    
  • Sağlayıcı ve model açıkça belirtilebilir
    zerostack --provider openrouter --model deepseek/deepseek-v4-flash  
    

Prompt sistemi

  • zerostack, ajanın davranışını ve üslubunu değiştiren yerleşik sistem prompt'ları kümesini içerir
  • Amaç, superpower veya Claude resmi skills yerine geçebilecek bir prompt ailesi oluşturmaktır
  • /prompt ile kayıtlı prompt'lar listelenebilir veya başka bir prompt'a geçilebilir
  • Yerleşik prompt'lar

    • code varsayılandır; tam dosya·Bash araç erişimi ve TDD iş akışı kullanan kodlama modudur
    • plan, kod yazmadan keşif yapıp ardından plan oluşturan yalnızca planlama modudur
    • review, doğruluk, tasarım, testler ve etkiyi inceleyen kod inceleme modudur
    • debug, düzeltme önermeden önce kök nedeni bulan hata ayıklama modudur
    • ask, salt okunur moddur; yalnızca read·grep·glob'a izin verir, yazma veya Bash'e izin vermez
    • brainstorm, kod yazmadan fikirleri keşfeden ve tasarım öneren yalnızca tasarım modudur
    • frontend-design, özgün ve prodüksiyon seviyesinde UI için frontend tasarım modudur
    • review-security, istismar edilebilir zafiyetleri arayan güvenlik inceleme modudur
    • simplify, davranışı değiştirmeden açıklığı artıran kod sadeleştirme modudur
    • write-prompt, ajan prompt'ları oluşturup optimize eden prompt yazma modudur
    • Özel prompt'lar, Markdown dosyaları $XDG_CONFIG_HOME/zerostack/prompts/ içine konup adlarıyla referans verilerek oluşturulabilir
    • Proje kökündeki veya üst dizinlerdeki AGENTS.md ya da CLAUDE.md dosyaları otomatik okunup sistem prompt'una eklenir; -n veya --no-context-files ile devre dışı bırakılabilir

İzin sistemi

  • zerostack, en güvenli moddan en esnek moda kadar 4 izin modu sunar
  • İzin modları

    • restrictive veya -R, yapılandırmada açıkça izin verilmemiş her araç işlemi için onay ister
    • standard varsayılandır; ls, cd, git log, cargo check gibi güvenli komutları otomatik onaylar, yazma ve yıkıcı işlemler için doğrulama ister
    • accept-all veya --accept-all, çalışma dizini içindeki tüm işlemleri otomatik onaylar ve dış yollar için doğrulama ister
    • yolo veya --yolo, tüm işlemleri prompt göstermeden otomatik onaylar
    • Yapılandırma dosyasında araç bazlı glob pattern tanımlanarak izinler ayrıntılı biçimde yapılandırılabilir
    • Örneğin write **.rs otomatik izinli yapılırken, diğer dosya yazmaları her zaman onay gerektirecek şekilde ayarlanabilir
    • Oturum izin listesi, onaylanan kararları oturum boyunca koruyarak aynı işlem için tekrar tekrar doğrulama istemez
    • Aynı araç çağrısı 3 kereden fazla tekrarlandığında doom-loop algılama, uyarı prompt'u gösterir veya yapılandırmaya göre çağrıyı reddederek ajanın yıkıcı işlemleri tekrarlamasını engeller

Slash komutları ve oturum yönetimi

  • Başlıca slash komutları model, düşünme seviyesi, konuşma, oturum, döngü, prompt ve izin modunu kontrol eder
  • /model modeli değiştirir, /thinking düşünme seviyesini ayarlar
  • /clear konuşmayı temizler, /session oturumları listeler·kaydeder·yükler
  • /loop yinelemeli prompt planlar, /prompt ajan prompt'larını listeler veya değiştirir
  • /mode izin sistemi modunu ayarlar; tam komut listesi /help ile görülebilir
  • Oturumlar $XDG_DATA_HOME/zerostack/sessions/ içine kaydedilir
  • -c en son oturumu sürdürür, -r oturumlar arasında gezip seçim yapar, --session <id> belirli bir oturumu yükler

Yinelemeli döngü

  • zerostack, uzun süreli işler için yinelemeli kodlama döngüsü içerir
  • Ajan işi tekrar tekrar okuyup plandan öğe seçer, işi yapar, testleri çalıştırır, planı günceller ve iş tamamlanana veya yineleme sınırına ulaşılana kadar döngüyü sürdürür
  • Döngü sistemi deneysel bir özelliktir
  • Döngü kullanımı

    • /loop Implement the user authentication system, verilen prompt ile döngüyü başlatır
    • /loop stop, etkin döngüyü durdurur
    • /loop status, mevcut döngü durumunu gösterir
    • Her yineleme; özgün görev, değişen LOOP_PLAN.md, önceki yineleme özeti ve doğrulama çıktısını içerir
    • Döngü etkin olduğunda slash komutu olmayan girişler engellenir
  • CLI tabanlı headless döngü

    • Headless döngü şu komutla çalıştırılabilir
      zerostack --loop --loop-prompt "Refactor the API" --loop-max 10 --loop-run "cargo test"  
      
    • --loop, headless döngü modunu açar
    • --loop-prompt <text>, her yinelemede kullanılacak prompt'u belirtir
    • --loop-plan <path>, özel plan dosyası yolunu belirtir; varsayılan LOOP_PLAN.md'dir
    • --loop-max <N>, maksimum yineleme sayısını belirtir; varsayılan olarak sınır yoktur
    • --loop-run <cmd>, her yinelemeden sonra çalıştırılacak doğrulama komutunu belirtir

Git worktree entegrasyonu

  • zerostack, branch bazlı çalışma akışını git worktree'ler ile sunar
  • Sohbet arayüzü içinden worktree oluşturabilir, içinde çalışabilir, birleştirebilir ve çıkabilirsiniz
  • Git worktree entegrasyonu deneysel bir özelliktir
  • Worktree komutları

    • /worktree <name>, <name> branch'i için bir git worktree oluşturur ve oraya geçer; zaten varsa oluşturmayı atlar
    • /wt-merge [branch], worktree branch'ini [branch] içine merge eder, push eder, temizler ve ardından ana depoya döner
    • /wt-exit, merge etmeden ana depoya döner
  • Örnek iş akışı

    • /worktree feature-x, yeni bir branch ve worktree dizini oluşturur ve oraya geçer
    • Sonrasında zerostack normal şekilde kullanılırsa değişiklikler feature branch'inde kalır
    • /wt-merge, ajanın branch'i merge etmesini, push etmesini, temizlemesini ve ardından ana depoya dönmesini sağlar
    • /wt-exit, merge etmeden hemen ana depoya döner

Desteklenen sağlayıcılar ve lisans

  • Varsayılan sağlayıcı OpenRouter'dır
  • OpenAI uyumlu sağlayıcı olarak vLLM, LiteLLM ve benzerlerini destekler
  • Anthropic, Gemini ve Ollama'yı destekler
  • Özel sağlayıcılar, $XDG_CONFIG_HOME/zerostack/config.json içinde herhangi bir base URL ve API anahtarı ortam değişkeni ile yapılandırılabilir
  • Lisans GPL-3.0-only'dir

1 yorum

 
GN⁺ 4 시간 전
Hacker News yorumları
  • Bu tür araçlara çok hakim değilim ama Claude Code gibi model/araçlara kıyasla ne gibi avantajları olduğunu merak ediyorum.

  • Boş zamanlarımda benzer bir şeyi kendim yapıyordum; amacım ajanları daha derinlemesine anlamak ve Rust öğrenmekti.
    Yine de pi'nin özelleştirilebilirliğini korumak istiyorum. Kendi kendini değiştirme ve yeni araçlar üretme yeteneği çok faydalı; ayrıca bu tür araçların bash üzerinden keyfi kod çalıştırma iznine sahip olmaması gerektiğini düşünüyorum.
    Tabii edit ve cargo run erişimi varsa yine keyfi kod çalıştırma mümkün, ama bash olmayan bir ajanın bir şey yapması gerektiğinde araçları anlık olarak üretmeyi tercih ediyorum.

    • Bunu düşündüm ama Pi TypeScript tabanlı olduğu için betik benzeri bir ortama sahip olabiliyor; Rust ise derlenen bir dil, dolayısıyla kısıtları var.
      Bu yüzden kullanıcı özelleştirmesine başka bir yoldan izin vermeye karar verdim. ~/.config/hypernova/prompts/ içindeki prompt kitaplığı, Skills için basit bir alternatif; yerleşik prompt'lar da superpowers ile Claude'un frontend-design'ının yerini almalı.
      Ajanı ağırlaştırabilecek özellikler derleme sırasında feature flag'lerle kapatılabiliyor; kod da kısa ve okunabilir olduğu için gerekirse zerostack'in kendi kaynak kodunda zerostack çalıştırıp özel bir fork oluşturabilirsiniz.
      Yetki modeli, README'de görüldüğü gibi epey düşünülerek, komut olmayan “Restrictive” modundan ajanın istediğini yaptığı “YOLO” moduna kadar 4 seviye halinde tasarlandı; ayrıca bash çağrıları için izin ver/sor/reddet regex'leri de tanımlanabiliyor. Bu durumda sadece zerostack -R çalıştırarak tüm araçların izin istemesini zorunlu kılabilirsiniz.
      Programlanabilir ajan özellikleri üzerinde de çalışıyorum ama henüz duyuracak aşamada değil.
    • Ben de aynısını Zig ile yapıyorum.
  • Yakın zamanda yarı şaka yarı ciddi şekilde 200 satırın altında bir tane de yaptım: https://github.com/pnegahdar/nano
    İçinde REPL, oturumlar, etkileşimsiz çalıştırma ve onay gibi özellikler var. Modeller akıllandıkça, geliştirici deneyimi dışında harness'ın önemi azalıyor diye düşünüyorum.
    Belki bir gün SWE-bench'te denerim.

    • 200 satır, hatta aslında sadece 190 satırla yapmış olman gerçekten harika.
      Ben de geçen hafta eğlence ve öğrenme amacıyla bir tane yaptım; çoğu kodlama ajanı gibi yapılandırılmış mcpServers ile entegrasyon da çalışıyor.
      Adım adım neyin neden gerekli olduğunu burada derledim: https://nb1t.sh/building-a-real-agent-step-by-step/
  • “RAM footprint: ~8MB on an empty session, ~12MB when working”
    Bu kısmı beğendim. Claude Code birkaç GB kullanıyor, bu da düşük özellikli dizüstülerde epey sinir bozucu.

    • Go ile bir ajan framework'ü yapıyorum ve oldukça hafif.
      Başlangıç süresi 0,5 saniyenin altında, RAM kullanımı da çok düşük. 12 yıllık bir dizüstünde bile yavaşlamadan gayet iyi çalışıyor.
      Özünde bir string birleştirme motoruna yakın olan bir şeyin, eski donanımlar dahil hiçbir cihazda yavaş olması için bir sebep yok.
    • Zed'e geçmeye çalışıyorum; Agent Client Protocol oldukça iyi görünüyor. Claude Code bu yoldan geçerse bellek baskısının ne kadar azalacağını merak ediyorum.
      1: https://zed.dev/acp
    • Evet. Sırf bu gerçek bile birçok kişiyi en az bir kez denemeye ikna edecek gibi duruyor.
    • Bellek kullanımı harika; artık shellbox.dev'in x1 gibi çok küçük instance'larında bile bir kodlama ajanı çalıştırmak mümkün.
    • Bir LSP eklentisi gibi yanında çalışan başka şeyler olmadığını da kontrol etmek gerekir.
  • Eve gidince deneyeceğim. Hafif ve hızlı araçlar kodlama deneyiminde büyük fark yaratıyor.
    Prompt yaklaşımının, genel skill ve alt ajan kombinasyonuna kıyasla pratikte nasıl olduğunu merak ediyorum. Ben örneğin derleme başarısız olursa sık sık /fix-ci skill'ini çalıştırıyorum; alt ajan da hata mesajlarını, stack trace'i ve ilgili log'ları çıkarıp sorunu çözmeye çalışıyor.
    Entegrasyon testlerinde DB sorgu sorunu çıkarsa ajan bazen doğrudan, bazen de benim hafif yönlendirmemle salt okunur DB erişim skill'ini çağırıp inceleme yapıyor. Uzun ve derin kazmak gerektiğinde de “Sonnet alt ajanını kullan ve bu davranışı DB sorgu skill'iyle debug etmesini söyle” gibi komutlar veriyorum.
    Skill'ler anlık ek yetenek sağlıyor, alt ajanlar ise bağlam şişmesini önlemek için izolasyon sunuyor. Ajan bash ile kendisini başka prompt'larla çalıştırırsa benzer bir şey yapılabilir ama biraz daha az akıcı olabilir; bunu bizzat kontrol etmem gerekecek.

    • Çoğunlukla skill gibi kullanılıyor ama bunu bir “komut”tan çok ortam olarak düşünmek lazım.
      Örneğin birleşik prompt'lardan biri olan /prompt debug, debug odaklı bir ajan açıyor; o durumda normal bir ajan gibi konuşmaya devam edebilir, sonra /prompt code ile standart kodlama ajanına geri dönebilirsiniz.
      Alt ajanlar henüz desteklenmiyor; çünkü şu anda tüm ajan tek bir bağlam tamponunda çalışıyor ve ben hafif kalmasını istiyorum. Ama keşfi yoğun işler bağlam penceresini sık sık şişirdiği için alt ajan eklenmesi olası.
  • Ben de Claude Code ile böyle bir şey yaptırdım; düzenleme tarafına Dirac'ın satır hashing yaklaşımını da ekledim.
    Rust kullandım ve eklentiler aracılığıyla hook'lar uygulayıp kendini değiştirebilir hale getirme fikrim de vardı; ama sonunda iyileştirmelerle ilgili ayrıntıları ayrı dosyalara yazdırıp kaynak kodu güncelledikten sonra yeniden derleten bir yapıda karar kıldım.
    Kaynak kodun konumu sabit olduğu için ajan kendini yeniden yazıp derleyebiliyor. 2x RTX 6000 Pro üzerinde DeepSeek 4 Flash ile kullanıyorum ve yaklaşık 138 tok/s alıyorum.
    Dürüst olmak gerekirse Pi, Dirac ve OpenCode'dan epey kopya çektim. Buradan alıp götürmeye değer yeni bir teknik var mı?

    • Hafifliğin dışında ilginç özellikler olarak prompt kitaplığı, Git worktree entegrasyonu ve Ralph Wiggum loop entegrasyonu ekledim.
    • GitHub'da açık mı, merak ettim.
  • Biraz denedim, gerçekten oldukça hızlıydı.
    Katkıcı arıyor musunuz, yoksa bunu kişisel bir araç olarak mı geliştiriyorsunuz, onu merak ediyorum.
    Ama başka modelleri kullanmaya çalışırken birkaç sorunla karşılaştım. Azure'un gpt-5.5 modeli, OpenAI uyumlu endpoint kullansam bile max_tokens yerine max_completion_tokens istediği için çalışmıyor.
    Ayrıca özel header geçmenin bir yolu da yok gibi göründüğünden DeepSeek modelleri için reasoning_effort belirleyemedim.

    • PR kabul etmeyi düşünüyorum.
      Bahsettiğiniz şeyler kod tabanındaki bariz hatalar gibi görünüyor; mümkünse her hata için GitHub'da ayrı issue açmanız iyi olur.
  • Claude Code ve Opencode benim ortamımda iyi çalışıyor.
    Kodlama ajanları veri merkezlerinde 1000W üstü güç ve 2TB üstü bellekle çalışırken, insanların dizüstündeki son birkaç watt'a ve birkaç yüz MB belleğe odaklanması biraz komik geliyor.
    Sonuçta kod derlemenin enerji maliyetinin yanında kayboluyor ama yine de daha hızlı ve hafif yapmak kötü bir şey değil.

    • Veri merkezleri özel elektrik hatlarıyla çalışıyor ama benim dizüstüm batarya ile çalışıyor.
      Şu anda bir kodlama ajanı kullanınca batarya oldukça hızlı bitiyor; üstelik yapılan işlerin çoğu benim dizüstümde gerçekleşmiyor, bu yüzden bu daha da şaşırtıcı.
      İstemci tarafındaki kodlama ajanlarını verimli hale getirmek iklimi kurtarmak için değil, çalışma süresini uzatmak için. Hatta pratikte iklim açısından daha kötü bile olabilir.
    • Elbette insanlar kendi bilgisayarlarında çalışan yazılıma odaklanır.
      Başkasının bilgisayarında çalışan yazılım benim sorunum değil. Başkasının sunucusunda ne döndüğünü kontrol edemem; etsem bile o RAM'in faturasını ben ödemiyorum, o yüzden umursamam.
      Ama kendi cihazımdaki RAM'in parasını ben ödüyorum. 1KB'den küçük metin gösteren bir TUI birkaç GB bellek işgal edip Windows'ta diğer uygulamaları OOM ile öldürürse ya da Linux'ta HDD'ye swap yapıp tüm makineyi kilitlerse tabii ki umursarım.
      RAM fiyatları fiilen 5 katına, diğer parça fiyatları da 2-3 katına çıkmışken bellek israfından kaçınmak özellikle önemli.
    • Bu fazla basitleştirilmiş bir ifade.
      Modelin büyük ve kaynak tüketen bir şey olduğu doğru ama harness, modelin ne kadar yoğun kullanıldığını ciddi biçimde etkileyebilir.
      Örneğin harness güçlü bir araç setine sahipse model işleri çok daha verimli yapabilir.
  • Kod tabanı küçük olduğu için Pi içindeki DeepSeek v4 Flash'a verip riskli kısımlar var mı diye hızlıca baktırdım; özellikle endişe verici bir şey bulamadı. Güzel yapılmış.

    • OP'nin kodun önemli bir kısmını DeepSeek V4 Flash ile ürettiğini söylemesi üzerine eski bağımlılık olup olmadığını kontrol ettim.
      Rust projelerinde, modele Cargo.toml dosyasını doğrudan değiştirmemesini ve cargo add kullanmasını açıkça söylemezseniz, deneyimime göre Claude 4.7 Opus bile neredeyse her zaman eski bağımlılıklar ekliyor.
      Bu projenin bağımlılıklarını elle kontrol ettim ve hepsi güncel sürümlerdi; bu güzel. Tabii bu, transitif bağımlılıkların içinde sorun olmadığı anlamına gelmiyor.
      LLM'lerle kod incelemesi yaptırma meselesi çok hızlı biçimde bir zevk tartışmasına dönüşebiliyor. Örneğin koda göz atarken string ile enum arasında gidip gelen bazı metotlar için “bunu strum ile tek bir #[derive] kullanarak yapamaz mıydık?” diye düşündüm. Bağımlılığı olmayan tek bir crate eklemek karşılığında provider.rs çok daha sade hale gelebilirdi.
      Eğlencesine DeepSeek V4 Pro'nun Max thinking moduna kod tabanını “denetlettim”; gizli telemetriye dair bariz bir iz olmadığını söyledi. Ama projenin panic handler'ı abort olarak ayarlamasına dikkat çekti ve bu konuda güçlü fikirlerim var.
      Muhtemelen birkaç KB ikili boyutu tasarrufu için libunwind linklenmesinden kaçınılmış, ama bunun bedeli çökme anında hemen duran ve kullanıcıya stack trace vermeyen bir ikili oluyor. Panic durumunda faydalı debug bilgisi alınabiliyorsa ikilinin yaklaşık 50KiB daha büyük olması bence daha iyi.
      Ayrıca asenkron görevlerde panic yaşanırsa toparlanıp normal bir hata mesajı gösterme şansınız olmuyor; tüm süreç doğrudan sonlanıyor.
    • Kodun epey büyük bir bölümünü DeepSeek v4 Flash yazdı; TUI mantığının bir kısmını ise ben yazdım.
      Çünkü DeepSeek belirli imleç hareketi mantığında sürekli başarısız oluyordu. Bellek optimizasyon sürecinin tamamını bizzat yönettim; başka bir yorumda da yazdığım gibi bunda derleyici optimizasyonlarını ve daha verimli veri yapıları sunan Rust crate'lerini birlikte kullandım.
    • “Pi içindeki DeepSeek v4 Flash'a verip riskli kısımlara baktırdım” yaklaşımı, prompt injection yüzünden oldukça zayıf bir inceleme yöntemi değil mi?
  • Bunun tam da bugün çıkmış olması komik; ben de Rust ile bir tane yazmaya başlamak üzereydim.
    Büyük projelerde opencode'un yavaş yavaş bellek sızdırıp 6GB'a kadar çıkması ve giderek yavaşlaması gerçekten şaşırtıcı.
    Bir göz atacağım. Güzel görünüyor.

    • Aynen. Bu proje, eski bir dizüstünde Firefox ve 2'den fazla opencode instance'ını aynı anda açınca OOM killer'ın devreye girmesiyle başladı.