Bu sayfa İngilizce belgenin çevirisidir. Komutlar, tanımlayıcılar ve örnekler aynıdır. Çalışma zamanı 7.24.4 · SDK 2.6.7. İngilizce kaynak
Yaşam döngüsü kancaları
Durum: Etkin Kapsam: güncel durum Son inceleme: 2026-08-23 Sahip: ax-code çalışma zamanı
Yaşam döngüsü kancaları, çalışma zamanını yeniden derlemeden ajan olaylarında kabuk komutları çalıştırmanızı sağlar. İzin kurallarını ve yalıtım sandbox’ını tamamlarlar: kancalar belirleyici yan etkilerdir (“her zaman biçimlendir”, “asla force-push yapma”), istemler ise danışma amaçlı kalır.
Olaylar
| Olay | Ne zaman | Engelleyebilir mi? |
|---|---|---|
| PreToolUse | Bir araç yürütülmeden önce | Evet (blockOnFailure: true) |
| PostToolUse | Bir araç tamamlandıktan sonra (args: araç bağımsız değişkenleri). Sınırlı stdout / yapılandırılmış geri bildirim, modelin gördüğü araç sonucuna eklenir; aşağıya bakın |
Hayır |
| PostToolUseFailure | Bir araç fırlattıktan sonra (args: { args, error }, hata metni 4,000 karakterle sınırlı). Ateşle ve unut; hata modele değişmeden ulaşır |
Hayır |
| Stop | Bir oturum turu tamamlandığında (paketler otomasyon yoluyla duruşta çalışabilir) | Hayır |
| UserPromptSubmit | Bir kullanıcı istemi gönderildiğinde, ileti kalıcılaşmadan önce | Evet (blockOnFailure: true) |
| PreCompact | Oturum sıkıştırması çalışmadan önce (args: { auto, overflow }) |
Hayır |
| SubagentStop | Bir task alt ajanı bittiğinde (args: { agent, status }) |
Hayır |
| SessionStart | Üst düzey bir oturum oluşturulduğunda (args: { sessionID, title, time }) |
Hayır |
| SessionEnd | Bir oturum kaldırıldığında veya arşivlendiğinde (args: { sessionID, reason }, reason değeri "remove" veya "archive" olur) |
Hayır |
| PostCompact | Bir oturum sıkıştırması başarıyla tamamlandıktan sonra (args: { sessionID, reason }, reason değeri "auto" veya "manual" olur; sıkıştırma vazgeçerse, örneğin bağlam taşmasında, ateşlenmez) |
Hayır |
| Interrupt | Bir kullanıcı veya operatör çalışan bir turu açıkça iptal ettiğinde (args: { sessionID }; normal tur tamamlanmasında veya iç temizlikte ateşlenmez) |
Hayır |
Dört oturum yaşam döngüsü olayı (SessionStart, SessionEnd, PostCompact, Interrupt) ve PostToolUseFailure yalnızca gözlemdir: ateşlenir ve unutulur, yaşam döngüsü yolunu asla engellemez ve yükleri yalnızca kimlik/gerekçe/zaman damgası taşır — konuşma metni, özet veya araç çıktısı asla taşımaz. Alt ajan oturumları SessionStart ateşlemez (zaten SubagentStop üzerinden görünürler). SubagentStop hem task hem task_parallel tarafından başlatılan çocuklar için ateşlenir.
PostToolUse geri bildirimi modele ulaşır
Bir PostToolUse kancası modele metin geri verebilir. Araç sonucuna bir
<hook_feedback event="PostToolUse"> bloğu içinde, aracın kendi çıktısından sonra eklenir; çıktının yerini asla almaz ve asla engellemez.
- Eski girdiler (
protocolyok): 0 çıkış koduyla biten bir kancanın kırpılmış stdout’u. protocol: "claude-code"girdileri:hookSpecificOutput.additionalContext, birreasondeğeri ({"decision": "block", "reason": "..."}kararı) veya kanca 2 ile çıktığında stderr. Diğer sıfır olmayan çıkışlar hiçbir şey katmaz.
Geri bildirim kanca başına 4,000 karakter ve araç çağrısı başına 8,000 karakterle sınırlıdır; gürültülü bir kanca
bağlamı basamaz. format-after-edit paketini yararlı kılan budur: anımsatıcısı artık yalnızca günlükte değil, modelin sonraki turuna iner.
Bu adlar AX Code iç eklenti tetiklerine (tool.execute.before / tool.execute.after) artı oturum düzeyi istem, sıkıştırma, alt ajan ve duruş kancalarına eşlenir. Sentetik devam istemleri (iç agentRouting: "preserve" istemleri) UserPromptSubmit ateşlemez.
Paketleri açın
Proje kancaları ve eklentileri depo denetimli kod yürütür; bu yüzden .ax-code/hooks.json, .ax-code/plugin/ ve proje yapılandırmalı eklentiler varsayılan olarak kapalıdır. Onları inceledikten sonra AX Code’u başlatırken deponun dışında kabul edin:
AX_CODE_TRUST_PROJECT_CONFIG=1 ax-code
Ardından projenizde .ax-code/hooks.json oluşturun:
{
"packs": ["format-after-edit", "block-force-push", "require-tests-on-stop", "protect-env-files", "log-bash-commands"]
}
Resmi paketler (≥5)
| Paket | Olaylar | Açıklama |
|---|---|---|
format-after-edit |
PostToolUse | Düzenlemelerden sonra ajana biçimlendirmeyi anımsatır |
block-force-push |
PreToolUse | git push --force / -f engeller |
require-tests-on-stop |
Stop | Değişikliklerden sonra doğrulamayı anımsatır |
protect-env-files |
PreToolUse | Araçlar .env dokununca uyarır |
log-bash-commands |
PreToolUse | Denetim için bash komutlarını günlüğe yazar |
Özel kancalar:
{
"hooks": [
{
"event": "PreToolUse",
"matcher": "bash",
"command": "echo running bash",
"blockOnFailure": false
}
]
}
Claude Code hat protokolü (isteğe bağlı)
Claude Code için yazılmış kancalarınız varsa bir girdi
"protocol": "claude-code" ile Claude Code hat protokolüne kabul edebilir:
{
"hooks": [
{
"event": "PreToolUse",
"matcher": "bash",
"command": "my-claude-code-hook.sh",
"protocol": "claude-code"
}
]
}
Engellenebilir olaylar (PreToolUse, UserPromptSubmit) için kabul edilen girdiler
blockOnFailure denetimi yerine Claude Code anlamıyla çözülür:
- Çıkış 2 eylemi engeller; kancanın stderr’i gerekçe olarak gösterilir. Bozuk stdout yine engeller (güvenli başarısız).
- Çıkış 0 ve stdout JSON
{"permissionDecision": "allow"|"deny"|"ask", "reason"?}:allowdevam eder;deny,reasonile engeller;askaraç çağrısını gerekçeyi gösteren etkileşimli birhookizin isteminde duraklatır (varsayılan"hook requested user confirmation"). İstem yalnızca etkileşimlidir: hiçbiralwayskuralı, joker verme veya otonom otomatik onay onu yanıtlayamaz ve başsız bir çalıştırma onu reddeder; model bunu olağan bir izin reddi olarak görür. Daha sonradenyyanıtlayan bir kanca, daha öncekiasküzerine kazanır.UserPromptSubmitbir istem bağlanacak araç çağrısına sahip değildir; bu yüzdenaskorada yine engeller. İç içe Claude Code biçimi{"hookSpecificOutput": {"permissionDecision": "...", "permissionDecisionReason": "..."}}takma ad olarak kabul edilir. - Başka herhangi bir çıkış engellemeyen bir hatadır (günlüğe yazılır, eylem devam eder).
Yalnızca gözlem olayları çözücüyü tümüyle yok sayar — asla engelleyemezler.
protocol alanı olmayan girdiler eskisi gibi davranır.
Kanca komutlarına sunulan ortam değişkenleri:
HOOK_EVENT— olay adı sırasıyla PreToolUse, sonra PostToolUse, sonra PostToolUseFailure, sonra Stop, sonra UserPromptSubmit, sonra PreCompact, sonra SubagentStop, sonra SessionStart, sonra SessionEnd, sonra PostCompact, sonra InterruptHOOK_TOOL— araç kimliğiHOOK_SESSION_IDHOOK_ARGS_JSON— JSON araç bağımsız değişkenleriHOOK_ARGS_STDIN=1— tam JSON bağımsız değişkenleri stdin üzerinde her zaman vardır; 32 KiB’den büyük yüklerdeHOOK_ARGS_JSONboşturHOOK_PACK— uygulanabilirse paket adı
Kanca alt süreçleri AX Code ortamının temizlenmiş bir sürümünü devralır. AX Code olağan platform ve
araç değişkenlerini korur ancak gizli benzeri adları, kimlik bilgisi taşıyan URL’leri, SSH_AUTH_SOCK gibi kimlik bilgisi yardımcılarını
ve NODE_OPTIONS gibi süreç enjeksiyonu değişkenlerini kaldırır. Yukarıdaki HOOK_* protokol değişkenleri
temizlikten sonra eklenir ve her zaman vardır.
Ortam kimlik bilgileri gerektiren tam güvenilen eski kancalar, önceki davranışı deponun dışında geri getirebilir:
AX_CODE_HOOKS_FULL_ENV=1 AX_CODE_TRUST_PROJECT_CONFIG=1 ax-code
Bu kaçış kapağı her ortam değişkenini her açık kancaya gösterir. Bir depo bunu
.ax-code/hooks.json üzerinden isteyemez; yalnızca tüm kancaları ve paketleri inceledikten sonra kullanın.
Güvenlik notu: ortam temizliği ortam kimlik bilgisi açıklığını azaltır ancak kanca komutlarını sandbox’a almaz. Kancalar erişilebilir dosyaları okuyabilen ve konak ağını kullanabilen rastgele kabuk kodu olarak kalır. Onları güvenilen kod olarak ele alın ve açık her kancayı ve paketi inceleyin.
Yalıtımla ilişki
Kancalar sandbox’ın yerini almaz. Şunları kullanın:
- Taşınabilir yazma/ağ sınırları için uygulama yalıtımı
- Varsa çekirdek zorlamalı bash sandbox’ı için işletim sistemi yalıtımı (varsayılan
"auto"arka ucu) - İlke yan etkileri ve force-push gibi sert engeller için kancalar
Bkz. Sandbox kipi ve SECURITY.md.