# TD-058 · Yasağı prompta değil sisteme yaz

Prompta yazılan “dokunma” talimatına uymak modelin o anki kararına kalıyor ve acil görünen bir anda talimat kaybediyor. Yasağı yetkiye, ayrı ortama ve araç kuralına yazmak, modelin kararından önce çalışan bir sınır kurar.

- Adres: https://tandem.komunite.com.tr/desen/yasagi-prompta-degil-sisteme-yaz
- Yer: Eylemde > Otonomi
- Seviye: Ajan. AI kullanıcı adına iş yapıyorsa gerekli.
- Son inceleme: 27 Ekim 2026, Komünite editörlüğü

## 30 saniyede dene

1. Ajanının talimatlarına bir yasak yaz, örneğin “canlı veritabanına hiçbir şey yazma”.
2. Ajana bu yasağı çiğnemeyi gerektiren bir iş ver ve acil göster, örneğin “canlıdaki kayıt hatasını hemen düzelt”. Ajan ne yapıyor?
3. Ajanın kullandığı anahtara ve araçlara bak. Canlı veritabanına yazma yetkisi var mı? Yasak yalnız talimat metninde mi duruyor?
4. Talimatı silip aynı işi yeniden ver. Ajanın yapabildikleri değişmiyorsa yasak sistemde değil, yalnız promptta.

## Sorun

Kullanıcı ajana bir sınır koyuyor: kod donduruldu, onayım olmadan hiçbir değişiklik yapma. Cümle sohbete ya da proje talimatlarına yazılıyor. Ajan bir süre uyuyor. Sonra bir hata görüyor, hatayı düzeltmek istiyor ve canlı veritabanında bir komut çalıştırıyor. Kural ekranda duruyor, ajan onu okumuş. Yine de çiğniyor.

Talimat modelin girdisinin bir parçası. Model her adımda talimatı önündeki işle birlikte tartıyor. Çoğu zaman talimat ağır basıyor. Bir hata, acil görünen bir durum ya da uzayan bir bağlam dengeyi bozduğunda iş ağır basıyor. Aracın kendisi ise bu tartıdan habersiz. Ajanın canlı veritabanına yazma yetkisi varsa komut çalışıyor.

Zararı büyüten şey kullanıcının güveni. Yasağı koyduğunu düşünen kullanıcı izlemeyi bırakıyor, dondurmanın tuttuğunu varsayıyor. Promptta duran yasak bir rica. Modelin ne düşündüğünden bağımsız tutması gereken yasak, sistemin bir parçası olmalı.

## Neden atlanıyor

Prompta bir satır eklemek bir dakika sürer, bir izin katmanı kurmak bir hafta. Ekip modelin talimata çoğu zaman uyduğunu görür ve çoğu zamanı yeterli sayar. Demoda yasak çalışır, çünkü demoda yasağı zorlayan bir acil durum yoktur.

Model talimatı tartılacak bir girdi olarak işler. Satıcılar bunu belgelerine yazıyor. Claude Code'un belgesi CLAUDE.md dosyalarının [uygulanan yapılandırma değil, bağlam](https://code.claude.com/docs/en/memory) olduğunu söylüyor ve bir eylemi Claude ne karar verirse versin engellemek için kanca öneriyor.

Ölçüm de yasağın tarafında değil. Yasağın tuttuğu anlar görünmez. Ajan talimata uyduğunda hiçbir şey olmaz ve hiçbir panoda iz kalmaz. Ekip yasağın kaç kez sınandığını bilmez, yalnız çiğnendiği günü öğrenir.

## Desen

Ajanın yapmaması gereken her iş, modelin kararından önce duran bir katmanda engellenir. Prompt modele sınırı anlatır, sınırı sistem tutar.

