5 poin oleh GN⁺ 12 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Setelah menguji OpenCode, agen coding AI open source dengan 161 ribu bintang GitHub, menggunakan Qwen3.6-27B lokal, kualitas tool dan desain keamanannya dinilai sama-sama berada pada tingkat yang membuat penggunaannya sebaiknya dihentikan
  • Reload AGENTS.md, pemangkasan konteks berbasis jarak tetap, penyisipan tanggal saat ini, dan pergantian mode berulang kali membatalkan prompt cache, sehingga bahkan di M4 Max respons bisa membutuhkan hingga 10 menit sebelum mulai digenerasi
  • Kompaksi sesi, system prompt, pemeriksaan izin, kontrol sub-agen, dan TUI tidak berpadu dengan baik, sehingga konteks dan pesan hilang, dan kode dapat ditulis sambil melupakan spesifikasi penting
  • Filter izin yang bergantung pada Bash AST dan pola string tidak dapat memblokir eksekusi tidak langsung, path absolut, variabel, Python, redirection, dan lainnya; pembatasan akses file eksternal serta izin permanen juga mudah dibypass
  • Dengan mempertimbangkan koneksi default ke model jarak jauh, akses internet tanpa batas, dan kerentanan RCE server HTTP di masa lalu, Docker saja tidak cukup; diperlukan pemblokiran executable, path read-only, dan isolasi tingkat sistem operasi

Cakupan dan premis evaluasi

  • OpenCode adalah proyek yang oleh pembuatnya diperkenalkan sebagai agen coding AI, dan pada saat ditinjau memiliki 161 ribu bintang GitHub
  • Pengujian dilakukan dengan LLM lokal Qwen3.6-27B dan OpenCode versi Git baef5cd4
  • Ini bukan pengungkapan keamanan tersendiri, melainkan tinjauan tentang bagaimana lapisan pipeline gagal dalam struktur yang meneruskan output LLM ke Bash
  • Penggunaan LLM itu sendiri dan apakah mesin pengguna dapat dengan mudah disusupi atau dihapus dipisahkan sebagai persoalan yang berbeda

Struktur yang berulang kali merusak prompt cache

  • API keluarga OpenAI /v1/chat/completions mengirim seluruh percakapan sejauh ini sebagai JSON, lalu merespons dengan stream delta SSE yang diberi metadata JSON
    • Semakin panjang sesi, biaya upload meningkat secara kuadrat
    • Pemanggilan tool menggunakan encoding ganda: beberapa delta JSON dirakit kembali menjadi JSON
  • Server bersifat stateless, tetapi meng-cache hasil evaluasi demi performa
    • Mencari prefiks cache terpanjang yang cocok dengan request
    • Melakukan prefill dari akhir prefiks hingga pesan terakhir
    • Menghasilkan token baru sampai token terminasi
  • Di M4 Max dengan bandwidth memori sekitar 0,5 TB/s, generasi token Qwen3.6-27B masih layak digunakan, tetapi prefill untuk konteks panjang sangat berat secara komputasi
    • Jika prefiks cache yang tepat tidak ditemukan, GPU dapat dipakai maksimal sambil menunggu sekitar 10 menit sebelum respons mulai digenerasi
  • OpenCode melakukan glob filesystem pada setiap giliran SSE dan membaca ulang AGENTS.md yang disisipkan ke system prompt pertama
    • Meski AGENTS.md diubah untuk sesi berikutnya, seluruh sesi saat ini ikut dievaluasi ulang
  • Saat beralih dari agen ke pengguna, OpenCode memangkas konteks pemanggilan tool dan membatalkan segmen cache besar
    • Karena hasil tool yang lebih lama dari PRUNE_PROTECT = 40_000 dibuang, bahkan dalam skenario terbaik terjadi cache miss 40 ribu token
    • Interupsi juga diperlakukan sebagai peralihan ke pengguna, sehingga jika Anda memperbaiki arah yang salah, cache dibuang dan Anda harus menunggu lagi
  • Karena tanggal saat ini dimasukkan ke system prompt pertama dan dievaluasi ulang setiap giliran SSE, cache miss penuh terjadi ketika melewati tengah malam

