1 poin oleh GN⁺ 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • zerostack adalah agen coding minimalis yang ditulis dengan Rust, dengan dukungan untuk banyak penyedia LLM serta penyedia kustom
  • Menyediakan baca·tulis·edit file, grep, pencarian file, daftar direktori, eksekusi Bash dengan gerbang izin, MCP, dan alat web Exa
  • Berukuran sekitar 7 ribu LoC, biner 8.9MB, dengan RAM sekitar 8MB saat sesi kosong dan sekitar 12MB saat bekerja, serta CPU 0.0% saat idle
  • Penyedia bawaan adalah OpenRouter, diinstal dengan cargo install zerostack, dan memerlukan bubblewrap untuk isolasi Bash di --sandbox
  • Mencakup prompt bawaan seperti code·plan·review, 4 mode izin, melanjutkan sesi, loop iteratif, dan integrasi Git worktrees

Gambaran umum zerostack

  • zerostack adalah agen coding minimalis yang ditulis dengan Rust, terinspirasi oleh pi dan opencode
  • Memiliki arsitektur multi-penyedia yang mendukung OpenRouter, OpenAI, Anthropic, Gemini, Ollama, dan penyedia kustom
  • Menyediakan alat file seperti baca·tulis·edit file, grep, pencarian file, dan daftar direktori, serta eksekusi Bash dengan gerbang izin
  • Mencakup simpan·muat·lanjutkan sesi, kompresi otomatis untuk menjaga context window, UI terminal berbasis crossterm, koneksi server MCP, serta alat WebFetch·WebSearch berbasis Exa
  • Dengan /worktree, Anda bisa berpindah antar Git worktree, dan loop iteratif untuk pekerjaan jangka panjang juga sudah terintegrasi

Performa dan instalasi

  • zerostack memiliki skala sekitar 7 ribu LoC, dengan ukuran biner 8.9MB
  • Penggunaan RAM sekitar 8MB saat sesi kosong dan sekitar 12MB saat bekerja, dibandingkan dengan sekitar 300MB pada opencode atau agen coding berbasis JS lainnya
  • Penggunaan CPU diukur 0.0% saat idle dan sekitar 1.5% saat menggunakan alat; sebagai perbandingan, opencode pada Intel i5 generasi ke-7 sekitar 2% saat idle dan 20% saat bekerja
  • Instalasi memerlukan Cargo dan git, menggunakan perintah berikut
    cargo install zerostack  
    
  • Saat menggunakan --sandbox, Anda perlu memasang bubblewrap agar semua perintah Bash berjalan dalam lingkungan terisolasi
    # Debian/Ubuntu  
    apt install bubblewrap  
    
    # Fedora  
    dnf install bubblewrap  
    
    # Arch  
    pacman -S bubblewrap  
    

Mulai cepat

  • Penyedia bawaan adalah OpenRouter, dan API key diatur melalui environment variable
    export OPENROUTER_API_KEY="[api_key]"  
    
  • Sesi interaktif dijalankan dengan prompt default code
    zerostack  
    
  • Mode sekali jalan meneruskan prompt dengan -p
    zerostack -p "Explain this project"  
    
  • Sesi terakhir dapat dilanjutkan dengan -c
    zerostack -c  
    
  • Anda dapat menentukan penyedia dan model
    zerostack --provider openrouter --model deepseek/deepseek-v4-flash  
    