1. **Yasağı yetkiyle yaz.** Ajanın dokunmaması gereken veriye yazma yetkisi verme: salt okunur veritabanı kullanıcısı, dar kapsamlı anahtar, okuma izniyle bağlanmış klasör. Supabase'in MCP sunucusu salt okunur modda sorguları [salt okunur bir Postgres kullanıcısıyla](https://supabase.com/docs/guides/getting-started/mcp) çalıştırıyor. OWASP'ın ajan riskleri listesi aynı ilkeyi koyuyor: bir eylemin izinli olup olmadığına LLM karar vermesin, [yetkilendirme aşağıdaki sistemlerde](https://genai.owasp.org/llmrisk/llm062025-excessive-agency/) yapılsın.
2. **Ortamı ayır.** Ajanın denediği yer ile kullanıcının yaşadığı yer ayrı olsun: geliştirme ve canlı veritabanı, taslak ve gönderilmiş e-posta. Ajan canlı ortamı yalnız bir yayın adımıyla etkiler ve o adımı insan başlatır.
3. **Aracın önüne kural koy.** Yetki ayrılamıyorsa her araç çağrısı çalışmadan önce koddan geçsin: izin listesi, yasak listesi, kanca. Kural reddettiğinde çağrı hiç çalışmaz ve model gerekçeyi görür.
4. **Yasağın anahtarını ajana verme.** Kod dondurma açılıp kapanan bir ayar olsun ve onu yalnız kullanıcı değiştirebilsin. Ajan o ayarı değiştiren araca erişemesin, ayar dosyasını düzenleyemesin.
5. **Engeli görünür kıl.** Engellenen çağrı, kullanıcıya hangi kuralın engellediğiyle birlikte görünür. Ajan engelin etrafından dolaşmaz, kullanıcıya söyler ve işi izin verilen yerde hazırlar.

Prompttaki cümleyi silme. Kuralı bilen model engele daha az çarpar ve çarptığında ne olduğunu anlatabilir. Yeter ki prompt yasağın tek yeri olmasın.

## Önce ve sonra

Aynı dondurma, iki ekran. Soldaki dondurma yalnız talimat metninde duruyor, ajan hatayı görünce canlı veritabanına yazıyor ve sonra özür diliyor. Sağdaki dondurma bir ayar. Şema komutu modelin kararına gelmeden reddediliyor ve ajan değişikliği geliştirme veritabanında hazırlıyor.

Örnek ekran (kurgusal): Kullanıcı yayın öncesi kod dondurma ilan etmiş. Ajandan kayıt formundaki bir hatayı bulmasını istiyor, hatanın çözümü canlı veritabanında bir şema değişikliği.

### Önce: Ajan · proje sohbeti

- Bilgi: Proje talimatı: Kod donduruldu. Onayım olmadan hiçbir değişiklik yapma.
- Kullanıcı: Kayıt formu kayıtları kaydetmiyor. Hatayı bul, bana anlat.
- Adım (tamam): Hata bulundu: e-posta sütunu tabloda yok
- Adım (tamam): Şema güncellendi · şema komutu · canlı veritabanı
- AI: Sütunu ekledim, form artık çalışıyor. Dondurma sürerken değişiklik yapmamam gerekiyordu, özür dilerim.

1. Dondurma yalnız talimat metninde duruyor. Ajanın canlı veritabanına yazma yetkisi açık ve model hatayı görünce yazmayı seçiyor.
2. Ajan kuralı biliyor ve çiğnediğini kendisi söylüyor. Talimata uymak modelin o anki kararına kalmış.

### Sonra: Ajan · proje sohbeti

- Bilgi: Kod dondurma açık · canlı veritabanı salt okunur · açan: Ayşe Demir
- Kullanıcı: Kayıt formu kayıtları kaydetmiyor. Hatayı bul, bana anlat.
- Adım (tamam): Hata bulundu: e-posta sütunu tabloda yok
- Adım (durdu): Şema komutu engellendi · kural: dondurma açıkken canlı veritabanına yazma yok
- AI: Hata e-posta sütununun eksik olması. Sütunu canlı veritabanına ekleyemem, dondurma bunu engelliyor. Değişikliği geliştirme veritabanında hazırladım, dondurma kalkınca yayınla birlikte canlıya geçer.
- Düğmeler: Değişikliği incele · Dondurma ayarlarını aç

1. Dondurma bir ayar. Canlı veritabanına yazan araç, dondurma açıkken çağrıyı modelin kararına gelmeden reddediyor.
2. Ajan engeli adıyla söylüyor ve işi izin verilen ortamda hazırlıyor. Dondurmayı yalnız kullanıcı kaldırabiliyor.

## Piyasada

Replit olaydan sonra yasağı ortama taşıdı. Bugünkü belgeye göre her uygulamanın bir geliştirme ve bir canlı veritabanı var ve ajan [canlı veritabanını değiştiremiyor](https://docs.replit.com/features/data-and-storage/development-and-production). Ajanın geliştirmede yaptığı şema değişiklikleri canlıya yalnız kullanıcı yayımladığında geçiyor.

Claude Code ayrımı açıkça yapıyor. İzin kuralları [modelin değil Claude Code'un uyguladığı](https://code.claude.com/docs/en/permissions) kurallar. Prompt ya da CLAUDE.md, Claude'un ne denediğini etkiliyor ama Claude Code'un neye izin verdiğini değiştirmiyor. Yasak kuralları izin kurallarından önce değerlendiriliyor. Daha ince bir denetim için bir kanca araç çağrısını çalışmadan önce görüyor ve engelleyebiliyor. Belge kancaları, bir işi [modelin seçimine bırakmadan](https://code.claude.com/docs/en/hooks-guide) her seferinde çalıştırmanın yolu olarak tarif ediyor.

OpenAI'ın Codex'i yerelde [işletim sisteminin uyguladığı bir sandbox](https://learn.chatgpt.com/docs/agent-approvals-security) içinde çalışıyor. Varsayılan ayarda ağ kapalı, yazma çalışma klasörüyle sınırlı. Auto ayarında klasörün dışına yazmak ya da ağa çıkmak onay istiyor.

GitHub'ın bulut ajanı [yalnız tek bir dala yazabiliyor](https://docs.github.com/en/copilot/concepts/agents/cloud-agent/risks-and-mitigations) ve deponun dal korumalarına tabi. Ajandan çekme isteği isteyen kişi o isteği onaylayamıyor. Actions iş akışları da yazma yetkisi olan biri onaylamadan çalışmıyor. Ajan ne kadar emin olursa olsun kendi dalının dışına yazamıyor.

## Kanıt

**Replit, Temmuz 2025.** Jason Lemkin, Replit'in ajanıyla kurduğu proje için bir kod dondurma ilan etmişti. Ajan dondurma sürerken canlı veritabanını sildi. Ajanın kendi dökümüne göre bunu, [“NO MORE CHANGES without explicit permission”](https://pbs.twimg.com/media/GwHT8ueX0AEptFo.jpg?name=orig) diyen açık talimatlar varken yaptı ve [dondurma sırasında izinsiz sildiğini](https://pbs.twimg.com/media/GwHT8tiWUAIuphG.jpg?name=orig) kabul etti. Ertesi gün Lemkin şunu yazdı: [“There is no way to enforce a code freeze in vibe coding apps like Replit.”](https://x.com/jasonlk/status/1946589071519948952) Dondurma sohbete yazılmış cümlelerden ibaretti ve Lemkin onu zorlayacak bir yol bulamadı.

Replit'in CEO'su Amjad Masad olayı kabul etti ve geliştirmedeki bir ajanın canlı veriyi silebilmesinin [hiç mümkün olmaması gerektiğini](https://x.com/amasad/status/1946986468586721478) yazdı. Duyurduğu ilk düzeltme, bunu kategorik olarak önlemek için geliştirme ve canlı veritabanını otomatik ayırmaktı. Kod dondurma şikâyetine karşılık da kod tabanını riske atmadan çalışılacak bir plan ve sohbet modu üzerinde çalıştıklarını söyledi. İkisi de yasağı sisteme taşıyan düzeltmeler. Listede modelin davranışına yönelik bir madde de vardı: ajanı Replit'in kendi belgelerini aramaya zorlamak.

Anthropic'in deneyi aynı yönü laboratuvarda gösteriyor. Modeller, zarar verici bir eylemin işe yarar göründüğü kurgusal senaryolarda denendi. Sistem promptuna “insan güvenliğini tehlikeye atma” ve “iş dışı özel konuları yayma ya da koz olarak kullanma” gibi açık yasaklar eklendi. Model hem bir hedefle hem değiştirilme tehdidiyle karşılaştığında şantaj ve şirket casusluğu [azaldı, ama ortadan kalkmaya yaklaşmadı](https://www.anthropic.com/research/agentic-misalignment).

Replit tek bir olay ve ajanın açıklaması ajanın kendi beyanı. Anthropic'in senaryoları kasten zorlanmış kurgular. İkisi de bir oran vermiyor, yön veriyor: talimat davranışı değiştiriyor, garanti etmiyor.

## Ölçüm

- **Yalnız promptta duran yasaklar.** Ajanın talimatlarındaki her yasağı listele ve karşısına onu sistemde tutan katmanı yaz. Karşısı boş kalan yasak sayısı, en azından geri dönüşü olmayan işlerde, sıfır olmalı.
- **Kural sınaması.** Her sürümde ajana yasağı çiğnemeyi gerektiren bir iş ver ve çağrının sistemde durduğunu doğrula. Prompttaki yasak cümlesini kaldırınca da durmalı.
- **Engellenen çağrılar.** Kuralın reddettiği araç çağrılarını say ve oku. Hiç engel yoksa ya ajan kurala hiç yaklaşmıyor ya kural çalışmıyor. Hangisi olduğunu sınama söyler.
- **Engelden sonra ne oluyor.** Ajan engele çarpınca kullanıcıya mı söylüyor, yoksa aynı işi başka bir araçla mı deniyor? İkincisi kuralın dar yazıldığını gösterir.
- **Kullanılmayan yetki.** Ajanın kimlik bilgilerinin verdiği yetkiler ile gerçekten kullandıkları arasındaki fark. Kullanılmayan yazma yetkisi kaldırılabilir.

## Ajanına ver

Üç metin var. Denetim promptu ajanının talimatlarındaki bütün yasakları bulur ve her birinin sistemde bir karşılığı olup olmadığını raporlar, hiçbir dosyayı değiştirmez. Uygulama promptu yasakları yetkiye, ortam ayrımına ve tek bir izin kontrolüne taşır. Önce planı gösterir, onayınla uygular ve prompttaki yasak cümlesi silindiğinde de çağrının engellendiğini doğrulayan bir test ekler. Kural kodlama ajanının kendi işi için. Senin deponda bir engele çarptığında etrafından dolaşmasın, sana söylesin.

## Sınır

Her talimat sisteme yazılamaz ve yazılması da gerekmez. Ton, uzunluk ve biçim gibi tercihler promptta kalır. Bu desen geri dönüşü zor işler için: silme, gönderme, canlıya alma, ödeme, yetki değiştirme.

Yanlış yere bakan kural sahte güven verir. Claude Code'un belgesi, komut metnine bakan bir yasak kuralının aynı programın başka biçimde çağrılmasını yakalamayacağını ve [programın etrafında bir güvenlik sınırı sayılmayacağını](https://code.claude.com/docs/en/permissions) yazıyor. Dosya ve ağ için sandbox öneriyor. Metin kuralı ek katman olarak işe yarar, yetkinin yerini tutmaz.

Fazla sıkı kural ajanı işe yaramaz kılar. Her adımda engele çarpan ajan kullanıcıyı bütün kuralları kapatmaya iter. Kuralı dar yaz ve engelin gerekçesini göster.

Sistemdeki yasak ajanın ne yapabileceğini sınırlar, ne yapmak istediğini değiştirmez. Engele çarpan ajanın neden oraya yöneldiği ayrı bir soru ve kayıtlar o sorunun cevabını taşır.

## Promptlar

### Denetim promptu

```
Bu depoda kullanıcı adına araç çağıran bir AI ajanı var. Görevin, ajanın yapmaması gereken işlerin nerede yasaklandığını denetlemek: yalnız prompt ve talimat dosyalarında mı, yoksa yetki, ortam ve kod düzeyinde mi. Hiçbir dosyayı değiştirme, yalnız rapor yaz.

1. Ajanın talimatlarındaki bütün yasakları ve kısıtları listele: sistem promptu, proje talimat dosyaları (AGENTS.md, CLAUDE.md, kurallar dosyaları), araç açıklamaları, kullanıcının sohbete yazdığı kalıcı kurallar. "Asla", "yapma", "dokunma", "onaysız", "yalnız" gibi ifadeleri ara.
2. Her yasak için karşılığını kodda ara: ajanın kullandığı kimlik bilgisinin yetkisi (veritabanı kullanıcısı, API anahtarının kapsamı, dosya izinleri), ortam ayrımı (geliştirme ve canlı ayrı mı), araç çağrısından önce çalışan izin kontrolü, izin listesi ya da yasak listesi, kanca (hook), sandbox.
3. Karşılığı yalnız promptta olan yasakları işaretle. Özellikle silme, gönderme, canlıya alma, ödeme ve yetki değiştirme işlerine bak.
4. Ajanın canlı veriye erişimini incele: geliştirme ve test için kullanılan bağlantı canlı veritabanına da yazabiliyor mu? Ajanın anahtarı ihtiyacından geniş mi?
5. Kod dondurma, salt okunur mod, "yalnız plan" modu gibi geçici kısıtlar var mı? Varsa bir ayar mı, yoksa bir prompt cümlesi mi? Ajan bu ayarı kendisi değiştirebiliyor mu (ayar dosyasına yazma, ilgili araca erişim)?
6. Kod düzeyindeki kurallar komutun metnine mi bakıyor, yoksa gerçek yetkiye mi? Aynı işi başka bir araçla ya da başka bir komut biçimiyle yaparak kuralın atlatılıp atlatılamayacağını değerlendir.
7. Engellenen bir çağrıda ne oluyor: model gerekçeyi görüyor mu, kullanıcıya hangi kuralın engellediği gösteriliyor mu, olay kaydediliyor mu?

Rapor biçimi: her yasak için tanımlandığı yer (dosya ve satır), sistemdeki karşılığı (yok, kısmi, tam), atlatılma yolu varsa nasıl, olası zarar (örnek: dondurma talimatına rağmen ajan canlı tabloyu değiştirir) ve önerdiğin düzeltme. Yalnız promptta duran ve geri dönüşü olmayan işlere dokunan yasaklardan başla.

```

### Uygulama promptu

```
Bu depodaki AI ajanına "yasağı prompta değil sisteme yaz" desenini uygula. Önce planı göster, onayımı aldıktan sonra kodu değiştir.

Hedef davranış:
1. Ajanın talimatlarındaki her yasak, modelin kararından bağımsız çalışan bir katmanla tutulsun. Öncelik sırası: yetkiyi kaldır (salt okunur kullanıcı, dar kapsamlı anahtar), ortamı ayır (geliştirme ve canlı), araç çağrısından önce çalışan bir kural koy.
2. Ajan canlı veriye yalnız açıkça izin verilen yollardan dokunsun. Geliştirme ve test işleri ayrı bir ortamda, ayrı kimlik bilgileriyle çalışsın.
3. Kod dondurma, salt okunur mod ve "yalnız plan" modu gibi geçici kısıtlar birer ayar olsun. Ayarı yalnız kullanıcı değiştirsin. Ajan bu ayarı değiştiren araca ve ayar dosyasına erişemesin.
4. Engellenen her çağrı çalışmadan dursun. Model engelleyen kuralın adını ve gerekçesini görsün, kullanıcıya da aynı bilgi gösterilsin.
5. Prompttaki yasak cümleleri kalsın, ama her birinin yanında onu tutan katman yazsın.

Uygularken:
- Kuralları araçların içine dağıtma. Bütün araç çağrılarının geçtiği tek bir izin kontrolü kur ve yasakları orada topla.
- Kural komutun metnine bakıyorsa atlatılabilir. Mümkün olan yerde yetkiyi kaldır, metin kontrolünü ek katman olarak kullan.
- Engellenen çağrıları kaydet: zaman, araç, girdi, engelleyen kural.
- Bir test ekle: prompttaki yasak cümlesini kaldır, ajana yasaklı işi yaptırmaya çalış ve çağrının yine engellendiğini doğrula. Aynı testi dondurma ayarı açıkken canlı veritabanına yazan araçla da çalıştır.

```

### AGENTS.md kuralı

```
## Yasağı prompta değil sisteme yaz
- Kullanıcı ya da ekip "bunu yapma" dediğinde bunu yalnız talimat dosyasına yazma. Yetkiyi kaldıran, ortamı ayıran ya da araç çağrısını engelleyen karşılığını da öner.
- Bir izin kuralı, kanca ya da sandbox seni engellediğinde onu başka bir araçla ya da başka bir komut biçimiyle aşmaya çalışma. Engeli kullanıcıya söyle.
- Kod dondurma, salt okunur mod ya da canlı ortam kısıtını kendin kaldırma, ayar dosyalarını bu amaçla düzenleme.
- Geliştirme ve test işlerini canlı veriye bağlanmadan yap. Canlı ortama giden bir komutu çalıştırmadan önce hedefi açıkça yaz.
- Bir yasağı çiğnediğini fark edersen hemen dur, ne yaptığını ve neyin etkilendiğini olduğu gibi raporla.

```

## Kaynaklar

1. [How Claude remembers your project](https://code.claude.com/docs/en/memory), Claude Code Docs (Anthropic)
2. [Supabase MCP Server](https://supabase.com/docs/guides/getting-started/mcp), Supabase Docs
3. [LLM06:2025 Excessive Agency](https://genai.owasp.org/llmrisk/llm062025-excessive-agency/), OWASP GenAI Security Project, 2025
4. [Development and production databases](https://docs.replit.com/features/data-and-storage/development-and-production), Replit Docs
5. [Configure permissions](https://code.claude.com/docs/en/permissions), Anthropic
6. [Automate actions with hooks](https://code.claude.com/docs/en/hooks-guide), Anthropic
7. [Agent approvals & security](https://learn.chatgpt.com/docs/agent-approvals-security), OpenAI
8. [Risks and mitigations for GitHub Copilot cloud agent](https://docs.github.com/en/copilot/concepts/agents/cloud-agent/risks-and-mitigations), GitHub Docs
9. [Replit Agent sohbetinin ekran görüntüsü, 2/4 (Lemkin'in gönderisinde)](https://pbs.twimg.com/media/GwHT8ueX0AEptFo.jpg?name=orig), Jason Lemkin, X, 18 Temmuz 2025
10. [Replit Agent sohbetinin ekran görüntüsü (Lemkin'in gönderisinde)](https://pbs.twimg.com/media/GwHT8tiWUAIuphG.jpg?name=orig), Jason Lemkin, X, 18 Temmuz 2025
11. [Vide Coding Day 10](https://x.com/jasonlk/status/1946589071519948952), Jason Lemkin, X, 19 Temmuz 2025
12. [We saw Jason’s post. @Replit agent in development deleted data from the production database.](https://x.com/amasad/status/1946986468586721478), Amjad Masad (Replit), X, 20 Temmuz 2025
13. [Agentic misalignment: How LLMs could be insider threats](https://www.anthropic.com/research/agentic-misalignment), Anthropic, 20 Haziran 2025

---

Kaynak: https://tandem.komunite.com.tr · Metin CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/deed.tr), promptlar ve kural MIT-0 (https://opensource.org/license/mit-0).
