ViraStack
  • Academy
  • About
  • Support
HomeSourcesContribute
ViraStack

A frontend ecosystem: free guides, project templates, AI rules, and form components.

Products

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Explore

  • Academy
  • About
  • Brand
  • Support

© 2026 ViraStack.

Open source · MIT

Yapay Zekâ ile Frontend

09 / 19

Hooks ve izin modları

Ajanı kurala bağlama: format, lint ve test kapısı, tehlikeli işlemleri engelleme ve izin modları.

CLAUDE.md'ye "her değişiklikten sonra testleri çalıştır" yazdınız, ajan yine de bazen atlıyor. Bu bir hata değil. Kural dosyası modele bağlam olarak gider ve uyulması garanti değildir (bkz. Prompt ve context engineering). Her seferinde, istisnasız olması gereken bir şey için hook kullanılır.1

Hook nedir?

Hook, ajanın çalışmasındaki belirli anlarda otomatik çalışan bir shell komutudur.2 Ajan bir dosyayı düzenledikten sonra, bir komutu çalıştırmadan önce ya da işi bitirdiğini söylediğinde devreye girer. Model karar vermez, komut her seferinde çalışır.2

Frontend'de en çok işe yarayan üç an:

AnClaude CodeCursorÖrnek
Araç çalışmadan öncePreToolUsepreToolUse, beforeShellExecution.env'e yazmayı engelle
Dosya düzenlendikten sonraPostToolUseafterFileEditPrettier ile formatla
Ajan bitirdiğindeStopstopTestler geçmeden bitirtme

İki araçta da hook'lar proje klasörüne yazılır ve repoya commit edilebilir: Claude Code'da .claude/settings.json, Cursor'da .cursor/hooks.json.23 Böylece takımdaki herkesin ajanı aynı kurallarla çalışır.

Her düzenlemeden sonra formatla

Ajanın yazdığı kodu format kurallarınıza uydurmak için PostToolUse kullanın. matcher, hook'un yalnızca dosya düzenleyen araçlardan sonra çalışmasını sağlar:2

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
          }
        ]
      }
    ]
  }
}

Hook çalışırken olayın bilgisi komuta stdin'den JSON olarak gelir. Düzenlenen dosyanın yolu tool_input.file_path alanındadır, jq onu çekip Prettier'a verir.2 Aynı yerde npx eslint --fix de çalıştırabilirsiniz.

Tehlikeli işlemi engelle

PreToolUse hook'u araç çalışmadan önce devreye girer ve işlemi durdurabilir. Kural basittir: script çıkış kodu 2 ile biterse işlem engellenir ve stderr'e yazdığınız mesaj ajana geri bildirim olarak gider.2 Ajan nedenini okur ve başka bir yol dener.

#!/bin/bash
# .claude/hooks/protect-files.sh
FILE_PATH=$(jq -r '.tool_input.file_path // empty')

for pattern in ".env" "pnpm-lock.yaml" ".git/"; do
  if [[ "$FILE_PATH" == *"$pattern"* ]]; then
    echo "Blocked: $FILE_PATH is protected" >&2
    exit 2
  fi
done

exit 0

Script'i chmod +x ile çalıştırılabilir yapın ve PreToolUse altında Edit|Write matcher'ıyla kaydedin.2 Çıkış kodu 0 işlemi onaylamaz, yalnızca itiraz etmez. Normal izin akışı yine çalışır.2

Testler geçmeden bitirtme

Stop hook'u ajan cevabını bitirdiğinde çalışır. Çıkış kodu 2 burada "henüz bitmedi" demektir: ajan durmaz ve stderr'deki mesajla çalışmaya devam eder.12 Böylece "testler geçene kadar düzelt" bir rica olmaktan çıkar, kural olur:

#!/bin/bash
# .claude/hooks/require-tests.sh
INPUT=$(cat)
if [ "$(echo "$INPUT" | jq -r '.stop_hook_active')" = "true" ]; then
  exit 0
fi

if ! OUTPUT=$(pnpm test --run 2>&1); then
  echo "Tests are failing. Fix them before finishing:" >&2
  echo "$OUTPUT" | tail -n 30 >&2
  exit 2
fi

stop_hook_active kontrolü sonsuz döngüyü önler. Claude Code, bir Stop hook'u arka arkaya sekiz kez engellerse onu yok sayar.2

