5 puan yazan GN⁺ 16 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • GitHub’da 161 bin yıldız alan açık kaynaklı yapay zeka kodlama ajanı OpenCode, yerel Qwen3.6-27B ile test edildiğinde hem araç kalitesi hem de güvenlik tasarımı açısından kullanımın bırakılması gereken bir düzeydeydi
  • AGENTS.md yeniden yükleme, sabit mesafeli bağlam budama, güncel tarih ekleme ve mod değiştirme işlemleri prompt cache’i tekrar tekrar geçersiz kılıyor; bu yüzden M4 Max’te bile yanıt üretimi başlamadan önce süre 10 dakikaya kadar çıkabiliyor
  • Oturum sıkıştırma, sistem prompt’u, izin doğrulama, alt ajan kontrolü ve TUI düzgün biçimde birbirine bağlanmadığı için bağlam ve mesajlar kayboluyor; model önemli spesifikasyonları unutmuş halde kod yazabiliyor
  • Bash AST’si ve metin desenlerine dayanan izin filtresi, dolaylı çalıştırma, mutlak yol, değişken, Python, yönlendirme gibi yöntemleri engelleyemiyor; harici dosya erişim kısıtları ve kalıcı izinler de kolayca aşılabiliyor
  • Varsayılan uzak model bağlantısı, sınırsız internet erişimi ve geçmişteki HTTP sunucusu RCE açığı düşünüldüğünde yalnızca Docker yeterli değil; çalıştırılabilir dosya engelleme, salt okunur yollar ve işletim sistemi düzeyinde izolasyon gerekiyor

Değerlendirme kapsamı ve varsayımlar

  • OpenCode, geliştiricisi tarafından bir yapay zeka kodlama ajanı olarak tanıtılan bir proje; inceleme sırasında GitHub yıldız sayısı 161 bindi
  • Test, yerel LLM olan Qwen3.6-27B ve OpenCode Git sürümü baef5cd4 temel alınarak yapıldı
  • Bu, ayrı bir güvenlik ifşasından çok, LLM çıktısının Bash’e aktarıldığı yapıda boru hattı katmanlarının nasıl başarısız olduğunu inceleyen bir çalışma
  • LLM kullanmanın kendisi ile kullanıcının makinesinin kolayca ele geçirilebilir veya silinebilir olması ayrı konular olarak değerlendiriliyor

Prompt cache’i tekrar tekrar bozan yapı

  • OpenAI /v1/chat/completions ailesi API’ler, şimdiye kadarki tüm konuşmayı JSON olarak gönderir ve JSON meta verisi eklenmiş bir SSE delta akışıyla yanıt verir
    • Oturum uzadıkça yükleme maliyeti kareli biçimde artar
    • Araç çağrıları, birden çok JSON delta’yı yeniden JSON’a birleştiren çift kodlama kullanır
  • Sunucu durum tutmayan bir yapıda olsa da performans için değerlendirme sonuçlarını önbelleğe alır
    • İstekle eşleşen en uzun cache önekini bulur
    • Önekin sonundan son mesaja kadar prefill yapar
    • Bitiş token’ına kadar yeni token’lar üretir
  • Yaklaşık 0.5TB/s bellek bant genişliğine sahip M4 Max’te Qwen3.6-27B’nin token üretimi kullanılabilir düzeydeydi, ancak uzun bağlamın prefill işlemi hesaplama açısından çok pahalıydı
    • Uygun bir önek cache bulunamazsa GPU tam yükte çalışırken yanıt üretiminin başlaması için yaklaşık 10 dakika beklemek gerekebiliyor
  • OpenCode, her SSE turunda dosya sisteminde glob yapıyor ve ilk sistem prompt’una eklenen AGENTS.md dosyasını yeniden okuyor
    • Sonraki oturum için AGENTS.md değiştirilse bile mevcut oturumun tamamı yeniden değerlendiriliyor
  • Ajan modundan kullanıcı moduna geçerken araç çağrısı bağlamını budayarak büyük cache bölümlerini geçersiz kılıyor
    • PRUNE_PROTECT = 40_000 değerinden daha eski araç sonuçları atıldığı için en iyi durumda bile 40 bin token cache miss oluşuyor
    • Durdurma işlemi de kullanıcı geçişi olarak işlendiğinden, yanlış gidişatı düzeltmek için müdahale edildiğinde cache atılıyor ve yeniden beklemek gerekiyor
  • İlk sistem prompt’una güncel tarih eklendiği ve her SSE turunda yeniden değerlendirildiği için gece yarısı geçildiğinde tüm cache miss oluyor