Sistem prompt

  • zerostack mencakup sekumpulan system prompt bawaan yang mengubah perilaku dan gaya bicara agen
  • Tujuannya adalah membangun keluarga prompt yang dapat menggantikan superpower atau skills resmi Claude
  • Dengan /prompt, Anda dapat menampilkan daftar prompt yang terdaftar atau beralih ke prompt lain
  • Prompt bawaan

    • code adalah default, yaitu mode coding dengan akses penuh ke file·alat Bash dan menggunakan workflow TDD
    • plan adalah mode khusus perencanaan yang menjelajah tanpa menulis kode lalu menyusun rencana
    • review adalah mode code review yang meninjau akurasi, desain, pengujian, dan dampak
    • debug adalah mode debug yang mencari akar masalah sebelum mengusulkan perbaikan
    • ask adalah mode read-only yang hanya mengizinkan read·grep·glob, tanpa write atau Bash
    • brainstorm adalah mode khusus desain yang mengeksplorasi ide dan menyajikan rancangan tanpa menulis kode
    • frontend-design adalah mode desain frontend untuk UI yang unik dan siap produksi
    • review-security adalah mode security review yang mencari kerentanan yang dapat dieksploitasi
    • simplify adalah mode penyederhanaan kode yang meningkatkan kejelasan tanpa mengubah perilaku
    • write-prompt adalah mode penulisan prompt untuk membuat dan mengoptimalkan prompt agen
    • Prompt kustom dapat dibuat dengan menaruh file Markdown di $XDG_CONFIG_HOME/zerostack/prompts/ lalu merujuknya berdasarkan nama
    • Secara otomatis membaca AGENTS.md atau CLAUDE.md di root proyek atau direktori induk lalu menyisipkannya ke system prompt; dapat dinonaktifkan dengan -n atau --no-context-files

Sistem izin

  • zerostack menyediakan 4 mode izin dari yang paling aman hingga yang paling permisif
  • Mode izin

    • restrictive atau -R meminta persetujuan untuk setiap aksi alat yang tidak diizinkan secara eksplisit dalam konfigurasi
    • standard adalah default; perintah aman seperti ls, cd, git log, cargo check disetujui otomatis, sementara operasi tulis dan destruktif meminta konfirmasi
    • accept-all atau --accept-all menyetujui otomatis semua pekerjaan di dalam direktori kerja, dan meminta konfirmasi untuk path di luar itu
    • yolo atau --yolo menyetujui otomatis semua pekerjaan tanpa prompt
    • Anda dapat mengatur izin secara rinci dengan menentukan pola glob per alat di file konfigurasi
    • Misalnya, Anda bisa membuat write **.rs diizinkan otomatis sementara penulisan file lain selalu meminta konfirmasi
    • Allowlist sesi menyimpan keputusan yang telah disetujui selama sesi agar aksi yang sama tidak perlu dikonfirmasi berulang kali
    • Jika pemanggilan alat yang sama berulang 3 kali atau lebih, deteksi doom-loop akan menampilkan prompt peringatan atau menolaknya sesuai konfigurasi, untuk mencegah agen mengulangi aksi destruktif

Perintah slash dan manajemen sesi

  • Perintah slash utama mengontrol model, tingkat pemikiran, percakapan, sesi, loop, prompt, dan mode izin
  • /model mengganti model, dan /thinking mengatur tingkat pemikiran
  • /clear menghapus percakapan, dan /session menampilkan·menyimpan·memuat sesi
  • /loop menjadwalkan prompt iteratif, dan /prompt menampilkan atau mengubah prompt agen
  • /mode mengatur mode sistem izin, dan seluruh perintah dapat dilihat lewat /help
  • Sesi disimpan di $XDG_DATA_HOME/zerostack/sessions/
  • -c melanjutkan sesi terbaru, -r menelusuri dan memilih sesi, dan --session <id> memuat sesi tertentu

