nessie

Uzak executor’lar

Bir ajana üzerinde çalışacağı gerçek bir bilgisayar verin: Linux, macOS veya Windows üzerinde.

Uzak executor nedir?

Nessie’deki bir ajanın bilgisayarı yoktur. Nessie’nin içindeki bilgileri okuyabilir, insanlarla konuşabilir ve ağ üzerinden bağlı araçları çağırabilir; ancak bir dizüstü bilgisayardaki bir dosyayı açamaz, bir komut çalıştıramaz ya da yalnızca birinin oturumunun ardında duran bir sayfaya bakamaz. Uzak executor, ajana üzerinde çalışabileceği bir makine verme yoludur.

Executor, kontrol ettiğiniz bir bilgisayara kurduğunuz küçük bir daemon’dur. Nessie örneğinizle dışarıya doğru eşleşir, hangi makine olduğunu yalnızca host’ta kalan bir anahtarla kanıtlar, ardından sabit ve adlandırılmış bir işlem kümesi sunar; bunun dışında hiçbir şey sunmaz. İşler tek tek imzalı komutlar olarak gelir; sonuçlar sınırlı, yapılandırılmış makbuzlar olarak geri döner. Makine, Nessie’den gelen hiçbir bağlantıyı kabul etmez.

Executor’un ne olmadığını açıkça belirtmek önemlidir; çünkü uzaktan erişim araçlarının çoğu bunlardan biridir ve executor bilerek bunların hiçbiri değildir. SSH yoktur, genel bir uzak kabuk yoktur, zaten açık olan bir terminal oturumuna bağlanma yoktur, bulut tarafında standart girdi yoktur ve genel bir yerel ağ proxy’si de yoktur. MCP sunucusu değildir; konteyner ya da bulut çalıştırma ortamı da değildir. Nessie bunları zaten sunar ve bunlar başka şeylerdir. Executor, kapalı bir işlem listesine sahip, yetenek taşıyan bir uç noktadır ve bu liste yüzeyin tamamıdır.

Bir executor kime aittir?

Her executor tam olarak bir kapsamla oluşturulur ve bu kapsam sonradan değiştirilemez. Kapsam, executor’u kimin çağırabileceğini ve kimin yönetebileceğini belirler.

KapsamKim çağırabilirErişimi kim yönetir
Özelİsteyen kişi ve çağrılan tam ajan, ikisi birden atanmış kullanıcılar olarak adlandırılmış olmalıdır. Yalnızca biri yetmez.Atanmış bir insan yöneticisi. Ajanlar özel bir executor’u yalnızca kullanabilir, asla yönetemez.
ProjeTam olarak o projeye yetkisi olan bir kişi ve yalnızca o projedeki bir çalışmadan.Bir kuruluş yöneticisi ya da proje sahibi veya admin.
KuruluşKuruluş yetkisi olan bir kişi.Bir kuruluş yöneticisi.

Özel bir executor’un her zaman en az bir aktif insan yöneticisi olmalıdır. Son yöneticiyi doğrudan kaldırma işlemi başarısız olur; bir ayrılma işlemi hiç yönetici bırakmayacaksa executor yeni iş kabul etmeyi durdurur, elindeki işi bitirir ve kendini iptal eder. Bir kuruluş sahibinin, yönetmediği bir executor’u sonlandırabilmesi için yalnızca iptal yetkisi içeren bir acil durum yolu vardır; bu yol executor’un özel listesini, oturumlarını ya da içeriğini göstermez. Özel erişim asla sessizce başka birine devredilmez.

Bir ajan onunla gerçekte ne yapabilir?

İşlem sözcük dağarcığı kodda sabittir, dağıtım bazında yapılandırılmaz. Bu dağarcık ikiye ayrılır ve neyi kurmanız gerektiğini bu ayrım belirler: bazı işlemleri daemon, kendi geçici dizininden, hiçbir sanal makine olmadan sunar; geri kalanı ise host makinede oturum başına bir konuk VM gerektirir.

