Kapılar
Önemli olan kural bir kapıya dönüşür. Uygulama araç seviyesinde durur: bir hook, bir izin, bir test vakası. Modelden hatırlaması istenmez.
| Bileşen | Adet | Nedir |
|---|---|---|
| Ajan | 14 | İnce tetikleyiciler: bir alanın kimin olduğu ve ne zaman devreye gireceği |
| Skill | 40 | Yöntemin kendisi; bir kez yazılır, ihtiyacı olan uygular |
| Komut | 18 | /crew-brainstorm · /crew-plan · /crew-review · /crew-ship · /crew-handoff · /crew-update · /crew-doctor · /crew-gates · /crew-skill · /crew-studio |
| Hook | 25 | Kapılar, ayrıca oturum ölçümü ve yönlendirme |
| Disiplin | 1 | İlkeler, akış, Definition of Done, yasaklar. CLAUDE.md’niz bu dosyayı import ediyor |
25 hook’un tamamı
Bölüm başlığı “25 hook’un tamamı”| Hook | Görevi |
|---|---|
prompt-approval.sh |
auto ve dontAsk modunda sizin yazdığınız /crew-approve commit (ya da push, commit+push) komutunu onay olarak kaydeder; kayıt stage edilene, HEAD’e ve oturuma bağlıdır |
guard-schedule.sh |
İstem zamanlayan bir araç çağrısını (CronCreate, ScheduleWakeup, RemoteTrigger, adı trigger, schedule ya da cron içeren bir MCP aracı), zamanlanan istem bir onaysa reddeder: onay sizin yazdığınızdır, oturumun kendine zamanladığı değil |
guard-question.sh |
Onay sorusunun (auto modunda tek tık) bir hook’a değil size ulaşmasını sağlar: yalnız sabit soruya ask der, başka bir ifadeyi ya da cevabı önceden doldurulmuş soruyu reddeder, bir PermissionRequest hook’u bağlı olabilirse soruyu kapatır |
guard-agent-model.sh |
Bir crew-* ajanının çağrıldığı iş kartını (dosyalar, değişiklik türü, verify komutu; üç satırda ya da tek satırda, files: … · change: … · verify: …, ve türün arkasında parantez içinde bir not olabilir) okur ve modeli karta uymayan çağrıyı reddeder: kart ya da model yoksa; kritik iş (migration, güvenlik, mimari, nedeni bilinmeyen hata ya da kritik yoldaki dosya) opus’un altındaysa; test yazımı, denetim ve inceleme sonnet’in altındaysa; özellik, bilinen hata düzeltmesi ya da refactor sonnet’in altındaysa (commit ajanı hariç); verify komutu olmayan iş haiku’daysa (metin değişikliği ve commit ajanı hariç); kritik yolda bütün dosyaları düz yazı (.md, .txt, .rst, .adoc) olan bir metin değişikliği sonnet’in altındaysa (böyle bir değişikliği sonnet yazar, opus denetler); verify’ı düşmüş kart aynı ya da daha düşük modelle tekrar çağrılırsa; kritik ve verify’lı iş arka plandaysa. Kartın tabanının üstündeki bir çağrı, kart above: <neden> eklemedikçe tabanda koşar (kapı modelini yeniden yazar). Crew dışında opus ya da fable isteyen bir çağrı, ya da haiku’da olmayan bir oturumda model belirtmeyen general-purpose çağrısı sonnet’te koşar. fable için CREW_ALLOW_FABLE=1 gerekir; CREW_MODEL_ROUTING=off kapatır |
agent-outcome.sh |
Crew ajanı durduğunda kartındaki verify komutunu koşar: ilk kırmızıda ajan düzeltmesi için çalışır tutulur; ikincide oturuma işi, daha düşükte koştuysa bir kez aynı modelde high effort’la, değilse bir üst modelle tekrarlaması söylenir. Her çağrı için .claude/state/model-outcomes.tsv dosyasına bir satır yazar, ilk denemesi çok sık düşen sınıfın tabanını yükseltir ve projenin kritik yollarını listeler. Kapı değildir: ajanın yazdığını geri alamaz. Verify komutu yalnız adıyla izin verdiyseniz çalışır (.claude/crew-model-rules içinde bir verify satırı; onu /crew-allow-verify <komut> ekler, hiçbir şey yazmadan reddedilenleri listeler; ya da permissions.allow içinde bir Bash(...) kuralı) ya da auto ve bypassPermissions modunda, seçeneksiz bilinen bir test ya da build çalıştırıcısıysa. Bilinen sınırlar: test çalıştırıcı ajanın yazdığı kodu çalıştırır (test dosyaları, package.json betikleri, conftest.py, Makefile), yani liste komutu sınırlar, testlerin ne yaptığını değil; düşmüş bir kart, kart değişene kadar düşmüş kalır; yönlendirme dosyalarını koruyan kabuk kuralı dosya adına bakar; kritik yol listesi kurulumda değil ilk oturumda yazılır; yönetilen politika yalnız managed ayar dosyasından okunur, macOS MDM, Windows registry ya da sunucudan değil. Yükseltilmiş bir tabanı /crew-loosen <agent> <change> <risk> indirir; bu komutu yalnız siz gönderebilirsiniz: bir kademe, her yükseltme için bir kez. Model seçimi yalnız crew-* ajanlarında uygulanır: Explore haiku’da, general-purpose sonnet’te tutulur (görevdeki bir above: <neden> satırı daha üst modeli korur), projenin kendi ajanları kendi modelinde ya da ana oturumun modelinde koşar ve hiçbiri kayda düşmez. Kapı taban zorlar, tavan zorlamaz: sıradan bir işin Opus’a verilmesini hiçbir şey engellemez. Oturumun o kaydı yazmasını engelleyen kabuk kuralı, parçalardan kurulan bir adla, bir yorumlayıcıyla ya da üst klasörü taşıyarak aşılabilir; böyle bir yazma indirimi yalnız kaldırmakla kalmaz, ekleyebilir de |
refuter-ledger.sh |
Bir crew-refuter ajanı durduğunda, bir bulgu hakkındaki kararını ajanın kendi görevinden ve cevabından okuyup .claude/state/crew-refuter.tsv’ye yazar; yalnız ikisi aynı bulguyu ve aynı açıyı adlandırıyorsa. findings.sh write --verified bir bulgu belgesini bu deftere tutar; oturum defteri yazamaz |
loop-guard.sh |
Her Bash, Edit ve Write çağrısından sonra turu sayar: çağrılar, dosya başına düzenlemeler, hatalar ve tek bir hatanın ne sıklıkla tekrarlandığı. 20 çağrı, tek dosyaya 4 düzenleme ya da 3 dosyaya düzenleme, 6 hata ve hataların en az beşte birini tek bir hatanın oluşturması birlikte tuttuğunda istem başına bir kez tetiklenir. Bu sürümde yalnız kaydeder: .claude/state/loop-guard.jsonl’ye bir satır sayaç (komut, yol ya da hata metni yok); oturuma hiçbir şey ulaşmaz. CREW_LOOP_GUARD=on oturumu bunun yerine tek bir yanlışlanabilir hipoteze geri gönderir; off kapatır. Asla engellemez |
map-stale.sh |
.crewforth/crew-map.json’ın andığı bir dosyada Edit ya da Write olunca, haritanın bu düzenlemeden önce tarandığını ve hâlâ ağaçla uyuşup uyuşmadığını hangi denetimin söylediğini ajan başına bir kez, bilgi olarak söyler. .crewforth/contracts.md dosyayı anıyorsa orada yaşayan proje kurallarını da kural ve ajan başına bir kez ekler; Stop’ta kullanıcıya oturumun düzenlemelerinin hangi kurallara dokunduğunu söyler. Harita yoksa, dosya haritada geçmiyorsa ya da CREW_MAP_STALE=off ise sessizdir. Hiçbir şeyi engellemez |
turn-check.sh |
Ana oturumun turu biterken CLAUDE.md içindeki Fast check (files): komutunu o turun değiştirdiği dosyalarda koşturur: turda yapılan düzenlemeler ve turun kendi commit’leri; önceden kirli olan dosyalar ve bir pull’un getirdiği commit’ler sayılmaz. Kırmızı olursa çıktıyı bir kez geri verir ki tur onu düzeltsin; izin kurallarının izin vermediği bir komut koşturulmaz ve size bir kez söylenir. Hiçbir şey tanımlı değilse hiçbir şey koşmaz. CREW_TURN_CHECK=off kapatır |
route-hint.sh |
Her isteğin yanına o işin sahibi ajanı yazar; uzmanlar siz istemeden devreye girer |
guard-bash.sh |
Araç seviyesinde komut kapısı: commit/push onayı, commit öncesi inceleme, lockfile commit’i öncesi bağımlılık denetimi, yıkıcı işlemler, uzaktan kod çalıştırma, hook kurcalama |
guard-write.sh |
Aynı korumanın Write/Edit tarafı. Sessizce silinebilen bir kapı, kapı değildir. Hedef yolu eşleştirmeden önce sadeleştirir, böylece bir kapı dosyasına farklı bir yazımla ulaşılamaz. |
guard-commit-scan.sh |
Gerçek iz ve sır tarayıcılarını PreToolUse üzerinden koşturur; böylece core.hooksPath ayarlanamayan yerlerde de commit kapısı çalışır |
guard-powershell.sh |
Model Crewforth’un kendi betiklerini PowerShell’de koşturmaya kalkınca onu Bash aracına geri gönderir; PowerShell’de bash WSL’inki olabilir ve betik düşer |
context-usage.sh |
Transcript’ten gerçek token sayısını okur ve her tura enjekte eder |
session-guard.sh |
Bağlam doluluğu %75’i ve %90’ı geçtiğinde birer kez uyarır, turu asla kesmez |
precompact-snapshot.sh |
Sıkıştırmadan hemen önce işin durumunu dosyalardan ve kapılardan yazar: dal, commit’lenmemiş dosyalar, kapı kaydındaki son ret ve kayıttaki bulgular; en fazla ~2 KB, deponun git dizininde. Sıkıştırmayı asla engellemez |
session-rehydrate.sh |
/compact veya /clear sonrasında devir notunu yeniden önünüze getirir; sıkıştırılan oturuma precompact-snapshot.sh’in onun için yazdığı durumu geri verir (yalnız aynı oturuma); oturuma projenin hangi dilde kurulduğunu söyler |
skill-trust.sh |
Crewforth’un getirmediği ve sizin de kabul etmediğiniz her skill ya da ajanı adıyla bildirir |
session-stats.sh |
Oturumun gerçekte ne yaptığını raporlar: patlayan araç döngüleri, tekrarlanan istekler, kesintiler. reflect ve handoff bunu okur, böylece geri dönüş hatırlamaya değil kayda dayanır |
session-update-check.sh |
Yeni bir sürüm yayımlandığında, oturum açılırken bir kez güncellenip güncellenmeyeceğini sorar; her sürüm onu getirecek kanala göre karşılaştırılır. Sorgu ayrık koşar ve en fazla günde bir kez yapılır, dolayısıyla çevrimdışı ya da proxy arkasındaki bir makinede oturum açılışı hiçbir şey ödemez; CREW_NO_UPDATE_CHECK=1 kapatır |
worktree-provision.sh |
Oturum .claude/worktrees/ dışında açılmış bir worktree’ye (git worktree add ../x) girdiğinde bu checkout’un .claude/ dizinini oraya kopyalar; tek bir checkout’a ait parçalar (worktrees/, state/, review kaydı, kapı günlüğü) hariç. .claude/ gitignore’da olduğu için böyle bir worktree’de hiç yoktur ve orada devam ettirilen bir oturum Crewforth’un hiçbir hook’unu yüklemez. Kopya yapılamazsa geçişi reddeder ve nedenini söyler |
branch-fresh.sh |
Oturum başlarken ya da sürerken dalı en son çekilmiş origin/<base> ile karşılaştırır (CLAUDE.md içindeki Base branch:, yoksa origin’in varsayılan dalı) ve yalnız önemli olduğunda konuşur: tabanı birleştirmek çakışacaksa, dal 3 günden eski bir noktadan açıldıysa ya da taban .claude/ veya CLAUDE.md dosyasını değiştirdiyse. git merge origin/<base> komutunu söyler, hiçbir şeyi değiştirmez. Sonraki oturum için çekme arka planda koşar, sizi hiç bekletmez; CREW_BRANCH_FRESH_FETCH=off onu, CREW_BRANCH_FRESH=off tüm denetimi kapatır |
Diğer iki hook deneysel bir özelliğe hizmet eder ve bir depo onu açana kadar hiçbir şey yapmaz.
İki git hook’u (pre-commit ve commit-msg) iz, sır, depo şişkinliği ve özel yol taramalarını koşturur. Sonuncusu şunun için var: yalnızca sizin makinenizde bulunan bir yol paylaşılan depoya yazılarak değil, yapıştırılarak sızar. Kendi $HOME’unuzu kendiliğinden engeller; yalnızca sizin tanıyabileceğiniz iç proje, müşteri ve sunucu adları ise gitignore’lanmış .private-terms.txt dosyasından gelir (.private-allowlist.txt kaçış kapısıdır). Her kapı eşleştirmeyi C yerel ayarında yapar; i ile I’nın birbirinin büyük/küçük hâli olmadığı Türkçe gibi bir sistem yerel ayarı yakalananı değiştirmez. Koşamayan bir tarama da commit’i geçirmez, durdurur. Plugin sürümü, skill-trust.sh ve worktree-provision.sh dışında bunların hepsini getirir. İlki neyin Crewforth’a ait olduğunu bir kurulum script’inin yazdığı kit-manifest.txt’ten okur ve plugin böyle bir dosya oluşturmaz. İkincisinin plugin’de işi yoktur: plugin’in hook’ları .claude/ içinde durmaz ve bir depo için açılmış plugin o deponun worktree’lerinde de yüklenir.
Kural → kapı
Bölüm başlığı “Kural → kapı”Solda kural, sağda o kuralın geçilmesine izin vermeyen şey.
| Kural | Neyle uygulanıyor |
|---|---|
| Commit ve push her izin modunda onayınızı gerektirir; stage etmek ve dal açmak serbesttir | guard-bash.sh, yalnızca sizin cevaplayabileceğiniz bir istem açar. İstemi yazılımın cevapladığı auto ve dontAsk modunda tek bir şeyi kabul eder: yalnızca /crew-approve komutunu taşıyan kendi mesajınız. Arkasında bir şey yokken, kapının o oturumda az önce reddettiğini onaylar (bir commit, bir push ya da ikisi de reddedildiyse ikisi), son 30 dakika içindeyse; açıkça yazılırsa /crew-approve commit, /crew-approve push ya da /crew-approve commit+push. Claude bu komutu sizin yerinize çalıştıramaz, zamanlayamaz ve neyin beklediğini tutan notu yazamaz. prompt-approval.sh bunu stage edilenin ağacı, HEAD, dal, remote’un push ettiği adres ve oturumla kaydeder; çağrı yalnızca o tek git commit -m … ya da git push <remote> <dal> olmalıdır, kayıt 30 dakika geçerlidir ve bir sonraki mesajınızla biter. Ret metni onay yolunun kapalı olduğunu söylüyorsa kayıt hook’u o oturumda bağlı değildir (örneğin eski bir Crewforth taşıyan worktree): Shift+Tab’a basın ya da kendi terminalinizden commit edin; doctor.sh bunu adıyla gösterir. auto modunda ayrıca sabit bir soru var (Commit only, Commit + push, Push only, No): crew-commit-agent çağrıldığında agent-outcome.sh onu oturuma verir, yani /crew-ship commit mesajıyla birlikte sorar; reddedilen bir commit de onu sunar; Crewforth’un guard-question.sh kapısı ona ask der, cevabı dolduran bir hook bunu ezemez, ve tıklamanız aynı biçimde kaydedilir. Bir PermissionRequest hook’u yine de bir istemi sizden önce cevaplayabilir; bağlı olabileceği yerde soru kapanır, default ve acceptEdits modunda kapının kendi istemi de: tek onay /crew-approve olur. Kullanıcı, proje ve yerel ayarlarda, managed-settings dosyalarında, skill, ajan ve komut ön bilgisinde ve kurulu plugin’lerde aranır; --settings ile verilen ayarlar ve sunucudan gelen managed ayarlar okunamaz. Warp plugin’inin yalnız bildirim gösteren hook’u sayılmaz: girdisi ve çalıştırdığı script’ler içerikle sabitlenmiştir, değişen biri yeniden sayılır. Commit üretemeyen düz bir git pull auto modunda koşar: git 2.33.1 ya da üstü, pull.ff, pull.rebase, merge.ff=false ya da dalın kendi uzlaştırma ayarlarından hiçbiri yok, -c, -C, --no-rebase ya da ikinci bir dal yok; başka her pull sorulur. cat ya da tee ile ekrana veya bir belge ya da veri dosyasına yazılan bir here-document metindir: içine yazılmış bir git commit hiçbir şey sormaz. plan ve bypassPermissions altında kapalı düşer |
| Bir commit, tam olarak kendi diff’i için temiz bir inceleme gerektirir | guard-bash.sh, crew-review-agent değişikliği temize çıkarırken kaydettiği değerlerle staged diff’in git nesne kimliğini ve incelemenin yapıldığı HEAD’i karşılaştırır. Başka bir diff’in — ya da aynı diff’in başka bir taban üzerindeki — incelemesi sayılmaz; boyut istisnası yoktur. Aynı çağrıda stage edip commit eden bir komut (git add b.txt && git commit), add’in henüz stage edilmemiş bir şeyi getireceği durumda reddedilir, çünkü kapı index’i komut koşmadan önce okur; commit’in yanındaki bir restore, reset, stash, checkout ya da merge doğrudan reddedilir |
| Lockfile stage eden bir commit, o lockfile değişikliğinin bağımlılık denetimini gerektirir | guard-bash.sh, stage edilmiş lockfile diff’inin (package-lock.json, uv.lock, go.sum, Cargo.lock ve desteklenen yığınların diğer lockfile’ları) git nesne kimliğini, dependency-audit skill’inin değişikliği denetledikten sonra yazdığı kayıtla karşılaştırır: clean, accepted (kullanıcının adıyla kabul ettiği bulgular) ya da unverified (denetim koşamadı ve kayıt sebebini söyler). Kayıt git dizininde durur, yani hiç commit’lenmez; lockfile’ın yanına stage edilen kod onu geçersiz kılmaz, başka bir lockfile değişikliği yeni bir denetim ister. Hook ağa çıkmaz, yalnız kaydı doğrular. Bir CVE lockfile değişmeden de yayımlandığı için doctor.sh ve oturum açılışı (haftada en fazla bir kez), son denetim CREW_DEPS_AUDIT_DAYS’ten (7 gün; 0 kapatır) eskiyse bunu söyler; record.sh --periodic hiçbir lockfile stage edilmemişken yapılan denetimi kaydeder ve hiçbir commit’i kapıdan geçirmez |
Yıkıcı işlemler: reset --hard, checkout -- ., force push, rm -rf, clean -f, --no-verify, amend |
guard-bash.sh, araç seviyesinde engeller. Bir git commit, kabuğun ve git’in okuduğu gibi okunur: -n, kısaltılmış --no-verif ya da --amen, bir yönlendirmenin ardına ya da yanlış eşleşen tırnakların içine saklanmış bir bayrak, başka bir dizinden ya da GIT_DIR / GIT_INDEX_FILE altında koşan bir commit olduğu şey olarak reddedilir. Alt komutunu kabuğun doldurduğu bir git çağrısı (git com${z}mit, git "$c") ya da PowerShell’de System.Diagnostics.Process üzerinden başlatılan git de reddedilir: kapı hangi git komutu olduğunu okuyabilmelidir. PowerShell’de Start-Process git’e ya da değişkende tutulan bir komuta verilen argümanlar, oluşturdukları git komutu olarak değerlendirilir. Argümanını çalıştırmayan bir komutun tümüyle tırnak içindeki argümanı (commit ya da tag mesajı, gh pr, issue ya da release başlığı ya da gövdesi, çağrının durduğu dizinde ve ayarlarını değiştiren bir seçenek olmadan koşan claude -p istemi, grep deseni, hiçbir yere gitmeyen bir echo) komut olarak okunmaz. Bir kapı dosyasını (hook, settings.json, kural dosyası, git hook’u) anan komut, dosyayı okuyorsa, bir hook betiğini koşturuyorsa ya da git ile stage ediyorsa geçer; onu anan başka her komut, adı ne olursa olsun reddedilir. Sonraki satırda devam eden bir komut (satır sonunda ters bölü, PowerShell’de ters tırnak) kabuğun koşturduğu gibi birleştirilerek okunur. Commit içeren ve 32 KB’tan büyük bir komut okunmadan reddedilir: mesajı bir dosyaya yazıp git commit -F <dosya> kullanın. 256 KB’tan büyük her Bash ya da PowerShell çağrısı da okunmadan reddedilir: süresi dolan bir hook hiçbir şeyi durdurmaz, uzun içerik bir dosyaya yazılır. Her hedefi kesin olarak /tmp, $TMPDIR ya da sistemin geçici klasörü içinde çözülen özyinelemeli bir rm geçer; geçici kökün kendisi, ilk seviyesindeki bir glob, .., çağrının açıkça atamadığı bir ad ve sudo, xargs, find -exec ya da eval arkasındaki rm reddedilmeye devam eder. Windows’ta ters bölüyle yazılmış bir sürücü yolu (C:\…), $USERPROFILE ve adıyla geçici kök ($TEMP, $TMP, $TMPDIR) ~ gibi reddedilir |
Uzaktan kod çalıştırma ve izin patlatma: curl…|bash, herkese yazılabilir chmod, dd of= |
guard-bash.sh, her modda sert engel. Çağrının içinde yazılmış bir Python programının veri olarak okuduğu indirme (curl … | python3 -c '…'), program yalnız metin çalıştıramayan ve sisteme ulaşamayan modülleri (json, sys, re, collections ve birkaç tane daha) içe aktarıyor ve Python’un bir şeyi dizeyle çalıştırdığı ya da aradığı yolların hiçbirini anmıyorsa geçer; çıplak | python3, başka her içe aktarma ve diğer her yorumlayıcı reddedilmeye devam eder |
Bir kapıyı devre dışı bırakmak: core.hooksPath’i ya da shim’in her commit’te koşturduğu proje hook zinciri crewforth.hookschain’i saptırmak (git config ile, .git/config’e ya da kendi ~/.gitconfig’inize yazarak, dahil edilen bir dosya ya da bir GIT_CONFIG_ değişkeni üzerinden), bir hook’u düzenlemek veya silmek, ya da kapıların dayandığı disiplin metnini değiştirmek |
guard-bash.sh (kabuk) + guard-write.sh (dosya araçları). İkisi de çözülmüş yolu eşleştirir: .. parçaları, çift eğik çizgi, Windows ayraçları ve sembolik bağlı bir üst dizin, düz yazımla aynı sonucu verir |
| Hiçbir API anahtarı, token veya özel anahtar commit’e girmez | pre-commit sır taraması; her desen kendi test vakasını taşır |
| Hiçbir makineye özel yol veya iç ad commit’e girmez | pre-commit özel yol taraması: kendi $HOME’unuz kendiliğinden, ayrıca gitignore’lanmış .private-terms.txt |
Hiçbir kimlik dosyası bağlama okunmaz: ~/.ssh/id_rsa, ~/.aws/credentials, *.pem, kubeconfig |
settings.json okuma reddi + guard-bash.sh |
| Commit’te yapay zekâ imzası veya üçüncü parti şablon adı bulunmaz | pre-commit + commit-msg git hook’ları |
| Hiçbir derleme çıktısı, vendor ağacı veya aşırı büyük blob staged edilmez | pre-commit depo şişkinliği taraması |
Hiçbir commit kalite çıtasını sessizce düşürmez: tetiklendiği yerde susturulan bir denetleyici, atlanan ya da silinen bir test, kalan bir testten çıkarılan assertion’lar, işin yerinde duran bir stub ya da boş catch |
pre-commit çıta koruması, desteklenen yığınlarda. Üretilmiş dosyalar ve dokümantasyon muaf; gerçek bir istisna, aynı commit’te incelemenin gördüğü bir .floor-allowlist.txt satırıdır |
.claude/ içinde beliren, denetlenmemiş bir skill ya da ajan adıyla bildirilir ve tarayıcı hükmüyle sunulur |
oturum başında skill-trust.sh |
| Sürekli açık bağlam yalın kalır | smoke-test.sh bileşen başına bayt bütçesi |
| Koşan bir oturum, güncellemeden sonra eski kurallara uymaya devam etmez | context-usage.sh sürüm karşılaştırması |
Her kural iki yönü için de vaka taşır: engellemesi gerekeni engellediği ve komşusunu (chmod 755, rm -rf build, git checkout -- src/app.js) engellemediği. Kanıtlanmamış bir kapı kapı değildir; rutin işte ateşleyen bir kapının da etrafından dolaşılır.
Kapılar kazaları durdurur, kararlı denemeleri değil. Komut satırında bir desenin etrafından dolaşmanın bir yolu her zaman bulunur; gerçek bir sınır gerekiyorsa Claude Code’u devcontainer veya sanal makine içinde koşturun. /crew-doctor böyle bir sınırınız olup olmadığını söyler.
Bir kapının ateşlendiğini görmek
Bölüm başlığı “Bir kapının ateşlendiğini görmek”Bash guard’ı her blok, onay istemi ve CLAUDE_GIT_OK ön onayı için (BLOCK / ASK / ALLOW), kapı dosyası yazma guard’ı da her blok için .claude/gate-log.tsv dosyasına bölüm ve kuralla birlikte bir satır ekler; komut yalnızca CREW_GATE_LOG_CMD=1 verilirse yazılır. Projenin .claude/ dizini varsa varsayılan olarak açıktır: git’in yok saydığı ya da repo olmayan projede .claude/gate-log.tsv dosyasında, aksi hâlde reponun kendi .git/crewforth-gate-log.tsv dosyasında; bu dosya hiçbir zaman commit’lenmez. Model kapısı retlerini ve notlarını (kartın tabanına indirilen bir model gibi) aynı kayda yazar. CREW_GATE_LOG=<yol> kaydı başka yere gönderir, /dev/null kapatır. Commit taraması satır yazmadan reddeder. Yalnızca yazar ve karardan sonra yazılır, dolayısıyla kararı değiştiremez. Bir şeyi kapının mı durdurduğunu yoksa modelin o yola hiç girmediğini mi bilmeniz gerektiğinde işe yarar, çünkü ikisi geriye tıpatıp aynı izi bırakır.
Durdurulan bir komutun neye dokunacağı
Bölüm başlığı “Durdurulan bir komutun neye dokunacağı”guard-bash.sh yıkıcı bir komutu durdurduğunda ya da bir commit veya push için sorduğunda, komutun neye dokunacağını retin altında ya da sorunun içinde tek satırla söyler:
| Komut | Satır |
|---|---|
git reset --hard |
izlenen dosyalardaki kaç commit’lenmemiş değişikliği silecek, bir hedefle (HEAD~3) daldan kaç commit düşecek |
git clean -f… |
aynı komutun kuru koşusu (-n, -d, -x, -X bayraklarıyla) ve listelediği yol sayısı |
git push --force |
son fetch’e göre uzak dalda olup bu dalda olmayan commit sayısı |
rm -r… |
proje içindeki, rm’nin kendi hedeflerinin her birinin altındaki dosyalar (sonraki komutun bir sözcüğü asla); proje dışındaki bir hedef ya da bir desen söylenir, sayılmaz |
| sorulan bir commit | alacağı dosyalar ve satırlar |
| sorulan bir push | göndereceği commit sayısı, ilk üçü başlığıyla |
Yalnız okur (status, diff, rev-list, log, clean -n, find, en fazla 10 000 dosya), hiçbir şey fetch etmez ve karardan sonra kendi alt kabuğunda koşar; yani başarısız olan ya da kabuğunu sonlandıran bir önizleme reti ya da soruyu olduğu gibi bırakır. PowerShell’deki Remove-Item önizleme almaz.
Advisor bir kapı değil
Bölüm başlığı “Advisor bir kapı değil”Claude Code’un advisor’ını açarsanız ona ne zaman danışılacağına model karar verir; çağrıyı sınırlayan ya da zorlayan bir şey yoktur. Yani ikinci bir görüş ekler, güvence eklemez: hiçbir kapı onu beklemez, işin geçip geçmediğine yine verify komutu karar verir, ve orta ya da daha yüksek bir bulgu yine akıl yürütmeyi görmemiş taze bir crew-refuter ister; bütün konuşmayı okuyan bir advisor bu değildir. Neye mal olduğu Oturum ve maliyet sayfasında.
Uygulanan kurallar (73)
Bölüm başlığı “Uygulanan kurallar (73)”Site derlenirken hook’lardan okunur (gate-report.sh’in türettiği envanterin aynısı); bir hook’a eklenen kural, bu sayfayı kimse düzenlemeden burada görünür.
| Kural |
|---|
| CLAUDE_GIT_OK ile önceden yetkilendirilmiş oturum |
| bu oturumu sürdürmek için komutla başlatılan bir Claude Code oturumu (bu oturum adına onay verebilirdi) |
| bir Claude Code oturumuna istem olarak onay veren bir komut (yalnız kullanıcının kendi mesajı onaylar) |
| başka bir git komutunun onaysız yaptığı commit |
| hiçbir onayın kapsamadığı bir push biçimi |
| onay anahtarı komutun içinde ayarlanmış |
| commit/push onay istemi |
| soru soramayan bir modda commit/push |
| kullanıcının eşleşen bir onayı olmadan commit/push |
| onay hook’u bir komutla besleniyor (onu yalnız Claude Code, kullanıcının mesajıyla çalıştırır) |
| bir komutta onay kaydının adı geçiyor (kaydı yalnız kullanıcının kendi mesajı yazar) |
| kullanıcının kendi onay mesajı bu komutu kapsıyor |
| okunamayacak kadar büyük bir PowerShell çağrısı |
| PowerShell’de disk seviyesinde yıkıcı komut |
| PowerShell’de indir-ve-çalıştır (… | iex) |
| PowerShell’de özyinelemeli zorla silme (Remove-Item -Recurse -Force) |
| PowerShell’de herkese yazılabilir ACL (icacls /grant Everyone:F) |
| başka bir Claude Code oturumunun ekranını ya da soketini açan komut (claude attach, claude agents, claude respawn, mesaj soketi): o oturumun sorularını, onay dahil, cevaplayabilir |
| komutta adı geçen bir model yönlendirme kaydı (onu kullanıcı ve Crewforth’un hook’ları yazar; kullanıcıya göstermek için Read aracıyla okuyun) |
| git commit –amend (kısaltılmış) |
| herkese yazılabilir chmod (777/1777/666/o+w …) |
| küme yıkımı (kubectl delete / helm uninstall) |
| dd of= (diskin üzerine yazma) |
| disk seviyesinde yıkıcı komut |
| zorlanmış git branch (-D / -f / -M / -C) |
| git -c core.hooksPath (git hook’larını devre dışı bırakır) |
| git -c crewforth.hookschain (projenin kendi hook zinciri, düşürülmüş ya da başka yere yönlendirilmiş) |
| okunamayacak kadar büyük bir komutta genişletme içeren git çağrısı |
| git commit –amend |
| kabuğun genişlettiği bir git commit argümanı |
| okunamayacak kadar büyük bir komutta git commit |
| iç içe kabukta git commit |
| kapının okuyamadığı bir git commit seçeneği |
| kabuğun doldurduğu bir komutla git commit |
| komutta ayarlanmış bir GIT_ değişkeni altında git commit |
| komutta verilen bir ayar altında git commit |
| tanınmayacak biçimde yazılmış git commit |
| git config –edit (yapılandırma dosyası yazmak için açılır) |
| git config core.hooksPath (git hook’larını devre dışı bırakır) |
| git config crewforth.hookschain (projenin kendi hook zinciri, düşürülmüş ya da başka yere yönlendirilmiş) |
| git config include.path (başka bir dosya yapılandırma olarak okunur) |
| git filter-branch/filter-repo |
| git rebase |
| System.Diagnostics.Process üzerinden başlatılan git |
| alt komutunu kabuğun doldurduğu git çağrısı |
| git update-index –add (.gitignore’u atlar, git add -f ile aynı) |
| hook atlama (–no-verify) |
| hook atlama (-n ya da kısaltılmış –no-verify) |
| bir kapı dosyasının yerinde düzenlenmesi |
| bir kapı yoluna dolaylı yazma (değişken + yönlendirme) |
| altyapı yıkımı (yönetilen her kaynağı siler) |
| kabuğa borulama (curl|bash ile uzaktan kod çalıştırma) |
| Bash aracıyla bir .env sırrını okuma |
| Bash aracıyla özel anahtar ya da kimlik dosyası okuma |
| bir kapı dosyasının üzerine yönlendirme |
| yapılandırma dizinini gösteren sembolik bağ (iki adımda bir kapı yolu) |
| komutta adı geçen çürütücü defteri (onu yalnız Crewforth’un hook’u yazar) |
| gözetimsiz altyapı uygulaması (aracın tek onayını atlar) |
| tüm ağacı geri alma (her şeyin üzerine git checkout/restore) |
| bir kapı dosyasına yazma ya da kurcalama (hook/settings/.git-hooks) |
| index’i ya da HEAD’i değiştirip aynı çağrıda commit eden komut |
| aynı çağrıda stage edip commit eden komut, stage edilmemiş değişiklikle |
| dizin değiştirdikten sonra commit |
| başka bir worktree’ye yönlendirilmiş commit |
| içeriği çalışma ağacından alan commit |
| inceleme kaydı yok |
| inceleme kaydı bu diff ile eşleşmiyor |
| inceleme kaydı staged diff ile eşleşiyor |
| aynı çağrıda stage edip commit eden komut, lockfile değişmiş |
| denetim kaydı olmayan staged lockfile |
| denetim kaydı staged lockfile’larla eşleşmiyor |
| denetim kaydı staged lockfile’larla eşleşiyor |
| lockfile listesi yüklenemedi |