Pemangkasan dan kompaksi sesi

  • Pemangkasan diterapkan sama pada semua hasil tool kecuali skill, dan tidak melindungi secara khusus materi penting yang dibaca di awal
    • Membaca spesifikasi terlebih dahulu dalam sesi baru
    • Membaca kode terkait tambahan hingga melewati batas 40 ribu token
    • Model terseret ke penalaran yang tidak perlu atau arah yang salah, lalu pengguna menghentikannya
    • Akibat interupsi, spesifikasi dihapus dari konteks
    • Model mengimplementasikan tanpa dapat merujuk ke spesifikasi asli
  • Kompaksi sesi (compaction) menambahkan prompt baru di depan sesi lama, melakukan prefill ulang seluruhnya, lalu merangkumnya menjadi beberapa bullet
    • Jika prompt ringkasan ditempatkan di akhir sesi, prefill penuh bisa dihindari
    • Cara yang lebih berhasil adalah meminta model menulis catatan handoff langsung ke file; hasilnya juga dapat diedit atau digunakan ulang di beberapa sesi
  • Kompaksi adalah abstraksi bocor yang membuat jendela konteks terbatas tampak tak terbatas, dan masalahnya membesar jika dipakai bersama pemangkasan
  • Lebih baik mengakui jendela konteks dan prompt cache sebagai batasan dasar serta menyediakan sarana untuk mengelolanya; session tree milik Pi memanfaatkan prompt cache secara sengaja

System prompt dan mode Plan

  • System prompt default sangat panjang, dan sebagian besar dipakai untuk menginstruksikan model agar menjawab secara ringkas
  • Di dalamnya juga ada preferensi coding yang kuat, misalnya membuat sub-agen diberi instruksi ABSOLUTELY NO COMMENTS
  • Proses dari Plan ke Build tidak mulus, sehingga jika rencana dibuat cukup konkret, konteks dapat mendekati akhir jendela
    • Penulis lebih menyukai cara menuliskan hasil diskusi ke file, mengeditnya, lalu meneruskannya ke sesi baru
  • Notifikasi mode Plan mengatakan bahwa mode ini tidak dapat menulis ke direktori mana pun, tetapi sebenarnya bisa menulis ke .opencode/plans
    • Penulis mengalami kedua jenis kegagalan: mode menulis ke direktori itu tanpa diminta, atau menolak menulis meski diminta secara eksplisit
  • System prompt default tidak dapat dimodifikasi secara global, sehingga harus disalin untuk tiap proyek
  • Jika hanya prompt mode Build yang didefinisikan ulang, saat beralih ke mode Plan terjadi cache miss penuh untuk prompt
  • Prompt per model sangat berbeda dalam isi dan kualitas
    • Beast Mode untuk GPT-4, o1, dan o3 menginstruksikan bahwa verifikasi Google wajib untuk memahami paket dan dependensi pihak ketiga

Kelelahan mengambil keputusan akibat pemeriksaan izin

  • Jika akses file di luar proyek terdeteksi melalui analisis string sementara, jendela izin Yes, No, Always muncul dan eksekusi dihentikan hingga ada respons
    • Tidak ada opsi Never untuk terus menolak pekerjaan yang sama ke depannya
  • Ketika sub-agen mencoba membaca output skrip di /tmp dan pengguna memilih No, agen berakhir dan konteks pekerjaan juga hilang
    • Agar progres tetap terjaga, muncul situasi di mana pengguna harus memilih Yes bahkan untuk akses eksternal yang tidak diinginkan
  • Jika permintaan izin berulang dan satu-satunya pilihan yang mempertahankan produktivitas adalah Yes, pengguna dapat menyetujui permintaan berbahaya juga
  • Pengaman default yang memblokir penulisan di luar direktori tidak boleh bergantung pada perhatian manusia yang terus-menerus