İşlemNe yaparKonuk VM
file.list, file.readEşleştirme sırasında seçilen tek çalışma alanı kökünün altındaki dosyaları listeler ve okur.Hayır
file.writeÇalışma alanının copy-on-write taslağına yazar. Gerçek kökü yazma için hiçbir zaman açmaz.Hayır
workspace.reviewTaslağın neyi değiştirdiğini bildirir: göreli yollardan en fazla 100 tanesini, türü ve bayt sayısıyla birlikte, ayrıca bir manifest özeti. Dosya içeriği taşımaz.Hayır
sandbox.stopBu çalışmaya ait oturumu sonlandırır.Hayır
command.runBir konuk ortamda, hiçbir ağ çıkışı olmayan, kabuksuz bir argüman vektörü olarak tek bir komut çalıştırır. Bu yolda hiçbir yerde kabuk dizgisi yoktur.Evet
browser.open, browser.observe, browser.actMakinede yapılandırılmış bir origin listesine karşı konuk ortamın içinde bir tarayıcıyı sürer. Gözlem, sınırlı bir erişilebilirlik ağacı ve isteğe bağlı küçültülmüş bir görüntü döndürür. Eylemler gezinme, tıklama, yazma, tuşa basma ve kaydırmadır; ajanın az önce gözlemlediği bir düğüme karşı yapılır. Hiçbir zaman bir seçici, koordinat ya da betik değildir.Evet
coding.launch, coding.observeKonuk ortamda yönetilen bir Codex oturumu başlatır ve tipli yaşam döngüsü durumunu geri okur. Terminale bağlanma ya da komut kanalı yoktur: ajan oturumun çalışıp çalışmadığını öğrenir, ekranında ne olduğunu değil.Evet
workspace.promoteGözden geçirilmiş bir taslağı gerçek çalışma alanına uygular. Bu, host’a yazan tek işlemdir ve modellere bilerek hiç sunulmaz.Hayır

Konuk gerektirmeyen işlemler çalışma alanı paketini oluşturur. Konuk başlatamayan bir host bozuk bir executor değildir: normal şekilde eşleşir, sandbox arka ucunu none olarak bildirir ve yalnızca çalışma alanı paketini sunar. Hyper-V’si olmayan bir Windows sürümü ya da kullanıcısı /dev/kvm dosyasını kullanamayan bir Linux makinesi bu duruma düşer; arayüz bunu anlaşılmaz bir hatayla başarısız olmak yerine açıkça adlandırır.

Tarayıcı çalışması hiçbir zaman bir ajanın kendi inisiyatifiyle başlattığı bir şey değildir. Tek işlemlik olağan bağlama yolu browser.open ve browser.observe işlemlerini doğrudan reddeder; bir tarayıcı çalışması, bir kişi tarafından bir kanaldan, yeni bir çalışmada dört işlemlik tek bir paket olarak başlatılır ve sonradan ona başka bağlama eklenemez. Yönetilen kodlama oturumları da aynı şekilde çalışır.

Kodda bulunan ama bilerek kullanılamayan iki grup daha vardır. Zaten oturum açmış olduğunuz bir Chrome sekmesini sürmeye yönelik işlemlerin eksiksiz bir yerel uygulaması ve bir native-messaging eklentisi vardır; ancak kontrol düzlemi, ilgili konuşmanın özel olduğunu ve kimin neyi açıkladığını sunucunun kanıtlayabileceği noktaya kadar bunları ilan etmez. Temel bilinçli olarak etkisizdir ve eklenti hiçbir yükleyiciyle gönderilmez. Ayrıca attach, prompt, interrupt ve close gibi bazı kodlama işlemleri şemada adlandırılmış olsa da bir uygulamaları yoktur, dolayısıyla verilemezler.

Nasıl çalışır

Bağlantı her zaman dışa doğrudur

Daemon, yalnızca Nessie API’nize giden HTTPS ve WSS bağlantıları kurar, başka hiçbir yere bağlanmaz. Nessie hiçbir zaman bir dizüstü bilgisayara bağlanmaz, adresini tutmaz ve hiçbir katalog uç noktasını makine taşıyıcısı olarak kabul etmez. Bu yüzden bir executor ev ağından, NAT arkasından, kurumsal VPN’de, port yönlendirmesi ve gelen güvenlik duvarı kuralı olmadan çalışır. Daemon’u durdurmak ise tam ve anında bağlantıyı kesmek anlamına gelir.

API origin’i HTTPS olmalıdır. Tek istisna, Nessie’yi kendi makinesinde çalıştıran kişiler için olan loopback adresidir; bu adres kendi ortam değişkeni arkasında yer alır. Hiçbir olağan bayrak bir üretim origin’ini düz HTTP’ye çeviremez.

Eşleştirme bir makineyi kanıtlar, bir kişi onaylar

Eşleştirme iki taraflı bir kanıttır. Yetkili bir kişi executor’u kapsamıyla birlikte Nessie’de oluşturur ve Nessie bir kayıt verir: 256 bitlik rastgele bir challenge. Nessie bunun yalnızca bir SHA-256 doğrulayıcısını saklar; challenge on dakika geçerlidir ve yalnızca bir kez kullanılabilir.

