- 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/completionsmengirim 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.mdyang disisipkan ke system prompt pertama- Meski
AGENTS.mddiubah untuk sesi berikutnya, seluruh sesi saat ini ikut dievaluasi ulang
- Meski
- 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_000dibuang, 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 hasil tool yang lebih lama dari
- 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,Alwaysmuncul dan eksekusi dihentikan hingga ada respons- Tidak ada opsi
Neveruntuk terus menolak pekerjaan yang sama ke depannya
- Tidak ada opsi
- Ketika sub-agen mencoba membaca output skrip di
/tmpdan pengguna memilihNo, agen berakhir dan konteks pekerjaan juga hilang- Agar progres tetap terjaga, muncul situasi di mana pengguna harus memilih
Yesbahkan untuk akses eksternal yang tidak diinginkan
- Agar progres tetap terjaga, muncul situasi di mana pengguna harus memilih
- 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
@mentionsub-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,
editmelakukan 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
editmilik Pi
- Tool
questionpilihan ganda di mode Plan lebih tidak nyaman daripada membiarkan system prompt meminta pertanyaan dalam bahasa natural grepdanglobdapat digantikan olehbash, dan dalam praktiknya model juga menjalankangrepataurglewat Bash- Tujuannya mungkin untuk membatasi agen read-only seperti
Exploreagar tidak dapat menggunakan Bash - Ini terkait dengan masalah sulitnya menentukan efek samping tanpa menjalankan perintah Bash
- Tujuannya mungkin untuk membatasi agen read-only seperti
todoumumnya 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-Clangsung menutup sesi alih-alih menghentikan perintah yang sedang berjalan- Sesuai konvensi shell interaktif,
Ctrl-Cseharusnya menghentikan perintah, danCtrl-Dmenutup sesi ketika tidak ada perintah berjalan
- Sesuai konvensi shell interaktif,
- 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.tsbaris 1684
- Kode terkait ada di
- Setelah instalasi baru, hanya dengan menjalankan
opencodelalu 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
WebFetchdan 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
WebFetchadalah struktur yang mengandalkan harapan bahwa model tidak akan menjalankan perintah seperticurl | bash
Cara membypass filter izin Bash
"bash": {"git *": "deny"}diopencode.jsonmemblokirgit statusatauecho 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 .' | bashenv git status- Cara menghubungkan
gitke nama perintah lain melalui alias /usr/bin/git status,$(which git) statusGIT=git && $GIT status- Cara mendecode
git reset --hardyang dienkode Base64 lalu meneruskannya ke Bash git push --forcedi dalam heredoc- Menjalankan
git checkout .dengan Pythonsubprocess.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
Alwaysuntukpython3 -c 'print("hello")', seluruh prefikspython3diizinkan 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-locationtermasuk 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/logfilememinta izinpython3 -c 'import shutil; shutil.rmtree("/")'tidak dapat diperiksa
cargobebas membaca, menulis, dan mengeksekusi dari~/.cargoglobal, 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
- Daftar itu mencakup
Redirection dan kombinasi perintah yang diizinkan
- Jika memilih
Alwaysuntukecho "hello world!", penulisan file dan device berikutnya menggunakanechojuga diizinkan- Perintah yang melakukan redirection ke path
/sys/class/gpioterkait GPIO juga dapat dijalankan
- Perintah yang melakukan redirection ke path
- Dalam AST
echo foo > bar.txt,redirectionbukan anak daricommand, melainkan node saudara- Pemeriksaan path hanya menargetkan anak
command, sehingga tujuan redirection tidak diperiksa echosendiri juga tidak ada dalam daftarFILES, sehingga validasi path tidak dimulai
- Pemeriksaan path hanya menargetkan anak
Upgrade mandiri dan contoh eksekusi kode jarak jauh
- OpenCode memiliki beberapa jalur upgrade mandiri, dan jika
opencode upgradedijalankan pada instalasi berbasis curl, ia mengunduh respons darihttps://opencode.ai/installdan 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.aidapat 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
gititu sendiri, bukan string perintah - Direktori
.githarus dibuat read-only - Alih-alih membersihkan perintah Bash sebagai teks, gunakan isolasi sistem operasi native
- Pemblokiran Git harus memblokir executable
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
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.mddibaca ulang setiap kali, atau prompt cache miss terjadi karena perubahan tanggal, masih bisa ditoleransiMasalah 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
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
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.mddan teknologi yang tersedia, tetap mutakhir sambil sebisa mungkin menghindari cache misshttps://x.com/kitlangton/status/2075749116760457346/video/1
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
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
Khususnya, keluhan bahwa
echo git | bashmasih bisa dijalankan terasa konyolKalimat “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
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
Dulu di
comp.lang.lispjuga 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 kehormatanDiskusi HN lama terkait: https://news.ycombinator.com/item?id=587045
Sepertinya mereka tidak memahami betapa merugikannya retorika semacam ini bagi developer yang terkena imbas, serta bagi diri mereka sendiri yang menormalkan perilaku itu
python3di atas” itu lucuKarena 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
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
Seingat saya, salah satunya bisa mengaktifkan konfirmasi di pengaturan, sedangkan yang lain membutuhkan plugin
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-padsaja bisa menjadi bencana bagi seluruh supply chainMemasukkan 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
Ini bisa diselesaikan dengan sederhana: evaluasi tanggal sekali per sesi, atau sekali setiap kali menjalankan binary
opencodeagar sesi yang berjalan lama tidak tetap berada pada tanggal lampau