Interaksi pesan dan sub-agen

  • Pesan yang dikirim selama streaming SSE masuk antrean, tetapi tidak jelas kapan benar-benar dikirim
    • Kode tampaknya mengirimnya di akhir giliran pemanggilan tool, tetapi penulis juga mengalami situasi saat pesan antrean tidak dikirim dan tool beralih ke proses berpikir
    • Jika pengguna menginterupsi, pesan keluar dari status antrean dan hanya tersisa di log tanpa bisa dikirim, sehingga diperlukan pesan kedua untuk memulai stream baru
  • Ada kalanya undo pesan tidak menghapus pesan tersebut dari log
  • Pengguna tidak dapat berbicara langsung dengan sub-agen atau menghentikan progresnya
    • Jika sub-agen menuju arah yang salah, pengguna harus mengakhirinya dan kehilangan konteks, atau melihat token terus habis
    • Sepertinya fitur ini pernah ada di masa lalu, tetapi kini hilang
    • Melakukan @mention sub-agen dari chat utama tidak berguna, dan interupsi juga tidak bisa dilakukan
  • Jika pemanggilan tool sub-agen gagal, seperti ketika Qwen memasukkan pemanggilan tool ke dalam proses berpikir, terjadi error fatal dan konteks hingga saat itu hilang
  • Penggunaan ulang sub-agen bertentangan dengan tujuan memecah pekerjaan ke konteks kecil
    • Sub-agen lama dapat digunakan ulang untuk pekerjaan yang tidak terkait
    • Perpindahan antara agen utama berkonteks besar dan sub-agen menyebabkan cache miss
    • Interaksi untuk manusia boleh kaya, tetapi pilihan yang diberikan ke model harus dikurangi
  • Ada juga isu GitHub terkait perilaku sub-agen

Desain tool agen

  • Secara default, edit melakukan pencarian dan penggantian persis pada teks yang cocok secara unik
    • Ini cocok karena model dapat mengingat isi file dengan tepat tetapi bisa kehilangan nomor baris yang berubah setelah beberapa kali edit
    • Opsi penggantian global memicu banyak perbaikan lanjutan; jika dihapus, desainnya menjadi sama dengan edit milik Pi
  • Tool question pilihan ganda di mode Plan lebih tidak nyaman daripada membiarkan system prompt meminta pertanyaan dalam bahasa natural
  • grep dan glob dapat digantikan oleh bash, dan dalam praktiknya model juga menjalankan grep atau rg lewat Bash
    • Tujuannya mungkin untuk membatasi agen read-only seperti Explore agar tidak dapat menggunakan Bash
    • Ini terkait dengan masalah sulitnya menentukan efek samping tanpa menjalankan perintah Bash
  • todo umumnya berguna, tetapi model lupa memeriksa TODO itu sendiri

Kualitas TUI dan dokumentasi

  • TUI OpenCode menggunakan sekitar 1 GB RAM untuk rendering teks
  • Di kotak input pesan, line break Shift+Enter tidak berfungsi, dan isu lama ditutup setelah dijawab “berfungsi di komputer saya”
  • Saat pesan panjang dibungkus otomatis, kotak input dan kursor bergerak, tetapi karakter di baris baru bisa tidak terlihat
  • Jika teks dipilih saat streaming, auto-scroll menghapus seleksi
  • Ctrl-C langsung menutup sesi alih-alih menghentikan perintah yang sedang berjalan
    • Sesuai konvensi shell interaktif, Ctrl-C seharusnya menghentikan perintah, dan Ctrl-D menutup sesi ketika tidak ada perintah berjalan
  • Shortcut pergerakan per kata yang umum seperti Option+panah kiri/kanan di Mac tidak didukung
  • Ketika pesan atau proses berpikir menjadi panjang, re-render Markdown dan lainnya memakan beberapa detik, dengan masalah performa yang tampak memiliki kompleksitas waktu kuadrat
  • Karena masalah input, penulis harus menulis pesan di editor eksternal lalu menempelkannya
  • Dokumentasinya tidak konsisten dan lebih mirip ditulis untuk dibaca model daripada manusia