Makinede daemon bir Ed25519 anahtar çifti üretir, bunu yalnızca sahibinin erişebildiği, işletim sistemince korunan bir depolamada saklar ve herhangi bir ağ çağrısı yapmadan önce tam imzalı isteği diske yazar. Böylece kaybolan bir yanıt, sessizce iki kez eşleşmek yerine aynı hazırlanmış anahtarla yeniden denenebilir. Ardından kayıt kimliğini, challenge’ı, ortak anahtarını ve bir kanıt imzasını gönderir. Nessie ortak anahtarı ve parmak izini saklar; özel anahtarı hiçbir zaman saklamaz.

Nessie bu parmak izini bir kişiye gösterir ve kişi onaylar. Bu onay ve ardından gelen sahiplik kanıtı olana kadar executor çevrimdışı kalır. Eşleştirme hiçbir zaman sohbet metninden ya da bir terminal dökümünden tamamlanamaz; web ya da masaüstü arayüzünde kasıtlı bir insan eylemi gerektirir.

Anahtarını kaybeden bir makine kendi executor kaydını geri alamaz. Kayıt iptal edilir ve yeni bir executor olarak yeniden kaydolur. Anahtar rotasyonu ise tek bir işlemdir ve hem eski hem yeni anahtarla imzalanır.

Tanımlayıcı, makinenin kendisi hakkındaki imzalı beyanıdır

Eşleşmiş bir daemon bir tanımlayıcı yayımlar: yalnızca yapısal gerçekleri içeren, imzalı ve sürekli artan bir revizyon numarasıyla güncellenen bir beyan. Hangi işlem şemalarını desteklediğini, kaynak ve ağ sınırlarını, platformunu ve yerel politikasının bir özetini içerir. Ana makine yollarını taşımaz ve bulutta hiçbir yetki oluşturmaz.

Yeni bir revizyon geldiğinde hiçbir zaman hemen etkinleşmez. Beklemeye alınır ve yetkili bir kişinin bunu görüp onaylaması gerekir; bu olana kadar kullanılabilir olanı etkilemez. Böylece bir yetenek yenilemesinin sessizce yeni güç vermesi önlenir: yeni ilan edilen bir işlem reddedilmiş olarak başlar.

İmzanın neyi kanıtladığı konusunda net olun. Eşleşmiş bir executor anahtarının imzaladığı bir tanımlayıcı, o anahtarın iddiayı yaptığını kanıtlar. Host’un güvenli olduğunu kanıtlamaz; arayüzün bunu açıkça söylemesi gerekir.

Yönlendirme: aday, bağlama, komut, makbuz

Bir ajan hiçbir zaman bir executor adlandırmaz. Bir çalışmanın bunu kullanabilmesinden önce Nessie, mantıksal işlemi opak ve kısa ömürlü bir kullanılabilirlik adayına çözümler. Yanıt bir executor kimliği içermez; veritabanı yalnızca tutamacın bir özetini, kimin ve neyin için çözümlendiğiyle birlikte saklar. Modeller ve istemciler seçilebilir bir makine değil, bir tutamaç alır.

Kullanılabilirlik tek bir çözümleyicidir ve API, worker, arayüz ve asistan tarafından aynı şekilde kullanılır:

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 operation

Adayın tüketilmesi, bu kapıların her birini ikinci kez kontrol eden ve monoton bir fence’i ilerleten bir veritabanı kilidi altında bir bağlama oluşturur. Yönlendirme bunları yeniden kontrol eder. Sonuç şudur: iki adım arasında geri alınan bir izin, daraltılan bir politika ya da iptal edilen bir executor işi durdurur; sonradan fark edilmez. Bir yeniden deneme de çalışmanın bağlı olduğu makineden farklı bir makineye asla düşemez.

Komut, kendi ikinci kuyruğunu oluşturmak yerine Nessie’nin olağan iş kuyruğu ve araç çağrısı yaşam döngüsü üzerinden ilerler. Daemon, kimlik doğrulamalı kontrol kanalı üzerinden iş için yoklar; ona hiçbir zaman itilmez. Bir komut yalnızca bu dört makbuzdan geçer, başka hiçbirinden geçmez:

leased → accepted → started → result-acknowledged

Her çerçeve komut kimliğini, çalışma kaynağını, bağlama fence’ini, yetenek revizyonunu, bir son kullanma tarihini, bir idempotency anahtarını ve hem argümanların hem yükün özetlerini bağlar. Daemon bir uyumsuzluğu, bayat bir politikayı, bir tekrarı ya da zaten tamamlanmış bir komut için ikinci bir sonucu reddeder. Argümanlar ve nihai sonuçlar dinlenmede AES-256-GCM ile şifrelenir; veritabanı içerik yerine sınırlı şifreli metin ve kanonik özetler saklar.

