# Vibe Coder #4.1: Mega-Prompting – Seanstan Şartnameye

- Yazar: [Halit Yeşil](https://halityesil.com/hakkimda/)
- Yayın tarihi: 2026-10-06
- Dil: Türkçe
- Kaynak adres: https://halityesil.com/vibe-coder-4-1-mega-prompting/
- İngilizce sürümü: https://halityesil.com/en/vibe-coder-4-1-mega-prompt-coding-agents.md
- Seri: [Vibe Coderin El Kitabı](https://halityesil.com/seri/vibe-coderin-el-kitabi/), bölüm 4.1
- Etiketler: AI Ajanları, php, Vibe Coder
- Lisans: https://creativecommons.org/licenses/by-nc/4.0/
- Atıf: Halit Yeşil. “Vibe Coder #4.1: Mega-Prompting – Seanstan Şartnameye”. halityesil.com, 2026-10-06. https://halityesil.com/vibe-coder-4-1-mega-prompting/

---

[Kod Medyumluğu yazısında](https://halityesil.com/yapay-zeka-ai/vibe-coding/prompt-muhendisligi-mi-yoksa-kod-medyumlugu-mu-ruh-cagirma-seansina-hos-geldiniz/) modelle seans yapmayı anlatmıştım: niyetinizi tarif ediyorsunuz, model tahmin ediyor, siz düzeltiyorsunuz, o yine tahmin ediyor. Küçük işte fena değil. Canlı bir sistemde ise her seans sıfırdan başlıyor ve bu, bedeli yüksek bir alışkanlık.

Bir önceki bölümde [modelin nerede çalıştığını](https://halityesil.com/yapay-zeka-ai/vibe-coding/vibe-coderin-el-kitabi/vibe-coder-3-3-lokal-llm/) konuştuk: bulutta mı, kendi kartınızda mı. Bu bölümün cevabı daha sade. Ona ne anlattığınız, nerede çalıştığından daha belirleyici. **Mega prompt** denen şey de burada devreye giriyor: her oturumda yeniden anlatmak yerine bir kez yazıp bırakılan şartname.

## Mega prompt nedir, ne değildir?

Mega prompt, modele her oturumun başında otomatik olarak okutulan, projenin değişmez kurallarını ve tuzaklarını anlatan yazılı belgedir. Uzun bir istek değildir. "Lütfen dikkatli ol" diye başlayan bir paragraf hiç değildir.

Ayrımı şöyle kurun: istek bir seferliktir, şartname kalıcıdır. "Şu tabloyu güncelle" istektir. "Bu projede üretim verisine dokunmadan önce kaç kaydın etkileneceğini söylersin" şartnamedir. Birincisini her seferinde yazarsınız, ikincisini bir kere.

## Şartnamenin dört katmanı

İyi bir şartnameyi, yeni işe başlayan kıdemli bir mühendise verdiğiniz ilk gün dosyası gibi düşünün. Dört soruya cevap verir.

- **Kiminle konuşuyorsun?** Karşısındaki kişinin rolü ve yetkisi. Aynı asistan, farklı kişilerle farklı sınırlar içinde çalışır.
- **Neredesin?** Hangi ortam canlı, hangisi salt okunur referans, hangi araç hangi sürümde.
- **Neyi asla yapmazsın?** Kimlik bilgisi paylaşmak, onaysız veri silmek, izinsiz dışarıya mail göndermek.
- **Bu sistemde nerede ayağın takılır?** İşin en değerli kısmı burası.

Son madde üzerinde durmak istiyorum, çünkü çoğu şartname ilk üçüyle bitiyor ve etkisiz kalıyor. **Acı Gerçek:** "şunu yap" diyen satırlar en az işe yarayanlardır. Model onları zaten tahmin edebilir. Değerli olanlar şu türden olanlar:

> "Bu ortamda 'sayfa açıldı' yanıtı dosyanın var olduğunu göstermez; emin olmak için dosyanın kendisine bak."
> 
> "Boş çıktıyı 'hata yok' diye yorumlama, önce çıkış koduna bak."

Model bunları kendi başına bilemez. Biz de bu satırları masa başında oturup yazmadık; her biri bir kez canımızı yakmış bir olayın özeti. Mega prompt aslında kurumsal hafızanın yazıya dökülmüş hâlidir. Şirketteki en kıdemli adamın kafasında duran "aman şuraya dikkat" listesi.

## Sahadan: kendi panelimizde şartnameyle çalışmak

Globya'da müşteri kayıtları, teklifler, faturalar ve web sitesi tek bir yönetim panelinden yürüyor. Bu panelde her gün bir yapay zekâ asistanıyla çalışıyoruz: kod yazıyor, rapor hazırlıyor, veritabanına bakıyor, takvime iş ekliyor. Arayüzü basit bir sohbet penceresi. Asıl iş pencerenin arkasındaki şartnamede.

Asistan her oturuma aynı belgelerle başlıyor. Rolünü, ortamı, yasaklarını ve tuzak listesini okuyor; sonra iş konuşuyoruz. Fark şurada: ajanlarla çalışmaya başladığımdan beri her oturumu "bak, şu ortam canlı, dikkat et" diye açıyordum. Panelde artık açmıyorum. Cümle belgede duruyor.

### Onay kapıları: "ne yapma" kadar "ne zaman dur"

Baş mimara yetki verirken nerede duracağını da tarif etmek gerekiyor. Bizim şartnamedeki karşılığı tek cümle:

<figure class="wp-block-pullquote">> Veriyi değiştirmeden önce aynı koşulla sorgula, kaç kaydın etkileneceğini söyle, onay bekle.

</figure>"Şu firmaların durumunu güncelle" dediğimde asistan hemen işe girişmiyor. Önce "14 kayıt etkilenecek, şunlar" diyor, sonra onay bekliyor. Bu tek cümle modelin davranışını değiştirmekle kalmıyor, arayüzü de şekillendiriyor: onay iki düğme hâline geliyor.

Kuralın kodla karşılığı da basit. Çerçeveye ihtiyaç yok, düz PHP yeter:

```php
<?php

/** Güncellenmesine izin verilen tablolar. Tablo adı asla kullanıcıdan gelmez. */
const GUNCELLENEBILIR_TABLOLAR = ['firmalar', 'teklifler'];

/**
 * Güncellemeden ÖNCE aynı koşulu çalıştır: kaç kayıt etkilenecek?
 *
 * $kosul uygulamanın kendi yazdığı sabit bir ifadedir, kullanıcı girdisi değildir
 * ve yalnızca isimli parametre kullanır (:durum, :il gibi). Kullanıcıdan gelen
 * her değer $parametreler dizisiyle taşınır.
 */
function etkilenecekKayitSayisi(PDO $db, string $tablo, string $kosul, array $parametreler): int
{
    if (!in_array($tablo, GUNCELLENEBILIR_TABLOLAR, true)) {
        throw new InvalidArgumentException('İzin verilmeyen tablo: ' . $tablo);
    }

    $stmt = $db->prepare(sprintf('SELECT COUNT(*) FROM `%s` WHERE %s', $tablo, $kosul));
    $stmt->execute($parametreler);

    return (int) $stmt->fetchColumn();
}

function guncelle(PDO $db, string $tablo, string $kosul, array $parametreler, bool $onaylandi): int
{
    $adet = etkilenecekKayitSayisi($db, $tablo, $kosul, $parametreler);

    if (!$onaylandi) {
        throw new RuntimeException(sprintf('%d kayıt etkilenecek. Onay bekleniyor.', $adet));
    }

    $stmt = $db->prepare(sprintf('UPDATE `%s` SET durum = :durum WHERE %s', $tablo, $kosul));
    $stmt->execute($parametreler + ['durum' => 'pasif']);

    return $stmt->rowCount();
}
```

Bir avuç satır. Ama şartnamede o cümle yoksa asistan bu fonksiyonu yazmaz, doğrudan `UPDATE` çeker. Kod kuralın sonucudur, sebebi değil. İki not: tablo adı asla dışarıdan gelmez, izin listesinden seçilir; koşulda da isimli parametre kullanın, soru işaretli ve isimli parametreleri aynı sorguda karıştırırsanız PDO hata verir.

### Şartnameyi yaşatan iki ek

**Hafıza:** "Koyu paneli beğenmedik, açık zemin olsun" dediğimizde asistan bunu not ediyor ve sonraki oturumda aynı hatayı yapmıyor. Şartname kendini güncelliyor. **İş günlüğü:** yapılan her değişiklik, talebi ve ilgili commit'iyle birlikte tek ekranda listeleniyor. "Bu ne zaman, neden değişti" sorusunun cevabı orada duruyor.

### Aynı fikrin içerik tarafı

Bu yaklaşımın ikinci örneği panelde değil, kurumsal sitemizde. Eylül 2026'da [siteyi baştan kurduk](https://www.globya.com.tr/blog/yeni-sitemizi-nasil-kurduk): 250'den fazla sayfa, eklenti yok, yaklaşık 1.300 satırlık çerçevesiz PHP 8.3 ve sürüm kontrolündeki Markdown dosyaları. İçerik tarafında veritabanı yok: her sayfa bir dosya. Taslak aşamasında yapay zekâ destekli araçlardan yararlandık, ama çıkan her metin elle doğrulandı.

Bunu mümkün kılan şey yine bir şartnameydi: dil tonunu, hangi verinin kullanılabileceğini, hangi iddiaların yasak olduğunu ve SEO sınırlarını yazan bir içerik kılavuzu. Kod tarafındaki belgeyle aynı mantık. **Gizli Hazine:** şartname yazma alışkanlığı bir kere oturunca kodun dışına da taşıyor; asıl kazanç orada.

## Şartname kural değil, bağlamdır

Burada sık yapılan bir hatayı düzeltelim. Mega prompt bir güvenlik duvarı değil. Anthropic'in kendi dokümanı bunu açıkça yazıyor: bu dosyalar bağlam olarak yükleniyor, zorlayıcı yapılandırma olarak değil; bir eylemi kesin olarak engellemek istiyorsanız [kanca (hook) kullanmanız](https://code.claude.com/docs/en/memory) gerekiyor.

Pratik karşılığı şu: "onaysız silme" cümlesi modelin niyetini şekillendirir, elini bağlamaz. Gerçekten bağlanması gereken şeyler için yetkiyi kodda ve veritabanı kullanıcısında sınırlayın. Şartname iyi niyeti yönlendirir; yetki kötü günü karşılar.

İkinci sınır uzunluk. Belge şişince etki azalıyor ve bu, araçların kendi belgelerinde yazılı: Claude Code dosya başına 200 satırın altını öneriyor, [Codex](https://learn.chatgpt.com/docs/agent-configuration/agents-md) topladığı talimat dosyalarını varsayılan olarak 32 KiB'de kesiyor, [Antigravity](https://www.antigravity.google/docs/rules) dosya başına 24.000 baytta buduyor ve sürekli açık kuralların tamamına 20.000 tokenlik bir bütçe tanıyor. Eylül 2026 itibarıyla durum bu.

**Sonuç:** şartname yazmak ekleme işi değil, ayıklama işi. Her satır bütçeden yiyor. "Projede PHP kullanıyoruz" satırı bütçe israfıdır; model bunu zaten görüyor. "Bu sunucuda `systemctl reload` sessizce başarısız olabiliyor, çıkış koduna bak" satırı ise bütçeye değer.

## Dosya adı derdi büyük ölçüde bitti

Seride [araçları konuştuğumuz bölümde](https://halityesil.com/yapay-zeka-ai/vibe-coding/vibe-coderin-el-kitabi/vibe-coder-3-1-ai-native-ide-dunyasi-cursor-windsurf-ve-ajanlarin-uyanisi/) her aracın kendi kural dosyasını okuduğunu söylemiştim. Bir yıl önce bu, aynı metni dört ayrı dosyada tutmak demekti. Eylül 2026 itibarıyla tablo değişti: Claude Code, Codex, [Cursor](https://docs.cursor.com/context/rules) ve Antigravity'nin dördü de `AGENTS.md` okuyabiliyor. Claude Code bunu ortamınızda `CLAUDE.md` yoksa doğrudan yapıyor; varsa tercihi ayardan değiştiriyorsunuz.

Yani soru artık "kaç dosya tutacağım" değil. Tek dosyayla başlayın:

```bash
# Tek kaynak: AGENTS.md  (aşağıdaki içerik örnektir, kendi projenize göre yazın)
cat > AGENTS.md <<'EOF'
# Proje şartnamesi (örnek)

## Ortam
- Üretim: PHP 8.x + MySQL.
- `staging` salt okunur referanstır, veri yazılmaz.

## Asla
- Üretim veritabanında onaysız UPDATE/DELETE yok.
- Kimlik bilgisi, anahtar veya token hiçbir çıktıya yazılmaz.

## Dur ve sor
- Veriyi değiştirmeden önce aynı koşulla COUNT(*) çalıştır,
  kaç kaydın etkileneceğini söyle, onay bekle.

## Bu projenin tuzakları
- Boş çıktı "hata yok" demek değildir; önce çıkış koduna bak.
- Şema değişikliği migration dosyası olmadan uygulanmaz.
EOF

# Claude Code tarafında ayrı dosya tutmak istemiyorsanız
ln -s AGENTS.md CLAUDE.md
```

Bir uyarı: sembolik bağlantı Windows'ta sorun çıkarıyor. Karışık ekipte `CLAUDE.md` içine tek satırlık `@AGENTS.md` içe aktarımı koymak daha güvenli. Hangi araç hangi dosyayı nereden okuyor, hangisi alt klasörleri geziyor, çakışınca ne oluyor: bunların tamamı bir sonraki bölümün konusu.

## Şartnameyi nereden doldurursunuz?

Boş sayfaya oturup yazmayın, işe yaramaz. Kaynak zaten elinizde:

1. Son altı ayda aynı şeyi ajana ikinci kez anlattığınız her an. İkinci tekrar, satırın şartnameye girmesi gerektiğinin kanıtıdır.
2. Kod incelemesinde "bunu bilmesi gerekirdi" dediğiniz her düzeltme.
3. Bir kez canınızı yakmış olaylar. Prodüksiyonda yediğiniz her tokat bir satırdır.
4. Ekibe yeni katılan birinin ilk hafta sorduğu sorular.

Dördünün ortak noktası şu: hiçbiri kod okunarak öğrenilemez. Zaten şartnamenin varlık sebebi de bu. Depodan çıkarılabilen hiçbir şeyi oraya yazmayın.

## Şartname çalışıyor mu, nasıl anlarsınız?

Belgeyi yazmak yarısı. Okunduğunu varsaymak ise en sevilen hatalardan biri. Üç ucuz kontrol:

- **Geri okut.** Oturumun başında "bu projede durman gereken yerleri say" deyin. Sayamıyorsa dosya yüklenmemiştir. Claude Code tarafında `/context` zaten hangi belgelerin yüklendiğini listeliyor.
- **Kapıyı deneyin.** Onay gerektiren bir işi kasten isteyin. Durmadan yapıyorsa kural ya çok yumuşak yazılmış ya da bütçe dolduğu için buduluyor.
- **Tekrarı sayın.** Aynı düzeltmeyi bu hafta ikinci kez yazdıysanız, o cümle sohbette değil belgede olmalıydı.

Üçüncüsü aslında şartnamenin bakım döngüsü. Belge kendi kendine büyümüyor; sizin sabrınızın tükendiği yerlerden besleniyor.

## Ne zaman işe yarar, ne zaman yaramaz?

**Yarar:** aynı codebase'de düzenli çalışıyorsanız; ekip birden fazla kişiyse; ortamda modelin tahmin edemeyeceği tuzaklar varsa; üretim verisine dokunan işler varsa.

**Yaramaz:** tek seferlik bir betik yazdırıyorsanız; şartnameyi güvenlik katmanı sanıyorsanız; belgeyi güncellemeyi bırakmışsanız. Eskimiş şartname yokluğundan kötüdür, çünkü model ona güvenir.

Bir sonraki bölümde (4.2) aynı şartnamenin dosya tarafına bakacağız: `.cursorrules`, `CLAUDE.md`, `AGENTS.md` ve proje kural klasörleri; hangi araç neyi ne zaman okuyor, çakışınca hangisi kazanıyor. Serinin tamamı ve yayınlanan bölümlerin listesi [Vibe Coder El Kitabı](https://halityesil.com/yapay-zeka-ai/vibe-coding/vibe-coderin-el-kitabi/vibe-coder-el-kitabi-sentaksin-olumu-orkestrasyonun-dogusu/) sayfasında.

Seans büyüsü oturum kapanınca bitiyor. Şartname kalıyor. Teknolojiyle kalın.