Koneksi remote-first dan paparan data

  • Secara default, OpenCode terhubung ke model jarak jauh
  • Dokumentasi tidak memiliki contoh sederhana untuk konfigurasi model lokal, dan jika konfigurasi salah, koneksi diarahkan ke model jarak jauh
  • Meski model lokal ditentukan dengan benar, setelah program dijalankan pengguna masih harus memilihnya secara interaktif; sementara itu model jarak jauh dan shell lokal sudah terhubung
  • URL model default tidak dipatok di distribusi, melainkan diunduh dari models.dev yang terkait dengan OpenCode
    • Kode terkait ada di opencode/src/provider/provider.ts baris 1684
  • Setelah instalasi baru, hanya dengan menjalankan opencode lalu mengetik satu karakter dan Enter, model jarak jauh dapat terhubung ke shell lokal tanpa konfigurasi pengguna
  • Jika pesan pertama kosong atau ambigu, model agen sering melakukan glob direktori saat ini dan membaca file; data yang dibaca disertakan dalam request POST berikutnya

Akses internet dan system prompt

  • OpenCode menyediakan tool WebFetch dan system prompt secara eksplisit menginstruksikan untuk menggunakannya
  • Prompt default secara ambigu mengizinkan penggunaan URL dari pesan pengguna atau file lokal, sekaligus mengizinkan model membuat atau menebak URL jika yakin itu adalah URL bantuan pemrograman
  • Karena Bash tidak memiliki sandbox jaringan, masalah yang lebih besar daripada WebFetch adalah struktur yang mengandalkan harapan bahwa model tidak akan menjalankan perintah seperti curl | bash

Cara membypass filter izin Bash

  • "bash": {"git *": "deny"} di opencode.json memblokir git status atau echo hello && git push --force
  • Implementasinya mem-parsing perintah menjadi AST dengan grammar Bash dan PowerShell dari tree-sitter, lalu menelusuri node command dan membandingkannya dengan regex yang dibuat dari konfigurasi
  • Namun pemeriksaan berbasis teks mengizinkan berbagai eksekusi tidak langsung
    • echo 'git clean -fdx .' | bash
    • env git status
    • Cara menghubungkan git ke nama perintah lain melalui alias
    • /usr/bin/git status, $(which git) status
    • GIT=git && $GIT status
    • Cara mendecode git reset --hard yang dienkode Base64 lalu meneruskannya ke Bash
    • git push --force di dalam heredoc
    • Menjalankan git checkout . dengan Python subprocess.run
  • Meski model biasanya tidak berniat jahat, karena dilatih untuk gigih mengatasi kegagalan, ia dapat secara natural berperilaku seperti input adversarial
  • Filter string perintah bukanlah pengaman, melainkan memberi rasa aman yang keliru

Izin permanen dan pengecualian CWD

  • Jika memilih Always untuk python3 -c 'print("hello")', seluruh prefiks python3 diizinkan secara permanen
    • Setelah itu, perintah yang membaca private key SSH dengan Python juga dapat diperlakukan sudah disetujui
    • Izin disimpan ke disk dan bertahan di sesi berikutnya
  • cd, chdir, popd, pushd, push-location, set-location termasuk dalam daftar pengecualian CWD yang diasumsikan tidak memiliki efek samping
  • Perintah-perintah ini secara eksplisit membypass pemeriksaan izin meski dikonfigurasi untuk menolak semua perintah Bash

Celah dalam pemeriksaan akses file

  • Konfigurasi default mencoba memblokir akses file di luar path yang lebih pendek antara direktori tempat OpenCode dijalankan dan repositori Git
  • Pada tool Bash, AST tree-sitter ditelusuri untuk menafsirkan dan memeriksa nilai yang tampak seperti path
    • cat /tmp/logfile meminta izin
    • python3 -c 'import shutil; shutil.rmtree("/")' tidak dapat diperiksa
  • cargo bebas membaca, menulis, dan mengeksekusi dari ~/.cargo global, tetapi ketika model mencoba membaca langsung source paket di ~/.cargo/registry/src, izin diminta
  • Perintah yang dianggap dapat mengakses file dibatasi pada daftar tetap FILES
    • Daftar itu mencakup rm, cp, mv, mkdir, touch, chmod, chown, cat, dan beberapa perintah PowerShell
    • Perintah yang tidak ada dalam daftar dianggap tidak mengakses file, sehingga path yang diteruskan pun tidak diperiksa

