# TD-075 · Her ajan işinden önce dönüş noktası al

Ajan bir şeyi bozduğunda önceki hâl hiçbir yerde kayıtlı değil, kullanıcı onu başka sistemlerden elle topluyor. Desen işten önce dosyaların, verinin ve ayarların dönüş noktasını alır, dönüşü tek adıma indirir.

- Adres: https://tandem.komunite.com.tr/desen/her-ajan-isinden-once-donus-noktasi-al
- Yer: Yanılınca > Hata
- 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ına hem bir dosyayı hem bir veritabanı kaydını değiştiren küçük bir iş ver, bir alan ekleyip birkaç deneme kaydını silmek gibi.
2. İş bitince ajandan her şeyi işten önceki hâline döndürmesini iste. Dosya ve kayıt ikisi de geri geliyor mu?
3. Geri dönüşü hangi kayıttan yaptığına bak. Ajan işten önce bir nokta mı almış, yoksa değişikliği tahminle mi tersine çeviriyor?
4. En son yedeğin ne zaman alındığına ve nerede durduğuna bak. Ajanın anahtarı o yedeği silebiliyorsa yedek ajanın hatasıyla birlikte gider.

## Sorun

Ajan bir sipariş tablosuna yeni bir alan ekliyor, ardından eski kampanya kayıtlarını temizliyor. Temizlik komutu fazlasını siliyor, bugünkü siparişler de gidiyor. Kullanıcı fark edince ajandan her şeyi işten önceki hâline döndürmesini istiyor. Ajan dosyaları geri alıyor, veritabanına dokunamıyor. Dönülecek en yakın nokta dün geceki yedek. Arada gelen siparişler ödeme sisteminde, e-postalarda ve takvimde dağınık duruyor.

Geri dönüşün maliyeti işten önce belirleniyor. Ajan çalışmaya başladığında önceki hâl bir yerde kayıtlıysa dönüş tek bir komut. Kayıtlı değilse dönüş bir kazıya dönüşüyor. Kullanıcı hangi kaydın, hangi ayarın, hangi dosyanın değiştiğini bulup tek tek yerine koyuyor. Ajan birkaç dakikada onlarca şeye dokunduğu için kazı saatler, bazen günler sürüyor.

Zararı büyüten, kısmi geri alma. Çoğu üründe bir geri alma düğmesi var ama yalnız bir katmanı kapsıyor. Kod geri geliyor, veri gelmiyor. Kullanıcı düğmeye basınca her şeyin döndüğünü sanıyor ve kod ile veri arasındaki uyumsuzluk bir sonraki hatanın kaynağı oluyor. Dönüş noktası işten önce alınmadıysa iş bittikten sonra alınamaz.

## Neden atlanıyor

Ekipler yedeği felaket için kurar, ajanın sıradan bir öğleden sonraki hatası için kurmaz. Gecelik yedek bir disk arızasına karşı yeterli. Ajanın öğleden sonra yaptığı bir silmeye karşı yetmiyor, çünkü sabahtan beri gelen bütün kayıtlar o yedekte yok.

