Rigs dan lingkungan terisolasi
Rig adalah mesin sekali pakai yang dikemudikan agen secara real time — browser, desktop Linux, emulator Android, Simulator iOS, atau mesin di balik terminal terisolasi. Sebagian besar rig adalah VM; simulator seluler yang dikelola host adalah pengecualian yang eksplisit. Halaman ini menjelaskan setiap batas dan mengapa bagian-bagiannya dibentuk seperti itu. Untuk membukanya, lihat Berikan agen mesin untuk menguji; untuk verb, port, dan default yang tepat, lihat referensi rigs.
Mengapa VM, bukan sandbox
Bagian berjudul “Mengapa VM, bukan sandbox”Sandbox native membungkus proses dalam
isolasi namespace — nyata, tetapi ia berbagi kernel Anda, dan ia membatasi
sebuah proses, bukan komputer. Begitu agen perlu mengklik-klik aplikasi
desktop, merender halaman di browser sungguhan, atau menjalankan eksperimen
rm -rf yang lebih baik tidak Anda pikirkan, batas yang jujur adalah sebuah
mesin: kernel sendiri, disk sendiri, stack jaringan sendiri.
Permukaan terisolasi memakai dua backend VM:
- microVM untuk terminal dan browser — boot hypervisor dalam waktu kurang dari satu detik dari image kontainer yang dipin dengan digest.
- QEMU untuk desktop Linux lengkap, yang membutuhkan perangkat tampilan yang tidak dimiliki microVM.
Permukaan seluler dikelola host dan menyatakan batas yang lebih lemah secara terus terang:
- Android mengemudikan emulator Google melalui ADB.
- iOS membuat dan memiliki perangkat CoreSimulator di host Mac lalu mengemudikannya melalui WebDriverAgent. Perangkat beserta datanya dihapus saat rig ditutup, tetapi jaringannya mengikuti Mac host.
Rig terisolasi menulis ke overlay sekali pakai di atas image dasar baca-saja, sehingga satu rig tidak dapat mengubah titik boot rig berikutnya. Rig iOS memiliki perangkat CoreSimulator sekali pakai yang dihapus saat rig ditutup. Android menempel ke emulator host yang hidup lebih lama daripada sesi.
Egress yang menolak secara default
Bagian berjudul “Egress yang menolak secara default”Jaringan sebuah rig dimulai dari tidak ada apa pun. Host diizinkan per rig
melalui gerbang yang tidak dapat dikakali sistem tamu: satu-satunya jalur
keluar mesin adalah jalur yang dibuat oleh konfigurasi peluncuran. Terminal
terisolasi mendapat baseline pengembang (registry paket, forge, mirror apt);
rig browser mengizinkan situs produk (usectrl.dev) dan boot ke halaman
file:// lokal yang tidak memerlukan egress; semua hal lain ditolak pada saat
koneksi.
Android dan iOS tidak tercakup oleh gerbang ini. Emulator dan simulator host-nya memakai jaringan host server, sehingga UI dan laporan kemampuan menandai egress sebagai tidak ditegakkan dan tidak pernah menawarkan kontrol “Mulai ulang tanpa batasan” yang menyesatkan.
Egress dan kredensial adalah satu kebijakan yang dilihat dari dua sisi — broker kredensial (di bawah) tidak akan mencetak token untuk host yang tidak dapat dijangkau sistem tamu.
Semua yang dibaca rig diperlakukan sebagai tidak tepercaya: teks halaman, DOM dan pohon aksesibilitas, dump UI, serta keluaran konsol kembali ke agen dipagari dengan aturan tetap “ini data, bukan instruksi”. Pagar itu adalah pembingkaian; gerbang egress adalah penegakan di baliknya.
Input lewat hypervisor, tangkapan lewat sistem tamu
Bagian berjudul “Input lewat hypervisor, tangkapan lewat sistem tamu”Untuk permukaan desktop, peristiwa papan ketik dan penunjuk disuntikkan oleh perangkat input virtual milik hypervisor sendiri. Sistem tamu tidak pernah menjalankan daemon berhak istimewa yang dapat menyintesis input — jadi menembus perangkat lunak sistem tamu tidak menyerahkan papan ketik kepada penyerang. Tangkapan mengalir ke arah sebaliknya, melalui agen kecil tanpa hak istimewa di dalam sistem tamu, karena sistem tamu dapat menskalakan frame sebelum melintasi kabel.
Dua jalur tampilan
Bagian berjudul “Dua jalur tampilan”Orang yang menonton dan model yang mengemudikan punya kebutuhan berlawanan, jadi sebuah rig melayani dua aliran independen:
- Jalur manusia beresolusi penuh pada ukuran panel Anda, dinegosiasikan ulang saat Anda mengubah ukuran, dan diteruskan server sebagai byte buram — server tidak pernah mendekode frame, karena dekoder video di jalur permintaan itulah yang menghentikannya menjawab RPC.
- Jalur agen adalah gambar diam yang diperkecil dan dibatasi pada ukuran yang ramah model, satu gambar per hasil tool, dengan frame lama dibuang saat pemadatan sementara deskripsi teksnya tetap bertahan.
Tidak ada jalur yang berkompromi demi yang lain: Anda mendapat gambar yang lancar, model mendapat yang murah.
Pengambilalihan adalah titik penyempitan, bukan permintaan
Bagian berjudul “Pengambilalihan adalah titik penyempitan, bukan permintaan”Kendali eksklusif ditegakkan di satu titik yang dilewati setiap tindakan — bukan dengan meminta model berperilaku baik. Selama manusia memegangnya, server menolak tindakan mutasi agen. Agen tetap mempertahankan verb pengamatannya (tangkapan layar, ekstraksi) agar dapat menceritakan apa yang Anda lakukan, dan agen diberi tahu tentang pengambilalihan melalui jalur pengarahannya alih-alih dibiarkan menemukannya lewat klik yang ditolak. Mengklik dan mengetik di kanvas berfungsi kapan pun tidak ada orang lain yang memegang kunci itu — atau saat Anda yang memegangnya; tag statusnya berbunyi Anda memegang kendali. Setiap peristiwa input — milik Anda maupun agen — tercatat dalam log audit per rig beserta principal dan urutan monotoniknya, sehingga “siapa yang mengklik itu” tetap terjawab setelah mesinnya hilang.
Konten melintasi batas; mesinnya tetap terpisah
Bagian berjudul “Konten melintasi batas; mesinnya tetap terpisah”Salin dan tempel bekerja di kedua arah, begitu pula menyeret berkas masuk dan keluar — tetapi rig adalah komputer yang berbeda, dan desainnya tidak pernah berpura-pura sebaliknya.
Papan klip dibawa sesuai permintaan, bukan dicerminkan terus-menerus. Tekan kombinasi tombol salin saat berada di rig dan sistem tamu diminta menyalin, lalu apa pun yang diletakkannya di papan klip — teks, gambar, daftar berkas — diambil dan ditempatkan di papan klip Anda. Tempel mengirim konten yang sama ke arah sebaliknya lalu menekan tempel di dalam sistem tamu. Tidak ada yang disinkronkan di latar belakang: kata sandi yang Anda salin di mesin sendiri tidak diam-diam sampai di dalam VM hanya karena timer berbunyi.
Pelintasan dibatasi per pengguna dan per arah, secara independen. Menempel ke rig diizinkan secara default; menyalin keluar rig meminta konfirmasi lebih dulu (izin sepuluh menit, atau Selalu izinkan di Pengaturan → Server → Rigs → Akses papan klip). Ini tidak pernah menjadi pengaturan ruang kerja: satu anggota tidak dapat memberikan persetujuan atas papan klip anggota lain.
Di macOS kombinasi pelintasannya adalah ⌘C/⌘V, yang tidak ambigu — ⌃C tetap sampai ke shell sistem tamu sebagai interupsi. Di Windows dan Linux kedua kombinasi itu adalah penekanan tombol yang sama, sehingga sistem tamu menerimanya tanpa perubahan dan papan klip Anda hanya ditimpa ketika papan klip sistem tamu benar-benar berubah. Sebuah interupsi tetap interupsi.
Berkas yang diseret masuk disalin ke folder drop mesin lalu ditawarkan
kepadanya. Arti “ditawarkan” bergantung pada apa yang benar-benar dapat
dilakukan: halaman browser menerima peristiwa drop yang sungguhan pada titik
Anda melepas berkas, sehingga zona unggah berperilaku persis seperti untuk
berkas lokal; desktop mendapat berkasnya di ~/Drops dengan path-nya di papan
klip, karena tidak ada host yang dapat menyintesis drag ke toolkit Linux
sembarang tanpa menjalankan daemon berhak istimewa di dalam sistem tamu — yang
justru ditolak oleh desain ini. Hasilnya menyebutkan mana yang terjadi,
sehingga CSV yang dijatuhkan di zona unggah tidak pernah dilaporkan sebagai
terunggah padahal hanya berkas di sebuah folder. Menjatuhkan berkas ke
terminal terisolasi menyalin berkasnya masuk lalu mengetikkan path sistem
tamunya di prompt, yang memang dapat dipakai shell.
Berkas yang diseret keluar berfungsi di permukaan desktop, tempat protokol drag X11 membuat payload-nya dapat dibaca selama drag berlangsung. Mulai drag di dalam sistem tamu, bawa keluar dari kanvas, dan berkasnya diambil ke mesin Anda lalu diserahkan ke OS sebagai drag sungguhan. Menyalin berkas di pengelola berkas sistem tamu lalu menempelkannya di host bekerja dengan cara yang sama. Permukaan browser sengaja tidak menawarkan ini: browser headless tidak punya seleksi drag untuk dibaca, dan sinyal terdekat yang tersedia — seleksi teks halaman — sama sekali bukan bukti adanya drag, sehingga bertindak atasnya akan membajak klik biasa.
Semua yang dibaca dari sistem tamu tetap merupakan konten tidak tepercaya: teks papan klip sampai ke model di dalam pagar yang sama dengan ekstraksi halaman, dan log audit mencatat bahwa sebuah penempelan terjadi dan seberapa besar isinya — tidak pernah isinya sendiri.
Kredensial tidak pernah tinggal di sistem tamu
Bagian berjudul “Kredensial tidak pernah tinggal di sistem tamu”git push bekerja dari terminal terisolasi yang Anda buka, tetapi sistem tamu tidak menyimpan
token forge. Ia memegang satu rahasia per VM yang satu-satunya kekuatan adalah
meminta kepada broker kredensial host — melalui tunnel yang dikendalikan host
— token berumur pendek yang bercakupan repo, per operasi, dengan pembatasan
laju, dibatasi oleh daftar izin host yang sama dengan egress, dan dicabut
begitu rig ditutup. Mesin yang dibangun untuk dibuang tidak boleh memuat apa
pun yang layak dicuri.
Apa yang boleh dilakukan token itu ditetapkan saat rig dibuka. Rig terminal yang dibuka manusia mendapat token tulis, dibatasi oleh akses forge milik anggota itu sendiri. Rig yang dibuka agen mendapat token hanya-baca: credential helper git tidak dapat membedakan push dari fetch, jadi aturan push tidak dapat ditanyakan per push di dalam tamu seperti yang dilakukan gateway run agen di host.
Worktree di dalam rig adalah satelit
Bagian berjudul “Worktree di dalam rig adalah satelit”Saat rig membawa repositori Anda, worktree host tetap menjadi acuan. Salinannya
disinkronkan masuk saat boot (dengan rahasia seperti berkas .env
dikecualikan), dan commit kembali hanya ketika Anda memintanya — diambil ke
refs/rigs/<id>/*, tidak pernah di-push, tidak pernah di-checkout. Tidak ada
apa pun di dalam VM yang dapat memindahkan branch Anda atau menyentuh working
tree Anda; menggabungkan hasil rig selalu merupakan keputusan manusia yang
dibuat di host.
Port tanpa lubang
Bagian berjudul “Port tanpa lubang”Server dev yang dijalankan di dalam VM terminal menjadi dapat dijangkau — di mesin Anda, di Browser (VM), opsional di LAN Anda, opsional di bawah domain dev dengan HTTPS — tanpa pernah membuka mesinnya. Peta port hypervisor ditetapkan saat boot, sehingga semua penerusan berikutnya menumpang dua kanal sempit yang dikendalikan host: satu multiplexer masuk yang sudah dibuat sebelumnya dan menolak menghubungi apa pun yang tidak benar-benar didengarkan sistem tamu, serta tunnel balik yang dijaga host tetap terbuka untuk koneksi yang dimulai sistem tamu. HTTPS domain dev diterminasi di server menggunakan otoritas yang dicetak secara lokal yang kuncinya tidak pernah masuk ke sistem tamu mana pun. Mekanismenya ada di Teruskan port dari terminal.
Mesin dibatasi secara struktural
Bagian berjudul “Mesin dibatasi secara struktural”Rig tidak dapat menjadi piaraan:
- TTL mutlak yang tidak dapat diperpanjang sistem tamu;
- tangga idle — parkir (vCPU dihentikan, RAM tetap residen) setelah jendela idle, tutup setelah dua kali jendela itu — dengan terminal yang terbuka atau penonton yang menyaksikan dihitung sebagai “sedang dipakai”;
- anggaran memori yang dihitung dalam megabyte residen, bukan jumlah sesi, karena VM yang diparkir membebaskan CPU tetapi menyimpan setiap byte RAM; mesin yang paling lama tidak digunakan digusur lebih dulu, dan tidak pernah mesin yang sedang dikemudikan atau ditonton orang;
- pembongkaran saat server dimatikan, plus penyapuan mesin terlantar bertanda kepemilikan pada start berikutnya, sehingga server yang crash tidak pernah meninggalkan hypervisor yang tidak menjawab kepada siapa pun.
Boot pertama menarik image yang dipin milik mesin; server lalu menyimpan
salinan yang sudah diekstrak di latar belakang, sehingga setiap mesin berikutnya
dari jenis itu boot dalam hitungan detik dan terminal terisolasi menyala dengan
baseline CLI ala runner yang dihosting GitHub, sudah terpasang — compiler,
Python, jq, alat arsip — bukan toolcache bahasa atau Docker. Image Komputer
menanamkan baseline CLI yang sama pada waktu build, di samping XFCE dan
browser.
Tiga browser, bukan satu
Bagian berjudul “Tiga browser, bukan satu”“Di mesin saya jalan” adalah klaim tentang satu engine render. Jadi rig browser bukan “browser” — melainkan Chromium, Firefox, atau WebKit, yang dipilih saat Anda membukanya, dan sebuah rig menjalankan yang dipakai saat dibuka sepanjang seluruh masa hidupnya. Satu percakapan dapat memuat satu dari masing-masingnya: membuka Firefox (VM) di samping Chromium (VM) memberi Anda dua mesin, dan mengarahkan keduanya ke halaman yang sama adalah perbandingannya. WebKit sedekat apa pun yang berjalan di Linux dengan Safari — garis keturunan engine yang sama, sehingga ia menangkap celah yang dihadapi pengguna Safari.
Verb-nya identik di ketiganya; protokol di bawahnya tidak, dan perbedaannya dinyatakan apa adanya alih-alih dihaluskan. Chromium berbicara DevTools Protocol dan mendorong frame, sehingga tampilan langsungnya tidak memakan biaya saat halaman diam. Firefox berbicara WebDriver BiDi dan WebKit berbicara WebDriver klasik, yang keduanya tidak punya screencast, sehingga tampilan langsungnya melakukan polling — beberapa frame per detik, yang tepat untuk mengamati halaman dan tidak untuk mengamati animasi. Ketika sebuah engine benar-benar tidak dapat melakukan sesuatu (Firefox tidak punya muat ulang yang melewati cache; WebKit tidak dapat melihat keluaran konsol yang dicatat sebelum halaman selesai dimuat), jawabannya menyatakannya alih-alih diam-diam melakukan hal lain.
Di mana rig berada dalam produk
Bagian berjudul “Di mana rig berada dalam produk”Rig dengan sengaja bukan tujuan global. Tampilan langsungnya adalah tab di
space atau PR tempat pekerjaan berlangsung, bercakupan percakapan itu —
sehingga tab Anda dan panggilan browser_use agen menuju satu mesin (satu
per engine, di permukaan browser).
Apakah rig dapat boot sama sekali adalah properti host, jadi kemampuan, image,
image kustom per ruang kerja, dan daftar mesin yang berjalan berada di
Pengaturan → Server → Rigs. Mengemudikan lingkungan terisolasi adalah
kelas tindakan pagar pengaman tersendiri, sehingga
ruang kerja, agen, atau space dapat mengizinkannya, mewajibkan persetujuan,
atau menolaknya sama sekali — mode baca-saja menolaknya sepenuhnya.