Redirection dan kombinasi perintah yang diizinkan

  • Jika memilih Always untuk echo "hello world!", penulisan file dan device berikutnya menggunakan echo juga diizinkan
    • Perintah yang melakukan redirection ke path /sys/class/gpio terkait GPIO juga dapat dijalankan
  • Dalam AST echo foo > bar.txt, redirection bukan anak dari command, melainkan node saudara
    • Pemeriksaan path hanya menargetkan anak command, sehingga tujuan redirection tidak diperiksa
    • echo sendiri juga tidak ada dalam daftar FILES, sehingga validasi path tidak dimulai

Upgrade mandiri dan contoh eksekusi kode jarak jauh

  • OpenCode memiliki beberapa jalur upgrade mandiri, dan jika opencode upgrade dijalankan pada instalasi berbasis curl, ia mengunduh respons dari https://opencode.ai/install dan menjalankannya sebagai stdin Bash
  • Risikonya tidak jauh berbeda dari saat menggunakan installer curl, tetapi ini adalah contoh eksekusi skrip remote langsung dalam produksi
  • Saat CVE-2026-22812, OpenCode mengekspos fitur berikut pada server HTTP default
    • Header CORS yang sepenuhnya permisif
    • API POST yang menjalankan perintah shell arbitrer
    • API GET yang membaca file arbitrer
  • Situs web yang dikunjungi pengguna dapat mengirim request ke port default yang diketahui dan memperoleh akses sistem pada tingkat hak pengguna
  • Tim pengembang menonaktifkan server secara default, menjawab bahwa pengecualian CORS diperlukan agar opencode.ai dapat menjalankan kode jarak jauh di mesin, lalu tidak melanjutkan respons; isunya ditutup oleh stale bot
  • Isu terpisah melaporkan bahwa perintah autentikasi mengambil dan menjalankan konten dari URL arbitrer yang diberikan pengguna, dan ini juga ditutup oleh stale bot

Mengapa Docker saja tidak bisa menyelesaikan masalah

  • Penulis tidak menginginkan pendekatan yang membuat dependensi pengembangan begitu kompleks hingga sulit dipasang di mesin baru, lalu bergantung pada Docker
  • Docker sendiri juga dapat menimbulkan masalah keamanan
    • Membuat layanan kuat yang berjalan sebagai root
    • Secara sengaja membuka jalur di firewall ufw
  • Jika semua data yang perlu dilindungi berada di dalam kontainer dan shell lokal di dalamnya terhubung ke internet, cakupan perlindungannya tidak jelas
  • Jika tujuannya mencegah penghapusan rekursif root filesystem, sarana sistem operasi yang lebih langsung seperti Landlock, Seatbelt, Restricted Tokens dapat digunakan
  • Keamanan agen coding seharusnya menjadi prioritas utama harness, bukan tanggung jawab yang dilemparkan ke kontainer terpisah
    • Pemblokiran Git harus memblokir executable git itu sendiri, bukan string perintah
    • Direktori .git harus dibuat read-only
    • Alih-alih membersihkan perintah Bash sebagai teks, gunakan isolasi sistem operasi native

Pengalaman menggunakan LLM lokal

  • Model lokal seperti Qwen3.6-27B juga dapat merusak stabilitas dan konsistensi konseptual codebase seperti model frontier, tetapi ada tiga perbedaan
    • Uncanny valley ketika tampak cerdas lalu bertindak bodoh lebih sedikit, dan batasannya jelas sehingga interaksi lebih mudah disesuaikan
    • Jumlah bobotnya terlalu kecil untuk mereproduksi data pelatihan apa adanya, sehingga penilaian tentang apakah output terkontaminasi menjadi berbeda
    • Tidak perlu mendukung atau bergantung pada penyedia cloud
  • Hasil berguna diperoleh pada tugas pencarian berbasis input: memberikan kode, gejala, dan dugaan penyebab, lalu setelah model membaca kode terkait meminta jalur pemanggilan dan kutipan kode
    • Membingkai tugas sebagai masalah pencarian mengurangi kecenderungan model mengarang fakta
  • Generasi kode berulang kali meruntuhkan rencana arsitektur
    • Model mengambil jalan pintas seperti memindahkan state mutable ke tengah desain agar dibagi oleh beberapa komponen
    • Masalahnya bukan sekadar kode itu tidak ditulis langsung oleh penulis, melainkan merusak kemampuan memahami kode itu sendiri
  • Cara mengambil jawaban langsung dari pengetahuan dalam bobot model menimbulkan halusinasi bahkan pada model dengan triliunan parameter
  • Agar LLM menjadi tool biasa, perangkat lunak di sekelilingnya harus menerapkan system engineering yang nyata untuk menutup celah keamanan, dan pekerjaan itu harus dilakukan oleh manusia