Bir teslim onayı kaybolursa Nessie başarıyı varsaymaz. Komut bilinmeyen bir sonuç olarak kaydedilir ve çalışma olağan kurtarma yolunu izler. Daemon, işe başlamadan önce teslim edilen her komutu yerel olarak günlüğe kaydettiği için yan etkiyi tekrarlamaz. Geç gelen bir makbuz yine de belirsizliği dürüstçe çözebilir.

Güven sınırı

TarafYapabilirYapamaz
KişiBir executor eşleştirir, yetkisi olduğunda yönetir, erişim ve politika değişikliklerini onaylar.Makinenin kendisinin reddettiği bir politikayı genişletemez veya güncel yetkisi olmadan hareket edemez.
Kişisel asistan dahil ajanZaten kendisine verilmiş bir işlemi çağırabilir; isteyen kişi için hazırlanmış bir erişim değişikliğini önerebilir.Erişimi yönetemez, kendini onaylayamaz, bir makine seçemez, yerel politikayı değiştiremez ya da kendi hazırladığı bir değişikliği uygulayamaz.
Nessie kontrol düzlemiKullanılabilirliği çözer, bir çalışmayı bağlar, komutları dağıtır ve gizlenmiş denetim kayıtlarını tutar.Makineye bağlanamaz, yerel politikayı genişletemez, host kimlik bilgilerine ulaşamaz ya da terminal metnini bir yetkilendirme veya sonuç olarak kabul edemez.
Executor daemon’uYerel politikayı uygular, dışarıya doğru eşleşir, konuk ortamı ve ağ geçidini çalıştırır, komutları onaylar.Kendi kapsamını genişletemez, bayat ya da tekrarlanmış işi kabul edemez, host çalışma alanını ya da kimlik bilgilerini doğrudan açamaz ya da ham yerel veriyi denetim kaydına gönderemez.
Konuk VM ve içindeki araçlarCopy-on-write bir sandbox’ta çalışır ve ağa yalnızca ağ geçidi üzerinden erişir.Host dosyalarına, host kimlik bilgilerine, doğrudan ağa ya da DNS’e ulaşamaz ve bir host değişikliğini uygulayamaz.

Bir executor’u kurmak ve eşleştirmek

Mac CLI aracını Homebrew ile, Mac uygulamalarını Homebrew cask’leriyle, Linux CLI aracını APT ya da DNF ile, Windows executor’unu ise WinGet ile kurun. Eşleşmiş her ekibin izinleri bilgisayarda ayrı ayrı saklanır. Nessie ekip içindeki erişimi denetler; yerel kaynakları değiştiremez.

Kurulum ve eşleştirme kılavuzu; tam komutları, iki taraflı sekiz haneli kod akışını, yerel ayarları, başlatmayı, güncellemeleri ve kaldırmayı açıklar.

Her platformda gerçekten neyin kanıtlandığı

Üç konuk sandbox’ının durumu farklıdır ve bu fark önemlidir. macOS, çalışan ve test edilmiş bir konuk yoluna sahip arka uçtur. Linux’taki Firecracker arka ucu ve Windows’taki Hyper-V arka ucu uygulanmıştır ve ana makine tarafı testleriyle kapsanmıştır: başlatma dizisi, disk imajları, kontrol ve çıkış taşıyıcıları, taslak protokolü. Ancak bu projenin sürekli entegrasyonunda henüz hiçbir konuk gerçek donanımda açılmadı, çünkü bunu kanıtlayacak işlerin KVM ya da Hyper-V’li bir makinesi hiç olmadı. Konuk gerektirmeyen çalışma alanı paketi ise Windows üzerinde gerçek bir kontrol döngüsüne karşı uçtan uca test edilmiştir. Linux ve Windows’taki konuk destekli işlemleri, kendi donanımınızda kanıtlayana kadar kanıtlanmamış sayın. Nessie’deki eşleştirme ekranı aynı şeyi kendi sözcükleriyle söyler.

Güvenlik ve sınırlama

Tek bir çalışma alanı kökü ve yolu makinede kalır

Eşleştirme tam olarak bir kanonik çalışma alanı kökü seçer: bir dizin, bir klasörler kümesi değil ve asla en yakın ortak üst dizin değil. Nessie’ye kökün temel adı bildirilir, böylece kişi arayüzde sınırı tanıyabilir. Tam yol ise yalnızca sahibinin erişebildiği makine durumunda kalır ve hiçbir zaman yüklenmez. Kökü değiştirmek mümkündür, ancak yalnızca her yerel taslak ve sandbox kaldırıldıktan sonra yapılabilir; bu da herhangi bir politika değişikliğiyle aynı insan incelemesinden geçen yeni bir tanımlayıcı revizyonu üretir. Sessizce bir üst dizine genişleyemez.