Budama ve oturum sıkıştırma

  • Budama, skill dışındaki tüm araç sonuçlarına aynı şekilde uygulanıyor ve başta okunan önemli materyalleri ayrıca korumuyor
    • Yeni oturumda önce spesifikasyon okunuyor
    • İlgili kodlar ek olarak okunurken 40 bin token sınırı aşılıyor
    • Model gereksiz akıl yürütmeye ya da yanlış yöne sapıyor ve kullanıcı müdahale edip durduruyor
    • Durdurma sonucu spesifikasyon bağlamdan siliniyor
    • Model artık ilk spesifikasyona başvurmadan implementasyon yapıyor
  • Oturum sıkıştırma (compaction), mevcut oturumun başına yeni bir prompt ekleyip tamamını yeniden prefill ettikten sonra bunu birkaç maddeyle özetliyor
    • Özet prompt’unu oturum sonuna eklemek, tüm prefill maliyetinden kaçınabilirdi
    • Modelin devir notunu doğrudan dosya olarak yazması daha iyi çalıştı; sonuç düzenlenebiliyor veya birden çok oturumda yeniden kullanılabiliyordu
  • Sıkıştırma, sonlu bir bağlam penceresini sonsuzmuş gibi gösteren sızıntılı bir soyutlama; budamayla birlikte kullanıldığında sorun daha da büyüyor
  • Bağlam penceresi ve prompt cache’i temel kısıtlar olarak kabul edip bunları yönetmek için araç sunmak daha doğru; Pi’nin oturum ağacı prompt cache’i bilinçli biçimde kullanıyor

Sistem prompt’u ve Plan modu

  • Varsayılan sistem prompt’u çok uzun ve önemli bir kısmı modele kısa yanıt vermesini söylemeye ayrılmış
  • Alt ajanlara ABSOLUTELY NO COMMENTS demesini zorunlu kılan türden güçlü kodlama tercihleri de içeriyor
  • Plan’dan Build’e geçiş akıcı değil; plan yeterince ayrıntılandırılırsa bağlam penceresinin sonuna yaklaşabiliyor
    • Tartışma çıktısını dosyaya yazıp düzenledikten sonra bunu yeni oturuma aktarma yöntemi tercih edildi
  • Plan modu bildirimi hiçbir dizine yazılamayacağını söylüyor, ancak pratikte .opencode/plans içine yazabiliyor
    • Hem talep edilmeden bu dizine yazdığı hem de açıkça istenmesine rağmen yazmayı reddettiği durumlar yaşandı
  • Varsayılan sistem prompt’u küresel olarak değiştirilemiyor; bu yüzden her proje için kopyalanması gerekiyor
  • Yalnızca Build modu prompt’u yeniden tanımlanırsa Plan moduna geçildiğinde tüm prompt cache miss oluyor
  • Modele özel prompt’lar içerik ve kalite açısından büyük farklar gösteriyor
    • GPT-4, o1 ve o3 için Beast Mode, üçüncü taraf paketleri ve bağımlılıkları anlamak için Google doğrulamasının zorunlu olduğunu söylüyor

İzin doğrulamasının yarattığı karar yorgunluğu

  • Proje dışındaki dosyalara erişim kaba metin analiziyle tespit edilirse Yes, No, Always seçenekli bir izin penceresi açılıyor ve yanıt verilene kadar yürütme duruyor
    • Aynı işi gelecekte de sürekli reddedecek bir Never seçeneği yok
  • Alt ajan /tmp içindeki bir betiğin çıktısını okumaya çalıştığında No seçilirse ajan sonlanıyor ve görev bağlamı da kayboluyor
    • İlerlemenin korunması için istenmeyen harici erişimlerde bile Yes denmesi gereken durumlar oluşabiliyor
  • İzin istekleri tekrar tekrar geliyorsa ve üretken kalmanın tek seçeneği Yes ise kullanıcı riskli istekleri de onaylayabilir
  • Dizin dışına yazmayı engelleyen temel güvenlik önlemi insanın sürekli dikkatine dayanamaz

