<!-- https://avertgate.com/tr/docs/runtime-loop · Nasıl çalışır -->

# Çalışma döngüsü

AvertGate her araç çağrısında aynı döngüyü çalıştırır. Önce ucuz ve deterministik kontroller, sonra gerektiğinde anlamsal model.

#### Yakala

Ajan kimliği, oturum kimliği, araç adı ve argümanlar toplanır; oturumun yörüngesi yüklenir.

#### İstek denetimi (araç çalışmadan önce)

Politika, çıkış taraması ve döngü kırıcı sırayla çalışır. Politika kararı bu aşamada verilir; argümanlarda sır/PII varsa çağrı durdurulur. İsteğe bağlı AI Guard niyeti analiz eder.

#### Çalıştır

İzin verilen çağrı gerçek araca iletilir; sonuç alınır.

#### Yanıt denetimi (araç çalıştıktan sonra)

Dönen sonuç güvenilmeyen içerik sayılır ve dolaylı prompt injection için taranır.

#### Döndür ve kaydet

Temiz sonuç ajana döner. Olayın tamamı (argümanlar maskelenmiş olarak) zincirli denetim kaydına eklenir.

## Neden iki aşama?

**İstek aşaması** ajanın *ne yapmak üzere olduğunu* yönetir. **Yanıt aşaması** ise geri *ne geldiğini* inceler: araç sonuçları, getirilen belgeler ve web içeriği, dolaylı prompt injection'ın ajana girdiği güvenilmeyen kanaldır. İkisi tek adıma indirgenemez; bir saldırı genellikle yanıt aşamasında içeri girer ve ancak istek aşamasında etkisiz kalır.

## Sıra ve maliyet

| Adım | Tür | Tipik süre |
| --- | --- | --- |
| Politika, egress/ingress regex, döngü kırıcı | Deterministik, yerel | < 2 ms |
| AI Guard (isteğe bağlı) | Anlamsal model | ~50–100 ms (TypeSafe AI Jev) |

Deterministik adım bir çağrıyı zaten durduruyorsa model hiç çağrılmaz. Model çağrısı yalnızca ucuz kontrolleri geçen ve yeterince uzun içeriklerde yapılır.

## İstek ve yanıt aşamasında ne olur?

Her çağrı için tek bir nihai karar ve **tek bir denetim olayı** üretilir. Sonuç, çağrının hangi aşamada durduğuna göre değişir:

| Durum | Araç çalışır mı? | Ajan ne alır? | Denetim kaydı |
| --- | --- | --- | --- |
| İstek aşamasında ALLOW, yanıt temiz | Evet | Aracın sonucu | `ALLOW` |
| İstek aşamasında BLOCK | **Hayır** | Güvenli hata iletisi | `BLOCK` + neden + kural |
| İstek aşamasında ESCALATE, onaylandı | Onaydan sonra evet | Aracın sonucu (yanıt taramasından geçerse) | Nihai karar |
| İstek aşamasında ESCALATE, reddedildi / zaman aşımı / Slack hatası | **Hayır** | Güvenli hata iletisi | `BLOCK` |
| İstek geçti, **yanıt şüpheli** (enjeksiyon belirtisi) | **Evet, zaten çalıştı** | Sonuç *ajana verilmez*; güvenli hata iletisi döner | `BLOCK` (neden: ingress tarama) |

> **Yanıt aşamasındaki engel geri alma değildir**: Yanıt şüpheli bulunduğunda araç çağrısı çoktan gerçekleşmiştir. AvertGate araçtaki etkiyi geri alamaz; yalnızca zehirli içeriğin ajana ulaşmasını engeller. Geri alınamaz eylemleri bu yüzden istek aşamasında (`allow: false`, `constraints`, `require_approval`) kontrol altına alın. Ayrıntı: [Risk katmanları](/docs/risk-tiers).

Shadow mode'da hiçbir aşamada engelleme yapılmaz; yalnızca `SHADOW_BLOCK` / `SHADOW_ESCALATE` olarak kaydedilir ve sonuç ajana aynen verilir.

## Fail-closed: hata durumunda ne olur?

Bir denetleyici hata verirse (ağ, zaman aşımı, ayrıştırma) AvertGate sessizce ALLOW vermez. Davranış duruma göre aşağıdaki gibidir (`fail_closed` varsayılanı `true`):

| Durum | `fail_closed: true` (varsayılan) | `fail_closed: false` | Shadow mode |
| --- | --- | --- | --- |
| Başlangıçta politika yüklenemedi / ayrıştırılamadı | Ağ geçidi **başlamaz** (hata ile çıkar). Politikasız çalışma yoktur. | Aynı |  |
| Çalışırken politika yenilenemedi (bozuk dosya) | Geçerli politika **korunur**; yenileme hatası uyarı olarak yazılır. | Aynı |  |
| İstek denetleyicisi hata verdi (egress tarama, AI Guard Katman 1 zaman aşımı) | `BLOCK` | Kontrol atlanır, çağrı devam eder | `SHADOW_BLOCK` kaydı, çağrı devam eder |
| Yanıt denetleyicisi hata verdi (ingress tarama, AI Guard Katman 2) | `BLOCK`: araç çalıştı, sonuç ajana verilmez | Sonuç ajana verilir | `SHADOW_BLOCK` kaydı, sonuç verilir |
| İnsan onayı: ret, zaman aşımı (varsayılan 120 sn) ya da Slack hatası | `BLOCK`: bu ayardan bağımsız, her zaman engeldir. | Onay beklenmez, `SHADOW_ESCALATE` kaydı |  |
| Araç (upstream) hata verdi | Ajan "araç çalıştırılamadı" hatası alır; olay `BLOCK` olarak kaydedilir. | Aynı |  |
| Yönetim paneline bağlantı kesildi | Araç çağrıları **etkilenmez**. Olay gönderimi uyarı verir, başarısız grup atılır; bellekte en çok 500 olay tutulur. Yerel denetim kaydı yazılmaya devam eder. | Aynı |  |

Üretimde `fail_closed: true` bırakın. `false` yalnızca denetleyici arızasının kapsam boşluğundan daha zararlı sayıldığı, bilinçli kararlarda kullanılmalıdır.
