Ana içeriğe geç

Kodlama Ajanları Bir Uyarı Etiketine Değil, Sandbox Sözleşmesine İhtiyaç Duyar

Otonom bir kodlama ajanının etki alanı, sandbox ve ağ çıkış kurallarıyla tanımlanır. Ajanı tanımlamadan önce bu sözleşmeyi belirtin.

Bir fabrika hücresinin içinde endüstriyel robotik kol, loş ışıkta eklemler ve kablolar görünür

Uyarı etiketi bir kontrol değildir

Bir kodlama ajanı devreye alan çoğu ekip aynı yapıtla başlar: modele dosyaları silmemesini, sırları dışarı sızdırmamasını, güvenilmeyen paketler kurmamasını söyleyen bir sistem prompt'u. Bu bir uyarı etiketidir. Okuduğu herhangi bir içerikten — bir README, bir bağımlılığın postinstall betiği, bir stack trace, getirilen bir issue başlığı — etkilenebilecek stokastik bir sisteme doğal dille ifade edilmiş bir ricadır. Bu talimat, bağlam penceresindeki diğer her token'la rekabet eder.

Yürütme sandbox'ı rekabet etmez. Çekirdek, container runtime ve ağ katmanı tarafından uygulanan bir sınırdır. Ajan /workspace dışına yazamıyorsa, hiçbir prompt injection onu /workspace dışına yazdıramaz. Çıkış varsayılan olarak reddediliyorsa, üretilen bir curl çağrısı modelin takdirinde değil, socket seviyesinde başarısız olur.

Bu yüzden sandbox sözleşmesi ajan tanımlanmadan önce yazılmalıdır. Ajanın yetenekleri, araç yüzeyi, otonomi seviyesi — bunların hepsi ortamın izin verdiklerinin altındadır. Ajanı önce tanımlamak, sandbox'ın sonradan uyum sağlamak zorunda kaldığı bir tasarım üretir; bu, kısıtlamanın yanlış yönüdür.

Kodlama ajanları gerçekte nerede zarar verir

Kodlama ajanlarından kaynaklanan zarar nadiren dramatik olur. Genellikle üç sıradan kategoriden biridir ve her biri model özelliği değil, ortam özelliğidir.

Çalışma ağacının ötesine uzanan dosya sistemi erişimi

Bir modülü yeniden düzenlemesi istenen ajan, bitişik yapılandırmayı "temizlemeye", bir lockfile'ı yeniden yazmaya veya bir import'u çözmek için üst dizine geçmeye karar verebilir. Container geliştiricinin ana dizinini veya ana makinenin kaynak ağacını bağlarsa, yazılabilir küme fiilen sınırsız olur. Hata, modelin kötü seçim yapması değil; ortamın bu seçeneği sunmasıdır.

Geliştirici ortamından devralınan kimlik bilgisi erişimi

Geliştirici kabuğundan başlatılan ajanlar ortam değişkenlerini, bulut kimlik bilgisi dosyalarını, SSH agent socket'lerini ve önbelleğe alınmış token'ları devralır. Ortamdaki uzun ömürlü bir bulut anahtarı, o anahtarın yapabildiği her şey için kalıcı bir yetkidir. Ajanın onu kötüye kullanmak için kötü niyetli olması gerekmez; yalnızca ortamı okuyup bir yere gönderen bir komut çalıştırması yeterlidir ki bu, derleme araçları için normal bir şeydir.

Bu üç kategori model hatası değildir. Yapılandırma hatalarıdır ve tek bir token üretilmeden önce düzeltilebilirler.

Sözleşmeyi belirtmek

Server rack closeup

Sandbox sözleşmesinin üç maddesi vardır: neyin yazılabileceği, neyin okunabileceği ve neyin dışarı çıkabileceği.

Yazılabilir kümeyi, okunabilir kümeyi tanımlayın ve geri kalan her şeyi reddedin

Reddetmeyle başlayın ve izinleri sıralayın. Bir kodlama görevi için işleyebilir bir varsayılan şöyle görünür:

writable: /workspace/repo/**
readable: /workspace/repo/**, /usr/lib/**, /usr/share/**
denied:   everything else

Depo, çalışma birimidir. Onun dışındaki her şey ya salt okunur olması gereken bir sistem bağımlılığı ya da hiç görünmemesi gereken bir ana makine kaynağıdır. Bu bir prompt talimatı değil, mount politikasıdır ve container runtime tarafından uygulanır.

Ödünleşim gerçektir: dar bir yazılabilir küme, meşru olarak bir üst dizine, kardeş bir depoya veya global bir önbelleğe dokunması gereken iş akışlarını bozar. Bu iş akışlarına ihtiyaç duyan ekipler sözleşmeyi kazara geniş bir sözleşme devralmak yerine bilinçli olarak genişletmeli ve nedenini belgelemelidir. Genişletme, incelenebilir bir olaydır; kazara geniş bir mount değildir.

Çıkışı varsayılan olarak reddedin, kayıt defterlerine ve uç noktalara izin verin

Ağ politikası dosya sistemi politikasını yansıtmalıdır. Varsayılan, giden bağlantı yoktur. İzin listesi açık ve küçüktür: projenin gerçekten kullandığı paket kayıt defteri, ajan bir tane çağırıyorsa model sağlayıcısının uç noktası ve görevin gerektirdiği herhangi bir iç servis.

egress: deny
allow:  registry.npmjs.org
allow:  api.internal.example

Bu, kurulum yolunu ve üretilen kod yolunu aynı anda kısıtlar. Ayrıca ajanın ağ davranışını gözlemlenebilir kılar: izin listesi dışındaki her bağlantı denemesi gürültü değil, bir sinyaldir.

Dürüst ödünleşim operasyonel sürtünmedir. Meşru derlemeler bazen öngörülmeyen bir uç noktaya ihtiyaç duyar ve hata modu, geçici bir hata gibi görünen engellenmiş bir istektir. İzin listesi sürüm kontrolü altındaki yapılandırma olarak ele alınmalı, kod gibi incelenmeli ve bir görev meşru olarak gerektirdiğinde güncellenmelidir — bir derleme başarısız oldu diye allow: * olarak gevşetilmemelidir.

Göreve kapsamlanmış kısa ömürlü kimlik bilgileriyle çalıştırın

Kimlik bilgileri görev için üretilmeli ve onunla birlikte sona ermelidir. Sandbox başlangıcında verilen ve kapatmada iptal edilen kapsamlı, kısa ömürlü bir token, herhangi bir sızdırmanın değerini sınırlar. Geliştiricinin kendi uzun ömürlü kimlik bilgileri sandbox'a asla girmemelidir; ajan, görevin sınırının ötesinde geliştirici olarak davranamamalıdır.

Bu maddeyi uygulamak genellikle en zorudur çünkü dar, kısa ömürlü yetkiler verebilen bir kimlik sistemi gerektirir. Böyle bir sistem yoksa geri dönüş, ajanı hiç kimlik bilgisi olmadan çalıştırmak ve ayrıcalıklı her işlemi ayrı, insan onaylı bir adıma yönlendirmektir.

Circuit board macro

Tespit ve müdahale

Bir sözleşme sınırı tanımlar. Tespit, bir şeyin ona baskı yaptığını size söyler ve müdahale sonra ne olacağını belirler.

Anormal syscall desenlerini birincil sinyal olarak ele alın

Prompt incelemesi güvenilmezdir. Aynı talimat bir bağlamda zararsız, diğerinde bir injection'ın parçası olabilir ve modelin kendi niyetini anlatması davranışının kanıtı değildir. Güvenilir sinyal, sürecin gerçekte ne yaptığıdır: okunabilir küme dışında beklenmedik open çağrıları, izin listesinde olmayan adreslere connect denemeleri, görevin profilinde olmayan kabukların veya yorumlayıcıların execve'si, olağandışı dosya tanımlayıcı hareketliliği.

Bunlar, modelin akıl yürütmesini incelemeden runtime katmanında gözlemlenebilir. Syscall seviyesinde bir izleyici, bir görevin temel profilinden sapmayı alarm olarak bildirebilir ve ajanın ne yaptığı konusunda doğruyu söylemesine bağlı değildir.

Diff'i ve komut geçmişini birlikte kaydedin

Sonradan inceleme, her iki yapıtı tek bir yerde gerektirir. Onu üreten komutlar olmadan bir diff'i ilişkilendirmek zordur; ortaya çıkan diff olmadan bir komut geçmişini değerlendirmek zordur. Bunları birlikte — komut, zaman damgası, çıkış durumu, ortaya çıkan diff — saklamak, sonradan incelemeyi mümkün kılar ve günler sonra bir test başarısız olduğunda bir ajanın ne yaptığını yeniden oluşturmayı mümkün kılar.

Bu bir model meselesi değil, günlükleme meselesidir ve mount ve çıkış kurallarıyla birlikte sözleşmede belirtilmelidir.

Sandbox dışındaki geri alınamaz işlemler için insan onayı gerektirin

Bazı işlemler çalışma ağacını geri alarak geri alınamaz: bir remote'a push etmek, bir paket yayımlamak, bir bulut kaynağını silmek, e-posta göndermek, bir pull request'i birleştirmek. Bunlar kapılı olmalıdır. Kapı, "push etmeden önce sor" şeklinde bir prompt talimatı değil; bir insan belirli bir eylem için izin verene kadar işlem için gereken kimlik bilgisini veya ağ yolunu kaldıran bir politikadır.

Belirtim sırası

Pratik sonuç, iş sırasında bir değişikliktir. Ajanın araçlarını, belleğini, planlama döngüsünü veya otonomi seviyesini belirtmeden önce, içinde çalıştığı ortamı belirtin: yazılabilir küme, okunabilir küme, çıkış izin listesi, kimlik bilgisi kapsamı, syscall izleyicisi, birleşik diff-ve-komut günlüğü ve sandbox dışındaki geri alınamaz işlemler için onay kapısı.

Ajan daha sonra bilinen bir sınıra göre tasarlanır. Yetenekleri, modelin yapabildikleri ile sandbox'ın izin verdiklerinin kesişimidir; bu, bir sistem prompt'undaki uyarı etiketinden daha küçük ve daha dürüst bir yüzeydir.

Ödünleşim, sıkı bir sözleşmenin zaman zaman meşru bir görevi engelleyeceği ve ekibin onu bilinçli olarak genişletmek zorunda kalacağıdır. Mesele de budur. Hiç test edilmeyen bir sınır sınır değildir; inceleme yoluyla genişletilen bir sınır, anlaşılan bir sınırdır.

İlgili okumalar

Bunun yanıtladığı sorular

Why specify the sandbox before the agent?

The sandbox defines the agent's blast radius. Specifying the agent first produces a design the sandbox must accommodate, which inverts the constraint. Specifying the sandbox first gives the agent a known boundary to be designed against.

Is prompt-level instruction not sufficient for safety?

Prompt instructions are requests expressed in natural language and compete with all other context, including content the agent reads. Kernel, container, and network policy do not compete; they are enforced regardless of what the model decides.

What should the default network policy be?

Deny egress by default, then allowlist specific registries and endpoints under version control. This constrains both package installs and generated code, and makes any non-allowlisted connection attempt a clear signal.

Why are syscall patterns a better signal than prompt inspection?

Prompt inspection depends on interpreting intent, which is unreliable and context-dependent. Syscall patterns are observable behaviour at the runtime layer and do not depend on the agent accurately describing what it is doing.

What operations should require human approval?

Operations that are irreversible outside the sandbox: pushing to a remote, publishing a package, deleting cloud resources, sending messages, merging pull requests. These should be gated by removing the credential or network route until a human grants it for a specific action.