Dosya işlemleri yalnızca göreli yolları kabul eder. Yol geçişlerini ve her sembolik bağlantı bileşenini reddeder, yapılandırılmış kökün hâlâ sıradan bir dizin olduğunu yeniden kontrol eder ve host yolu içermeyen sınırlı, yapılandırılmış sonuçlar döndürür.

Yazmalar bir kopyaya gider ve yalnızca bir kişi uygular

Bir ajan dosyalarınıza asla yazmaz. file.write, daemon’un kendi durum dizini altında, çalışmaya bağlı sınırlı bir copy-on-write ağacı oluşturur; o çalışma için sonraki okumalar ve listelemeler taslağı görür. Konuk içindeki çalışma, kodlama oturumları dahil, aynı copy-on-write geçici alanını kullanır.

Taslağın gerçek çalışma alanına uygulanması tek bir işlemdir (workspace.promote) ve sistemdeki tek host yazımıdır. Modellere sunulan hiçbir şeması yoktur: hiçbir ajan, asistan ya da çağıran tarafından verilen bir yol, taslağı host yazımına dönüştüremez. Bunun yerine bir kişi Gözden geçirdiğiniz taslaklar bölümünü açar, Uygulamayı gözden geçir düğmesine basar ve güncel şifresiyle onaylar. Sunucu, komutu oluşturmadan önce onaylanmış inceleme özetini, manifest özetini, kaynak çalışmayı, kullanıcıyı ve ajanı, yetkilendirme revizyonunu, işlem iznini ve etkin yerel politikayı yeniden kontrol eder. Makinede daemon manifesti kendisi yeniden oluşturur ve değişmiş bir özeti reddeder; böylece inceleme sonrasında yapılan bir düzenleme, incelemenin onayına eklenemez.

Uygulamanın kendisi tanımlayıcı tabanlıdır ve günlüğe kaydedilir. Yerel yardımcı, çalışma alanı kökünü ve taslağı yol olarak değil, zaten açık dizin tanımlayıcıları olarak alır; her bileşeni bağlantıyı takip etmeyen işlemlerle doğrular, sembolik bağlantıları, sabit bağlantıları, özel dosyaları ve bağlama noktası geçişlerini reddeder. Hep-ya-da-hiç nitelikte bir günlük tutar: ya doğrulanmış manifesti tamamlar ya da başka hiçbir şey çalışmadan orijinali geri yükler.

Konuğun ağı yoktur ve çıkış zorunlu olarak yönlendirilir

Bir işlem konuk gerektirdiğinde, bu oturum başına çalışan bir Linux mikro VM’dir: host ana dizini yok, Docker soketi yok, SSH agent yok, devralınmış ortam yok ve çalışma alanı paylaşımı dışında host bağlaması yok. Çalıştırılabilir çalışma zamanı bağlaması salt okunurdur; yazılabilir çalışma alanı bağlaması yürütmeyi yasaklar. Böylece çalışan her şey bir ajanın yazdığı bir şeyden değil, doğrulanmış çalışma zamanı yükünden gelir. Konuk herhangi bir soket açmadan önce ayrıcalıksız bir kimliğe geçer ve root’a ait bir paylaşım, ayrıcalıklı bir iş yükünü çalışır durumda bırakmak yerine açılışı başarısız kılar.

En önemlisi, konuğun ağ arayüzü yoktur. Linux’ta başlatma dizisi bilerek hiçbir ağ yapılandırmaz ve TAP aygıtı oluşturulmaz; Windows’ta Hyper-V’nin varsayılan olarak eklediği sanal ağ bağdaştırıcısı kurulum sırasında kaldırılır. Konuğun makineden çıkabildiği tek yol, içindeki bir loopback proxy’dir. Bu proxy, host’taki bir köprüye sanal soket üzerinden tünellenir ve köprü baytları daemon’un kendi ağ geçidine iletir. Bu ağ geçidi yalnızca sahibinin erişebildiği yerel bir soket dinleyicisidir; TCP dinleyicisi ve genel yönlendirme modu yoktur. Ağ geçidi HTTP, CONNECT, WebSocket, yönlendirme, origin, indirme ve yükleme politikasını uygular; aynı kuralların ikinci bir uygulamasını yazmak yerine Nessie’nin mevcut sabitlenmiş getirme (pinned-fetch) mekanizmasını kullanır. NAT köprüsü ve doğrudan DNS çözümleyicisi yoktur: alternatif DNS, ham TCP, QUIC ve proxy atlatma hepsi reddedilir.