Mesajlar ve alt ajan etkileşimi

  • SSE akışı sırasında gönderilen mesajlar kuyruğa giriyor, ancak gerçekten ne zaman iletildikleri belirsiz
    • Kod, bunların araç çağrısı turu bittiğinde gönderildiğini düşündürüyor; ancak bekleyen mesaj gönderilmeden araçtan düşünme aşamasına geçilen durumlar da yaşandı
    • Kullanıcı durdurursa mesaj kuyruktan çıkıp yalnızca log’da kalıyor ve artık gönderilemiyor; bu yüzden yeni akışı başlatmak için ikinci bir mesaj gerekiyor
  • Mesaj geri almanın log’dan ilgili mesajı silemediği durumlar da var
  • Alt ajanlarla doğrudan konuşulamıyor veya ilerlemeleri durdurulamıyor
    • Yanlış yöne giderlerse ya kapatıp bağlamı kaybetmek ya da token harcanmasını izlemek gerekiyor
    • Bu özelliğin geçmişte var olduğu anlaşılıyor ancak şimdi kaldırılmış
    • Ana sohbette alt ajanı @mention ile çağırmak da işe yarar biçimde çalışmıyor ve durdurma da yapılamıyor
  • Qwen’in düşünme sürecine araç çağrısı yerleştirmesi gibi, alt ajanın araç çağrısı başarısız olursa ölümcül hata oluşuyor ve o ana kadarki bağlam kayboluyor
  • Alt ajan yeniden kullanımı, işleri küçük bağlamlara bölme amacıyla çelişiyor
    • İlgisiz görevlerde mevcut alt ajan yeniden kullanılabiliyor
    • Büyük bağlama sahip ana ajan ile alt ajan arasında gidip gelinerek cache miss oluşturuluyor
    • İnsan için zengin etkileşim olabilir ama modele sunulan seçenekler azaltılmalı
  • Alt ajan davranışıyla ilgili bir GitHub sorunu da bulunuyor

Ajan araç tasarımı

  • edit, varsayılan olarak benzersiz biçimde eşleşen metin üzerinde tam arama-değiştirme yapıyor
    • Model dosya içeriğini tam hatırlayabilirken, birden çok düzenlemeden sonra değişen satır numaralarını kaçırabildiği için bu yaklaşım uygun
    • Global değiştirme seçeneği birden çok takip düzeltmesine yol açtı; bunun kaldırılması Pi’nin edit tasarımıyla aynı sonuca ulaştırıyor
  • Plan modundaki çoktan seçmeli question aracı, sistem prompt’unda doğal dille soru sordurmaktan daha kullanışsız
  • grep ve glob, bash ile ikame edilebilir; nitekim model de grep veya rg komutlarını Bash içinde çalıştırıyor
    • Amaç, Explore gibi salt okunur ajanların Bash kullanmasını engellemek olabilir
    • Bu da Bash komutunu çalıştırmadan yan etkilerini belirlemenin zorluğuna bağlanıyor
  • todo genel olarak faydalı ama model TODO’ları kontrol etmeyi unutuyor

TUI ve dokümantasyon kalitesi

  • OpenCode TUI, metin render işlemi için yaklaşık 1GB RAM kullanıyor
  • Mesaj giriş alanında Shift+Enter ile satır sonu çalışmadı; mevcut sorun kaydı “benim makinemde çalışıyor” yanıtından sonra kapatıldı
  • Uzun mesajlar otomatik satır kaydırıldığında giriş alanı ve imleç hareket etse de yeni satırdaki karakterler görünmeyebiliyor
  • Akış sırasında metin seçilirse otomatik kaydırma seçimi bozuyor
  • Ctrl-C, çalışan komutu durdurmak yerine oturumu anında kapatıyor
    • Etkileşimli kabuk geleneğine göre Ctrl-C komutu durdurmalı; çalışan komut yoksa Ctrl-D oturumu kapatmalı
  • Mac’teki Option+sağ/sol ok gibi yaygın kelime bazlı gezinme kısayolları desteklenmiyor
  • Mesaj veya düşünme süreci uzadığında Markdown yeniden render gibi işlemler birkaç saniye sürebiliyor ve kare zaman karmaşıklığı gibi görünen bir performans sorunu var
  • Girdi sorunları yüzünden mesajlar dış düzenleyicide yazılıp yapıştırılmak zorunda kaldı
  • Dokümantasyon tutarsız ve insandan çok modelin okuyacağı şekilde yazılmış görünüyor

