Berikan Coding Agent VM Sekali Pakai
Jalankan coding agent di VM yang dapat dihancurkan untuk membatasi dampak, menjaga kondisi bersih tiap tugas, memakai snapshot, dan menekan biaya lewat pola VPS.
Mengapa VM sekali pakai lebih aman daripada laptop Anda
Berikan VM sekali pakai kepada coding agent. Dampak terburuk yang dapat ditimbulkannya adalah menghancurkan mesin yang dapat Anda bangun ulang dalam sepuluh menit. Agent tetap memperoleh akses root, tetap dapat menginstal paket, dan tetap dapat menjalankan test suite tanpa meminta izin pada setiap langkah. Perbedaannya terletak pada lokasi dampaknya. Pada laptop, agent berbagi home directory dengan kunci SSH, profil browser, file .env, dan semua repository lain yang pernah Anda clone. Pada server sementara, agent hanya memiliki shell, checkout, dan tidak memiliki hal lain yang layak diambil.
Itulah keseluruhan argumennya. Argumen ini membahas ketidakseimbangan dampak, bukan probabilitas. Agent yang berhati-hati pada laptop yang dikelola dengan baik hampir selalu aman. Namun, ketika terjadi kesalahan, biayanya bukan sekadar commit yang buruk. Anda harus memulihkan sistem dari backup, jika memilikinya.
Tentukan radius dampaknya sebelum memperdebatkannya
Radius dampak adalah kumpulan hal yang dapat dijangkau oleh suatu proses. Untuk agent yang berjalan sebagai user normal Anda pada mesin normal Anda, kumpulan tersebut lebih luas daripada yang dibayangkan kebanyakan orang.
Kumpulan itu mencakup ~/.ssh/id_ed25519, yang biasanya tidak terenkripsi karena Anda bosan mengetik passphrase. Kumpulan itu mencakup ~/.aws/credentials dan ~/.config/gh/hosts.yml, yang memang dirancang sebagai teks biasa. Kumpulan itu mencakup setiap repository saudara di bawah ~/code, termasuk repository yang memiliki connection string production dalam file env lokal. Kumpulan itu juga mencakup riwayat shell Anda, yang menyimpan token yang pernah Anda tempelkan. Selain itu, kumpulan tersebut mencakup jaringan tempat laptop Anda berada, yang sering kali merupakan jaringan rumah atau kantor dengan service yang tidak memerlukan autentikasi.
Semua itu tidak memerlukan agent berbahaya. Yang diperlukan hanya satu perintah yang keliru tetapi dijalankan dengan yakin. rm -rf dengan variabel yang belum disetel dan meluas menjadi /, sebuah git clean -xfd di direktori yang salah, sebuah docker system prune -af --volumes yang ikut menghapus database lokal Anda, atau chmod -R 777 yang membantu pada home directory. Agent dilatih menggunakan Internet yang sama dengan yang mengajarkan perintah-perintah tersebut kepada orang lain.
Mekanisme yang melindungi Anda bukan penilaian agent. Perlindungan itu berasal dari fakta bahwa mesin yang menampung kerusakan adalah mesin yang sejak awal bersedia Anda korbankan.
Perhitungan biayanya membosankan. Itu memang intinya.
VPS kecil berbiaya beberapa dolar per bulan. Memulihkan laptop developer memerlukan waktu satu hari, dan itu adalah skenario yang baik: Anda langsung menyadarinya dan memiliki backup.
Hitung dengan angka Anda sendiri. Kalikan tarif per jam Anda dengan waktu yang diperlukan untuk menginstal ulang sistem operasi, memulihkan home directory, merotasi SSH key, merotasi personal access token, dan melakukan clone ulang dua puluh repository. Bandingkan hasilnya dengan biaya server terkecil yang dijual provider Anda selama dua belas bulan. Titik impasnya berada di bawah satu insiden dalam beberapa tahun. Insiden tersebut juga tidak harus bersifat katastrofik agar melewati batas itu. Satu sore yang hilang karena lingkungan lokal yang rusak sudah cukup untuk membayar biaya satu tahun.
Bagian kedua dari perhitungannya adalah snapshot. Snapshot sebelum menjalankan tindakan berisiko mengubah hasil buruk dari "pulihkan seluruh lingkungan kerja saya" menjadi "lakukan rollback dan coba prompt lain". Opsi tersebut tidak tersedia pada laptop yang Anda gunakan untuk mengetik ini, karena Anda tidak dapat membuat snapshot mesin saat mesin itu digunakan sebagai meja kerja.
Kondisi per Juli 2026
Ada tiga jawaban yang tepat untuk pertanyaan “di mana agent harus dijalankan”, dan semuanya mempertukarkan dua hal yang sama: seberapa kuat batas isolasinya dan seberapa banyak konfigurasi yang dapat Anda terima.
Micro VM lokal. Alat dalam kategori ini menjalankan virtual machine sungguhan pada perangkat keras Anda sendiri, memasang repository ke dalamnya, dan memberi agent akses root di dalam VM. clawk adalah contoh saat ini, dan proposisinya tepat sesuai tesis artikel ini: berikan coding agent Linux VM yang dapat dibuang, bukan laptop Anda. Per Juli 2026, alat ini menargetkan macOS 14 dan versi lebih baru pada Apple silicon, dengan dukungan Linux eksperimental melalui Firecracker, serta dapat diinstal menggunakan brew install clawkwork/tap/clawk. Jalankan clawk di dalam repository untuk menjalankan sandbox dan menghubungkan agent, clawk down untuk menghentikannya, dan clawk destroy untuk menghapusnya. Batas isolasinya menggunakan hypervisor, sehingga kuat. Keterbatasannya, VM berada pada mesin yang Anda bawa, sehingga menggunakan memori mesin tersebut dan berhenti saat Anda menutup laptop.
Container. Docker adalah pilihan yang sudah terpasang bagi kebanyakan orang, dan memang berguna.
docker run --rm -it -v "$PWD:/work" -w /work --network none ubuntu:24.04 bash--rm menghapus container saat keluar, sedangkan --network none tidak memberinya akses jaringan sama sekali. Ini merupakan default yang baik untuk build atau pengujian. Perlu dipahami hal yang tidak dilakukan oleh konfigurasi ini: container berbagi kernel host, sehingga bug pada kernel dapat menjadi jalan keluar dari isolasi. Batas isolasi juga hilang saat Anda menambahkan --privileged atau memasang /var/run/docker.sock agar agent dapat “menggunakan Docker”. Memasang Docker socket ke dalam container setara dengan memberikan akses root host kepada container tersebut.
VPS biasa yang dapat Anda bangun ulang. Anda tidak memerlukan alat baru, mendapatkan batas isolasi kernel sungguhan dan snapshot dari provider, serta VPS tetap berjalan saat Anda mematikan laptop. Inilah pola yang dijelaskan dalam panduan selanjutnya. Pola ini juga mampu menangani agent yang berjalan lama, karena job yang membutuhkan waktu empat jam tidak terpengaruh oleh kepulangan Anda.
Pola VPS: berikan agent akun penggunanya sendiri
Mulai dari server yang sudah diperkuat keamanannya. sepuluh menit pertama pada VPS baru mencakup bagian yang tidak spesifik untuk agent: pembaruan, login non-root, SSH yang hanya menggunakan key, serta firewall.
Kemudian buat akun yang hanya digunakan oleh agent. Dengan demikian, kesalahan di dalam akun tersebut tidak dapat memengaruhi bagian lain pada server.
sudo adduser --disabled-password --gecos "" agent
sudo install -d -m 700 -o agent -g agent /home/agent/work
sudo -u agent -H bash -lc 'id; ls -la ~'--disabled-password berarti tidak ada password yang dapat ditebak, dan Anda mengakses akun tersebut dengan sudo -u agent atau key SSH. Perhatikan bahwa agent sengaja tidak berada dalam grup sudo. Agent dengan sudo memiliki akses root, dan root dapat membaca file milik semua pengguna lain. Artinya, pemisahan yang baru saja Anda buat hanya bersifat semu. Jika agent benar-benar perlu menginstal package, itu menjadi alasan untuk menyediakan seluruh server yang dimilikinya, bukan alasan untuk memberinya sudo pada server bersama. Aturan umumnya dijelaskan dalam prinsip hak akses minimum untuk pengguna Linux pada VPS.
Periksa batas pemisahan tersebut sebelum mempercayainya. Sebagai pengguna agent, coba baca file milik akun Anda sendiri:
sudo -u agent cat /home/you/.ssh/id_ed25519Anda seharusnya melihat cat: /home/you/.ssh/id_ed25519: Permission denied. Jika yang terlihat adalah material key, berarti home directory Anda menggunakan mode 755 dan isolasinya belum benar. Perbaiki dengan sudo chmod 700 /home/you.
Jangan simpan kredensial di mesin sama sekali
Tujuan menggunakan mesin sekali pakai menjadi sia-sia jika Anda menyalin secret produksi ke mesin tersebut. Aturannya sederhana: tidak boleh ada apa pun di mesin itu yang merupakan kredensial yang akan mengganggu Anda jika harus dirotasi sore ini.
Untuk git, teruskan SSH agent alih-alih menyalin key. Private key tetap berada di laptop Anda dan hanya permintaan tanda tangan yang melewati koneksi.
ssh -A agent@203.0.113.10
ssh -T git@github.comPerintah kedua harus menghasilkan Hi yourname! You've successfully authenticated, but GitHub does not provide shell access.. Itu membuktikan bahwa git push dapat digunakan tanpa file key di server. Setelah itu, jalankan ls -la ~/.ssh di mesin tersebut dan pastikan tidak ada private key di dalamnya.
Agent forwarding memiliki satu risiko nyata yang harus dijelaskan secara langsung: selama Anda terhubung, siapa pun yang memiliki akses root di server tersebut dapat menggunakan socket yang diteruskan untuk melakukan autentikasi sebagai Anda. Pada server yang hanya memiliki Anda sebagai pengguna lain, ini merupakan kompromi yang dapat diterima. Pada mesin bersama, hal ini tidak dapat diterima, dan deploy key yang dibatasi untuk satu repository merupakan pilihan yang lebih baik. Pilihan tersebut dibahas dalam Dasar-dasar manajemen SSH key.
Untuk API key, berikan agent key tersendiri dengan batas pengeluaran tersendiri. Simpan key tersebut dalam file yang dimiliki pengguna agent dengan mode 600. Saat mesin dihancurkan, cabut key tersebut alih-alih bertanya-tanya apakah key itu telah bocor. Memantau pengeluaran model per key juga membuat angka dalam Pengendalian biaya AI agent pada VPS tetap dapat diprediksi.
Batasi akses agent ke jaringan
Isolasi filesystem hanya mencakup separuh batasan. Separuh lainnya adalah egress: tujuan yang boleh diakses proses. Linux dapat memfilter trafik keluar berdasarkan user yang membuatnya. Ini sesuai dengan pola tersebut.
sudo iptables -A OUTPUT -m owner --uid-owner agent -o lo -j ACCEPT
sudo iptables -A OUTPUT -m owner --uid-owner agent -p udp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -m owner --uid-owner agent -p tcp --dport 443 -j ACCEPT
sudo iptables -A OUTPUT -m owner --uid-owner agent -j REJECTAturan dibaca secara berurutan, sehingga REJECT terakhir menangkap semua trafik yang tidak diizinkan oleh baris sebelumnya. Uji aturan tersebut sebagai agent:
sudo -u agent curl -sS -m 5 http://example.comPerintah itu seharusnya gagal dengan curl: (7) Failed to connect to example.com port 80: Connection refused karena aturan reject langsung memberikan respons, bukan membiarkan koneksi menggantung. Permintaan HTTPS ke host yang sama seharusnya tetap berhasil.
Ada dua batasan yang perlu diperhatikan. Pertama, aturan ini hilang setelah reboot berikutnya jika tidak disimpan menggunakan sudo apt install -y iptables-persistent, lalu sudo netfilter-persistent save. Kedua, aturan ini memfilter port dan alamat, bukan nama. Aturan yang mengizinkan port 443 akan mengizinkan semua host HTTPS di Internet. Aturan tersebut cukup untuk mengakses API model, tetapi juga cukup untuk mengakses pastebin. Daftar izin domain yang sebenarnya memerlukan trafik melewati proxy yang membaca hostname yang diminta. Konfigurasi ini lebih kompleks daripada yang biasanya diinginkan pada setup satu developer. Nyatakan batas perlindungan secara akurat: kontrol egress pada tingkat port, di mesin yang sejak awal siap Anda kehilangan.
Kembalikan ke keadaan bersih di antara tugas
Keadaan bersih untuk setiap tugas merupakan manfaat yang sering diremehkan. Agent yang menghabiskan tiga jam untuk tiket sebelumnya dapat meninggalkan paket yang terpasang, migrasi yang hanya diterapkan sebagian, node_modules yang sudah kedaluwarsa, serta working tree git dengan perubahan yang belum ditinjau siapa pun. Tugas berikutnya mewarisi semuanya, dan Anda menghabiskan anggaran peninjauan untuk menentukan kekacauan mana yang berasal dari eksekusi tertentu. Agent yang cakupannya lebih sempit meninggalkan lebih sedikit hal sejak awal. Karena itu, memasangkan mesin disposable dengan skill yang mendorong agent untuk membuat perubahan terkecil yang berhasil menjaga diff dan keadaan sisa tetap cukup kecil untuk ditinjau.
Cara yang murah adalah membuat checkout baru untuk setiap tugas.
sudo -u agent -H bash -lc 'rm -rf ~/work/repo && git clone git@github.com:you/repo.git ~/work/repo'Cara yang lebih kuat adalah membuat snapshot dari provider satu kali, segera setelah mesin disiapkan dan sebelum agent menyentuhnya. Memulihkan snapshot tersebut mengembalikan seluruh sistem, termasuk paket, ke keadaan yang diketahui. Sebagian besar provider menyediakan fitur ini di control panel atau melalui API, bukan sebagai command pada mesin. Karena itu, langkah persisnya bergantung pada provider Anda. Lakukan snapshot ketika mesin masih belum memiliki perubahan yang tidak perlu.
Simpan semua hal penting di luar mesin disposable. Biasanya, ini berarti melakukan push branch dan tidak menimbunnya secara lokal. Jika mesin tersebut menyimpan sesuatu yang akan Anda perlukan, lakukan backup dengan benar menggunakan backup restic pada VPS. Mesin yang dapat Anda hancurkan hanya berguna jika penghancurannya benar-benar tidak menimbulkan masalah.
Jika Anda ingin memiliki beberapa environment yang terisolasi tanpa membayar beberapa server, satu VPS yang lebih besar dapat menjalankan guest VM secara langsung. Nested virtualisation pada VPS menjelaskan cara kerjanya, termasuk cara memeriksa apakah provider Anda mengizinkannya. Isolasi memiliki dua sisi dalam kasus ini. Jika Anda lebih memilih dua agent berkoordinasi pada mesin yang sama daripada terisolasi sepenuhnya, satu sesi Claude Code dapat mengirim teks langsung ke sesi lain sehingga setiap handoff tidak perlu selalu melalui Anda.
Kapan laptop dengan pengamanan yang memadai benar-benar cukup
Jelaskan hal ini secara jujur, karena melebih-lebihkan isolasi akan membuat orang berhenti mendengarkan.
Jika Anda meninjau setiap perintah sebelum dijalankan, laptop sudah cukup. Prompt izin merupakan kontrol yang nyata, dan menjalankan Claude Code dengan aman di server menjelaskan apa saja yang sebenarnya diblokir oleh setiap tingkat izin. Jika pekerjaan Anda hanya mencakup satu repositori dan tidak ada kredensial produksi di mana pun pada mesin tersebut, dampaknya sudah terbatas. Jika sesi agent Anda singkat dan diawasi, periode paparannya juga singkat.
Jawabannya berubah saat Anda melewati prompt tersebut. Hal ini perlu dipertimbangkan sekarang karena mode otomatis menjadi default Claude Code pada 14 August 2026 dan instalasi baru tidak lagi meminta persetujuan sebelum mengubah file atau menjalankan perintah. Eksekusi tanpa pengawasan, pekerjaan semalaman, dan alur kerja apa pun ketika Anda menyetujui rencana lalu meninggalkan proses tersebut akan menghilangkan pemeriksaan manusia yang sebelumnya membatasi dampak. Pada saat itulah mesin harus mengambil alih fungsi tersebut. Hal yang sama berlaku untuk apa pun yang memperluas jangkauan agent, termasuk menjalankan coding agent pada VPS di beberapa repositori sekaligus.
Keputusan ini sebenarnya bukan tentang seberapa besar Anda memercayai model. Keputusan ini tentang apa yang berada di sebelah model ketika model tersebut melakukan kesalahan.
FAQ
Apakah container cukup untuk mengisolasi coding agent?
Untuk sebagian besar pekerjaan, ya, dengan dua syarat. Container tidak boleh dijalankan dengan --privileged, dan /var/run/docker.sock tidak boleh di-mount ke dalamnya, karena salah satunya dapat memberi proses tersebut jalur untuk memperoleh akses root pada host. Container berbagi kernel host, sehingga batas isolasinya lebih lemah daripada virtual machine. Jika agent menjalankan kode tidak tepercaya yang diambil dari Internet, gunakan VM sungguhan atau server terpisah.
Apakah agent memerlukan sudo pada server?
Tidak. Memberinya sudo akan membatalkan isolasi yang telah Anda buat, karena root dapat membaca akun lain pada server tersebut. Buat user agent tanpa sudo dan berikan akses tulis hanya ke direktori kerjanya sendiri. Jika tugas tersebut benar-benar memerlukan instalasi package, berikan agent satu mesin penuh yang menjadi miliknya, bukan akses root pada mesin yang digunakan bersama.
Bagaimana cara agar agent dapat melakukan push ke git tanpa menaruh SSH key saya di server?
Forward SSH agent Anda dengan ssh -A saat terhubung. Permintaan tanda tangan dikirim melalui koneksi, sedangkan private key tetap berada di laptop Anda. Dengan demikian, ssh -T git@github.com dapat melakukan autentikasi dan git push dapat bekerja tanpa private key di server. Perlu diperhatikan bahwa root pada server tersebut dapat menggunakan socket yang di-forward selama Anda terhubung. Karena itu, gunakan deploy key dengan cakupan repository pada mesin yang digunakan bersama orang lain.
VPS dengan ukuran berapa yang diperlukan agent?
Pekerjaan agent terutama berupa pengeditan file, menjalankan build, dan menjalankan test. Karena itu, tentukan ukuran mesin berdasarkan kebutuhan build, bukan modelnya. Model yang di-host berjalan pada hardware milik provider, sehingga menambah network traffic dan hampir tidak menambah beban lokal. Mulailah dengan 2 GB RAM untuk pekerjaan scripting, lalu naikkan menjadi 8 GB jika repository melakukan build container atau mengompilasi sesuatu yang cukup besar.
Seberapa sering mesin harus dihancurkan dan dibuat ulang?
Buat ulang mesin ketika kondisinya tidak lagi dapat dijelaskan. Minimal, lakukan ini setiap kali ada kemungkinan credential pada mesin telah terekspos. Checkout baru di antara tugas akan menangani perubahan konfigurasi sehari-hari. Snapshot yang dibuat sebelum agent dijalankan untuk pertama kali memberi Anda system image bersih untuk dipulihkan. Jika membuat ulang terasa mahal, itu merupakan tanda bahwa sesuatu yang penting masih disimpan pada mesin yang Anda sebut disposable.