Claude’un bir PR’ı incelemesine, bir log dosyasını özetlemesine ve testler üretmesine ihtiyacınız var — ancak hep aynı şablon kodu yazıyorsunuz: çıktıyı yakala, JSON’u ayrıştır, hataları ele al. Bu tarifler, önceden yazılmış ve test edilmiş şablon kodlardır.
Bu bölümdeki her tarif, kopyalayıp özelleştirebileceğiniz ve bugün çalıştırabileceğiniz bağımsız bir kabuk betiğidir. Hepsi aynı kalıbı takip eder: standart Unix araçlarıyla bağlam topla, claude -p’ye ilet ve yapılandırılmış çıktıyı yakala. Bunları cron’a ekleyin, CI’a bağlayın veya elle çalıştırın.
Sabah Kod İncelemesi
Gece boyunca yapılan değişiklikleri inceleyin ve yapılandırılmış bir özet oluşturun (bunu her sabah standup’tan önce kullanıyorum). Bunu saat 9’da cron’dan çalıştırın veya bir Slack webhook’undan tetikleyin.
Betik, belirli bir tarihten itibaren git log’unu çeker, boş bir diff olup olmadığını kontrol eder ve özeti analiz için Claude’a gönderir:
#!/bin/bash# morning-review.sh -- Dünden bu yana tüm değişiklikleri incele# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefail
SINCE="${1:-yesterday}"DIFF=$(git log --since="$SINCE" --oneline --stat)
if [ -z "$DIFF" ]; then echo "No changes since $SINCE" exit 0fi
CLAUDECODE="" claude -p "Review these git changes and summarize:- What changed (grouped by area)- Any potential issues or risks- Suggested follow-ups
Changes:$DIFF" \ --output-format text \ --max-budget-usd 0.50 \ --no-session-persistence \ --permission-mode bypassPermissionsPencereyi özelleştirmek için bir tarih argümanı iletin: ./morning-review.sh "3 days ago" veya ./morning-review.sh "2026-03-15". Dosya erişimini devre dışı bırakmak ve daha düşük maliyetle salt metin analizi olarak tutmak için --tools "" ekleyin.
Yukarıdaki en basit tarifi seçin ve kendi deponuzda çalıştırın. Çalıştırmadan önce tahmin edin: Claude kaç tur sürecek? Maliyet ne olacak? Sonra kontrol edin:
claude -p ”…” —output-format json | jq ‘{turns: .num_turns, cost: .total_cost_usd}’
Tahminleriniz yakın mıydı? Tur sayılarını ve maliyetleri anlamak, tarif optimizasyonunun temelidir.
Otomatik Commit Mesajları
Hazırlanmış değişikliklerden konvansiyonel commit mesajları oluşturun. Betik, cache’lenmiş diff’i okur, saf metin analizi için --tools "" ile Claude’a gönderir, ardından sonucu kabul etmenize, düzenlemenize veya reddetmenize olanak tanır.
#!/bin/bash# commit-msg.sh -- Hazırlanmış değişikliklerden commit mesajı oluştur# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefailDIFF=$(git diff --cached --stat)PATCH=$(git diff --cached)[ -z "$DIFF" ] && { echo "No staged changes."; exit 1; }
MSG=$(CLAUDECODE="" claude -p "Generate a conventional commit message (type(scope): description format) for:Stat: $DIFFPatch: $PATCHKeep first line under 72 chars. Add bullet-point body if needed." \ --output-format text --max-budget-usd 0.15 \ --no-session-persistence --permission-mode bypassPermissions --tools "")
echo "$MSG"read -p "Use this message? (yes/edit/no): " DECISIONcase "$DECISION" in yes) git commit -m "$MSG" ;; edit) git commit -e -m "$MSG" ;; *) echo "Aborted." ;;esacÜç seçenekli istem kontrolü sizde tutar. edit seçmek, $EDITOR’ınızı commit etmeden önce ayarlayabilmeniz için oluşturulmuş mesajla birlikte açar.
Sürüm Notları Oluşturucu
Bir commit aralığından yapılandırılmış sürüm notları oluşturun. Bu tarif, alt akış araçlarının (statik bir site, bir Slack botu, bir e-posta şablonu) doğrudan tüketebileceği tutarlı bir biçim dayatmak için --json-schema kullanır.
#!/bin/bash# release-notes.sh -- İki etiket arasında sürüm notları oluştur# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefail
FROM="${1:-$(git describe --tags --abbrev=0)}"TO="${2:-HEAD}"COMMITS=$(git log "$FROM".."$TO" --oneline)
[ -z "$COMMITS" ] && { echo "No commits between $FROM and $TO"; exit 1; }
CLAUDECODE="" claude -p "Generate release notes from these commits:$COMMITS
Categorize each change as feature, fix, refactor, docs, or chore." \ --output-format json \ --json-schema '{ "type": "object", "properties": { "version": {"type": "string"}, "date": {"type": "string"}, "sections": { "type": "array", "items": { "type": "object", "properties": { "category": {"type": "string"}, "items": { "type": "array", "items": {"type": "string"} } }, "required": ["category", "items"] } } }, "required": ["version", "sections"] }' \ --max-budget-usd 0.30 \ --no-session-persistence \ --permission-mode bypassPermissions \ --tools ""--json-schema’nın çift kodlanmış bir sonuç ürettiğini unutmayın: JSON zarfındaki result alanı kendi başına bir JSON dizesidir. İki kez ayrıştırın: jq '.result | fromjson'.
PR Analizcisi
Bir pull request’i riskler, karmaşıklık ve inceleme önerileri açısından analiz edin. Bu tarif, yapılandırılmış, makine tarafından okunabilir çıktı elde etmek için gh pr diff’i doğrudan bir --json-schema ile Claude’a iletir.
#!/bin/bash# pr-analyzer.sh -- Bir PR'ı riskler ve öneriler açısından analiz et# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefail
PR_NUM="${1:?Usage: pr-analyzer.sh <pr-number>}"DIFF=$(gh pr diff "$PR_NUM")PR_INFO=$(gh pr view "$PR_NUM" --json title,body,additions,deletions)
CLAUDECODE="" claude -p "Analyze this pull request:
PR Info:$PR_INFO
Diff:$DIFF
Evaluate: risk level, test coverage gaps, and review suggestions." \ --output-format json \ --json-schema '{ "type": "object", "properties": { "risk_level": {"type": "string", "enum": ["low", "medium", "high"]}, "summary": {"type": "string"}, "concerns": { "type": "array", "items": {"type": "string"} }, "suggestions": { "type": "array", "items": {"type": "string"} }, "test_gaps": { "type": "array", "items": {"type": "string"} } }, "required": ["risk_level", "summary", "concerns", "suggestions"] }' \ --max-budget-usd 0.50 \ --no-session-persistence \ --permission-mode bypassPermissions \ --tools ""Hızlı değerlendirme için çıktıyı jq’ya iletin: ./pr-analyzer.sh 42 | jq '.result | fromjson | .risk_level'. CI’da, birleştirmeleri risk_level alanına göre koşullandırabilirsiniz.
Dokümantasyon Oluşturucu
Kaynak kodundan API dokümantasyonu oluşturun. Bu tarif, Claude’u salt okunur işlemler artı çıktı dosyası için Write ile sınırlamak üzere --allowedTools kullanır. Bash çalıştıramaz veya mevcut dosyaları Edit edemez.
#!/bin/bash# generate-docs.sh -- Kaynak koddan API dokümantasyonu oluştur# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefailSRC_DIR="${1:-.}"OUTPUT="${2:-API.md}"
CLAUDECODE="" claude -p "Read source files in $SRC_DIR and generate API documentation in Markdown. Include function signatures, parameter types, return types, usage examples, and error conditions. Write output to $OUTPUT." \ --output-format json --max-budget-usd 1.00 \ --no-session-persistence --permission-mode bypassPermissions \ --allowedTools "Read,Grep,Glob,Write"--allowedTools bayrağı buradaki temel güvenlik mekanizmasıdır. Claude, Read, Grep ve Glob ile kod tabanını keşfedebilir ve dokümantasyon dosyasını yazabilir, ancak rastgele komutlar çalıştıramaz veya mevcut kaynak dosyalarını değiştiremez. Bu, betiği gözetimsiz pipeline’larda çalıştırmayı güvenli kılar.
Bütçe Güvenli Çalıştırıcı
Bir dosyadan birden fazla istemi toplam bütçe takibi ile çalıştırın. Her istem, toplamın limitinizi asla aşmaması için daralan bir bütçe tavanı alır.
#!/bin/bash# budget-runner.sh -- Toplam bütçe tavanı ile istemleri çalıştır# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefail
MAX_TOTAL="${1:-5.00}"TOTAL_SPENT=0
while IFS= read -r prompt; do [ -z "$prompt" ] && continue REMAINING=$(echo "$MAX_TOTAL - $TOTAL_SPENT" | bc) REMAINING=$(echo "if ($REMAINING < 0.05) 0.05 else $REMAINING" | bc) [ "$(echo "$TOTAL_SPENT >= $MAX_TOTAL" | bc)" -eq 1 ] && { echo "Budget exhausted (\$$TOTAL_SPENT / \$$MAX_TOTAL)."; break; }
RESULT=$(CLAUDECODE="" claude -p "$prompt" \ --output-format json --max-budget-usd "$REMAINING" \ --no-session-persistence --permission-mode bypassPermissions)
if ! echo "$RESULT" | jq empty 2>/dev/null; then echo "Invalid JSON response for: $prompt" >&2; continue fi COST=$(echo "$RESULT" | jq -r '.total_cost_usd // 0') TOTAL_SPENT=$(echo "$TOTAL_SPENT + $COST" | bc) echo "$RESULT" | jq -r '.result // ""' echo "--- Cost: \$$COST | Total: \$$TOTAL_SPENT / \$$MAX_TOTAL ---"done < prompts.txt--max-budget-usd’nin turlar arasında kontrol edildiğini, üretim ortasında değil, unutmayın. Tek turlu bir yanıt limiti aşabilir. Yukarıdaki toplam takip döngüsü gerçek güvenlik ağıdır. Bireysel istem bütçelerini düşük tutun ve her yinelemeden sonra TOTAL_SPENT’i kontrol edin.
Planla, İncele, Uygula Tarifi
Bu, otomatik yeniden yapılandırma için en güvenli kalıptır. İşi üç aşamaya böler: Claude kısıtlı modda plan yapar, bir insan planı inceler ve ardından Claude aynı oturumu devam ettirerek tam izinlerle uygular.
#!/bin/bash# plan-execute.sh -- Plan modu -> inceleme -> uygulama# ⚠️ Aşama 3'te bypassPermissions kullanır - uygulamadan önce planı inceleyinset -euo pipefailTASK="$1"
# Aşama 1: Plan (tüm yazmaları engeller)echo "=== Planning ==="PLAN=$(CLAUDECODE="" claude -p "$TASK" \ --permission-mode plan --output-format json --max-budget-usd 0.50)SESSION=$(echo "$PLAN" | jq -r '.session_id')echo "$PLAN" | jq -r '.result // ""'
# Aşama 2: İnsan incelemesiread -p "Approve and execute? (yes/no): " DECISION[ "$DECISION" = "yes" ] || { echo "Aborted. Resume later: claude --resume $SESSION"; exit 0; }
# Aşama 3: Tam izinlerle uygulaecho "=== Executing ==="CLAUDECODE="" claude -p "Proceed with the plan." \ --resume "$SESSION" --permission-mode bypassPermissions \ --output-format text --max-budget-usd 2.00Aşama 1, tüm yazma işlemlerini engelleyen --permission-mode plan kullanır. Claude dosyaları okuyabilir ve görev hakkında muhakeme yapabilir, ancak hiçbir şeyi değiştiremez. Planlama aşamasındaki session_id tüm bağlamı taşır, böylece Aşama 3’ün kod tabanını yeniden analiz etmesine gerek kalmaz. Reddederseniz, betik oturum kimliğini yazdırır, böylece daha sonra claude --resume ile devam edebilirsiniz.
Toplu Veri Çıkarıcı
Bir JSON şeması kullanarak birden fazla dosyadan yapılandırılmış veri çıkarın (bunu her sabah standup’tan önce kullanıyorum). Bu tarif, girdi dosyaları üzerinde döngü yapar, her birini --json-schema ile Claude’a gönderir ve dosya başına maliyeti takip eder.
#!/bin/bash# extract-data.sh -- Metin dosyalarından yapılandırılmış veri çıkar# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefail
PATTERN="${1:-docs/*.md}"BUDGET_PER_FILE="${2:-0.20}"TOTAL_COST=0
for file in $PATTERN; do [ -f "$file" ] || continue echo "Processing: $file" CONTENT=$(cat "$file")
RESULT=$(CLAUDECODE="" claude -p "Extract all person records from this text:
$CONTENT" \ --output-format json \ --json-schema '{ "type": "object", "properties": { "people": { "type": "array", "items": { "type": "object", "properties": { "name": {"type": "string"}, "email": {"type": "string"}, "role": {"type": "string"}, "company": {"type": "string"} }, "required": ["name"] } } }, "required": ["people"] }' \ --max-budget-usd "$BUDGET_PER_FILE" \ --no-session-persistence \ --permission-mode bypassPermissions 2>/dev/null) || { echo " FAILED"; continue; }
if ! echo "$RESULT" | jq empty 2>/dev/null; then echo " Invalid JSON response"; continue fi COST=$(echo "$RESULT" | jq -r '.total_cost_usd // 0') TOTAL_COST=$(echo "$TOTAL_COST + $COST" | bc) echo " Cost: \$$COST (Running total: \$$TOTAL_COST)"doneecho "=== Batch complete. Total cost: \$$TOTAL_COST ==="İhtiyacınız olan yapıyı çıkarmak için istemi ve şemayı değiştirin: fatura kalemleri, README dosyalarından API uç noktaları, değişiklik günlüklerinden bağımlılık listeleri. Döngü iskeleti aynı kalır.
Çoklu Depo Durumu
Birden fazla depo arasındaki durumu kontrol edin ve yönetici özeti oluşturun. Her klasörü açmadan 20+ servis arasında monorepo durumunu kontrol etmek için mükemmel. Bu tarif, saf metin analizi olduğu için --tools "" kullanır — dosya erişimi gerekmez, bu da sistem istemi maliyetini azaltır.
#!/bin/bash# repo-status.sh -- Depolar arasında durumu kontrol et# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefailREPORT=""for repo in "$@"; do [ -d "$repo/.git" ] || continue BRANCH=$(git -C "$repo" branch --show-current 2>/dev/null || echo "detached") CHANGES=$(git -C "$repo" status --short | wc -l | tr -d ' ') BEHIND=$(git -C "$repo" rev-list --count HEAD..origin/main 2>/dev/null || echo "?") REPORT+="## $(basename "$repo")\n- Branch: $BRANCH\n- Uncommitted: $CHANGES\n- Behind main: $BEHIND\n\n"done[ -z "$REPORT" ] && { echo "No repos found."; exit 1; }
CLAUDECODE="" claude -p "Summarize this multi-repo status report. Flag anything needing attention:$REPORT" \ --output-format text --max-budget-usd 0.20 \ --no-session-persistence --permission-mode bypassPermissions --tools ""Depolarınızın yollarıyla çalıştırın: ./repo-status.sh ~/projects/api ~/projects/frontend ~/projects/infra. Kabuk, Claude çalışmadan önce tüm git meta verilerini toplar, böylece yapay zeka çağrısı tek bir ucuz metin analizi turudur.
Betik İskeleti
Yukarıdaki her tarif aynı iskeleti takip eder. Kendinizinkini yazarken buradan başlayın:
#!/bin/bash# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırınset -euo pipefail
# 1. Bağlam toplaCONTEXT=$(git diff --cached)
# 2. Claude'a iletCLAUDECODE="" claude -p "Review this diff: $CONTEXT" \ --output-format text \ --max-budget-usd 0.50 \ --no-session-persistence \ --permission-mode bypassPermissionsGözetimsiz betikler için gerekli üç bayrak: --no-session-persistence (oturum dosyalarının diskte birikmesini önler), --permission-mode bypassPermissions (betiğin etkileşimli istemlerde takılmasını önler) ve --max-budget-usd (aşırı maliyetleri önler). CLAUDECODE="" ön eki aşağıda ele alınmaktadır.
—permission-mode bypassPermissions tüm izin istemlerini atlar ve Claude’a araçlara ve dosya işlemlerine tam erişim verir. Bunu yalnızca istem girdisini kontrol ettiğiniz betiklerde kullanın. Kullanıcıya yönelik araçlar veya harici girdi kabul eden betikler için, yazma işlemleri için insan onayı gerektirmek üzere —permission-mode plan (salt okunur) veya varsayılan etkileşimli modu kullanın.
CLAUDECODE="" ortam değişkeni ön eki, bir kabuk betiğinden claude çağırırken gereklidir. Olmadan, iç içe Claude çağrıları üst süreci algılar ve başarısız olur. Betiklerde claude komutlarınızı her zaman CLAUDECODE="" ile ön ekleyin.
Tarif betiklerinize her zaman set -euo pipefail ile başlayın. Olmadan, başarısız bir git komutu veya boş bir değişken sessizce Claude’a çöp geçirir, token’ları boşa harcar ve anlamsız çıktı üretir. -e bayrağı hata durumunda çıkar, -u tanımsız değişkenleri yakalar ve -o pipefail başarısızlıkları pipe’lar arasında yayar.
Bu bölümden bir tarif seçin, projenize bir kabuk betiği olarak kaydedin ve çalıştırın. Sonra bir şeyi değiştirin — istemi değiştirin, bir bayrak ekleyin veya çıktıyı farklı şekilde yönlendirin. Bir tarifi kendinize ait kılmak, otomasyon hakkında okumaktan yapmaya geçiş şeklinizdir.