Loop iteratif

  • zerostack mencakup loop coding iteratif untuk pekerjaan jangka panjang
  • Agen berulang kali membaca tugas, memilih item dari rencana, melakukan pekerjaan, menjalankan tes, memperbarui rencana, lalu melanjutkan loop hingga tugas selesai atau batas iterasi tercapai
  • Sistem loop adalah fitur eksperimental
  • Cara menggunakan loop

    • /loop Implement the user authentication system memulai loop dengan prompt yang ditentukan
    • /loop stop menghentikan loop yang aktif
    • /loop status menampilkan status loop saat ini
    • Tiap iterasi mencakup tugas asli, LOOP_PLAN.md yang terus berubah, ringkasan iterasi sebelumnya, dan output verifikasi
    • Saat loop aktif, input selain perintah slash akan diblokir
  • Loop headless berbasis CLI

    • Anda dapat menjalankan loop headless dengan perintah berikut
      zerostack --loop --loop-prompt "Refactor the API" --loop-max 10 --loop-run "cargo test"  
      
    • --loop mengaktifkan mode loop headless
    • --loop-prompt <text> menentukan prompt yang akan digunakan pada tiap iterasi
    • --loop-plan <path> menentukan path file rencana kustom, dengan default LOOP_PLAN.md
    • --loop-max <N> menentukan jumlah iterasi maksimum, dengan default tanpa batas
    • --loop-run <cmd> menentukan perintah verifikasi yang dijalankan setelah tiap iterasi

Integrasi Git worktrees

  • zerostack menyediakan alur kerja pekerjaan per cabang melalui git worktree
  • Dari dalam UI chat, Anda bisa membuat worktree, bekerja di dalamnya, menggabungkannya, lalu keluar
  • Integrasi Git worktrees adalah fitur eksperimental
  • Perintah worktree

    • /worktree <name> membuat git worktree pada branch <name> lalu berpindah ke sana; jika sudah ada, pembuatan dilewati
    • /wt-merge [branch] menggabungkan branch worktree ke [branch], melakukan push, membersihkan, lalu kembali ke repositori utama
    • /wt-exit kembali ke repositori utama tanpa melakukan merge
  • Contoh workflow

    • /worktree feature-x membuat branch baru dan direktori worktree lalu berpindah ke sana
    • Setelah itu, gunakan zerostack seperti biasa dan perubahan akan tetap berada di branch feature
    • /wt-merge membuat agen menggabungkan branch, melakukan push, membersihkan, lalu kembali ke repositori utama
    • /wt-exit langsung kembali ke repositori utama tanpa merge

Penyedia yang didukung dan lisensi

  • Penyedia bawaan adalah OpenRouter
  • Mendukung penyedia yang kompatibel dengan OpenAI seperti vLLM dan LiteLLM
  • Mendukung Anthropic, Gemini, dan Ollama
  • Penyedia kustom dapat dikonfigurasi di $XDG_CONFIG_HOME/zerostack/config.json dengan base URL arbitrer dan environment variable API key
  • Lisensinya adalah GPL-3.0-only