Ağ geçidinin uyguladığı origin listesi makinede sahibi tarafından yapılandırılır ve bilerek hiçbir zaman yüklenmez. Arayüz bu eksikliği, Nessie’nin bir origin politikası düzenleyicisiymiş gibi davranmak yerine açıkça belirtir: bir tarayıcı executor’un neye erişebileceğini bilmek için makinenin sahibine sorun.

Kimlik bilgileri

Hiçbir host kimlik bilgisi deposu bir konuğa bağlanmaz. Anahtarlık da, ~/.codex ya da ~/.claude de, genel CLI belirteci de, API anahtarı taşıyan bir ortam değişkeni de bağlanmaz. Yönetilen bir kodlama oturumu için desteklenen tek giriş, içeriği yalnızca sahibin denetlediği initrd oluşturucu tarafından okunan, sahibine özel bir kimlik doğrulama dosyasıdır. Bu dosya hiçbir zaman Nessie, tanımlayıcı, bir günlük ya da komut argümanı tarafından okunmaz; konuk içindeki özel bir ana dizine bir kez taşınır ve bu dizin VM ile birlikte yok edilir. Bu konuk yalnızca tek bir origin’e ulaşabilir.

Tarayıcı executor’u daha katıdır: her oturum yeni ve özel bir tarayıcı profili alır ve çalışma alanı tarafından hazırlanmış bir profili reddeder. Bu yüzden hiçbir çerez, eklenti ya da ortamda açık bir oturum olmadan başlar.

Ham yerel veriler yalnızca açık ve sınırlı bir çalışma içinde bir model sağlayıcısına ulaşabilir. Nessie’nin kalıcı olarak sakladığı şeyler gizlenmiş manifestler, argüman ve politika özetleri, sonuç özetleri ve yapılandırılmış durumdur. Dosya içerikleri, terminal çıktısı, tarayıcı DOM’u, kimlik bilgileri ve kimlik doğrulama faktörleri veritabanı kayıtlarından, denetim girişlerinden, günlüklerden, gerçek zamanlı olaylardan ve hata raporlarından yasaktır.

Bir operatörün ne verdiği ve bunu nasıl geri aldığı

Bir executor’u kullanma izni tek bir anahtar değildir. Bir ajan bir işlemi yalnızca o tam executor için ve o tam işlem için bir izne sahipse, ve olağan mantıksal araç politikası buna izin veriyorsa, ve çalışmanın kapsamı eşleşiyorsa, ve makinenin kendi yerel politikası izin veriyorsa çağırabilir. Bir executor’a bir işlem vermek bu yüzden başka bir executor’da hiçbir şeyi yetkilendirmez. Yeni işlemler reddedilmiş olarak geldiği için bir yetenek yenilemesi de hiçbir şeyi genişletemez.

Ajan erişimi ve paylaşım, onay devamı, şifre istemi ya da yeniden kimlik doğrulama adımı olmadan doğrudan sayfanın üzerinde hemen etkili olur. Executor’un Ajanlar sekmesinde bir yönetici, bir ajanın makineye erişimini doğrudan açıp kapatır. Paylaşım sekmesinde ise bir kişiye Kullanabilir ya da Admin yetkisi verir, ya da kullanımı bir projeye veya mevcut ekipteki herkese aynı şekilde genişletir. Yalnızca kendi asistan konuşmanızda (asla paylaşılan bir kanalda, zamanlanmış bir işte ya da başka bir ajanın çalışmasında değil) asistan bunun yerine bir ajan erişimi ya da atama değişikliği hazırlayabilir. Bu, o konuşmada bir onay kartı yayımlar ve siz o kartta Erişime izin ver düğmesine basana kadar hiçbir şey değişmez. Sohbet metni asla onay sayılmaz.

Üç değişiklik, onay anında güncel şifrenizi yeniden girmenizi hâlâ gerektirir: bir tanımlayıcı revizyonunu etkinleştirmek; asistanın hazırladığı ve makineyi bir ajan yerine bir kişiye veren bir atama; ve meslektaşların makineyi sahibi adına komut başlatmasına izin veren kalıcı bir politika, yani gözetimsiz ticket-work politikası. Bir makineyi bağlantıdan kesmek ya da silmek bilerek ikisini de istemez, çünkü bir acil durum kapatma düğmesi, durduracağı şeyden daha zor erişilir olmamalıdır. Gözden geçirilmiş bir taslağın uygulanması her zaman şifre ister. Denetim izi, eylemi yapan kişiyi ve asistanın katılımını ayrı ayrı kaydeder.