Warning

Stop hook'u yalnızca iş bittiğinde değil, ajan her cevabını bitirdiğinde çalışır.2 Ajana yalnızca soru sorduğunuzda da test koşar. Uzun bir test paketiniz varsa yalnızca değişen dosyaların testlerini çalıştırın.

İzin modları

Hook'lar kuralı zorlar. İzin modları ise ajanın ne kadar sormadan çalışacağını belirler. Claude Code'da Shift+Tab ile modlar arasında geçersiniz:4

ModAjan ne yaparNe zaman
Manual (default)Düzenleme ve komutlardan önce sorarTanımadığınız kod tabanı
acceptEditsDosyaları sormadan düzenler, komutlar için sorarPlan onaylandıktan sonra
planYalnızca okur ve plan önerirBüyük değişiklikten önce
autoHer şeyi yapar, ayrı bir model riskli işlemleri engellerUzun ve gözetimsiz işler
bypassPermissionsHiçbir şey sormazYalnızca izole bir container veya VM

Sürekli onay vermek yorucudur. Onuncu onaydan sonra okumadan tıklamaya başlarsınız.1 Bunun yerine güvendiğiniz komutlara önceden izin verin, tehlikeli olanları yasaklayın:45

{
  "permissions": {
    "allow": ["Bash(pnpm test *)", "Bash(pnpm lint)"],
    "ask": ["Bash(git push *)"],
    "deny": ["Bash(rm -rf *)", "Read(./.env)"]
  }
}

deny kuralları her modda geçerlidir, bypassPermissions dahil.4 Bir PreToolUse hook'unun engellemesi de modu değiştirerek aşılamaz.2

Caution

Hook'lar sizin kullanıcı yetkinizle çalışan shell komutlarıdır. Bir eklentiden ya da başkasının reposundan gelen hook'u çalıştırmadan önce script'i okuyun.

Ne zaman hangisi

İhtiyaçAraç
Tercih, stil, mimari kararıCLAUDE.md / AGENTS.md
Tekrar eden bir iş akışıSkill (bkz. Skills)
Her seferinde, istisnasız olması gerekenHook
Ajanın neye dokunabileceğiİzin kuralları ve izin modu

Kural dosyanızdaki bir satıra ajan sürekli uymuyorsa ve satır gerçekten şartsa, onu hook'a taşıyın.1

Kendin dene

  • Prettier hook'unu ekleyin ve ajandan tek tırnaklı string içeren bir dosya yazmasını isteyin. Dosya kaydedildiğinde tırnaklar ne oluyor?

  • .env koruma hook'unu ekleyip ajana ".env'e bir yorum satırı ekle" deyin. Ajan engellenince ne yapıyor?

  • Bir testi kasıtlı olarak bozun ve Stop hook'unu açın. Ajan kaç turda testi düzeltip duruyor?

  • Claude Code'da /hooks komutunu çalıştırın. Hangi hook'lar hangi olaya bağlı görünüyor?

Detaylı öğrenmek için

  • Resmi doküman: Claude Code "Automate actions with hooks"; tüm olaylar, matcher'lar, prompt tabanlı hook'lar ve sık hatalar.2

  • Resmi doküman: Cursor "Hooks"; olay listesi, permission çıktısı ve takım hook'ları.3

  • Resmi doküman: Claude Code "Permission modes"; her modun ayrıntısı ve auto modun nasıl karar verdiği.4

Kaynaklar

  • 1DocsClaude Code: Best practices

    Kural dosyası tavsiyedir, hook kesindir; Stop hook ile doğrulama ve izin onayı yorgunluğu.

  • 2DocsClaude Code: Automate actions with hooks

    Olaylar, stdin JSON, çıkış kodu 2, Prettier ve dosya koruma örnekleri, Stop hook sınırı.

  • 3DocsCursor: Hooks

    `.cursor/hooks.json`, olay listesi ve çıkış kodlarının anlamı.

  • 4DocsClaude Code: Permission modes

    Manual, acceptEdits, plan, auto, dontAsk ve bypassPermissions modları.

  • 5DocsClaude Code: Configure permissions

    `allow`, `ask` ve `deny` kurallarının yazımı ve önceliği.

Edit this page

Last updated: October 26, 2026

Previous step08. Spec-driven geliştirmeNext step10. Paralel ajanlar