Skip to content

Hazır Otomasyonlar

Günlük görevler için kullanıma hazır otomasyon betikleri

14 dk okuma

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.

morning-review.sh
$ chmod +x morning-review.sh && ./morning-review.sh
## Overnight Changes Summary
### Authentication Module
- Added rate limiting to login endpoint (3 files)
- New config option: rate_limit_window (default 60s)
### Potential Issues
- No migration script for new config key
### Suggested Follow-ups
- Add integration test for rate-limited login flow

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ın
set -euo pipefail
SINCE="${1:-yesterday}"
DIFF=$(git log --since="$SINCE" --oneline --stat)
if [ -z "$DIFF" ]; then
echo "No changes since $SINCE"
exit 0
fi
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 bypassPermissions

Pencereyi ö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.

Try This

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.

commit-msg.sh
$ git add src/auth.py tests/test_auth.py
$ ./commit-msg.sh
feat(auth): add rate limiting to login endpoint
- Enforce max 5 login attempts per 60-second window
- Add RateLimiter middleware with configurable threshold
- Include 2 new test cases for rate-limited flows
Use this message? (yes/edit/no): yes
[main a1b2c3d] feat(auth): add rate limiting to login endpoint
#!/bin/bash
# commit-msg.sh -- Hazırlanmış değişikliklerden commit mesajı oluştur
# ⚠️ bypassPermissions kullanır - güvenilmeyen istemler için kaldırın
set -euo pipefail
DIFF=$(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: $DIFF
Patch: $PATCH
Keep 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): " DECISION
case "$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ın
set -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ın
set -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ın
set -euo pipefail
SRC_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ın
set -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ı inceleyin
set -euo pipefail
TASK="$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 incelemesi
read -p "Approve and execute? (yes/no): " DECISION
[ "$DECISION" = "yes" ] || { echo "Aborted. Resume later: claude --resume $SESSION"; exit 0; }
# Aşama 3: Tam izinlerle uygula
echo "=== Executing ==="
CLAUDECODE="" claude -p "Proceed with the plan." \
--resume "$SESSION" --permission-mode bypassPermissions \
--output-format text --max-budget-usd 2.00

Aş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ın
set -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)"
done
echo "=== 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ın
set -euo pipefail
REPORT=""
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ın
set -euo pipefail
# 1. Bağlam topla
CONTEXT=$(git diff --cached)
# 2. Claude'a ilet
CLAUDECODE="" claude -p "Review this diff: $CONTEXT" \
--output-format text \
--max-budget-usd 0.50 \
--no-session-persistence \
--permission-mode bypassPermissions

Gö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.

bypassPermissions Güvenliği

—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.

Gotcha

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.

Gotcha

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.

Now Do This

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.