1 komentar

 
GN⁺ 4 jam lalu
Pendapat Hacker News
  • Saya kurang paham soal alat seperti ini, jadi penasaran apa keunggulannya dibanding model/alat seperti Claude Code

  • Saya juga sedang membuat sesuatu yang mirip di waktu luang, dengan tujuan memahami agen lebih dalam sekaligus belajar Rust
    Hanya saja saya ingin tetap mempertahankan kemampuan konfigurasi pi. Kemampuan untuk memodifikasi diri sendiri dan membuat alat baru sangat berguna, dan saya merasa alat seperti ini seharusnya tidak diberi izin menjalankan kode arbitrer lewat bash
    Tentu saja, kalau punya akses ke edit dan cargo run, eksekusi kode arbitrer tetap mungkin, tetapi kalau ada tugas yang perlu dilakukan agen tanpa bash, saya lebih memilih membuat alatnya saat itu juga

    • Saya juga sempat memikirkan masalah ini, tetapi Pi berbasis TypeScript jadi bisa punya lingkungan mirip skrip, sedangkan Rust adalah bahasa terkompilasi jadi ada batasannya
      Karena itu saya memutuskan mengizinkan kustomisasi dengan cara lain. Pustaka prompt di ~/.config/hypernova/prompts/ adalah alternatif sederhana untuk Skills, dan prompt bawaan dimaksudkan untuk menggantikan superpowers dan frontend-design milik Claude
      Fitur yang bisa membuat agen menjadi berat dapat dimatikan saat kompilasi lewat feature flag, dan karena kodenya pendek serta mudah dibaca, bila perlu Anda bisa menjalankan zerostack pada source zerostack itu sendiri untuk membuat fork kustom
      Model perizinannya, seperti terlihat di README, dibuat setelah banyak pertimbangan, terdiri dari 4 tingkat, dari “Restrictive” tanpa perintah sampai “YOLO” yang membiarkan agen melakukan apa pun yang diinginkannya, dan ada juga regex izinkan/tanya/tolak untuk pemanggilan bash. Dalam kasus ini, cukup jalankan zerostack -R untuk memaksa semua alat selalu meminta izin
      Fitur agen yang bisa diprogram juga sedang dikerjakan, tetapi belum siap diumumkan
    • Saya juga sedang membuat yang serupa dengan Zig
  • Baru-baru ini saya juga bikin versi iseng tapi setengah serius dengan kurang dari 200 baris: https://github.com/pnegahdar/nano
    Sudah ada fitur REPL, sesi, eksekusi non-interaktif, dan approval. Menurut saya, makin pintar modelnya, makin berkurang pentingnya harness, kecuali untuk pengalaman pengembang
    Mungkin suatu saat saya akan menjalankannya di SWE-bench

    • 200 baris, bahkan cuma 190 baris, itu benar-benar keren
      Minggu lalu saya juga membuat satu sendiri untuk senang-senang dan belajar, dan seperti kebanyakan coding agent, itu juga bisa terintegrasi dengan mcpServers yang sudah dikonfigurasi
      Saya juga merangkum apa yang dibutuhkan di tiap langkah dan alasannya: https://nb1t.sh/building-a-real-agent-step-by-step/
  • “RAM footprint: ~8MB on an empty session, ~12MB when working”
    Bagian ini saya suka. Claude Code memakai beberapa GB, jadi cukup menyebalkan di laptop spek rendah

    • Saya sedang membuat framework agen dengan Go, dan itu sangat ringan
      Waktu start-nya kurang dari 0,5 detik dan penggunaan RAM-nya juga sangat rendah. Di laptop berusia 12 tahun pun tetap berjalan lancar tanpa melambat
      Pada dasarnya ini hampir seperti mesin penggabung string, jadi tidak ada alasan untuk lambat di perangkat apa pun, termasuk perangkat keras lama
    • Saya sedang mencoba pindah ke Zed, dan Agent Client Protocol kelihatannya cukup bagus. Saya penasaran seberapa besar tekanan memorinya akan berkurang kalau Claude Code lewat pendekatan ini
      1: https://zed.dev/acp
    • Betul. Fakta ini saja sepertinya sudah cukup membuat banyak orang mau mencobanya
    • Penggunaan memorinya sangat bagus, jadi sekarang coding agent bisa dijalankan bahkan di instance kecil sekali seperti x1 milik shellbox.dev
    • Perlu dicek juga apakah ada hal seperti plugin LSP yang ikut berjalan bersamanya
  • Saya akan coba saat sudah di rumah. Alat yang ringan dan cepat benar-benar membuat perbedaan besar dalam pengalaman ngoding
    Saya penasaran bagaimana pendekatan prompt ini dibanding gabungan skill dan sub-agent yang umum. Saya sering mencampurnya, misalnya kalau build gagal saya menjalankan skill /fix-ci, lalu sub-agent mengambil pesan error, stack trace, dan log terkait untuk menyelesaikan masalah
    Kalau ada masalah query DB di integration test, agen kadang menyelidikinya sendiri, atau saya arahkan sedikit supaya memanggil skill akses DB read-only. Kalau perlu menggali lama dan dalam, saya mengatakan hal seperti “gunakan sub-agent Sonnet dan suruh debug perilaku ini dengan skill query DB”
    Skill memberi kemampuan tambahan secara instan, dan sub-agent memberi isolasi agar konteks tidak membengkak. Agen juga mungkin bisa meniru ini dengan menjalankan dirinya sendiri lewat bash bersama prompt lain, tetapi rasanya akan sedikit kurang mulus, jadi saya harus mencobanya sendiri

    • Kebanyakan dipakai seperti skill, tetapi lebih tepat dianggap sebagai lingkungan daripada “perintah”
      Misalnya salah satu prompt terintegrasi, /prompt debug, akan membuka agen yang berfokus pada debugging, dan dari situ Anda bisa tetap bercakap seperti dengan agen biasa, lalu kembali ke agen coding standar dengan /prompt code
      Untuk saat ini sub-agent belum didukung karena keseluruhan agen berjalan dalam satu buffer konteks dan saya ingin menjaganya tetap ringan. Namun tugas yang banyak eksplorasi memang sering membengkakkan context window, jadi kemungkinan besar sub-agent akan ditambahkan nanti
  • Saya juga pernah menyuruh Claude Code membuat sesuatu seperti ini, dan untuk pengeditan saya juga menambahkan line hashing dari Dirac
    Saya memakai Rust, dan sempat terpikir untuk mengimplementasikan hook sebagai plugin agar bisa melakukan self-modification, tetapi akhirnya saya rapikan dengan membuatnya menulis detail perbaikan ke file terpisah, memperbarui source code, lalu mengompilasinya ulang
    Lokasi source code-nya tetap, jadi agen bisa menulis ulang dirinya sendiri dan membangunnya lagi. Saya memakainya sambil menjalankan DeepSeek 4 Flash di 2x RTX 6000 Pro, dan kecepatannya sekitar 138 tok/s
    Sejujurnya saya meniru Pi, Dirac, dan OpenCode. Apakah ada teknik baru di sini yang layak saya curi?

    • Selain ringan, fitur menarik yang saya masukkan adalah pustaka prompt, integrasi Git worktree, dan integrasi loop Ralph Wiggum
    • Penasaran apakah ini dipublikasikan di GitHub
  • Saya sempat mencobanya sebentar dan memang cukup cepat
    Saya penasaran apakah sedang mencari kontributor, atau ini memang dibuat sebagai alat pribadi
    Tapi saya menemui beberapa masalah saat mencoba model lain. Di Azure, gpt-5.5 tidak berjalan meskipun memakai endpoint kompatibel OpenAI, karena max_tokens diubah menjadi max_completion_tokens
    Juga tampaknya tidak ada cara untuk meneruskan custom header, jadi saya tidak bisa menetapkan reasoning_effort untuk model DeepSeek

    • Saya terbuka menerima PR
      Yang Anda sebutkan tampaknya bug yang jelas di codebase, jadi kalau bisa tolong buka issue GitHub terpisah untuk masing-masing bug
  • Claude Code dan Opencode bekerja baik di lingkungan saya
    Agak lucu bahwa coding agent berjalan di data center dengan konsumsi daya lebih dari 1000W dan memori lebih dari 2TB, tetapi orang justru fokus pada beberapa watt terakhir dan beberapa ratus MB memori di laptop mereka
    Toh dibanding biaya energi untuk mengompilasi kode, ini tetap akan tenggelam, tetapi membuatnya lebih cepat dan ringan juga bukan hal buruk

    • Data center berjalan dengan saluran listrik khusus, tetapi laptop saya berjalan dengan baterai
      Saat saya memakai coding agent sekarang, baterainya habis cukup cepat, dan itu mengejutkan kalau dipikir sebagian besar pekerjaannya tidak terjadi di laptop saya
      Mengoptimalkan coding agent sisi klien bukan untuk menyelamatkan iklim, tetapi untuk memperpanjang jam kerja. Bahkan bisa jadi justru lebih buruk bagi iklim
    • Tentu saja orang fokus pada software yang berjalan di komputer mereka sendiri
      Software yang berjalan di komputer orang lain bukan urusan saya. Saya tidak bisa mengendalikan apa yang berjalan di server orang lain, dan bahkan kalau bisa pun saya tidak membayar biaya RAM-nya, jadi saya tidak peduli
      Sebaliknya, RAM di perangkat saya saya bayar sendiri. Jika TUI yang hanya menampilkan teks kurang dari 1KB menghabiskan beberapa GB memori sampai membuat aplikasi lain di Windows mati karena OOM, atau menyebabkan Linux swap ke HDD dan membekukan seluruh mesin, tentu saya akan peduli
      Saat harga RAM sungguhan naik 5 kali lipat dan harga komponen lain juga naik 2–3 kali lipat, menghindari pemborosan memori jadi sangat penting
    • Itu penyederhanaan yang berlebihan
      Memang benar modelnya besar dan boros sumber daya, tetapi harness bisa sangat memengaruhi seberapa banyak model dipakai
      Misalnya, kalau harness punya kumpulan alat yang kuat, model bisa bekerja jauh lebih efisien
  • Codebase-nya kecil, jadi saya melemparkannya ke DeepSeek v4 Flash di Pi untuk meninjau apakah ada bagian berbahaya, dan saya tidak menemukan hal yang mengkhawatirkan. Bagus dibuatnya

    • Karena OP bilang sebagian besar kode dibuat oleh DeepSeek V4 Flash, saya juga mengecek apakah ada dependensi usang
      Dalam proyek Rust, saya sering mengalami bahwa bahkan Claude 4.7 Opus hampir selalu menambahkan dependensi lama kecuali Anda secara eksplisit menyuruh model untuk tidak mengedit Cargo.toml langsung dan memakai cargo add
      Saya memeriksa dependensi proyek ini secara manual dan semuanya versi terbaru, yang bagus. Tentu itu tidak berarti tidak ada masalah tersembunyi di dependensi transitif
      Masalah melakukan code review dengan LLM bisa cepat berubah jadi soal selera. Misalnya, saat melihat kodenya saya sempat berpikir beberapa metode yang bolak-balik antara string dan enum mungkin bisa cukup dengan satu #[derive] dari strum. Dengan menambahkan satu crate tanpa dependensi, provider.rs bisa jauh lebih ringkas
      Sekadar iseng, saya juga meminta DeepSeek V4 Pro dengan Max thinking untuk “mengaudit” codebase ini, dan katanya tidak ada tanda jelas telemetri tersembunyi. Tetapi ia menyoroti bahwa proyek ini mengatur panic handler ke abort, dan saya punya pendapat kuat soal itu
      Mungkin tujuannya menghindari link ke libunwind demi menghemat beberapa KB ukuran biner, tetapi akibatnya saat crash, binernya langsung berhenti tanpa memberi stack trace kepada pengguna. Menurut saya, jika saat panic bisa mendapatkan informasi debug yang berguna, ukuran biner yang bertambah sekitar 50KiB lebih layak dipilih
      Selain itu, kalau panic terjadi di task asinkron, itu tidak bisa dipulihkan untuk menampilkan pesan error biasa, dan seluruh proses langsung berhenti
    • Cukup banyak bagian kode ini ditulis oleh DeepSeek v4 Flash, dan sebagian logika TUI saya tulis sendiri
      Alasannya DeepSeek terus gagal pada logika perpindahan kursor tertentu. Proses optimasi memori saya tangani sepenuhnya sendiri, dan seperti saya tulis di komentar lain, saya menggabungkan optimasi compiler dengan penggunaan crate Rust untuk memanfaatkan struktur data yang lebih efisien
    • Pendekatan “melemparkannya ke DeepSeek v4 Flash di Pi untuk meninjau bagian berbahaya” terdengar seperti pemeriksaan yang cukup rapuh karena prompt injection, bukan?
  • Lucu juga kebetulan ini keluar hari ini. Saya sendiri baru saja hendak mulai menulis yang serupa dengan Rust
    Cukup mengejutkan melihat opencode perlahan bocor memori di proyek besar sampai mencapai 6GB lalu makin lama makin lambat
    Akan saya cek. Kelihatannya keren

    • Betul. Proyek ini berawal ketika di laptop lama saya, Firefox dan lebih dari 2 instance opencode dibuka bersamaan lalu OOM killer aktif