Uzak öncelikli bağlantı ve veri sızıntısı

  • OpenCode varsayılan olarak uzak modellere bağlanıyor
  • Dokümantasyonda yerel model ayarına dair basit bir örnek yok; ayar yanlış yapılırsa uzak modele bağlanılıyor
  • Yerel model doğru belirtilse bile program çalıştıktan sonra etkileşimli olarak ayrıca seçilmesi gerekiyor; bu sırada uzak model ile yerel kabuk zaten bağlanmış oluyor
  • Varsayılan model URL’si dağıtımın içine sabitlenmiyor; OpenCode ile ilişkili models.dev üzerinden indiriliyor
    • İlgili kod opencode/src/provider/provider.ts dosyasının 1684. satırında yer alıyor
  • Yeni kurulmuş sistemde opencode çalıştırıp yalnızca bir karakter ve Enter girmek bile, kullanıcı ayarı olmadan uzak modelin yerel kabuğa bağlanmasına yol açabiliyor
  • İlk mesaj boş ya da belirsizse ajan modeli çoğu zaman mevcut dizinde glob yapıyor ve dosyaları okuyor; okunan veriler sonraki POST isteğine ekleniyor

İnternet erişimi ve sistem prompt’u

  • OpenCode, WebFetch aracını sağlıyor ve sistem prompt’u bunu kullanmasını açıkça söylüyor
  • Varsayılan prompt, kullanıcının verdiği mesaj veya yerel dosyalardaki URL’lerin kullanılmasına izin verirken, programlama desteğiyle ilgili URL olduğundan eminse URL üretmesine veya tahmin etmesine de belirsiz biçimde izin veriyor
  • Bash için ağ sandbox’ı olmadığından, WebFetch’ten daha büyük sorun modelin curl | bash gibi komutlar çalıştırmayacağını varsayan yapı

Bash izin filtresini aşma yolları

  • opencode.json içindeki "bash": {"git *": "deny"} kuralı git status ya da echo hello && git push --force komutlarını engelliyor
  • Uygulama, tree-sitter’ın Bash ve PowerShell gramerleriyle komutları AST’ye ayrıştırıyor, ardından komut düğümlerini dolaşıp ayarlardan gelen regex’lerle karşılaştırıyor
  • Ancak metin tabanlı denetim, çeşitli dolaylı çalıştırma biçimlerini serbest bırakıyor
    • echo 'git clean -fdx .' | bash
    • env git status
    • alias ile giti başka komut adı üzerinden bağlama
    • /usr/bin/git status, $(which git) status
    • GIT=git && $GIT status
    • Base64 ile kodlanmış git reset --hard komutunu çözüp Bash’e aktarma
    • heredoc içindeki git push --force
    • Python subprocess.run ile git checkout . çalıştırma
  • Model genelde kötü niyetli olmasa da, başarısızlığı ısrarla aşacak şekilde eğitildiğinden doğal olarak düşmanca girdiye benzer davranabiliyor
  • Metin komut filtreleri güvenlik önlemi değil, yanlış bir güven hissi veriyor

Kalıcı izinler ve CWD istisnası

  • python3 -c 'print("hello")' için Always seçilirse tüm python3 öneki kalıcı olarak izinli hale geliyor
    • Sonrasında Python ile SSH özel anahtarını okuyan bir komut da önceden onaylanmış sayılabiliyor
    • İzinler diske yazılıyor ve sonraki oturumlarda da korunuyor
  • cd, chdir, popd, pushd, push-location, set-location, yan etkisiz varsayılan CWD istisna listesi içinde yer alıyor
  • Bu komutlar, tüm Bash komutlarını reddedecek şekilde ayarlansa bile izin denetimini açıkça atlıyor

Dosya erişim denetimindeki boşluklar

  • Varsayılan ayar, OpenCode’un çalıştırıldığı dizin ile Git deposu arasında daha kısa olan yolun dışındaki dosya erişimini engellemeye çalışıyor
  • Bash aracında tree-sitter AST dolaşılarak yol gibi görünen değerler çözümlenip denetleniyor
    • cat /tmp/logfile izin istiyor
    • python3 -c 'import shutil; shutil.rmtree("/")' ise denetlenmiyor
  • cargo, genel ~/.cargo altında serbestçe okuma, yazma ve çalıştırma yapabiliyor; ama model ~/.cargo/registry/src içindeki paket kaynağını doğrudan okumaya çalışırsa izin isteniyor
  • Dosyaya erişebilir kabul edilen komutlar sabit bir FILES listesi ile sınırlı
    • Bu listede rm, cp, mv, mkdir, touch, chmod, chown, cat ve bazı PowerShell komutları var
    • Listede olmayan komutların dosyaya erişmediği varsayılıyor; dolayısıyla iletilen yollar da denetlenmiyor

