Skip to Content
OpenCode Tools

OpenCode V2 — RTK dan caveman

Dokumen ini menjelaskan dua alat penghematan token yang dipasang untuk OpenCode V2 di mesin ini. RTK memampatkan output perkakas, skill caveman memampatkan jawaban. Keduanya punya batasan nyata, dan batasan itu tidak bisa dihilangkan dengan menyalakan sakelar.

RTK

Apa itu

rtk adalah proxy baris perintah. Dirinya menuliskan perintah yang setara namun lebih ringkas, lalu memampatkan keluarannya. Contoh: git status menjadi rtk git status, ls menjadi rtk ls, rg pola . menjadi rtk grep pola ..

Pemasangan

Binari dipasang lewat Homebrew dan tercatat di Brewfile:

brew install rtk

Integrasi OpenCode tidak memakai rtk init -g --opencode. Perintah itu menulis plugin berbentuk API V1 yang gagal dimuat oleh V2. Yang dipakai adalah adapter milik repo ini.

Adapter V2

Berasal di config/opencode/plugins/rtk.ts dan terpasang lewat symlink ke ~/.config/opencode/plugins/rtk.ts. Ada tiga penyesuaian terhadap plugin resmi.

  1. Plugin resmi mengekspor named export dari plugin berbasis function. V2 menuntut default export yang punya id dan setup.
  2. V1 mengembalikan objek hook dari plugin. V2 memasang hook lewat ctx.tool.hook("execute.before"). Nama hook sama, cara akses berbeda.
  3. Contoh V2 mengimpor dari @opencode/plugin. Paket itu tidak ada di mesin ini karena OpenCode 2.0.18 adalah binary Bun single-file tanpa node_modules. Loader hanya membaca id dan setup, jadi impor dihapus.

Peringatan tentang exit code

Dokumentasi rtk rewrite menyatakan perintah yang didukung keluar dengan kode 0, dan yang tidak didukung keluar dengan kode 1 tanpa output. Kenyataannya di rtk 0.50.0, perintah yang jelas-jelas didukung seperti git status keluar dengan kode 3 sambil tetap mencetak hasil rewrite yang benar.

Adapter karena itu memakai isi stdout sebagai penentu, bukan exit code. Versi pertama menganggap exit code non-nol sebagai kegagalan dan membuang stdout. Akibatnya tidak ada satu pun perintah yang terrewrite, dan tidak ada error yang terlihat.

Cara memverifikasi

Penghematan diukur, bukan diklaim:

rtk gain

Kolom Total commands dan Tokens saved harus naik setelah menjalankan perintah shell biasa. Kalau tidak naik, hook tidak aktif.

Batas yang tidak bisa dihapus

Hook hanya menutup tool shell, yang di OpenCode V2 bernama shell. Tool bawaan seperti read, grep, dan glob tidak melewati hook, dan tidak bisa diarahkan lewat plugin. Klaim bahwa RTK memampatkan seluruh kerjaan agent tidak benar.

Batas kedua: pengukuran independen dari JetBrains atas 86 task coding nyata menemukan RTK justru 7,6 persen lebih mahal per task pada model dengan kemampuan penalaran rendah, dan tidak ada perbedaan berarti pada kemampuan penalaran tinggi. Angka pemasaran 60 sampai 90 persen tidak berhasil diuji ulang di sini. Kalau pemakaian token terlihat naik setelah dipasang, hapus adapter dengan rm ~/.config/opencode/plugins/rtk.ts lalu opencode reload.

Caveman

Apa itu

Skill yang memampatkan gaya jawaban. Dimuat dari ~/.config/opencode/skills/caveman/SKILL.md, tidak melalui symlink.

Pemasangan

Node tidak terpasang di mesin ini, jadi npx skills add dan npm install -g @caveman-ai/cli tidak bisa dipakai. File SKILL.md diambil langsung dari repositori upstream:

curl -sSL -o SKILL.md \ https://raw.githubusercontent.com/JuliusBrussee/caveman/main/plugins/caveman/skills/caveman/SKILL.md

Tidak ada proxy yang dipasang. Proxy caveman memampatkan input perkakas, sedangkan yang dipakai adalah memampatkan output. Memasang proxy juga akan menyalakan telemetri secara default, sementara RTK memakai telemetri tidak aktif secara default.

Kenapa skill ini tidak masuk repo

File SKILL.md dari upstream mengandung karakter Tionghoa untuk mendokumentasikan mode wenyan. scripts/lint.sh memindai seluruh file ter-track untuk rentang CJK, Hangul, dan Cyrillic, lalu gagal bila menemukan satu pun. Mem-vendor file itu apa adanya akan membuat make lint gagal.

Kalau file ini nanti harus masuk repo, pengecualian untuk berkas pihak ketiga perlu ditambahkan ke check_forbidden di scripts/lint.sh secara eksplisit, bukan dengan pengecualian ad hoc.

Dua perubahan dari file upstream

Skill asli mendeklarasikan dua hal yang tidak sesuai dengan aturan repo ini, jadi keduanya diubah saat pemasangan.

  1. Default gaya. Aslinya full, dan bagian “Persistence” menyatakan gaya itu berlaku untuk seluruh sesi. Itu bertabrakan dengan aturan pelaporan di config/opencode/AGENTS.md yang meminta jawaban terperinci. Default diubah ke lite, dan gaya hanya aktif bila diminta.
  2. Mode wenyan. levels wenyan-lite, wenyan-full, dan wenyan-ultra menghasilkan keluaran Tionghoa klasik. Bagian itu diberi penanda bahwa mode tersebut dinonaktifkan, dengan alasan yang sama seperti di atas.

Biaya yang tidak diumumkan

Skill ini menambah sekitar 1.000 token input pada setiap panggilan, karena ruleset-nya ikut dibawa setiap kali. Pada pertanyaan singkat, biayanya bisa lebih besar daripada yang dihemat. README caveman sendiri menyarankan melewatinya untuk beban kerja yang nyaris tanpa prosa.

Repo ini kebalikannya: prosa adalah hasil akhirnya, lewat dokumentasi, pesan commit, dan laporan. Itu alasan utama skill ini dipasang dengan default lite dan tanpa mode wenyan, bukan sebagai gaya kerja harian.

Langkah manual yang tersisa

brew bundle install

Perintah itu memasang bats-core, shellcheck, dan shfmt yang sudah ada di Brewfile namun belum terpasang. Setelah terpasang:

  • make check mulai menjalankan shellcheck pada seluruh script untuk pertama kalinya, dan kemungkinan besar menemukan temuan yang perlu diperbaiki.
  • bats tests/ menjalankan 22 test yang selama ini belum pernah dieksekusi dengan bats-core sungguhan.
  • shfmt dipakai oleh make fmt. Target itu sengaja tidak dijadikan gate lint. Diperiksa pada 18 berkas, shfmt menghasilkan 105 baris perubahan di 4 berkas, dan hampir semuanya menghapus perataan yang disengaja, misalnya log_info() { ... } menjadi log_info() { ... }. Kode repo ini meratakan kelompok fungsi agar mudah dibaca, dan shfmt tidak punya opsi untuk mempertahankan itu. Jalankan make fmt hanya kalau memang ingin bergaya shfmt.
Last updated on