Bir executor küçük ve açık bir durumlar kümesinde ilerler:

pending_pairing → online ↔ offline
        │             ↓
        └──────────→ draining → revoked
                         ↓
                       error

Sayfa başlığındaki Bilgisayar menüsü, bir yöneticinin her yaşam döngüsü değişikliğini hazırladığı yerdir: duraklatmak, duraklatılmışsa devam ettirmek, bağlantısını kesmek ya da silmek. Duraklatmak executor’u çevrimiçi bırakır ama komut kabul etmesini durdurur. Bağlantıyı kesmek istemci sertifikalarını ve bekleyen bütün aday tutamaçlarını geçersiz kılar ve geri alınamaz; bağlantısı kesilmiş bir executor yeni bir executor olarak yeniden eşleştirilir. Silme aynısını yapar ve executor’u listeden de kaldırır. Bağlantıyı kesmenin aksine, executor’un durumu ne olursa olsun sunulur (eşleştirmesi bekleyenler ve zaten bağlantısı kesilmiş olanlar dahil), çünkü listeden çıkmanın tek yoludur. Boşaltma, yani zaten sahip olduğu işi bitirip daha fazla kabul etmeden durmak, protokolde gerçek bir üçüncü durumdur ve arayüz bir bilgisayarı bu durumda gösterebilir. Ancak burada hiçbir şey bunu başlatmaz; yalnızca doğrudan bir API çağrısı başlatır. Onaylanan her erişim değişikliği, tanımlayıcı incelemesi ve yaşam döngüsü geçişi (boşaltma dahil) daemon’un bağlantı dönemini de ilerletir. Böylece bir sonraki kontrol yoklaması, en fazla bir saniye sonra, başarısız olarak kapanır ve yeniden bağlanmadan önce her canlı konuğu durdurur. İptal, makinenin yok sayabileceği bir istek değildir.

Bir executor’u işletmek

Sağlıklı olduğunu kontrol etmek

Nessie’nin kendi yanıtı canlılıktır. Daemon bir heartbeat imzalar; son kimlik doğrulamalı etkinliği altmış saniyeden eski olan bir executor, listelenmeden, seçilmeden ya da kendisine iş yönlendirilmeden önce kalıcı olarak çevrimdışı işaretlenir. Çevrimiçi görünen bir executor son bir dakika içinde kendini kanıtlamıştır.

Makinede bir sağlık uç noktası yoktur; daemon tasarım gereği hiçbir operatöre dönük porta dinlemez. macOS ve Linux’ta doğrudan CLI aracına sorun:

nessie-executor status                # every paired executor, plus linger state
nessie-executor status <executorId>
systemctl --user status nessie-executor@<executorId>

macOS’ta durum komutu her ekibin launchd ajanını bildirir. systemctl komutu yalnızca Linux’a özgüdür. Windows’ta tepsi simgesi bir bakışta yanıt verir, menüsü nedeni adlandırır ve hizmet günlüğü ayrıntıyı taşır. Her iki platformda da Nessie’deki executor’un Genel Bakış sekmesi onaylı profillerini, veri sınırını, en son ne zaman görüldüğünü ve incelemeyi bekleyen yerel politika önerisini gösterir.

Günlükler

PlatformKonum
Linuxjournalctl --user -u nessie-executor@<executorId>; daemon kendi günlük dosyasını tutmaz
Windows%ProgramData%\Nessie Executor\logs\service.log, tepsinin Günlük klasörünü aç seçeneğiyle açılır

Bir kişinin müdahale edebileceği her reddetme buraya düşer: imzasız ya da kurcalanmış bir çalışma zamanı, güvenli hale getirilemeyen bir durum dizini, başlangıçta açılamayan bir executor. Buraya asla bir eşleştirme challenge’ı, bir anahtar ya da bir alt sürecin çıktısı düşmez. Artırılacak bir ayrıntı düzeyi ayarı yoktur, çünkü açılacak daha ayrıntılı bir şey yoktur.

Mac CLI her ekibin hizmet günlüğünü ~/Library/Logs/NessieExecutor/<executorId>.log konumuna yazar.

Güncelleme

CLI aracını Homebrew, APT ya da DNF ile güncelleyin, ardından her ekibin hizmetini disable ve ardından enable ile yeniden başlatın. WinGet, Windows executor’u günceller. Doğrudan Nessie Desktop yükleyicileri uygulama içi imzalı güncellemeler sunar; MSI ve Debian kurulumları ise paket yöneticilerini kullanır. Eşleştirmeler ve yerel izinler güncellemelerde korunur.

