Berikan VM Sekali Pakai untuk Agen Coding
Jalankan agen coding di VM yang dapat dihancurkan dan dibangun ulang dalam sepuluh menit. Dapatkan root, snapshot, serta VPS murah tanpa membuka laptop Anda.
Mengapa VM sekali pakai lebih baik daripada laptop Anda
Berikan VM sekali pakai kepada agen coding. Hal terburuk yang dapat dilakukannya adalah merusak mesin yang dapat Anda bangun ulang dalam sepuluh menit. Agen tersebut tetap memperoleh akses root, tetap dapat menginstal paket, dan tetap dapat menjalankan rangkaian pengujian tanpa meminta izin untuk setiap langkah. Perbedaannya terletak pada lokasi kerusakan. Di laptop, agen berbagi direktori home dengan kunci SSH, profil browser, berkas .env, dan semua repositori lain yang pernah Anda clone. Di server sementara, agen hanya memiliki shell, checkout, dan tidak memiliki hal lain yang layak diambil.
Itulah inti argumennya. Ini adalah argumen tentang asimetri, bukan probabilitas. Agen yang berhati-hati pada laptop yang dikelola dengan baik hampir selalu aman. Namun, saat terjadi kesalahan, biayanya bukan sekadar commit yang buruk. Anda harus memulihkan sistem dari backup, jika memilikinya.
Tentukan radius dampak sebelum memperdebatkannya
Radius dampak adalah kumpulan hal yang dapat dijangkau oleh suatu proses. Untuk agen yang berjalan sebagai pengguna biasa Anda di mesin biasa Anda, kumpulan ini lebih besar daripada yang dibayangkan kebanyakan orang.
Kumpulan ini mencakup ~/.ssh/id_ed25519, yang biasanya tidak terenkripsi karena Anda bosan mengetik frasa sandi. Kumpulan ini mencakup ~/.aws/credentials dan ~/.config/gh/hosts.yml, yang memang dirancang sebagai teks biasa. Kumpulan ini mencakup setiap repositori saudara di bawah ~/code, termasuk repositori yang memiliki string koneksi produksi dalam file env lokal. Kumpulan ini juga mencakup riwayat shell Anda, yang menyimpan token yang pernah Anda tempelkan. Kumpulan ini juga mencakup jaringan tempat laptop Anda terhubung, yang sering kali merupakan jaringan rumah atau kantor dengan layanan yang tidak memerlukan autentikasi.
Semua itu tidak memerlukan agen berbahaya. Yang diperlukan hanya satu perintah yang keliru tetapi dijalankan dengan yakin. rm -rf dengan variabel yang tidak ditetapkan 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 dijalankan pada direktori home. Agen dilatih menggunakan internet yang sama dengan yang mengajarkan perintah-perintah tersebut kepada orang lain.
Mekanisme yang melindungi Anda bukanlah penilaian agen. Mekanismenya adalah mesin yang menanggung dampak tersebut merupakan mesin yang bersedia Anda kehilangan.
Perhitungan biaya memang membosankan, dan itulah intinya
Sebuah VPS kecil berbiaya beberapa dolar per bulan. Memulihkan laptop pengembang memerlukan waktu satu hari, dan itu adalah skenario yang baik: Anda segera menyadarinya dan memiliki cadangan.
Hitung dengan angka Anda sendiri. Kalikan tarif per jam Anda dengan waktu yang diperlukan untuk menginstal ulang sistem operasi, memulihkan direktori home, merotasi kunci SSH, merotasi token akses pribadi, dan melakukan clone ulang dua puluh repositori. Bandingkan hasilnya dengan biaya dua belas bulan untuk server terkecil yang ditawarkan penyedia Anda. Titik impas tercapai kurang dari satu insiden dalam beberapa tahun, dan insiden tersebut tidak harus bersifat katastrofik untuk melampaui batas itu. Kehilangan satu sore karena lingkungan lokal yang rusak sudah cukup untuk menutup biaya satu tahun.
Bagian kedua dari perhitungan ini adalah snapshot. Snapshot sebelum menjalankan proses berisiko mengubah hasil buruk dari "pulihkan seluruh sistem saya" menjadi "kembalikan ke kondisi sebelumnya dan coba prompt lain". Opsi itu tidak tersedia pada laptop yang sedang Anda gunakan untuk mengetik ini, karena Anda tidak dapat membuat snapshot pada mesin yang sedang digunakan sebagai meja kerja.
Lanskap per Juli 2026
Ada tiga jawaban yang tepat untuk pertanyaan "di mana agen sebaiknya dijalankan", dan semuanya mempertukarkan dua hal yang sama: seberapa kuat batas isolasinya dan seberapa banyak penyiapan yang dapat Anda terima.
Micro VM lokal. Alat dalam kategori ini menjalankan mesin virtual sungguhan pada perangkat keras Anda sendiri, memasang repositori ke dalamnya, dan memungkinkan agen memiliki akses root di dalam VM. clawk adalah contoh saat ini, dan inti penawarannya persis seperti tesis dalam artikel ini: berikan agen pemrograman VM Linux 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, dan dipasang dengan brew install clawkwork/tap/clawk. Jalankan clawk di dalam repositori untuk menjalankan sandbox dan menghubungkan agen, clawk down untuk menghentikannya, serta clawk destroy untuk menghapusnya. Batas isolasinya adalah hypervisor, yang kuat. Keterbatasannya, VM tersebut berjalan pada perangkat yang Anda bawa, sehingga menggunakan memori perangkat dan berhenti saat Anda menutup penutup laptop.
Container. Docker adalah pilihan yang sudah terpasang pada 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 membuatnya tidak memiliki akses jaringan sama sekali. Ini merupakan default yang baik untuk build atau pengujian. Pahami hal yang tidak dilakukan oleh konfigurasi ini: container berbagi kernel host, sehingga bug pada kernel dapat menjadi celah keluar, dan batas isolasinya hilang segera setelah Anda menambahkan --privileged atau memasang /var/run/docker.sock agar agen dapat "menggunakan Docker". Memasang Docker socket ke dalam container setara dengan memberikan akses root pada host kepada container tersebut.
VPS biasa yang dapat Anda bangun ulang. Tidak memerlukan alat baru, memiliki batas kernel sungguhan, mendukung snapshot dari provider, dan tetap berjalan saat Anda mematikan laptop. Inilah pola yang dijelaskan di bagian selanjutnya dalam panduan ini. Pola ini juga tetap berfungsi untuk menjalankan agen dalam waktu lama, karena pekerjaan yang memerlukan waktu empat jam tidak terpengaruh oleh Anda pulang.
Pola VPS: berikan agen pengguna sendiri
Mulai dari server yang telah diperkuat keamanannya. sepuluh menit pertama pada VPS baru mencakup bagian yang tidak khusus untuk agen: pembaruan, login non-root, SSH yang hanya menggunakan kunci, dan firewall.
Kemudian buat akun yang hanya digunakan oleh agen, sehingga kesalahan di dalamnya tidak dapat memengaruhi bagian lain di 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 kata sandi yang dapat ditebak, dan Anda mengakses akun tersebut dengan sudo -u agent atau kunci SSH. Perhatikan bahwa agent sengaja tidak berada dalam grup sudo. Agen dengan sudo memiliki akses root, dan root dapat membaca berkas milik semua pengguna lain, sehingga pemisahan yang baru Anda buat hanya bersifat semu. Jika agen benar-benar perlu memasang paket, gunakan server khusus yang dimilikinya, bukan memberikan sudo kepadanya pada server bersama. Aturan umumnya dijelaskan dalam hak akses minimum untuk pengguna Linux pada VPS.
Periksa batas isolasi sebelum mempercayainya. Sebagai pengguna agent, coba baca berkas milik akun Anda sendiri:
sudo -u agent cat /home/you/.ssh/id_ed25519Anda seharusnya melihat cat: /home/you/.ssh/id_ed25519: Permission denied. Jika Anda melihat material kunci, direktori home Anda memiliki mode 755 dan isolasinya belum benar-benar berlaku. Perbaiki dengan sudo chmod 700 /home/you.
Jangan menyimpan kredensial di mesin sama sekali
Tujuan penggunaan mesin sementara menjadi sia-sia jika Anda menyalin rahasia produksi ke mesin tersebut. Aturannya sederhana: tidak boleh ada kredensial di mesin itu yang akan membuat Anda keberatan jika harus menggantinya sore ini.
Untuk git, teruskan SSH agent, bukan 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 seharusnya memberikan jawaban Hi yourname! You've successfully authenticated, but GitHub does not provide shell access.. Ini 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.
Penerusan agent memiliki satu risiko penting yang harus dinyatakan dengan jelas: 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, cara ini tidak dapat diterima. Gunakan deploy key yang dibatasi untuk satu repositori. Pilihan tersebut dibahas dalam Dasar-dasar pengelolaan SSH key.
Untuk API key, berikan agent key khusus dengan batas pengeluaran tersendiri. Simpan key tersebut dalam file yang dimiliki pengguna agent dengan mode 600. Saat mesin dihancurkan, cabut key tersebut. Dengan begitu, Anda tidak perlu 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 jaringan yang dapat diakses agen
Isolasi sistem berkas hanya mencakup separuh batasan. Separuh lainnya adalah egress, yaitu tujuan yang boleh diakses proses. Linux dapat memfilter traffic keluar berdasarkan pengguna yang membuatnya. Ini tepat untuk 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. Karena itu, REJECT terakhir menangkap semua traffic yang tidak diizinkan oleh baris sebelumnya. Uji aturan tersebut sebagai agen:
sudo -u agent curl -sS -m 5 http://example.comPerintah tersebut seharusnya gagal dengan curl: (7) Failed to connect to example.com port 80: Connection refused karena aturan penolakan 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 kecuali Anda menyimpannya 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 mengizinkan semua host HTTPS di internet. Ini cukup untuk mengakses API model, tetapi juga cukup untuk mengakses layanan pastebin. Daftar izin domain yang sebenarnya memerlukan traffic melewati proxy yang membaca nama host yang diminta. Konfigurasi ini lebih kompleks daripada yang biasanya diinginkan dalam setup pengembang tunggal. Nyatakan hanya hal yang benar-benar Anda miliki: kontrol egress pada tingkat port, di mesin yang sudah siap Anda kehilangan.
Kembali ke keadaan bersih di antara tugas
Keadaan bersih untuk setiap tugas adalah manfaat yang sering diremehkan. Agen yang menghabiskan tiga jam pada tiket sebelumnya mungkin meninggalkan paket terinstal, migrasi yang baru diterapkan sebagian, node_modules yang sudah usang, dan 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 proses mana.
Cara yang sederhana adalah menggunakan 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 provider satu kali, tepat setelah mesin disiapkan dan sebelum agen menyentuhnya. Dengan memulihkan snapshot tersebut, seluruh sistem, termasuk paket, kembali ke keadaan yang diketahui. Sebagian besar provider menyediakan fitur ini melalui control panel atau API, bukan sebagai perintah di mesin, sehingga langkah tepatnya bergantung pada provider Anda. Lakukan snapshot saat mesin masih dalam keadaan sederhana.
Simpan semua hal penting di luar mesin sementara. Dalam praktiknya, ini terutama berarti mendorong branch, bukan menyimpannya secara lokal. Jika mesin tersebut menyimpan sesuatu yang akan Anda perlukan kembali, cadangkan dengan benar menggunakan backup restic di VPS. Mesin yang dapat Anda hancurkan hanya berguna jika proses penghancurannya benar-benar tidak menimbulkan masalah.
Jika Anda ingin memiliki beberapa lingkungan terisolasi tanpa membayar beberapa server, satu VPS yang lebih besar dapat menjalankan guest VM secara langsung. Virtualisasi bertingkat pada VPS menjelaskan cara kerjanya, termasuk cara memeriksa apakah provider Anda mengizinkannya.
Saat laptop dengan pengamanan sudah benar-benar memadai
Jujurlah mengenai hal ini. Melebih-lebihkan isolasi akan membuat orang berhenti memperhatikan.
Jika Anda meninjau setiap perintah sebelum dijalankan, laptop sudah memadai. Prompt izin merupakan kontrol nyata, dan menjalankan Claude Code dengan aman di server menjelaskan hal-hal yang benar-benar 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 agen Anda singkat dan diawasi, jendela paparannya juga singkat.
Jawabannya berubah begitu Anda melewati prompt. Eksekusi tanpa pengawasan, pekerjaan semalaman, dan alur kerja apa pun ketika Anda menyetujui rencana lalu meninggalkannya akan menghapus pemeriksaan manusia yang sebelumnya membatasi dampak. Pada saat itulah mesin harus menggantikannya. Hal yang sama berlaku untuk apa pun yang memperluas jangkauan agen, termasuk menjalankan agen coding pada VPS di beberapa repositori sekaligus.
Keputusan ini sebenarnya bukan tentang seberapa besar Anda mempercayai model. Keputusan ini tentang apa yang berada di sebelahnya 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 memberikan proses jalur menuju root pada host. Container menggunakan kernel host yang sama, 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 di server?
Tidak. Memberinya sudo membatalkan isolasi yang Anda buat, karena root dapat membaca akun lain di server. Buat user agent tanpa sudo dan berikan akses tulis hanya ke direktori kerjanya sendiri. Jika tugas benar-benar memerlukan instalasi paket, berikan seluruh mesin yang dikuasainya, bukan akses root pada mesin yang digunakan bersama.
Bagaimana cara mengizinkan agent melakukan push ke git tanpa menaruh kunci SSH saya di server?
Teruskan 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 melakukan autentikasi dan git push dapat bekerja tanpa private key di server. Namun, root pada server tersebut dapat menggunakan socket yang diteruskan 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 sebagian besar berupa pengeditan file, menjalankan build, dan menjalankan pengujian. Karena itu, sesuaikan ukuran mesin dengan kebutuhan build, bukan dengan modelnya. Model yang di-host berjalan pada perangkat keras penyedia layanan, sehingga menambah network traffic dan hampir tidak menambah beban lokal. Mulai dengan RAM 2 GB untuk pekerjaan scripting, lalu tingkatkan menjadi 8 GB jika repository membangun container atau mengompilasi sesuatu yang cukup besar.
Seberapa sering saya harus menghapus dan membangun ulang mesin?
Bangun ulang mesin ketika kondisinya tidak lagi dapat dijelaskan. Setidaknya, lakukan ini setiap kali credential di server mungkin telah terekspos. Checkout baru di antara tugas menangani perubahan kondisi sehari-hari. Snapshot yang dibuat sebelum agent dijalankan untuk pertama kali memberi Anda system image bersih untuk dipulihkan. Jika proses build ulang terasa mahal, itu menandakan ada sesuatu yang penting tersimpan pada mesin yang Anda anggap disposable.