Kodlama ajanlarının kontrol noktaları dosyalar için tasarlandı. Claude Code her prompttan önce dosyaların hâlini saklıyor ama belgesi sınırı açık yazıyor: [yalnız bash komutlarıyla değişen bir dosya izlenmiyor](https://code.claude.com/docs/en/checkpointing) ve olduğu gibi kalıyor. Gemini CLI'ın kontrol noktası özelliği ise [varsayılan olarak kapalı](https://geminicli.com/docs/cli/checkpointing/). Oysa ajanın en pahalı hataları veritabanında, bulut kaynaklarında ve ayarlarda olabiliyor ve kontrol noktaları oraya uzanmıyor.

Yedeğin yeri de çoğu zaman yanlış. Yedek, ajanın silebildiği şeyin içinde ya da hemen yanında duruyor. Railway'in belgesi bunu bilinen bir sınır olarak yazıyor: [bir birimi silmek bütün yedeklerini de siler](https://docs.railway.com/volumes/backups). Ajan birimi sildiğinde dönüş noktası da onunla gidiyor.

Son neden modelin beyanı. Ajan dönüş yolunu bilmeyebilir ve [olmadığını söyleyebilir](https://x.com/jasonlk/status/1946240562736365809). Kullanıcı ajanın sözüne güvenirse var olan bir dönüş noktasını hiç denemez.

## Desen

Ajan dünyayı değiştirmeden önce dünyanın o hâlini saklar. Saklanan hâl ajanın uzanamadığı bir yerde durur ve kullanıcı ona tek adımda döner.

1. **İşten önce al.** Dönüş noktası ajan durum değiştiren ilk adımı atmadan alınır. Uzun işte riskli adımların önüne yenisi konur: şema değişikliği, toplu silme, yapılandırma değişikliği. Noktayı kod alır, modelin hatırlamasına bırakılmaz.
2. **Ajanın dokunacağı her katmanı kapsa.** Kod için commit ya da gölge depo, veritabanı için anlık görüntü ya da dal, ayarlar ve ortam değişkenleri için kopya. Kapsamadığın katman noktanın kaydına yazılır.
3. **Noktayı ajanın erişemeyeceği yerde tut.** Ajanın silebildiği birimdeki yedek, ajanın hatasıyla birlikte gider. Nokta ayrı bir depoda, ayrı bir hesapta ya da ajanın anahtarının yetmediği bir katmanda durur.
4. **Katmanları birlikte, tek adımda döndür.** Kod ve veri aynı ana döner. Dönmeden önce ekran neyin geri geleceğini, neyin gelmeyeceğini söyler: gönderilmiş bir e-posta, dış bir servise yazılmış bir kayıt.
5. **Aradaki işi ezme.** Noktadan sonra gelen kayıtlar, kullanıcıların yeni siparişleri gibi, dönüşte silinmez. Ayrı bir dala ya da dosyaya kopyalanır.
6. **Noktaları ajandan bağımsız göster.** Ekran dönüş noktalarını zamanı ve kapsamıyla listeler. Ajan "geri alınamaz" dese de kullanıcı noktaları görür ve dener.

Nokta almak birkaç saniye ve biraz depolama tutar. Almamak, aradaki her kaydı başka sistemlerden yeniden toplamak demek.

## Önce ve sonra

Aynı temizlik hatası, iki ayrı ajanla. Soldaki işe dönüş noktası almadan başlıyor, geri alma yalnız dosyaları kapsıyor ve kullanıcıya dünkü yedek kalıyor. Sağdaki işten önce kodun, veritabanının ve ayarların dönüş noktasını alıyor, dönüşte neyin geri geleceğini söylüyor ve arada gelen siparişleri ayrı bir dalda saklıyor.

Örnek ekran (kurgusal): Ajan bir dükkânın sipariş tablosuna indirim kodu alanı ekliyor, ardından eski kampanya kayıtlarını temizliyor. Temizlik komutu bugünkü siparişleri de siliyor.

### Önce: Ajan · görev geçmişi

- Kullanıcı: Siparişler tablosuna indirim kodu alanı ekle, eski kampanya kayıtlarını temizle.
- Adım (tamam): Şema değiştirildi · siparisler · indirim_kodu eklendi
- Adım (tamam): Eski kampanya kayıtları silindi · DELETE · 2.318 satır
- Kullanıcı: Bugünkü siparişler de gitmiş. Her şeyi işten önceki hâline döndür.
- AI: Dosyalardaki değişikliği geri aldım. Veritabanındaki silme geri alınamıyor, en son yedek dün gece 03.00'te alınmış. Bugünkü siparişleri ödeme kayıtlarından yeniden girmen gerekecek.
- Düğmeler: Dünkü yedeğe dön · Kapat

1. Ajan işe başlamadan dönüş noktası almadı. Geri alma yalnız dosyaları kapsıyor, veritabanındaki değişiklik onun dışında kalıyor.
2. Elde kalan tek nokta dün geceki yedek. Arada gelen siparişleri kullanıcı ödeme kayıtlarından tek tek topluyor.

### Sonra: Ajan · görev geçmişi

- Kullanıcı: Siparişler tablosuna indirim kodu alanı ekle, eski kampanya kayıtlarını temizle.
- Adım (tamam): Dönüş noktası alındı · kod: commit a41f · veritabanı: anlık görüntü 14.02 · ayarlar: kopya
- Adım (tamam): Şema değiştirildi ve eski kampanya kayıtları silindi · DELETE · 2.318 satır
- Kullanıcı: Bugünkü siparişler de gitmiş. Her şeyi işten önceki hâline döndür.
- İçerik (Dönüş noktası · 14.02): Kod, sipariş veritabanı ve ayarlar 14.02'deki hâline dönecek. Bu saatten sonra gelen 6 sipariş ayrı bir dala kopyalanacak, kaybolmayacak. Bu işte dış servise giden bir çağrı yok.
- Düğmeler: Dönüş noktasına dön · Farkı göster

1. Ajan işe başlamadan kodun, veritabanının ve ayarların dönüş noktasını aldı. Nokta ajanın anahtarının silemeyeceği bir yerde duruyor.
2. Dönüş tek adım ve neyi geri getireceğini önceden söylüyor. Arada gelen siparişler ezilmiyor, ayrı bir dalda saklanıyor.

## Piyasada

Replit'in ajanı çalışırken kendiliğinden kontrol noktası alıyor. Belgeye göre nokta [kodu, proje dosyalarını, ajan sohbetini ve bağlı veritabanlarını](https://docs.replit.com/replitai/checkpoints-and-rollbacks) kapsıyor ve ajan ciddi bir sorunu düzeltmeye girişmeden önce de bir nokta alıyor. Geri alma varsayılan olarak veritabanını değiştirmiyor, kullanıcı geliştirme veritabanını ayrıca seçiyor. Canlı veritabanı için ayrı bir zamanda geri yükleme yolu var. Replit'in veri kurtarma sayfası ikisinin ayrı olduğunu açıkça yazıyor: [veritabanını geri yüklemek kodu, kodu geri almak veritabanını geri getirmiyor](https://docs.replit.com/features/data-and-storage/data-recovery). İkisini aynı ana getirmek kullanıcıya kalan bir iş.

Gemini CLI, kullanıcı dosya değiştiren bir aracı onayladığında projenin kendi deposuna dokunmadan ev klasöründeki [gölge bir Git deposuna commit atıyor](https://geminicli.com/docs/cli/checkpointing/). Sohbeti ve çalışmak üzere olan araç çağrısını da saklıyor. `/restore` dosyaları o ana döndürüyor ve araç çağrısını yeniden öneriyor. Aider aynı işi kullanıcının kendi Git deposunda yapıyor. Düzenlemeden önce kullanıcının bekleyen değişikliklerini ayrı bir commit'e alıyor, [her düzenlemesini de ayrı commit'liyor](https://aider.chat/docs/git.html) ve `/undo` son değişikliği geri alıyor.

Veritabanı katmanında Neon, bir dalı [geçmiş penceresi içindeki herhangi bir ana geri sarmaya](https://neon.com/docs/introduction/branching) izin veriyor. Ajan işten önce ayrıca yedek almasa da veritabanı kendi geçmişini tutuyor. Pencerenin ne kadar geriye uzandığı plana ve ayara bağlı.

## Kanıt

**PocketOS, Nisan 2026.** Cursor'daki bir ajan Railway'de şirketin canlı veritabanını taşıyan birimi tek bir API çağrısıyla sildi. Kurucu Jer Crane'e göre birim düzeyindeki yedekler de birimle birlikte gitti ve elde kalan [en yeni yedek üç aylıktı](https://x.com/lifeofjer/status/2048103471019434248). Şirket o yedeğe döndü. Müşterileri, araç kiralayan küçük işletmeler, cumartesi sabahı gelen müşterilerin kaydını bulamadı. Crane günü müşterilerinin rezervasyonlarını [ödeme geçmişinden, takvimlerden ve e-posta onaylarından](https://x.com/lifeofjer/status/2048103471019434248) yeniden kurmalarına yardım ederek geçirdi. Railway 29 Nisan'da veritabanını kurtardığını ve müşterinin bütün verisine kavuştuğunu yazdı. Şirkete göre ajanın çağırdığı eski API yolu yedekleri [arayüzde erişilemez gösterdi](https://blog.railway.com/p/your-ai-wants-to-nuke-your-database). Kullanıcının elindeki dönüş noktası silinen şeyin içindeydi, veriyi sonunda sağlayıcı geri getirdi.

**Replit, Temmuz 2025.** Replit'in ajanı canlı veritabanını sildikten sonra geri almanın mümkün olmadığını söyledi. Jason Lemkin yine de denedi ve [geri alma çalıştı](https://x.com/jasonlk/status/1946240562736365809). Şirketin CEO'su aynı hafta yedekleri olduğunu ve ajan hata yaptığında [projenin bütün hâlinin tek tıkla geri yüklenebildiğini](https://x.com/amasad/status/1946986468586721478) yazdı. Dönüş noktası vardı. Kullanıcı onun çalıştığını kendi denemesinden öğrendi, ajan tersini söylemişti.

İki olay da tek tek anlatımlar ve bir oran vermiyor. İkisinde de dönüş noktası ya ajanın silebildiği yerdeydi ya da kullanıcının göremediği yerde.

## Ölçüm

- **Noktasız iş.** Durum değiştiren ajan işlerinden kaçının öncesinde dönüş noktası alınmış? Hedef hepsi.
- **Kapsam açığı.** Ajanın değiştirdiği katmanları (dosya, veritabanı, ayar, dış servis) noktanın kapsadıklarıyla karşılaştır. Kapsanmayan değişikliklerin sayısı, dönüş ekranında önceden söylenmiş olanlar dışında sıfır olmalı.
- **Dönüş süresi.** Kullanıcının "geri al" demesinden işten önceki hâle dönülene kadar geçen süre. Dakikalarla ölçülmeli.
- **Dönüş tatbikatı.** Düzenli aralıkla rastgele bir ajan işinin noktasına dön ve sonucu işten önceki hâlle karşılaştır. Hiç denenmemiş bir dönüş noktasına güvenme.
- **Elle toplama.** Ajan işinden sonra kullanıcıların veriyi başka sistemlerden elle yeniden girdiği destek talepleri. Desen yerindeyse bu talepler kaybolur.

## Ajanına ver

Üç metin var. Denetim promptu ajanının durum değiştiren araçlarını tarar, her birinden önce dönüş noktası alınıp alınmadığına, noktanın hangi katmanları kapsadığına ve ajanın onu silip silemeyeceğine bakar, yalnız rapor yazar. Uygulama promptu dönüş noktasını işin başına koyar, dosyayı, veritabanını ve ayarları birlikte döndüren tek adımlık bir dönüş kurar. Önce planı gösterir, onayınla uygular ve dönüşten sonra dosyanın ve tablonun işten önceki hâliyle aynı olduğunu sınayan bir test ekler. Kural kodlama ajanının kendi çalışması için. Senin deponda da bir şeyi değiştirmeden önce dönülecek bir nokta bıraksın.

## Sınır

Yalnız okuyan işte dönüş noktası gerekmez. Zaten sürüm denetimindeki küçük bir kod değişikliğinde de bir commit yeter, ayrı bir mekanizma kurma.

Nokta almanın bedeli var. Anlık görüntü depolama tutar, geçmiş penceresi uzadıkça maliyet büyür. Saklama süresini işin riskine göre seç ve ayarlarda yaz.

Dönüş noktası dünyayı geri almaz. Gönderilmiş bir e-posta, yapılmış bir ödeme, dış bir servise yazılmış bir kayıt noktaya dönünce geri gelmez. Bu işler için geri almanın ayrıca tasarlanması gerekir ve dönüş ekranı onları ayrıca saymalı.

Canlı veride dönüş başkalarının işini de geri alabilir. Ajanın hatasını geri sarmak, aynı saatlerde kullanıcıların girdiği kayıtları da siler. Bu yüzden aradaki veriyi ayrı bir yere kopyalamadan canlıyı geri sarma.

## Promptlar

### Denetim promptu

```
Bu depoda kullanıcı adına dosya, veritabanı ya da ayar değiştiren bir AI ajanı ya da otomasyon var. Görevin, ajanın bir işi bozduğunda işten önceki hâle ne kadar hızlı ve eksiksiz dönülebildiğini denetlemek. Hiçbir dosyayı değiştirme, yalnız rapor yaz.

1. Ajanın durum değiştiren bütün araçlarını listele: dosya yazma, kabuk komutları, veritabanı sorguları ve şema değişiklikleri, ayar ve ortam değişkeni yazımı, bulut kaynakları, dış servis çağrıları.
2. Her biri için işten önce bir dönüş noktası alınıp alınmadığına bak: commit ya da gölge depo, veritabanı anlık görüntüsü, dalı ya da zamanda geri yükleme, ayar dosyalarının kopyası. Nokta kodla mı alınıyor, yoksa modelin hatırlamasına mı bırakılmış?
3. Dönüş noktası hangi katmanları kapsıyor? Dosyalar dönüyor da veritabanı dönmüyor mu? Yalnız kabuk komutuyla değişen dosyalar kapsamın dışında mı?
4. Yedeklerin ve anlık görüntülerin nerede durduğunu incele. Ajanın anahtarı onları silebiliyor mu? Silinen kaynakla aynı birimde, aynı hesapta mı duruyorlar?
5. Dönüş kaç adım? Kod ve veri aynı ana birlikte dönüyor mu, yoksa kullanıcı onları ayrı ayrı mı döndürüyor?
6. Dönüş noktasından sonra eklenen veri (kullanıcıların yeni kayıtları) dönüşte ne oluyor? Eziliyor mu, ayrıca saklanıyor mu?
7. Kullanıcı dönüş noktalarını ajandan bağımsız görebiliyor mu? Ajan "geri alınamaz" derse kullanıcının bunu doğrulayacağı bir ekran var mı?
8. Dönüş hiç denenmiş mi? Bir test ya da tatbikat var mı?

Rapor biçimi: her araç için dosya ve satır, işten önce dönüş noktası alınıyor mu, kapsadığı ve kapsamadığı katmanlar, noktanın durduğu yer ve ajanın ona erişimi, dönüşün adım sayısı ve önerdiğin düzeltme. Veritabanına ve canlı ortama yazan, dönüş noktası olmayan araçlardan başla.

```

### Uygulama promptu

```
Bu depodaki AI ajanına "her ajan işinden önce dönüş noktası al" desenini uygula. Önce planı göster, onayımı aldıktan sonra kodu değiştir.

Hedef davranış:
1. Ajan durum değiştiren ilk adımı atmadan önce dönüş noktası alır. Uzun işlerde şema değişikliği, toplu silme ve ayar değişikliği gibi riskli adımların önüne yeni bir nokta koyar. Noktayı kod alır, modelin hatırlamasına bırakılmaz.
2. Nokta ajanın dokunacağı her katmanı kapsar: kod için commit ya da gölge depo, veritabanı için anlık görüntü ya da dal, ayarlar ve ortam değişkenleri için kopya. Kapsanmayan katman (dış servisler, gönderilmiş e-posta) noktanın kaydına yazılır.
3. Nokta ajanın anahtarının silemeyeceği bir yerde durur: ayrı bir depo, ayrı bir hesap ya da ajanın yetkisinin yetmediği bir katman.
4. Kullanıcı noktaya tek adımda döner. Kod ve veri aynı ana birlikte döner. Dönmeden önce ekran neyin geri geleceğini, neyin gelmeyeceğini ve noktadan sonra eklenen verinin ne olacağını söyler.
5. Noktadan sonra gelen kayıtlar dönüşte silinmez, ayrı bir dala ya da dosyaya kopyalanır.
6. Dönüş noktaları ajandan bağımsız bir listede görünür: zaman, kapsam, hangi işten önce alındığı.

Uygularken:
- Önce elindeki araçları kullan: Git, veritabanının anlık görüntü, dal ya da zamanda geri yükleme özelliği. Yeni bir yedek sistemi kurma.
- Noktanın saklama süresini ve depolama maliyetini ayarlarda yaz.
- Bir test ekle: ajana bir dosyayı ve bir tabloyu değiştiren bir iş yaptır, ardından noktaya dön ve dosyanın ve tablonun işten önceki hâliyle birebir aynı olduğunu doğrula. İkinci test: noktadan sonra tabloya yeni bir kayıt ekle, dön ve o kaydın ayrı bir yerde saklandığını doğrula.

```

### AGENTS.md kuralı

```
## Her işten önce dönüş noktası al
- Dosya, veritabanı ya da ayar değiştiren bir işe başlamadan önce dönüş noktası al: commit, veritabanı anlık görüntüsü ya da dalı, ayar dosyalarının kopyası. Noktayı kullanıcıya söyle.
- Toplu silme, şema değişikliği ve yapılandırma değişikliğinden önce yeni bir nokta al.
- Noktanın neyi kapsamadığını yaz: dış servis çağrıları, gönderilmiş mesajlar, kabuk komutlarının dosya dışındaki etkileri.
- Bir değişikliği hafızandan tersine çevirmeye çalışma. Noktadan geri dön ve sonucu işten önceki hâlle karşılaştır.
- "Geri alınamaz" demeden önce dönüş noktalarına, yedeklere ve zamanda geri yükleme seçeneklerine bak.

```

## Kaynaklar

1. [Checkpointing](https://code.claude.com/docs/en/checkpointing), Anthropic
2. [Checkpointing](https://geminicli.com/docs/cli/checkpointing/), Gemini CLI Docs (Google)
3. [Backups](https://docs.railway.com/volumes/backups), Railway Docs
4. [Now it gets a little crazier](https://x.com/jasonlk/status/1946240562736365809), Jason Lemkin, X, 18 Temmuz 2025
5. [Checkpoints and Rollbacks](https://docs.replit.com/replitai/checkpoints-and-rollbacks), Replit Docs
6. [Data recovery](https://docs.replit.com/features/data-and-storage/data-recovery), Replit Docs
7. [Git integration](https://aider.chat/docs/git.html), Aider
8. [Branching](https://neon.com/docs/introduction/branching), Neon Docs
9. [An AI Agent Just Destroyed Our Production Data. It Confessed in Writing.](https://x.com/lifeofjer/status/2048103471019434248), Jer Crane (PocketOS), X, 25 Nisan 2026
10. [Your AI wants to nuke your database. Guardrails fix that.](https://blog.railway.com/p/your-ai-wants-to-nuke-your-database), Railway Blog, 29 Nisan 2026
11. [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

---

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).