Durdurma ve kaldırma

Durdurma, daemon’un sahip olduğu zarif bir yoldur, öldürme değildir. Daemon bir sonlandırma sinyali alır, her konuk oturumunu durdurur, lease’ini bırakır ve çıkar. Linux’ta birim, on saniyelik bir temizleme bütçesi için on beş saniye bekler ve kesinlikle yakalanamayan bir öldürme sinyaline asla başvurmaz. Çünkü temizleme sırasında öldürülen bir daemon, hiçbir süreç onları temizleyemeyeceği için bir mikro VM’i ve bir çalışma alanı üst katmanını yetim bırakır. Takılan bir durdurma bu yüzden sessiz kalmaz; systemctl --user status içinde görünür ve buna başvurmak açık bir insan kararıdır.

Linux paketini kaldırmak için:

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 too

Windows’ta msiexec /x hizmeti, onun kayıt defteri girdilerini ve tepsinin başlangıç girdisini durdurur ve kaldırır. Her iki platformda da eşleştirilmiş durum bilerek geride bırakılır: Linux’ta ~/.local/state/nessie-executor/, Windows’ta %ProgramData%\Nessie Executor. Bir eşleştirme bir makine anahtarı ve imzalı bir politika revizyonudur. Bir programı kaldırmak onları yok etme isteği değildir ve yeniden kurulum onları bulunduğu yerde bulur. Bir eşleştirmeyi unutmak için dizini elle silin, diğer taraftan bitirmek için de Nessie’de executor’u iptal edin.

Windows tepsisi ve masaüstü yardımcı uygulaması, ikisi de birinci sınıf bir eylem olarak Bu bilgisayardaki eşleştirmeyi unut seçeneğini sunar: yerel daemon’u durdurur, makine anahtarını ve klasör seçimini kaldırır ve tek bir yerel onayla yerel taslak kopyalarını kalıcı olarak siler. Sunucu tarafındaki executor’u ve denetim geçmişini ise bir sahibin tutması ya da iptal etmesi için bırakır.

Sık görülen hatalar

BelirtiAnlamı
Executor eşleşir ama yalnızca dosya işlemleri sunarHost kullanılabilir bir sandbox arka ucu bildirmedi. Linux’ta /dev/kvm dosyasını okuyup yazıp yazamadığınıza ve kvm grubunda olup olmadığınıza bakın; kendinizi gruba eklediyseniz çıkış yapıp yeniden girin. Windows’ta sürümde Hyper-V yoktur; bu bir ayar değil, bir sürüm farkıdır.
Executor denetimleri tamamen yokDerleme, beklenen yayımcıdan doğrulanabilir biçimde gelmiyor. Linux’ta çalışma zamanı kök sahipli olmalı ve grup ya da herkes yazma bitine sahip olmamalıdır; Windows ve macOS’ta imza, derlemeye sabitlenmiş yayımcı ya da ekiple eşleşmelidir. Bunların her biri nedenini sözcüklerle açıklar ve denetimleri gizlemek yerine çözümü adlandırır.
Hizmet çalışıyor ama hiçbir daemon başlatmıyor ve her komutu reddediyorPaketlemeden sonra kurulumdaki bir şey değiştirildi. Bu amaçlanan davranıştır: kurcalanmış bir kurulum nedeni yanıtlar, çünkü durmuş bir hizmet tepsinin yanlış bir çözümü adlandırmasına yol açardı.
Bir çalışma bilinmeyen bir sonuçla bitiyorSon bir teslim onayı kayboldu. Nessie aldığı sonucu bildirmez: komut bilinmeyen olarak işaretlenir, çalışma kurtarma yoluna girer ve yan etki tekrarlanmaz. Daemon’dan geç gelen bir makbuz yine de bunu çözebilir.
Dün çalışan bir işlem bugün reddediliyorBağlama ile yönlendirme arasında bir kapı değişti ve kontroller her adımda tekrarlanır: geri alınmış bir izin, incelemeyi bekleyen bir tanımlayıcı revizyonu, daraltılmış yerel bir politika, çalışmayla artık eşleşmeyen bir kapsam ya da bir iptal. Ret, hangisi olduğunu adlandırır.
Bir ajan tarayıcı ister ve yapamayacağı söylenirTarayıcı ve kodlama çalışmaları, bir kişi tarafından bir kanaldan, yeni bir çalışmada tek bir paket olarak başlatılır. Olağan bağlama yolu bunları tasarım gereği reddeder ve zaten başka bir iş yapan bir çalışmaya hiçbir tarayıcı işlemi eklenemez.