Eksekutor jarak jauh
Berikan agen komputer sungguhan untuk dikerjakan — di Linux, macOS, atau Windows.
Apa itu eksekutor jarak jauh
Agen di Nessie tidak punya komputer. Agen dapat membaca apa yang ada di Nessie, berbicara dengan orang, dan memanggil alat yang terhubung melalui jaringan, tetapi agen tidak dapat membuka berkas di laptop, menjalankan perintah, atau melihat halaman yang hanya terbuka setelah seseorang masuk. Eksekutor jarak jauh adalah cara Anda memberi agen sebuah mesin untuk dikerjakan.
Eksekutor adalah daemon kecil yang Anda pasang di komputer yang Anda kendalikan. Ia memasangkan diri ke instans Nessie Anda, membuktikan identitas mesinnya dengan kunci yang tidak pernah meninggalkan host, lalu menawarkan sekumpulan operasi yang tetap dan bernama, tidak lebih. Pekerjaan datang sebagai perintah bertanda tangan satu per satu; hasilnya kembali sebagai tanda terima terstruktur dan terbatas ukurannya. Mesin tidak pernah menerima koneksi masuk dari Nessie.
Penting untuk tepat tentang apa yang bukan eksekutor, karena sebagian besar alat akses jarak jauh adalah salah satu dari hal-hal ini, dan eksekutor sengaja bukan keduanya. Tidak ada SSH, tidak ada shell jarak jauh yang bebas, tidak ada melekat ke multiplexer terminal yang sudah terbuka, tidak ada input standar dari sisi cloud, dan tidak ada proxy jaringan lokal umum. Ia bukan server MCP, dan ia bukan container atau lingkungan eksekusi cloud. Nessie sudah punya itu, dan itu hal yang berbeda. Eksekutor adalah endpoint yang membawa kapabilitas dengan daftar operasi tertutup, dan daftar itulah seluruh permukaannya.
Milik siapa sebuah eksekutor
Setiap eksekutor dibuat dengan tepat satu cakupan, dan cakupan itu tidak dapat diubah setelahnya. Cakupan menentukan siapa yang boleh memanggil eksekutor dan siapa yang boleh mengelolanya.
| Cakupan | Siapa yang boleh memanggil | Siapa yang mengelola akses |
|---|---|---|
| Pribadi | Orang yang meminta dan agen yang dipanggil, keduanya harus disebut sebagai penerima tugas. Salah satu saja tidak cukup. | Administrator manusia yang ditugaskan. Agen hanya dapat menggunakan eksekutor pribadi, tidak pernah mengelolanya. |
| Proyek | Orang yang berhak atas proyek tepat itu, dan hanya dari sebuah run di dalam proyek tersebut. | Manajer organisasi, atau pemilik atau admin proyek. |
| Organisasi | Orang dengan hak keanggotaan organisasi. | Manajer organisasi. |
Sebuah eksekutor pribadi harus selalu memiliki setidaknya satu administrator manusia yang aktif. Menghapus yang terakhir langsung gagal. Jika transaksi offboarding akan menyisakan nol administrator, eksekutor berhenti menerima pekerjaan baru, menuntaskan pekerjaan yang sudah ada, dan mencabut dirinya sendiri. Pemilik organisasi memiliki jalur darurat yang hanya untuk pencabutan: ia dapat mengakhiri eksekutor yang tidak dikelolanya, tanpa melihat daftar pribadinya, sesinya, atau isinya. Akses pribadi tidak pernah dialihkan diam-diam kepada orang lain.
Apa yang benar-benar bisa dilakukan agen dengan eksekutor
Kosakata operasi ditetapkan dalam kode, bukan dikonfigurasi per penerapan. Kosakata itu terbagi dua, dan pembagian ini menentukan apa yang perlu Anda pasang: sebagian operasi dijalankan daemon dari direktori kerja sementara miliknya sendiri tanpa mesin virtual sama sekali, dan sisanya memerlukan VM guest per sesi di host.
| Operasi | Apa yang dilakukannya | VM guest |
|---|---|---|
file.list, file.read | Mencantumkan dan membaca berkas di bawah satu root ruang kerja yang dipilih saat pemasangan. | Tidak |
file.write | Menulis ke salinan draf copy-on-write dari ruang kerja itu. Operasi ini tidak pernah membuka root asli untuk ditulis. | Tidak |
workspace.review | Melaporkan apa yang diubah draf: hingga 100 jalur relatif beserta jenis dan jumlah byte-nya, plus digest manifes. Tidak memuat isi berkas. | Tidak |
sandbox.stop | Menghentikan sesi yang dimiliki run ini. | Tidak |
command.run | Menjalankan satu perintah sebagai vektor argumen tanpa shell, di dalam guest tanpa egress. Tidak ada string shell di mana pun pada jalur ini. | Ya |
browser.open, browser.observe, browser.act | Mengendalikan browser di dalam guest terhadap daftar origin yang dikonfigurasi di mesin. Observasi mengembalikan pohon aksesibilitas yang terbatas dan gambar yang diperkecil secara opsional; aksinya adalah navigate, click, type, press, dan scroll terhadap sebuah node yang baru saja diamati agen, bukan selector, koordinat, atau skrip. | Ya |
coding.launch, coding.observe | Memulai sesi Codex terkelola di dalam guest dan membaca kembali status siklus hidup yang bertipe. Tidak ada attach ke terminal dan tidak ada kanal prompt: agen hanya tahu apakah sesi sedang berjalan, bukan apa yang tampil di layarnya. | Ya |
workspace.promote | Menerapkan draf yang sudah ditinjau ke ruang kerja asli. Ini satu-satunya operasi yang menulis ke host, dan memang sengaja tidak pernah ditawarkan kepada model. | Tidak |
Operasi yang tidak memerlukan guest adalah paket ruang kerja. Host yang tidak bisa memulai guest bukanlah eksekutor yang rusak: ia tetap terpasang secara normal, melaporkan backend sandbox-nya sebagai none, dan hanya mengiklankan paket ruang kerja tanpa yang lain. Itulah kondisi yang dialami edisi Windows tanpa Hyper-V, atau mesin Linux yang penggunanya tidak bisa memakai /dev/kvm, dan antarmuka menyebutkannya alih-alih gagal tanpa penjelasan.
Pekerjaan browser tidak pernah dimulai oleh agen atas inisiatifnya sendiri. Rute pengikatan operasi tunggal yang biasa menolak browser.open dan browser.observe secara langsung. Run browser diluncurkan oleh seseorang dari sebuah kanal, sebagai satu paket empat operasi pada run baru, dan tidak ada pengikatan tambahan yang bisa ditambahkan ke run itu setelahnya. Sesi coding terkelola bekerja dengan cara yang sama.
Dua kelompok lagi ada di dalam kode dan sengaja tidak tersedia. Operasi untuk mengendalikan tab Chrome yang sudah Anda masuki memiliki implementasi lokal yang lengkap dan ekstensi native-messaging, tetapi control plane menolak mengiklankannya sampai server dapat membuktikan bahwa percakapan asal bersifat privat dan mencatat siapa mengungkapkan apa. Fondasinya sengaja dibuat tidak aktif, dan ekstensinya tidak dikirimkan di kedua installer. Selain itu, beberapa operasi coding, yaitu attach, prompt, interrupt, dan close, disebutkan dalam skema tetapi tidak punya implementasi, sehingga tidak bisa diberikan.
Cara kerjanya
Koneksinya selalu keluar
Daemon membuat koneksi HTTPS dan WSS keluar ke API Nessie Anda dan tidak ke tempat lain. Nessie tidak pernah menghubungi laptop, tidak pernah menyimpan alamatnya, dan tidak pernah memperlakukan endpoint katalog mana pun sebagai transport mesin. Itulah sebabnya eksekutor bisa bekerja dari jaringan rumah, di balik NAT, di VPN kantor, tanpa port forward dan tanpa aturan firewall masuk. Itu juga mengapa menghentikan daemon berarti pemutusan yang lengkap dan langsung.
Origin API harus HTTPS. Satu-satunya pengecualian adalah alamat loopback untuk orang yang menjalankan Nessie di mesin mereka sendiri, melalui variabel lingkungannya sendiri. Tidak ada flag biasa yang mengubah origin produksi menjadi HTTP biasa.
Pemasangan membuktikan sebuah mesin, dan seseorang mengonfirmasinya
Pemasangan adalah bukti dua sisi. Orang yang berhak membuat eksekutor di Nessie dengan cakupannya, dan Nessie menerbitkan pendaftaran: tantangan acak 256-bit yang hanya disimpan Nessie sebagai verifier SHA-256, berlaku selama sepuluh menit, dan hanya bisa dipakai sekali.
Di mesin, daemon membuat pasangan kunci Ed25519, menyimpannya di penyimpanan yang dilindungi OS dan hanya bisa diakses pemilik, lalu menulis permintaan bertanda tangan yang persis ke disk sebelum melakukan panggilan jaringan apa pun. Dengan begitu, respons yang hilang bisa dicoba ulang dengan kunci yang sudah disiapkan, bukan diam-diam memasangkan dua kali. Lalu ia mengirimkan id pendaftaran, tantangan, kunci publiknya, dan tanda tangan pembuktian. Nessie menyimpan kunci publik dan sidik jarinya. Nessie tidak pernah menyimpan kunci privat.
Nessie kemudian menampilkan sidik jari itu kepada seseorang, yang mengonfirmasinya. Sampai konfirmasi itu dan pembuktian kepemilikan kunci berikutnya, eksekutor tetap offline. Pemasangan tidak pernah bisa diselesaikan dari teks obrolan atau transkrip terminal: harus ada tindakan manusia yang disengaja di antarmuka web atau desktop.
Mesin yang kehilangan kuncinya tidak bisa mengklaim kembali rekaman eksekutor-nya. Rekaman itu dicabut dan didaftarkan ulang sebagai eksekutor baru. Rotasi kunci, sebaliknya, adalah satu transaksi yang ditandatangani oleh kunci lama dan kunci baru.
Deskriptor adalah klaim bertanda tangan mesin tentang dirinya sendiri
Daemon yang sudah dipasangkan mempublikasikan deskriptor: pernyataan bertanda tangan dengan revisi yang monoton, yang hanya berisi fakta struktural. Isinya mencakup skema operasi mana yang didukungnya, batas sumber daya dan jaringannya, platformnya, dan digest kebijakan lokalnya. Deskriptor tidak memuat jalur host dan tidak menciptakan wewenang apa pun di cloud.
Revisi baru tidak pernah langsung aktif saat tiba. Ia disimpan menunggu tinjauan, dan orang yang berhak harus melihatnya serta mengonfirmasinya sebelum ia dapat memengaruhi apa yang tersedia. Itulah yang mencegah penyegaran kapabilitas diam-diam memberikan kekuatan baru: operasi yang baru diiklankan mulai dalam keadaan ditolak.
Perhatikan dengan jelas apa yang dibuktikan tanda tangan itu. Deskriptor yang ditandatangani kunci eksekutor yang sudah dipasangkan membuktikan bahwa kunci itu membuat klaim tersebut. Ia tidak membuktikan bahwa host tidak disusupi, dan antarmuka wajib mengatakan demikian.
Dispatch: kandidat, pengikatan, perintah, tanda terima
Agen tidak pernah menyebut eksekutor. Sebelum sebuah run dapat memakainya, Nessie menyelesaikan operasi logis menjadi kandidat ketersediaan yang buram dan berumur pendek. Respons tidak berisi id eksekutor; database hanya menyimpan digest dari handle, beserta siapa dan untuk apa ia diselesaikan. Model dan klien menerima handle, bukan mesin yang bisa dipilih.
Ketersediaan dihitung oleh satu resolver yang dipakai sama oleh API, worker, UI, dan asisten:
available(operation, human, agent, immutableRunContext) =
human may discover executor
∩ exact executor-agent-operation grant allows operation
∩ stable logical tool grant allows operation
∩ scope matches immutable run context
∩ executor is online and descriptor is approved
∩ local policy permits operationMengonsumsi kandidat membuat pengikatan di bawah kunci database yang memeriksa ulang setiap gerbang tersebut untuk kedua kalinya dan memajukan fence monoton. Dispatch memeriksanya sekali lagi. Akibatnya, hibah yang dicabut, kebijakan yang dipersempit, atau eksekutor yang dicabut di antara dua langkah akan menghentikan pekerjaan, bukan baru ketahuan kemudian. Percobaan ulang juga tidak pernah bisa mendarat di mesin yang berbeda dari mesin tempat run diikat.
Perintah itu sendiri berjalan di atas antrean job biasa Nessie dan siklus hidup tool-call, bukan antrean kedua miliknya sendiri. Daemon melakukan polling untuk pekerjaan melalui kanal kontrol yang terautentikasi; daemon tidak pernah didorong. Sebuah perintah bergerak melalui empat tanda terima dan tidak ada yang lain:
leased → accepted → started → result-acknowledgedSetiap frame mengikat id perintah, provenans run, fence pengikatan, revisi kapabilitas, masa berlaku, kunci idempotensi, serta digest dari argumen dan payload. Daemon menolak ketidakcocokan, kebijakan yang sudah usang, replay, atau hasil kedua untuk perintah yang sudah diselesaikannya. Argumen dan hasil akhir dienkripsi dengan AES-256-GCM saat disimpan. Database hanya menyimpan ciphertext yang terbatas dan digest kanonis, bukan isinya.
Jika konfirmasi hilang, Nessie tidak menganggapnya berhasil. Perintah dicatat sebagai hasil yang tidak diketahui dan run mengikuti jalur pemulihan biasa. Daemon, yang mencatat setiap perintah yang diterimanya secara lokal sebelum mulai bekerja, tidak akan mengulang efek sampingnya. Tanda terima yang terlambat masih bisa menyelesaikan ketidakpastian itu dengan jujur.
Batas kepercayaan
| Prinsipal | Boleh | Tidak boleh |
|---|---|---|
| Orang | Memasangkan eksekutor, mengelolanya saat berhak, mengonfirmasi akses dan perubahan kebijakan. | Memperluas kebijakan yang ditolak oleh mesin itu sendiri, atau bertindak tanpa hak yang berlaku saat ini. |
| Agen, termasuk asisten pribadi | Memanggil operasi yang sudah tersedia baginya; menyiapkan perubahan akses yang diusulkan untuk orang yang memintanya. | Mengelola akses, menyetujui dirinya sendiri, memilih mesin, mengubah kebijakan lokal, atau menerapkan perubahan yang disiapkannya sendiri. |
| Control plane Nessie | Menyelesaikan ketersediaan, mengikat run, menyewakan perintah, dan menyimpan fakta audit yang sudah disunting. | Menghubungi mesin, memperluas kebijakan lokal, mengakses kredensial host, atau menganggap teks terminal sebagai otorisasi atau hasil. |
| Daemon eksekutor | Menegakkan kebijakan lokal, memasangkan diri ke luar, menjalankan guest dan gateway, mengonfirmasi perintah. | Memperluas cakupannya sendiri, menerima pekerjaan yang usang atau diulang, membuka ruang kerja atau kredensial host secara langsung, atau mengirim data lokal mentah ke jejak audit. |
| Guest VM dan alat di dalamnya | Bekerja di sandbox copy-on-write, dan hanya menjangkau jaringan melalui gateway. | Menjangkau berkas host, kredensial host, jaringan atau DNS langsung, atau menerapkan perubahan ke host. |
Memasang dan memasangkan eksekutor
Pasang CLI Mac dengan Homebrew, aplikasi Mac dengan cask Homebrew, CLI Linux melalui APT atau DNF, atau eksekutor Windows melalui WinGet. Setiap tim yang sudah dipasangkan memiliki izin terpisah yang disimpan di komputer. Nessie mengendalikan akses di dalam tim; Nessie tidak dapat mengubah sumber daya lokal.
Panduan instalasi dan pemasangan berisi perintah yang tepat, alur kode delapan digit dua sisi, pengaturan lokal, startup, pembaruan, dan penghapusan.
Seberapa jauh setiap platform benar-benar sudah terbukti
Kondisi ketiga sandbox guest berbeda, dan perbedaannya penting. macOS adalah backend dengan jalur guest yang berfungsi dan sudah diuji. Backend Firecracker di Linux dan backend Hyper-V di Windows sudah diimplementasikan dan dicakup oleh pengujian sisi host: urutan peluncuran, image disk, transport kontrol dan egress, serta protokol draf. Namun belum ada guest yang pernah boot di perangkat keras sungguhan dalam integrasi berkelanjutan (CI) proyek ini, karena itu membutuhkan mesin dengan KVM atau Hyper-V, dan job yang akan membuktikannya belum pernah memiliki mesin seperti itu. Paket ruang kerja, yang tidak membutuhkan guest, sudah diuji dari ujung ke ujung di Windows terhadap loop kontrol sungguhan. Anggap operasi berbasis guest di Linux dan Windows belum terbukti sampai Anda membuktikannya sendiri di perangkat keras Anda. Layar pemasangan di Nessie menyatakan hal yang sama dengan kata-katanya sendiri.
Keamanan dan pembatasan
Satu root ruang kerja, dan jalurnya tetap di mesin
Pemasangan memilih tepat satu root ruang kerja kanonis: satu direktori, bukan sekumpulan folder, dan tidak pernah induk bersama terdekat dari folder-folder itu. Nessie diberi tahu nama dasar root, sehingga orang dapat mengenali batasnya di antarmuka. Jalur lengkapnya tetap di status mesin yang hanya bisa diakses pemilik dan tidak pernah diunggah. Root bisa diubah, tetapi hanya setelah setiap draf dan sandbox lokal dihapus, dan perubahan itu menghasilkan revisi deskriptor baru yang melewati tinjauan manusia yang sama seperti perubahan kebijakan lainnya. Root tidak pernah bisa diperluas diam-diam ke direktori induk.
Operasi berkas hanya menerima jalur relatif. Operasi itu menolak traversal dan setiap komponen tautan simbolik, memeriksa ulang bahwa root yang dikonfigurasi masih merupakan direktori biasa, dan mengembalikan hasil terstruktur yang terbatas serta tidak memuat jalur host.
Tulisan masuk ke salinan, dan hanya seseorang yang dapat menerapkannya
Agen tidak pernah menulis ke berkas Anda. file.write membuat pohon copy-on-write yang terbatas di bawah direktori state milik daemon, diikat ke run. Pembacaan dan daftar berikutnya untuk run itu melihat draf. Pekerjaan guest, termasuk sesi coding, memakai scratch copy-on-write yang sama.
Menerapkan draf ke ruang kerja asli adalah satu operasi, workspace.promote, dan itulah satu-satunya penulisan ke host dalam sistem. Operasi itu tidak punya skema yang menghadap model sama sekali: tidak ada agen, asisten, atau jalur yang diberikan pemanggil yang bisa mengubah draf menjadi penulisan ke host. Sebagai gantinya, seseorang membuka Draf yang sudah Anda tinjau, menekan Tinjau penerapan, dan mengonfirmasi dengan kata sandi saat ini. Server kemudian memeriksa ulang digest tinjauan yang diakui, digest manifes, run asal, pengguna dan agen, revisi otorisasi, hibah operasi, dan kebijakan lokal yang aktif sebelum membuat perintah. Di mesin, daemon membangun ulang manifes sendiri dan menolak digest yang sudah berubah, sehingga suntingan yang dibuat setelah tinjauan tidak bisa ikut dengan persetujuan tinjauan.
Penerapannya sendiri berbasis deskriptor dan dicatat dalam jurnal. Helper native menerima root ruang kerja dan draf sebagai deskriptor direktori yang sudah terbuka, bukan sebagai jalur. Ia memvalidasi setiap komponen dengan operasi no-follow, menolak tautan simbolik, tautan keras, berkas khusus, dan pelintasan mount, lalu menyimpan jurnal semua-atau-pulih. Dengan begitu, kegagalan di tengah jalan akan menyelesaikan manifes yang sudah divalidasi atau memulihkan kondisi semula sebelum hal lain dijalankan.
Guest tidak punya jaringan, dan jalur keluarnya dipaksakan
Saat sebuah operasi memang memerlukan guest, guest itu adalah micro-VM Linux per sesi tanpa home host, tanpa socket Docker, tanpa agen SSH, tanpa lingkungan yang diwariskan, dan tanpa mount host selain share ruang kerja. Mount runtime yang dapat dieksekusi bersifat read-only, dan mount ruang kerja yang dapat ditulis melarang eksekusi. Jadi apa pun yang berjalan berasal dari payload runtime yang sudah diverifikasi, bukan dari sesuatu yang ditulis agen. Guest menurunkan hak ke identitas tanpa privilese sebelum membuka socket apa pun, dan share yang dimiliki root akan menggagalkan boot alih-alih membiarkan beban kerja berprivilese tetap berjalan.
Yang terpenting, guest tidak punya antarmuka jaringan. Di Linux, urutan peluncuran sengaja tidak pernah mengonfigurasi satu pun, dan tidak ada perangkat TAP yang dibuat. Di Windows, adaptor jaringan virtual yang ditambahkan Hyper-V secara default dihapus saat setup. Satu-satunya rute guest keluar dari mesin adalah proxy loopback di dalamnya, yang dialirkan melalui socket virtual ke jembatan di host. Jembatan itu menyerahkan byte ke gateway milik daemon sendiri, yaitu listener socket lokal milik pemilik tanpa listener TCP dan tanpa mode forward umum. Di gateway itulah kebijakan HTTP, CONNECT, WebSocket, redirect, origin, unduhan, dan unggahan ditegakkan, dengan memakai mekanisme pinned-fetch Nessie yang sudah ada alih-alih implementasi kedua dari aturan yang sama. Tidak ada jembatan NAT dan tidak ada resolver DNS langsung. DNS alternatif, TCP mentah, QUIC, dan bypass proxy semuanya ditolak.
Daftar origin yang ditegakkan gateway itu dikonfigurasi di mesin oleh pemiliknya, dan sengaja tidak pernah diunggah. Antarmuka menyebut ketiadaan itu alih-alih berpura-pura Nessie adalah editor kebijakan origin. Untuk mengetahui apa yang bisa dijangkau eksekutor browser, tanyakan kepada orang yang memiliki mesin tersebut.
Kredensial
Tidak ada penyimpanan kredensial host yang pernah dipasang ke guest. Bukan keychain, bukan ~/.codex atau ~/.claude, bukan token CLI global, dan bukan variabel lingkungan yang membawa kunci API. Satu-satunya login yang didukung untuk sesi coding terkelola adalah berkas autentikasi privat milik pemilik. Isinya hanya dibaca oleh builder initrd yang dikendalikan pemilik, tidak pernah oleh Nessie, deskriptor, log, atau argumen perintah. Berkas itu dipindahkan sekali ke home privat di dalam guest, yang dihancurkan bersama VM. Guest itu hanya bisa menjangkau tepat satu origin.
Eksekutor browser lebih ketat lagi: setiap sesi mendapat profil browser privat yang baru dan menolak profil yang disiapkan oleh ruang kerja. Dengan begitu, ia mulai tanpa cookie, tanpa ekstensi, dan tanpa status masuk yang sudah ada.
Data lokal mentah hanya bisa sampai ke penyedia model di dalam run yang eksplisit dan terbatas. Yang Nessie simpan adalah manifes yang sudah disunting, digest argumen dan kebijakan, digest hasil, dan status terstruktur. Isi berkas, output terminal, DOM browser, kredensial, dan faktor autentikasi dilarang masuk ke rekaman database, entri audit, log, peristiwa realtime, atau laporan error.
Apa yang diberikan operator, dan cara mereka mencabutnya
Izin untuk menggunakan eksekutor bukan satu sakelar. Agen hanya bisa memanggil operasi jika ia memegang hibah untuk eksekutor tepat dan operasi tepat itu, dan kebijakan tool logis biasa mengizinkannya, dan cakupan run cocok, dan kebijakan lokal mesin itu sendiri mengizinkannya. Memberi satu eksekutor sebuah operasi karenanya tidak memberi wewenang apa pun atas eksekutor lain. Penyegaran kapabilitas juga tidak bisa memperluas apa pun, karena operasi baru datang dalam keadaan ditolak.
Akses agen dan berbagi sama-sama berlaku seketika di halaman itu sendiri, tanpa lanjutan persetujuan, permintaan kata sandi, atau langkah autentikasi ulang. Di tab Agen milik eksekutor, manajer menyalakan atau mematikan akses mesin untuk agen secara langsung. Di Berbagi, mereka memberi seseorang Dapat menggunakan atau Admin, atau memperluas penggunaan ke proyek atau ke semua orang di tim saat ini, dengan cara yang sama. Di percakapan asisten pribadi Anda sendiri, dan hanya di sana, tidak pernah di kanal bersama, pekerjaan terjadwal, atau run agen lain, asisten dapat menyiapkan perubahan akses agen atau penugasan sebagai gantinya. Itu akan memposting kartu konfirmasi di percakapan tersebut. Tidak ada yang berubah sampai Anda menekan Izinkan akses di kartu itu, dan teks obrolan tidak pernah berfungsi sebagai konfirmasi.
Tiga perubahan masih mengharuskan Anda memasukkan ulang kata sandi saat ini pada saat konfirmasi: mengaktifkan revisi deskriptor; penugasan yang disiapkan asisten yang memberikan mesin kepada seseorang, bukan kepada agen; dan kebijakan tetap yang memungkinkan rekan tim memulai perintah di mesin itu sebagai pemiliknya, yaitu kebijakan pekerjaan tiket tanpa pengawasan. Memutus atau menghapus mesin sengaja tidak meminta kata sandi, karena sakelar darurat tidak boleh lebih sulit dijangkau daripada yang dihentikannya. Penerapan draf yang sudah ditinjau selalu memintanya. Jejak audit mencatat orang yang bertindak dan keterlibatan asisten secara terpisah.
Sebuah eksekutor berpindah melalui sekumpulan keadaan yang kecil dan eksplisit:
pending_pairing → online ↔ offline
│ ↓
└──────────→ draining → revoked
↓
errorMenu Komputer di header adalah tempat manajer menyiapkan setiap perubahan siklus hidup: menjedanya, melanjutkannya setelah dijeda, memutusnya, atau menghapusnya. Menjeda membuat eksekutor tetap online tetapi berhenti menerima perintah. Memutus membatalkan sertifikat klien dan setiap handle kandidat yang masih menunggu, dan tidak bisa dibatalkan. Eksekutor yang sudah diputus harus dipasangkan ulang sebagai eksekutor baru. Hapus melakukan hal yang sama dan juga mengeluarkan eksekutor dari daftar. Berbeda dengan memutus, ia ditawarkan apa pun status eksekutor, termasuk pemasangan yang masih tertunda dan yang sudah diputus, karena itulah satu-satunya cara ia keluar dari daftar. Penuntasan, yaitu menyelesaikan pekerjaan yang sudah dimilikinya sebelum berhenti menerima lebih banyak, adalah keadaan ketiga yang nyata dalam protokol. Antarmuka dapat menampilkan komputer dalam keadaan itu, tetapi tidak ada di sini yang memulainya: hanya panggilan langsung ke API yang bisa. Setiap perubahan akses yang sudah dikonfirmasi, tinjauan deskriptor, dan transisi siklus hidup, termasuk penuntasan, juga menaikkan epoch koneksi daemon. Dengan begitu, poll kontrol berikutnya, paling lama satu detik kemudian, gagal tertutup dan menghentikan setiap guest yang aktif sebelum ia bisa tersambung kembali. Pencabutan adalah permintaan yang tidak boleh diabaikan oleh mesin.
Mengoperasikan eksekutor
Memeriksa bahwa eksekutor sehat
Jawaban Nessie sendiri adalah bukti aktif. Daemon menandatangani heartbeat, dan eksekutor yang aktivitas terautentikasi terakhirnya lebih dari enam puluh detik lalu ditandai offline secara permanen sebelum ia bisa didaftar, dipilih, atau menerima dispatch. Eksekutor yang tampil online sudah membuktikan dirinya dalam satu menit terakhir.
Tidak ada endpoint kesehatan di mesin. Daemon tidak mendengarkan port apa pun yang menghadap operator, dengan sengaja. Di macOS dan Linux, tanyakan langsung ke CLI:
nessie-executor status # every paired executor, plus linger state
nessie-executor status <executorId>
systemctl --user status nessie-executor@<executorId>Di macOS, status melaporkan launchd agent setiap tim. Perintah systemctl hanya untuk Linux. Di Windows, ikon tray adalah jawaban sekilas, menunya menyebut alasannya, dan log layanan memuat detailnya. Di kedua platform, tab Ringkasan eksekutor di Nessie menampilkan profil yang disetujui, batas data, kapan terakhir terlihat, dan usulan kebijakan lokal yang menunggu tinjauan.
Log
| Platform | Lokasi |
|---|---|
| Linux | journalctl --user -u nessie-executor@<executorId>; daemon tidak menyimpan berkas log sendiri |
| Windows | %ProgramData%\Nessie Executor\logs\service.log, yang dibuka oleh Buka folder log di tray |
Setiap penolakan yang bisa ditindaklanjuti orang tercatat di sana: runtime yang tidak ditandatangani atau sudah diubah, direktori state yang tidak bisa diamankan, dan eksekutor yang tidak mulai saat boot. Yang tidak pernah tercatat di sana adalah tantangan pemasangan, kunci, atau output proses anak. Tidak ada pengaturan tingkat log untuk dinaikkan, karena tidak ada yang lebih verbose untuk dinyalakan.
CLI Mac menulis log layanan setiap tim ke ~/Library/Logs/NessieExecutor/<executorId>.log.
Memperbarui
Perbarui CLI melalui Homebrew, APT, atau DNF, lalu mulai ulang layanan setiap tim dengan disable diikuti enable. WinGet memperbarui eksekutor Windows. Installer Nessie Desktop langsung menawarkan pembaruan dalam aplikasi yang sudah ditandatangani, sedangkan instalasi MSI dan Debian menggunakan manajer paketnya masing-masing. Pemasangan dan izin lokal tetap ada setelah pembaruan.
Menghentikan dan menghapus
Menghentikan adalah jalur yang tertib dan dikelola daemon sendiri, bukan kill paksa. Daemon menerima sinyal penghentian, menghentikan setiap sesi guest, melepas sewanya, lalu keluar. Di Linux, unit menunggu lima belas detik untuk anggaran penghentian sepuluh detik, dan sengaja tidak pernah meningkat ke kill yang tidak bisa ditangkap. Alasannya, daemon yang di-kill di tengah penghentian meninggalkan micro-VM dan overlay ruang kerja tanpa proses yang tersisa untuk membersihkannya. Penghentian yang macet karena itu terlihat di systemctl --user status dan tidak diam-diam. Meningkatkannya adalah keputusan manusia yang eksplisit.
Untuk menghapus paket Linux:
nessie-executor disable <executorId> # stops and disables the service
sudo apt remove nessie-executor
loginctl disable-linger # only if your user manager should stop running at boot tooDi Windows, msiexec /x menghentikan dan menghapus layanan, entri registrinya, dan entri startup tray. Di kedua platform, state yang sudah dipasangkan sengaja ditinggalkan: ~/.local/state/nessie-executor/ di Linux dan %ProgramData%\Nessie Executor di Windows. Pemasangan adalah kunci mesin dan revisi kebijakan yang bertanda tangan, dan menghapus program bukan permintaan untuk memusnahkannya. Saat dipasang ulang, ia ditemukan di tempat semula. Hapus direktorinya secara manual untuk melupakan pemasangan, dan cabut eksekutor di Nessie untuk mengakhirinya dari sisi lain.
Tray Windows dan companion desktop sama-sama menawarkan Lupakan pemasangan di komputer ini sebagai tindakan kelas satu. Tindakan itu menghentikan daemon lokal, menghapus kunci mesin dan pilihan folder, serta menghapus permanen salinan draf lokal setelah satu konfirmasi native. Eksekutor di sisi server dan riwayat auditnya tetap dibiarkan untuk dipertahankan atau dicabut oleh pemilik.
Kegagalan yang umum
| Gejala | Artinya |
|---|---|
| Eksekutor terpasang tetapi hanya menawarkan operasi berkas | Host melaporkan tidak ada backend sandbox yang bisa dipakai. Di Linux, periksa apakah Anda bisa membaca dan menulis /dev/kvm dan apakah Anda ada di grup kvm. Keluar dan masuk lagi setelah menambahkan diri Anda. Di Windows, edisinya tidak punya Hyper-V; itu adalah soal edisi, bukan pengaturan. |
| Kontrol eksekutor hilang sama sekali | Build tidak dapat diverifikasi berasal dari penerbit yang diharapkan. Di Linux, runtime harus dimiliki root tanpa bit tulis untuk grup atau dunia. Di Windows dan macOS, tanda tangan harus cocok dengan penerbit atau tim yang disematkan ke dalam build. Masing-masing menolak dengan kata-kata dan menyebut solusinya, alih-alih menyembunyikan kontrolnya. |
| Layanan berjalan tetapi tidak memulai daemon dan menolak setiap perintah | Sesuatu dalam instalasi diganti setelah pengemasan. Ini perilaku yang dimaksud: instalasi yang diubah menjawab dengan alasannya alih-alih menghilang, karena layanan yang berhenti akan membuat tray menyebut solusi yang salah. |
| Sebuah run berakhir dengan hasil yang tidak diketahui | Konfirmasi terminal hilang. Nessie tidak akan melaporkan hasil yang tidak diterimanya: perintah ditandai tidak diketahui, run mengambil jalur pemulihan, dan efek sampingnya tidak diulang. Tanda terima terlambat dari daemon masih bisa menyelesaikannya. |
| Operasi yang berhasil kemarin ditolak hari ini | Sebuah gerbang berubah antara pengikatan dan dispatch, dan pemeriksaan diulang di setiap langkah: hibah dicabut, revisi deskriptor menunggu tinjauan, kebijakan lokal dipersempit, cakupan tidak lagi cocok dengan run, atau terjadi pencabutan. Penolakan menyebut yang mana. |
| Agen meminta browser dan diberi tahu tidak bisa | Pekerjaan browser dan coding diluncurkan oleh seseorang dari sebuah kanal sebagai satu paket utuh pada run baru. Rute pengikatan biasa menolaknya secara sengaja, dan operasi browser tidak bisa ditambahkan ke run yang sudah melakukan hal lain. |