TL;DR
- Bir Claude Code Mod'u üç dosyadan oluşur:
.claude-plugin/plugin.json, içinde{"modules":["./index.ts"]}bulunanhooks/hooks.jsonveregister(on)export eden bir TypeScript modülü. Yüklenmesi için başka bir şey gerekmez. - 2.1.272 sürümünde
/plugin-typeskomutunun yazdığı tipli yüzey,claude-code.d.tsiçinde 11,783 satırdır: 23 grup altında 84 olay veya çağrı adı.fs.readFilekalktı, artıkfs.readvefs.writevar. - 42 satırlık bir
tool.callhook'u, modelin hem Read hem Bash aracında gerçek anahtar yerineAPI_KEY=[REDACTED]okumasını sağladı: sağlıklı bir geçiş başına 27.9 ms ve oturuma eklenen yaklaşık 0 token. - 10 sn bütçesini aşan veya hata fırlatan bir hook atlanır ve altındaki komut çalışır. Log bunu söyler, ama sonuç bir bypass'tır: koruyucu bir Mod hata durumunda açık kalır (fail-open).
- Üretilen yol çalışıyor: tek bir cümle, yaklaşık 4 dakikada ve $1.23'a 190 satırlık bir Mod ile 53 satır test üretti.
claude plugin validateuyarısız geçti,claude plugin test4 pass / 0 fail verdi. - Bir şey yeniden üretilemedi: Mod
claude -paltında yüklendi, ama pty ile sürülen etkileşimli REPL'de iki denemede de sessiz kaldı. Gerçek bir terminalde test edene kadar REPL'de yüklenmeyi doğrulanmamış sayın.
Ölçümler ne söylüyor
Aşağıdakilerin hepsi, CLAUDE_CODE_ENABLE_FUNCTION_HOOKS ayarlı Claude Code 2.1.272 üzerinde çalıştırıldı: elle yazılmış redact-secrets adlı bir Mod'da ve onu kırmak için kurulan üç tek kullanımlık Mod'da. Özelliğin kendisi, hâlâ resmi spesifikasyona en yakın şey olan Function Hooks öneri issue'sunda izleniyor s3.
Araçlar dokümantasyondan önce geldi. 2.1.272 sürümü claude plugin validate, test, eval ve details ile geliyor; plugin --help komut bloğunda listelemese de test çalışıyor s3. Bir oturumda /plugin-types çalıştırmak .claude/types/claude-code.d.ts içine 11,783 satır yazdı, ayrıca 7 sunucudan 150 MCP aracını kapsayan 3,438 satırlık bir claude-code-mcp.d.ts oluşturdu s3. Üretilen tipleri saymak 23 grup üzerinde 84 olay veya çağrı adı veriyor ve dosya, Eylül yazılarında okumuş olabileceğiniz bir şeyi yeniden adlandırıyor: fs.readFile artık yok, yüzey fs.read ve fs.write s9. Aynı tipler, bir tool.call hook'unun { result, context? } veya { deny } döndürdüğünü söylüyor; text ve ref çekirdekten gelir ve hook'un kendi cevabının parçası değildir, yani text değil result yeniden yazılır s3.
claude plugin validate, Mod hiç çalışmadan önce bir footprint basar: ./index.ts hooks: tool.call ve ./index.ts calls: $.ui.toast, veya modül hiçbir host yeteneğine dokunmuyorsa calls: nothing on $ s4. Bu statik satır, awesome-claude-code-mods gibi bir dizinin bugün otomatikleştirebildiği tek incelemedir ve bir sonraki paragraf için önemlidir.
Redaksiyon -p modunda çalışıyor. 42 satırlık hook tool.call'u yakaladı ve dosyada ile shell çıktısında sk-test1234567890abcdef olan yerde model API_KEY=[REDACTED] aldı, hem Read hem Bash aracı için s3. Debug logu sağlıklı bir geçişi, worker geçişi ve next() dahil, 27.9 ms gidiş dönüş olarak ölçtü s3. claude plugin details Mod'u her oturuma eklenen yaklaşık 0 token olarak fiyatladı: Mod, prompt metni değil süreç içindeki koddur ve savunucularının shell hook'lara ve skill'lere karşı ana argümanı budur s7.
Koruyucu hata durumunda açık kalıyor. 15 sn uyuyan bir slow-guard Mod'u 10 sn bütçesinde kesildi, mesaj hook failed: slow-guard: exceeded 10000ms budget (tool.call; skipped; what is below it ran in its place) oldu ve echo hi yine de çalıştı s3. Hata fırlatan bir throw-guard Mod'u aynı şekilde atlandı: hook failed: throw-guard: boom (tool.call; skipped; what is below it ran in its place), süre 574.2 ms s3. Logda gürültülü, sonuçta bypass. Bir şeyi engellemek işi olan her Mod'u bunu akılda tutarak okuyun: koruyucudaki bir hata çökme değil, bir delik demektir.
Üretim ucuz. Tek bir cümleden model, yaklaşık 4 dakikada, 34 turda ve $1.23'a çalışan 190 satırlık bir Mod ile 53 satır test yazdı (19,053 çıktı token'ı, 497,282 cache okuma, 8,357 düşünme token'ı) s3. Bu Mod claude plugin validate'i uyarısız, claude plugin test'i 0.31 sn'de 4 pass / 0 fail ile geçti ve anahtarları canlı olarak gizledi s3. Elle yazılmış Mod'da claude plugin test, API anahtarı ve model çağrısı olmadan çalıştı: 0.25 sn'de 1 pass s3. Ajanlara Mod yazmayı öğreten bir skill zaten var, bir şablonla deneyi tekrarlamak isterseniz s12.
Yeniden üretilemeyen: pty ile sürülen REPL'de Mod 2 denemede yüklenmediği için $.ui.toast hiç görünmedi; -p içinde karşılığı yalnızca bir debug satırı olarak göründü. X'te dolaşan "yalnızca REPL" iddiasının tersi gözlendi ve kök neden izole edilemedi s8. 5 sn'lik takılı worker heartbeat'i de test edilmedi; yalnızca 10 sn'lik await bütçesi ve hata fırlatma yolu ölçüldü.
Ölçümler
| Durum | Mod ne yapıyor | Sonuç | Süre |
|---|---|---|---|
| redact-secrets, Read aracı | tool.call üzerinde result'ı yeniden yazar |
Model API_KEY=[REDACTED] görür |
geçiş başına 27.9 ms |
| redact-secrets, Bash aracı | Aynı hook, shell çıktısı | Model API_KEY=[REDACTED] görür |
geçiş başına 27.9 ms |
| slow-guard | tool.call içinde 15 sn uyur |
Atlandı, echo hi çalıştı |
10000 ms'de kesildi |
| throw-guard | tool.call içinde boom fırlatır |
Atlandı, komut çalıştı | 574.2 ms |
| üretilen Mod | Tek cümleden 190 satır + 53 satır test | validate: uyarı yok; test: 4 pass / 0 fail | ~4 dk, 34 tur, $1.23 |
redact-secrets üzerinde claude plugin test |
API anahtarı yok, model çağrısı yok | 1 pass | 0.25 sn |
claude plugin details |
Mod'un oturum maliyeti | ~0 eklenen token | n/a |
Protokol: Claude Code 2.1.272, function hooks bir ortam değişkeniyle açık. Her Mod, plugin.json, hooks/hooks.json ve tek bir index.ts içeren bir plugin dizinidir. Çalıştırmalar debug logu açık claude -p ile yapıldı; yerleştirilen bir dosya ve bir shell komutu sk-test1234567890abcdef içeriyordu. Fail-open durumları 15 sn uyuyan bir Mod ve hata fırlatan bir Mod ile, korunan komut olarak echo hi kullanılarak sürüldü. Etkileşimli REPL pty ile sürüldü ve iki denemede Mod'u yüklemedi.
Pazartesi yapılacaklar
- Bir oturumda
/plugin-typesçalıştırın ve.claude/types/claude-code.d.tsdosyasını açın: Eylül'den kalma herhangi bir kod parçasına güvenmeden öncefs.readvetool.callarayın. - Üç dosyalı Mod iskeletini yazın (
plugin.json,{"modules":["./index.ts"]}içerenhooks/hooks.json,register(on)export edenindex.ts) ve üzerindeclaude plugin validateçalıştırın:hooks:vecalls:footprint satırlarını okuyun. - En çok kullandığınız shell hook'u
result'ı yeniden yazan birtool.callhandler'ına taşıyın, sonra debug logundaki geçiş süresini shell sürümüyle karşılaştırın. - Mod'un yanına bir
claude plugin testdosyası ekleyin, böylece koruyucu CI'da API anahtarı olmadan çalışsın. - Her koruyucu handler'ı, hata durumunda
{ deny }döndüren bir try/catch ile sarın: bu sürümde bir istisna veya 10 sn'lik takılma sizi atlar ve komutun geçmesine izin verir. - Mod'u
claude -paltında ve gerçek etkileşimli terminalinizde ayrı ayrı test edin ve hangisinde yüklendiğini not edin. - Üçüncü taraf bir Mod'u kurmadan önce üzerinde
claude plugin validateçalıştırın vecalls:satırında Mod'un kullanmak için hiçbir nedeni olmayan host yeteneklerini sayanları reddedin.
Daha fazlası için
- Öneri issue'sunu baştan sona okuyun, yorumlardaki mimari PDF'i dahil:
register(on), bütçeler ve worker geçişi için yazılı tek sözleşme budur s3. - Host sürecinde bir
ModApi'ye karşı TypeScript çalıştıran Command Code Mods tasarımıyla karşılaştırın: iki sistem aynı şekli ve erken erişim kısıtını paylaşıyor s2. - claudefa.st önizlemesi özellik hâlâ bir öneriyken yazıldı: 3 Eylül metni ile 2.1.272 binary'si arasında neyin değiştiğini görmek için faydalı s9.
- Prathkum'un notu, süreç içi hook'ların token ve gecikmede shell hook'lardan neden iyi olduğunu anlatan en net kısa açıklama s7.
- cc-mod-waitwhat okumak için iyi bir ilk Mod: prompt'un üstünde UI, transkripte hiçbir şey yazılmıyor s11.
- cc-arcade,
$.ui'nin ne kadar uzağa uzandığını gösteriyor: bir Mod'dan prompt'un üstünde çizilen oyunlar s5. - Hooks referansı hâlâ shell modelini anlatıyor; her eski olayı yeni
noun.eventadıyla eşlemek için açık tutun s1. - X'teki şüpheciler plugin'lerin bunu zaten karşıladığını ve yüzeyin her sürümde kırılacağını savunuyor; yeniden adlandırılan
fsgrubu onlar için bir veri noktası s23.
Kaynaklar
- Function Hooks proposal (issue #91870), GitHub, anthropics/claude-code. Neden okunmalı: Mod'lar için spesifikasyona benzeyen tek metin, yorumlarda mimari PDF'i ve sevkiyat izi ile.
- Hooks reference, Claude Code docs. Neden okunmalı: geçiş yaptığınız shell hook modeli, olay olay.
- Command Code Mods documentation, Command Code. Neden okunmalı: aynı süreç içi TypeScript şekline sahip öncül, Anthropic'in neyi kopyaladığını veya neyden kaçındığını görmek için faydalı.
- awesome-claude-code-mods, GitHub, karanb192. Neden okunmalı: herkese açık Mod'ların otomatik taranan dizini, tek incelemesi validate footprint'i.
- cc-arcade, GitHub, sezaakgun. Neden okunmalı: özelliği görünür kılan demo ve
$.uituru. - Boris Cherny announcement tweet, X, Boris Cherny. Neden okunmalı: blog yazısı olmadığı için bir Anthropic mühendisinden lansman açıklaması.
- Prathkum: Function Hooks explained, X, Prathkum. Neden okunmalı: zaten shell hook yazan biri için hook ve Mod farkının en iyi kısa açıklaması.
- shipnotesai reaction thread, X, shipnotesai. Neden okunmalı: "yalnızca REPL" iddiasının dolaştığı yer, bizim çalıştırmamız bunu yalanladı.
- Claude Code Function Hooks: Preview Behind a Flag, claudefa.st. Neden okunmalı: sürüm öncesi açıklama, öneriyi binary ile karşılaştırmak için iyi.
- cc-mod-waitwhat, GitHub, GGGODLIN. Neden okunmalı: transkripte değil UI'ya yazan küçük, okunaklı bir Mod.
- claude-mods-skill, GitHub, BeLazy167. Neden okunmalı: tek cümlelik deneyi tekrarlamak isterseniz Mod üreten bir skill.
- AxialisSoftware reaction, X, AxialisSoftware. Neden okunmalı: şüpheci görüş, tek bir tweet'te.
FAQ
Bir Mod bugün shell hook'larımın yerini alıyor mu?
Engellemesi gereken hiçbir şey için henüz değil. 2.1.272'de hata fırlatan veya 10 sn'yi aşan bir hook atlanır ve komut çalışır. Shell hook'lar çalışmaya devam eder, bu yüzden engelleyenleri, bildirilmiş bir catch veya fail-closed seçeneği gelene kadar orada tutun.
Mod sorunsuz çalışıyorsa validate neden önemli?
Çünkü hooks: ve calls: satırları, bir Mod'un $ üzerinde neye dokunduğunu gösteren tek statik görünümdür. Kendi Mod'unuz için footprint'i doğrular; üçüncü taraf bir Mod için, kod sürecinizde çalışmadan önce aldığınız incelemenin tamamıdır.
Bir Mod oturum başına ne kadar maliyetli?
claude plugin details yaklaşık 0 eklenen token bildirdi. Mod, prompt'ta metin değil motorda çalışan koddur ve bir skill veya CLAUDE.md kuralına göre ana avantajı budur.
Mod neden -p içinde yüklendi ama REPL'de yüklenmedi?
Bilinmiyor. claude -p hook'u yükleyip uygularken pty ile yapılan iki deneme sessiz kaldı. Olası neden özelliğin kendisi değil pty ortamı, bu yüzden iki yönden birine güvenmeden önce kendi terminalinizde test edin.
AIDive