Yönlendirme ve izinli komutların birleşimi

  • echo "hello world!" için Always seçildiğinde daha sonra echo ile dosya veya aygıt yazımı da izinli hale geliyor
    • GPIO ile ilgili /sys/class/gpio yollarına yönlendiren komutlar da çalıştırılabiliyor
  • echo foo > bar.txt komutunun AST’sinde redirection, command düğümünün çocuğu değil kardeş düğüm
    • Yol denetimi yalnızca command çocuklarına baktığı için yönlendirme hedefini denetlemiyor
    • echo da FILES listesinde olmadığından yol doğrulaması hiç başlamıyor

Kendi kendine yükseltme ve uzaktan kod çalıştırma örnekleri

  • OpenCode’da birden çok kendi kendine yükseltme yolu var; curl tabanlı kurulumda opencode upgrade çalıştırılırsa https://opencode.ai/install yanıtı indirilip Bash standart girdisi üzerinden çalıştırılıyor
  • Bu, curl kurulum betiğinin kullanıldığı andaki riskten çok farklı olmasa da, üretimde uzaktaki betiği doğrudan çalıştırma örneği
  • CVE-2026-22812 sırasında OpenCode, varsayılan HTTP sunucusunda şu özellikleri açığa çıkarıyordu
    • Tamamen izin verici CORS başlıkları
    • İstendiği gibi kabuk komutu çalıştıran bir POST API’si
    • İstendiği gibi dosya okuyan bir GET API’si
  • Kullanıcının ziyaret ettiği bir web sitesi, bilinen varsayılan porta istek göndererek kullanıcı yetkileri düzeyinde sistem erişimi elde edebiliyordu
  • Geliştirme ekibi sunucuyu varsayılan olarak devre dışı bıraktı ve opencode.ai alanının makinede uzaktan kod çalıştırabilmesi için CORS istisnası gerektiğini söyledikten sonra takibi sürdürmedi; sorun kaydı stale bot tarafından kapatıldı
  • Ayrı bir sorun kaydı, kimlik doğrulama komutunun kullanıcının verdiği rastgele URL’den içerik çekip çalıştırdığını bildiriyordu; bu da yine stale bot tarafından kapatıldı

Bunun neden yalnızca Docker ile çözülemeyeceği

  • Geliştirme bağımlılıklarını yeni bir makineye kurmayı zorlaştıracak kadar karmaşık hale getirip sonra Docker’a bel bağlayan yaklaşım istenmiyor
  • Docker’ın kendisi de güvenlik sorunları yaratabiliyor
    • root olarak çalışan güçlü bir servis oluşturuyor
    • ufw güvenlik duvarında bilerek geçit açıyor
  • Korunacak tüm veri konteynerin içindeyse ve içteki yerel kabuk internete bağlıysa, koruma kapsamı belirsizleşiyor
  • Hedef, kök dosya sisteminin özyinelemeli silinmesini önlemekse Landlock, Seatbelt, Restricted Tokens gibi daha doğrudan işletim sistemi araçları kullanılabilir
  • Kodlama ajanı güvenliği, ayrı bir konteynere devredilecek bir sorumluluk değil; bu, koşum ortamının birinci önceliği olmalı
    • Git engellemesi komut metniyle değil, git çalıştırılabilir dosyasının kendisiyle yapılmalı
    • .git dizini salt okunur olmalı
    • Bash komutunu metinsel olarak temizlemeye çalışmak yerine yerel işletim sistemi izolasyonu kullanılmalı

