- 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 zerostackile kurulur ve--sandboxaltında Bash izolasyonu kullanmak için bubblewrap gerekir code,plan,reviewgibi 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
/worktreeile 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 --sandboxkullanı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
codeprompt'u ile çalıştırılırzerostack - Tek seferlik çalıştırma modunda prompt
-pile iletilirzerostack -p "Explain this project" - Son oturum
-cile devam ettirilirzerostack -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
/promptile kayıtlı prompt'lar listelenebilir veya başka bir prompt'a geçilebilir-
Yerleşik prompt'lar
codevarsayılandır; tam dosya·Bash araç erişimi ve TDD iş akışı kullanan kodlama modudurplan, kod yazmadan keşif yapıp ardından plan oluşturan yalnızca planlama modudurreview, doğruluk, tasarım, testler ve etkiyi inceleyen kod inceleme modudurdebug, düzeltme önermeden önce kök nedeni bulan hata ayıklama modudurask, salt okunur moddur; yalnızca read·grep·glob'a izin verir, yazma veya Bash'e izin vermezbrainstorm, kod yazmadan fikirleri keşfeden ve tasarım öneren yalnızca tasarım modudurfrontend-design, özgün ve prodüksiyon seviyesinde UI için frontend tasarım modudurreview-security, istismar edilebilir zafiyetleri arayan güvenlik inceleme modudursimplify, davranışı değiştirmeden açıklığı artıran kod sadeleştirme modudurwrite-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.mdya daCLAUDE.mddosyaları otomatik okunup sistem prompt'una eklenir;-nveya--no-context-filesile devre dışı bırakılabilir
İzin sistemi
- zerostack, en güvenli moddan en esnek moda kadar 4 izin modu sunar
-
İzin modları
restrictiveveya-R, yapılandırmada açıkça izin verilmemiş her araç işlemi için onay isterstandardvarsayılandır;ls,cd,git log,cargo checkgibi güvenli komutları otomatik onaylar, yazma ve yıkıcı işlemler için doğrulama isteraccept-allveya--accept-all, çalışma dizini içindeki tüm işlemleri otomatik onaylar ve dış yollar için doğrulama isteryoloveya--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 **.rsotomatik 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
/modelmodeli değiştirir,/thinkingdüşünme seviyesini ayarlar/clearkonuşmayı temizler,/sessionoturumları listeler·kaydeder·yükler/loopyinelemeli prompt planlar,/promptajan prompt'larını listeler veya değiştirir/modeizin sistemi modunu ayarlar; tam komut listesi/helpile görülebilir- Oturumlar
$XDG_DATA_HOME/zerostack/sessions/içine kaydedilir -cen son oturumu sürdürür,-roturumlar 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ılanLOOP_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
- Headless döngü şu komutla çalıştırılabilir
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.jsoniç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
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ınbashüzerinden keyfi kod çalıştırma iznine sahip olmaması gerektiğini düşünüyorum.Tabii
editvecargo runerişimi varsa yine keyfi kod çalıştırma mümkün, amabasholmayan bir ajanın bir şey yapması gerektiğinde araçları anlık olarak üretmeyi tercih ediyorum.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 sadecezerostack -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.
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.
Ben de geçen hafta eğlence ve öğrenme amacıyla bir tane yaptım; çoğu kodlama ajanı gibi yapılandırılmış
mcpServersile 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.
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.
1: https://zed.dev/acp
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-ciskill'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
bashile 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.Ö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 codeile 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ı?
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_tokensyerinemax_completion_tokensistediğ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_effortbelirleyemedim.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.
Ş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.
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.
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ış.
Rust projelerinde, modele
Cargo.tomldosyasını doğrudan değiştirmemesini vecargo addkullanması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
strumile tek bir#[derive]kullanarak yapamaz mıydık?” diye düşündüm. Bağımlılığı olmayan tek bir crate eklemek karşılığındaprovider.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'ı
abortolarak ayarlamasına dikkat çekti ve bu konuda güçlü fikirlerim var.Muhtemelen birkaç KB ikili boyutu tasarrufu için
libunwindlinklenmesinden 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.
Çü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.
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.