1 komentar

 
GN⁺ 12 jam lalu
Komentar Hacker News
  • Judul yang lebih baik untuk tulisan ini tampaknya kira-kira “Ketidaknyamanan kecil yang akan membuat OpenCode lebih baik jika diperbaiki”
    Bahwa AGENTS.md dibaca ulang setiap kali, atau prompt cache miss terjadi karena perubahan tanggal, masih bisa ditoleransi
    Masalah kompresi dan pruning yang tidak bekerja dengan benar juga pernah terlihat di Codex dan Claude, dan prompt sistem bawaan pun ada demi konsistensi, jadi kalau tidak suka bisa diubah

    • Sekarang codebase-nya membengkak parah karena fitur-fitur yang ditambahkan lewat vibe coding, dan menunjukkan masalah yang persis sama dengan Claude Code
      Stabilitas, performa, dan penggunaan memori semuanya memburuk; dulu saya suka OpenCode, tetapi sulit menyebutnya perangkat lunak yang ditulis dengan baik
      Sekarang saya sudah sepenuhnya menggantinya dengan Pi, dan ada cukup banyak opsi baru yang belajar dari OpenCode lalu menerapkan desain yang lebih terkendali di tempat yang diperlukan
    • Saya bekerja di OpenCode
      Sekarang kami tidak lagi melakukan pruning pemanggilan tool, tetapi agar pekerjaan yang sama bisa dilanjutkan lama dalam jendela konteks terbatas, progres saat ini perlu diringkas, jadi kompresi untuk sementara adalah kejahatan yang perlu
      V2 yang saat ini beta memasukkan cara baru untuk menjaga instruksi sistem yang berubah, seperti AGENTS.md dan teknologi yang tersedia, tetap mutakhir sambil sebisa mungkin menghindari cache miss
      https://x.com/kitlangton/status/2075749116760457346/video/1
    • Hal-hal itu dikategorikan sebagai “Annoying Things”, jadi bagian “Alarming Things” juga perlu dibaca
    • Yang dibahas sekarang adalah butir-butir di bagian “Annoying Things” dalam tulisan tersebut
      Bagian terpisah “Alarming Things” juga memiliki subbagian berjudul “It’s Fucking Full of RCEs”, dan selain yang muncul dari masalah di bagian sebelumnya, ada beberapa kerentanan eksekusi kode jarak jauh
    • Jadi itu sebabnya OpenCode menghapus komentar dalam kode saya secara acak
  • Tulisan ini merangkum dengan baik risiko CLI berbasis agen, tetapi judul yang hanya berfokus pada OpenCode terasa aneh karena dua alasan
    Pertama, tidak menawarkan alternatif yang jelas. Karena banyak masalahnya bersifat mendasar, mungkin perlu didesain ulang dan ditulis ulang hampir dari awal, sehingga sekadar mengusulkan perbaikan OpenCode pun tidak cukup; tetapi karena sama sekali tidak ada usulan konstruktif, tulisan ini praktis terasa seperti mengatakan “berhentilah memakai LLM”
    Kedua, masalah utama dalam “Alarming Things” bukan hanya milik OpenCode, dan berlaku untuk Claude CLI serta mungkin agen dari penyedia model mutakhir lain
    Meski begitu, sebagai catatan yang mendorong pembuatan tool yang lebih baik dari nol, nilainya besar, jadi saya akan mem-bookmark dan membagikannya luas; namun justru karena isi tulisannya bagus, judul dan fokusnya terasa makin keliru

    • Saya penasaran bagaimana orang berpikir bisa mengizinkan akses shell sambil tetap memblokir eksekusi perintah arbitrer dengan aman
      Khususnya, keluhan bahwa echo git | bash masih bisa dijalankan terasa konyol
  • Kalimat “Jika Anda tidak tahu OpenCode, bayangkan sebuah sepatu bot yang menginjak wajah manusia selamanya. Sepatu bot itu dibuat dengan TypeScript, dan wajahnya adalah semua yang telah kita pelajari tentang keamanan dan perangkat lunak sistem sejak penemuan komputer elektronik pada 1940-an” layak menjadi kandidat penghargaan Bulwer-Lytton untuk kategori analogi yang dipaksakan

    • Analogi ini diambil dari kalimat dalam 1984 karya George Orwell: “Jika Anda ingin melihat gambaran masa depan, bayangkan sebuah sepatu bot menginjak wajah manusia selamanya”
  • Gaya tulisannya terlalu penuh amarah dan kasar
    Saya pada umumnya setuju dengan banyak poinnya, tetapi sejak bagian yang menyebut OpenCode sebagai “sampah turbo mobil badut dengan postur keamanan setingkat ‘Ayah, aku akan membungkuk untukmu’” dan meminta semua orang berhenti memakainya, saya jadi tidak ingin membacanya lagi
    Perangkat lunak ini juga dibuat oleh orang-orang biasa, dan saya tidak tahu sejak kapan menyerang open source seperti ini dianggap wajar; saya jadi membayangkan bagaimana rasanya jika perangkat lunak yang saya buat mendapat ulasan seperti ini

    • Saya setuju dengan sentimen itu, tetapi budaya seperti ini sudah ada setidaknya sejak 1990-an
      Dulu di comp.lang.lisp juga ada orang-orang yang menikmati merendahkan mereka yang menulis kode yang tidak memenuhi standar menara gading; sebagian pergi, sebagian lain salah mengira cercaan itu sebagai teguran yang diperlukan untuk meningkatkan kemampuan dan menerimanya seperti lencana kehormatan
      Diskusi HN lama terkait: https://news.ycombinator.com/item?id=587045
    • Belakangan, menyebut sesuatu “di-vibe-code” dipakai seperti izin untuk melontarkan hiperbola dan hinaan dengan asumsi tidak ada orang yang diserang
      Sepertinya mereka tidak memahami betapa merugikannya retorika semacam ini bagi developer yang terkena imbas, serta bagi diri mereka sendiri yang menormalkan perilaku itu
    • Bagian “Orang yang memahami struktur internal OpenCode dengan baik—saya akan berasumsi tim pengembang OpenCode tidak termasuk di sini—mungkin keberatan dengan contoh python3 di atas” itu lucu
    • Bahkan jika berkontribusi ke OpenCode, kalau punya selera humor pasti akan tertawa, jadi tidak perlu menanggapi semuanya terlalu serius
    • Ini tetap bukan cara berekspresi yang normal, tetapi juga bukan hal baru; bahasa seperti ini sudah ada sejak lama
  • Karena stack teknologi klien, saya memakai Claude Code, dan untuk pekerjaan pribadi saya memakai versi tertentu OpenCode; karena OpenCode jauh lebih baik, tulisan ini terasa menyedihkan
    Semua keanehan yang selama ini saya lihat tetapi abaikan ternyata cocok dengan tulisan ini, bahkan penyebabnya dijelaskan. Selain ungkapan yang berlebihan dan bagian yang secara emosional tidak saya setujui, sebagian besar masuk akal, jadi saya perlu mencari tool eksekusi lain
    Saya ingin rekomendasi apakah arsitektur Pi memang lebih baik, atau apakah ada alternatif yang lebih bagus

  • Terlepas dari cacatnya, setelah mencoba berbagai tool, OpenCode memberi produktivitas paling tinggi
    Sebagian besar isi tulisan ini hanyalah ketidaknyamanan kecil atau perbedaan pandangan, dan terutama salah memahami tujuan pemfilteran perintah secara mendasar. Itu bukan perangkat keamanan, melainkan perangkat untuk mengarahkan perilaku model
    Penulis tampaknya belum pernah benar-benar membuat sesuatu dengan OpenCode, dan jika pernah menggunakannya, ia sama sekali tidak membahas kualitas hasil, hal yang paling penting

    • Saya juga merasa OpenCode punya keseimbangan yang tepat: tidak menghalangi, tetapi juga tidak merusak komputer
      Terutama, mode perencanaannya mudah digunakan sehingga pekerjaan bisa cepat selesai
  • Setelah beralih dari OpenCode ke Pi, performa pemanggilan tool meningkat drastis dan bug juga terasa lebih sedikit
    OpenCode tampaknya juga menghilang dari https://openrouter.ai/apps/category/coding

    • Pihak OpenCode meminta agar dikeluarkan dari peringkat OpenRouter: https://github.com/anomalyco/opencode/issues/11926#issuecomm...
    • Ini bukan karena OpenCode buruk, melainkan karena Pi bagus. Hal yang sama bisa dikatakan saat membandingkan Claude dan Pi
    • Salah satu keunggulan OpenCode adalah integrasi LSP, dan saya penasaran bagaimana Pi menanganinya
    • Belakangan saya mencoba OpenCode dan Pi; dari sudut pandang pengguna yang pindah dari Claude Code, saya terkejut karena keduanya tampaknya secara default mengizinkan pengeditan tanpa dialog konfirmasi
      Seingat saya, salah satunya bisa mengaktifkan konfirmasi di pengaturan, sedangkan yang lain membutuhkan plugin
    • Saya menghapus OpenCode sepenuhnya setelah melihatnya mengunduh paket npm di background tanpa bertanya kepada pengguna
      Perilaku ini makin memperbesar risiko serangan supply chain
  • Aplikasi desktop TUI yang hanya menampilkan teks tetapi lebih berat daripada aplikasi native, bahkan daripada sebagian besar aplikasi desktop berbasis browser, itu tidak masuk akal; ia membuang-buang RAM, CPU, energi, dan baterai
    Saya sedang mengembangkan tool eksekusi AI sekaligus aplikasi chat sendiri dengan C++ Qt6; meski sudah memiliki sub-agent, diff kode, emulator terminal, editor sederhana, pratinjau Markdown, latar belakang semi-transparan, tema pengguna, izin, MCP, integrasi Git, sistem docking, hingga tab proyek, tetap lebih ringan daripada tool lain
    Belum saya rilis karena masih menghapus beberapa bug, menyederhanakan UI, dan memolesnya: https://zeteo.krysoph.com/preview.html

  • Saya baru tahu bahwa alasan OpenCode menghapus komentar adalah frasa “Use ABSOLUTELY NO COMMENTS” di prompt sistem default, dan itu sangat menjengkelkan
    Namun, bukan sekadar ketidaknyamanan kecil; risiko keamanannya juga berlaku untuk tool eksekusi lain. Tool-tool ini mengakses data dalam jumlah besar, diperbarui hampir setiap hari, dan karena sifatnya yang vibe-coded, besar kemungkinan tidak ada yang benar-benar mengaudit begitu banyak dependensi npm yang ditariknya
    Satu insiden seperti left-pad saja bisa menjadi bencana bagi seluruh supply chain

  • Memasukkan tanggal ke prompt sistem sehingga cache menjadi tidak valid pada tengah malam adalah keputusan yang masuk akal, dan sebagian besar tool eksekusi lain juga menggunakan cara yang sama
    Jika yang dimasukkan adalah tanggal dan waktu lengkap, itu tidak bertanggung jawab, tetapi OpenCode tidak melakukannya

    • Saat saya sedang menggunakannya pada tengah malam dan harus menunggu 10 menit untuk mengisi ulang KV cache GPU lokal, itu tidak terasa masuk akal
      Ini bisa diselesaikan dengan sederhana: evaluasi tanggal sekali per sesi, atau sekali setiap kali menjalankan binary opencode agar sesi yang berjalan lama tidak tetap berada pada tanggal lampau