Yerel LLM kullanım deneyimi

  • Qwen3.6-27B gibi yerel modeller de frontier modeller gibi kod tabanının kararlılığını ve kavramsal tutarlılığını bozabiliyor; ancak üç fark var
    • Akıllı görünürken aptalca davranan rahatsız edici vadi daha zayıf; sınırları daha net olduğu için etkileşimi ayarlamak daha kolay
    • Ağırlık sayısı eğitim verisini aynen yeniden üretmeye yetmeyecek kadar az olduğundan, çıktının kirlenip kirlenmediğine dair değerlendirme farklılaşıyor
    • Bulut sağlayıcısını desteklemek veya ona bağımlı olmak gerekmiyor
  • Kod, belirtiler ve tahmini nedenler verilip ilgili kod okunduktan sonra çağrı yolu ve kod alıntısı istenen, girdiye dayalı arama işlerinde yararlı sonuçlar alındı
    • Kapsam arama problemine indirgenirse modelin olgu uydurma eğilimi azalıyor
  • Kod üretimi mimari planlamayı tekrar tekrar çökertiyor
    • Birden fazla bileşenin paylaşması için tasarlanan süreçte, ortada değişken durumu taşıma gibi kestirme yollar seçiyor
    • Sorun yalnızca kodu bizzat yazmamış olmak değil; kodu anlama becerisini de zedeliyor
  • Model ağırlıklarındaki bilgiden doğrudan yanıt çekme yaklaşımı, trilyonlarca parametreli modellerde bile halüsinasyona yol açıyor
  • LLM’lerin sıradan bir araç haline gelmesi için çevresindeki yazılıma gerçek sistem mühendisliği uygulanmalı ve güvenlik boşlukları kapatılmalı; bunu da insanların yapması gerekiyor

1 yorum

 
Hacker News yorumları
  • Bu yazı için daha iyi bir başlık muhtemelen “Düzeltilirse OpenCode’u iyileştirecek küçük can sıkıntıları” olurdu
    AGENTS.md dosyasının her seferinde yeniden okunması ya da tarih değişikliği yüzünden prompt cache miss yaşanması katlanılabilir şeyler
    Sıkıştırma ve budamanın düzgün çalışmaması sorununu Codex ve Claude’da da gördüm; varsayılan sistem promptu da tutarlılık için var, hoşunuza gitmiyorsa değiştirebilirsiniz

    • Artık kod tabanı vibe coding ile eklenmiş özellikler yüzünden ciddi biçimde şişti ve Claude Code ile aynı sorunu gösteriyor
      Kararlılık, performans ve bellek kullanımı da kötüleşti; eskiden OpenCode’u seviyordum ama iyi yazılmış bir yazılım olduğunu söylemek zor
      Şimdi tamamen Pi ile değiştirdim; OpenCode’dan ders çıkarıp gereken yerlere daha ölçülü tasarım uygulayan epey yeni seçenek de var
    • OpenCode üzerinde çalışıyorum
      Artık araç çağrısı budaması yapmıyoruz, ama sınırlı bir bağlam penceresinde aynı işi uzun süre sürdürmek için mevcut durumu özetlemek gerektiğinden sıkıştırma bir süre daha gerekli bir kötülük
      Şu anda betada olan V2 içinde, AGENTS.md, kullanılabilir teknolojiler gibi değişen sistem talimatlarını güncel tutarken cache miss'i olabildiğince önleyen yeni bir yöntem var
      https://x.com/kitlangton/status/2075749116760457346/video/1
    • Bunlar “Annoying Things” olarak sınıflandırılmış, o yüzden “Alarming Things” kısmını da okumak gerek
    • Burada ele alınanlar yazının “Annoying Things” bölümündeki maddelerdi
      Ayrı bir “Alarming Things” bölümünde “It’s Fucking Full of RCEs” adlı bir alt bölüm de var ve önceki bölümde ortaya çıkan sorunların dışında da çeşitli uzaktan kod çalıştırma açıkları bulunuyor
    • Demek ki OpenCode kodumdaki yorumları rastgele siliyormuş
  • Ajan tarzı CLI'ların risklerini iyi özetlemiş, ama yalnızca OpenCode’a odaklanan başlık iki nedenle tuhaf
    Birincisi, açık bir alternatif önermiyor. Sorunların çoğu temel seviyede olduğu için neredeyse baştan tasarlayıp yeniden yazmak gerekebilir; dolayısıyla sadece OpenCode için düzeltme önermek de yeterli olmaz, ama ortada hiç yapıcı öneri yok ve bu yüzden yazı fiilen “LLM kullanmayı bırakın” diyen bir metin gibi duruyor
    İkincisi, “Alarming Things” kısmındaki başlıca sorunlar OpenCode’a özgü değil; Claude CLI'a ve muhtemelen diğer son teknoloji model sağlayıcılarının ajanlarına da uygulanıyor
    Yine de daha iyi araçların en baştan yapılması çağrısını kayda geçirdiği için çok değerli; yer imi ekleyip genişçe paylaşmayı düşünüyorum, ama metin ne kadar iyiyse başlık ve odak da o kadar yanlış seçilmiş gibi geliyor

    • Shell erişimine izin verirken keyfi komut çalıştırmayı güvenli biçimde engelleyebileceğini nasıl düşündüğünü merak ediyorum
      Özellikle echo git | bash komutunun hâlâ çalıştığından şikâyet etmesi saçma görünüyor
  • “OpenCode’u bilmiyorsanız, bir insan yüzünü sonsuza dek ezen bir çizme hayal edin. Çizme TypeScript’ten yapılmış, yüz ise 1940'larda elektronik bilgisayarın icadından beri güvenlik ve sistem yazılımları hakkında öğrendiğimiz her şey” cümlesi, zoraki benzetme dalında Bulwer-Lytton ödülü adaylığı hak ediyor

    • Bu benzetme, George Orwell’ın 1984 romanındaki “Geleceğin nasıl görüneceğini istiyorsan, bir insan yüzünü sonsuza dek ezen bir çizme hayal et” sözünden alınmış
  • Yazının üslubu gereğinden fazla öfkeli ve acımasız
    Birçok noktaya genel olarak katılıyorum ama OpenCode’u “güvenlik duruşu ‘baba, ben eğileyim de vur’ seviyesinde olan turbo çöp bir palyaço arabası” diye niteleyip herkesin kullanmayı bırakmasını söylediği andan itibaren okumak istemedim
    Bu yazılımı da sıradan insanlar yaptı; açık kaynağa bu şekilde saldırmanın ne zamandan beri normal karşılandığını bilmiyorum ve kendi yaptığım yazılım böyle değerlendirilse ne hissederdim diye düşündürüyor

    • Bu duyguya katılıyorum ama bu kültür en azından 1990'lardan beri var
      Eski comp.lang.lisp topluluğunda da fildişi kule standartlarını karşılamayan kod yazanlarla alay edip bundan keyif alan insanlar vardı; kimi gitti, kimi de bunu becerisini geliştirmek için gerekli bir azar sanıp madalya gibi taşıdı
      İlgili eski HN tartışması: https://news.ycombinator.com/item?id=587045
    • Bugünlerde bir şey için “vibe coding ile yapılmış” denmesi, sanki ortada saldırıya uğrayan bir insan yokmuş gibi abartı ve hakaret saçmak için bir izin belgesi gibi kullanılıyor
      Bunun, isabet alan geliştiricilere ve bu davranışı normalleştiren kişilerin kendilerine ne kadar zararlı olduğunu anlamıyor gibiler
    • “OpenCode’un iç yapısını iyi bilen biri—OpenCode geliştirme ekibini buna dahil etmediğimi varsayacağım—yukarıdaki python3 örneğine itiraz edebilirdi” kısmı komikti
    • OpenCode’a katkı yaptıysan bile biraz mizah anlayışın varsa buna gülmüşsündür; her şeyi fazla ciddiye almaya gerek yok
    • Hâlâ normal bir ifade biçimi değil ama yeni de değil; bu tür bir dil çok uzun zamandır var
  • Müşterimin teknoloji yığını nedeniyle Claude Code kullanıyorum, kişisel işlerimde de OpenCode’un belirli bir sürümünü kullandım; OpenCode çok daha iyi olduğu için bu yazı üzücü geldi
    Şimdiye kadar görüp geçtiğim tuhaf davranışların hepsi yazıyla örtüşüyor ve nedenleri de açıklanıyor. Abartılı üslup ve duygusal olarak katılmadığım kısımlar dışında genel olarak doğru; başka bir çalıştırma aracı aramam gerekecek gibi
    Pi’nin mimarisinin gerçekten daha iyi olup olmadığına ya da daha iyi alternatif önerilerine dair tavsiye isterim

  • Kusurlarına rağmen birçok aracı kullanmış biri olarak en yüksek üretkenliği OpenCode’da yaşadım
    Yazıdaki şeylerin çoğu küçük can sıkıntıları ya da görüş ayrılıkları; özellikle komut filtrelemenin amacını temelden yanlış anlamış. Bu bir güvenlik önlemi değil, modelin davranışını yönlendiren bir mekanizma
    Yazarı sanki OpenCode ile gerçekten bir şey üretmemiş gibi geliyor; kullandıysa da en önemli şey olan çıktı kalitesine hiç değinmemiş

    • Ben de OpenCode’un engel olmadan ama bilgisayarı da mahvetmeden uygun dengeyi kurduğunu düşünüyorum
      Özellikle plan modunu kolayca kullanıp işleri hızlıca bitirebiliyorum
  • OpenCode'dan Pi'ye geçtikten sonra araç çağrısı performansı ciddi biçimde iyileşti ve hatalar da daha az gibi geldi
    OpenCode'un https://openrouter.ai/apps/category/coding sayfasından da kaybolmuş gibi görünüyor

    • OpenCode tarafı OpenRouter sıralamasından çıkarılmayı talep etmiş: https://github.com/anomalyco/opencode/issues/11926#issuecomm...
    • Bu, OpenCode kötü olduğu için değil, Pi iyi olduğu için. Claude ile Pi'yi karşılaştırırken de aynı şey söylenebilir
    • OpenCode'un güçlü yanlarından biri LSP entegrasyonu; Pi'de bunun nasıl ele alındığını merak ediyorum
    • Yakın zamanda OpenCode ve Pi'yi denedim; Claude Code'dan geçmiş biri olarak, ikisinin de varsayılan olarak onay penceresi olmadan düzenlemeye izin vermesine şaşırdım
      Yanlış hatırlamıyorsam birinde ayarlardan onay açılabiliyor, diğeri içinse eklenti gerekiyor
    • Kullanıcıya sormadan arka planda npm paketi indirdiğini görünce OpenCode'u tamamen kaldırdım
      Bu davranış tedarik zinciri saldırısı riskini daha da artırıyor
  • Sadece metin gösteren bir TUI masaüstü uygulamasının, yerel uygulamaların yanı sıra tarayıcı tabanlı çoğu masaüstü uygulamasından daha ağır olması saçma; RAM, CPU, enerji ve batarya israfı yaratıyor
    C++ Qt6 ile kendi yapay zeka çalıştırma aracı ve sohbet uygulamamı geliştiriyorum; alt ajanlar, kod farkları, terminal emülatörü, basit düzenleyici, Markdown önizleme, yarı saydam arka plan, kullanıcı temaları, izinler, MCP, Git entegrasyonu, dock sistemi ve proje sekmeleri olmasına rağmen diğer araçlardan daha hafif
    Hâlâ birkaç hatayı giderip arayüzü sadeleştirerek cilalıyorum, bu yüzden henüz yayımlamadım: https://zeteo.krysoph.com/preview.html

  • OpenCode'un yorumları silmesinin sebebinin varsayılan sistem prompt'undaki "Use ABSOLUTELY NO COMMENTS" olduğunu şimdi öğrendim ve buna çok sinirlendim
    Ancak bu sadece küçük bir rahatsızlık değil; güvenlik riski diğer çalıştırma araçları için de geçerli. Bu araçlar çok büyük miktarda veriye erişiyor, neredeyse her gün güncelleniyor ve vibe coding doğaları gereği içeri çektikleri sayısız npm bağımlılığını düzgün biçimde denetleyen kimsenin olmaması muhtemel
    left-pad benzeri tek bir olay bile tüm tedarik zinciri için felakete dönüşebilir

  • Sistem prompt'una tarih ekleyip önbelleğin gece yarısında geçersiz kılınması makul bir karar; diğer çalıştırma araçlarının çoğu da aynı yöntemi kullanıyor
    Tam tarih ve saat eklense sorumsuzluk olurdu, ama OpenCode bunu yapmıyor

    • Gece yarısı kullanım sırasında yerel GPU'nun KV önbelleğini yeniden doldurmak için 10 dakika beklemek zorunda kaldığımda o kadar da makul gelmemişti
      Bunu, tarihi oturum başına bir kez ya da uzun süre çalışan oturumların geçmiş tarihte kalmasını önlemek için opencode ikilisi her çalıştırıldığında yalnızca bir kez değerlendirerek kolayca çözmek mümkün