Claude'u GitHub Action ile PR Reviewer Olarak Kurmak
Anthropic'in claude-code-action'ını bir GitHub repo'suna eklemek için sıkılaştırılmış, kopyalanmaya hazır kurulum; güvenlik ve maliyet ayarlarıyla.
Bir GitHub repo’suna AI destekli code review eklemek tek bir seçimle başlıyor: geçici bir LLM entegrasyonu mu, bakımı yapılan bir action mı. Bakımlı yol erişim kontrolünü ve prompt injection temizliğini zaten üstleniyor; geçici yolda ikisi de size kalıyor. anthropics/claude-code-action v1 başlanmaya değer varsayılan: pull_request trigger’ı, salt okunur bir tool allowlist’i, sabitlenmiş bir model ve insanda kalan bir merge geçidi.
Workflow dosyasının kendisi kısa. Karar gerektiren kısım etrafındakiler: onu hangi trigger tetikliyor, hangi izinleri alıyor, modelin hangi tool’ları çağırmasına izin var ve büyük bir PR’ın review maliyeti ne oluyor.
Önerilen kurulum
Workflow’u .github/workflows/claude-review.yml dosyasına koyun. Aşağıdaki dosya, gerçek bir repo’ya koyacağım en yalın kurulum: pull_request üzerinde tetikleniyor (pull_request_target değil), action’ın ihtiyaç duyduğu minimum izin seti veriliyor (contents: read, artı yorum atabilmek için pull-requests: write ve issues: write), claude_args dar tutuluyor, model ve turn limiti sabitlenmiş.
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
issues: write
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Review this pull request for correctness, missing error handling,
and obvious security issues. Post findings as review comments.
Skip style nits.
claude_args: "--max-turns 5 --model claude-sonnet-4-6 --allowedTools Read,Grep,Glob"
Burada belirtmeye değer iki seçim var. İlki, checkout adımındaki fetch-depth: 0 action’a tüm diff geçmişine erişim veriyor; bu olmadan büyük PR’ların bağlamı kırpılır. İkincisi, claude_args v1’de altta çalışan Claude Code runtime’ına CLI flag geçirmenin yolu. v0.x’te bunlar üst seviye input’tu (model, max_turns, allowed_tools); bir v0.x örneğini v1 workflow’una yapıştırdığınızda çalışıyor gibi görünür çünkü GitHub Actions tanımadığı input’ta hata vermiyor, ama değerler sessizce hiçbir şey yapmaz. v1 GA’dan eski bir tutorial’dan kopyalıyorsanız her seferinde action’ın migration guide’ına bakın.
Secret’ı editörden çıkmadan kurmak için yerel bir Claude Code oturumunda claude /install-github-app komutunu çalıştırın. Komut, https://github.com/apps/claude adresindeki resmi GitHub App’i kurmanızda size eşlik eder ve ANTHROPIC_API_KEY’i repo secret’larına yazar. Bunun için repo admin yetkisi gerekiyor; yoksa secret’ı manuel olarak set edecek birine ulaşın ve GitHub App adımını atlayın.
İnteraktif @claude döngüsü
İlk job otomasyonu yönetir: her PR açılışı ve push’u bir review alır. İkinci job interaktif soruları yönetir. Bir takım arkadaşı Claude’a @claude lütfen son commit'imden sonra auth akışını tekrar kontrol et diye yanıt verdiğinde, action mention’ı yakalar ve aynı thread içinde yanıtlar.
Mod geçişi v1’de otomatik. Action pull_request ile tetiklendiğinde ve bir prompt set edildiğinde otomasyon modunda çalışır. issue_comment veya pull_request_review_comment ile tetiklendiğinde ve prompt yoksa @claude mention’larını dinler ve interaktif modda çalışır.
mention:
if: |
(github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude'))
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
claude_args: "--max-turns 8 --model claude-sonnet-4-6 --allowedTools Read,Grep,Glob"
Bu job’ın tetiklenmesi için dosyanın üstündeki on: bloğuna issue_comment ve pull_request_review_comment eklemeniz de gerekiyor. issue_comment dalındaki github.event.issue.pull_request guard’ı kritik. GitHub bu event’i hem issue’lar hem de PR thread’leri için tetikliyor; bu property ise yalnızca PR thread’lerinde dolu geliyor. Guard olmadan action, sıradan issue içindeki @claude mention’larına da yanıt verir ve alakasız tartışmalarda token yakar. Action, normal bir GitHub yorumu olarak yazar; track_progress: true ile devreye aldığınızda işin ilerleyişini canlı güncelleyen progress checkbox’lı bir yorum atar. Prompt isterse satır içi review yorumu ve suggestion bloğu da bırakabilir.
Maliyet
Faydalı bir tahmin: input token sayısı kabaca diff’in satır sayısı çarpı dört, artı modelin Read ve Grep ile bağlam için içeri çektiği şeyler. Output ise üretilen yorumların uzunluğu. 200 satırlık, 5 dosyalık bir PR genelde birkaç bin input token ve birkaç yüz output ile biter. 1500 satırlık, 30 dosyalık bir PR titiz bir review’da rahatlıkla 50K input’u geçer. Aynı repo’lar tekrar tekrar review edildiğinde prompt caching işe yarar; action önbelleğe alınmış repo bağlamını yeniden kullanabiliyor.
Fiyatlar değişiyor; bu sayıların üstüne bütçe kurmadan önce Anthropic pricing sayfasına bakın. Yayımlanan token başına ücretler:
| Model | Input (MTok başına) | Output (MTok başına) |
|---|---|---|
| Haiku 4.5 | USD 1 | USD 5 |
| Sonnet 4.6 | USD 3 | USD 15 |
| Opus 4.7 | USD 5 | USD 25 |
Sonnet genel review için doğru varsayılan: gerçek sorunları yakalayacak kadar derin, Opus vergisi olmadan. PR hacminin yüksek olduğu ve hızlı geri bildirimin derin analizden daha değerli olduğu monorepo’larda Haiku mantıklı. Atlanmış bir hatanın pahalıya patladığı güvenlik kritik kodlarda Opus ödenmeye değer. İlk günden itibaren set etmeye değer maliyet kontrol kolları:
--max-turns 5agent döngüsünü sınırlıyor; karışık bir PR sonsuza kadar iterasyon yapamıyor.- Workflow trigger’ında bir
paths:filtresi sadece doküman değişen PR’larda review’ı atlar. - Bir
if:guard üzerinden[skip-claude]commit-mesaj kuralı, yazara önemsiz bir değişiklikte muafiyet hakkı verir. claude_argsiçindeki--fallback-modelbirincil model rate-limit yediğinde daha ucuz bir modele düşer; takımın aynı anda merge etmesi en bariz tetikleyici.
Güvenlik sıkılaştırması
Yukarıdaki varsayılanlar güvenli, ama her birinin neden o şekilde set edildiğini bilmek değerli; çünkü yanlış değerler eski tutorial’lardan kolayca kopyalanabiliyor.
pull_request kullanın, pull_request_target değil. İkincisi base branch bağlamında secret’lara erişimle çalışır; bu da fork’tan gelen bir PR’ın ANTHROPIC_API_KEY’e erişerek güvensiz kod çalıştırabilmesi anlamına gelir. GitHub Security Lab’ın uzun uzun belgelediği klasik “pwn request” exfiltration sınıfı bu. Action’ın yerleşik erişim kontrolü (yalnızca repo’da write yetkisi olan kullanıcılar için tetikleniyor) pull_request event’lerinde sizi koruyor; dokümanın açıkça riskli olarak nitelediği allowed_non_write_users ile bunu ezmeyin.
contents: write vermeyin. Varsayılan review job’ı yorum atmak için contents: read artı pull-requests: write ve issues: write istiyor. contents: write eklemek modele branch’inize push etme yetkisi verir; Claude’dan düzeltme commit’lemesini açıkça isteyen kasıtlı bir workflow’unuz yoksa istediğiniz şey değil. AWS Bedrock veya Google Vertex’e OIDC ile erişiyorsanız id-token: write’ı yalnızca o zaman ekleyin.
Botları adıyla allowlist’e alın. GitHub App’ler ve botlar action’ı varsayılan olarak tetikleyemez. Claude’un Dependabot veya release botundan sonra çalışmasını istiyorsanız bot hesaplarını açıkça listeleyin. Doküman uyarıyor: public repo’da allowed_bots: '*', herhangi bir GitHub App’in kendi kontrol ettiği bir prompt ile action’ı çağırmasına izin verir; bu da pull_request_target ile aynı exfiltration şekli.
Dış içerikten gelen prompt injection’ı azaltın. Action input’tan HTML yorumlarını, görünmez karakterleri, image alt text’i ve gizli HTML attribute’larını sanitize ediyor. Doküman yeni bypass tekniklerinin ortaya çıkabileceği konusunda açık; bu yüzden public repo’larda iki ek ayar değerli: include_comments_by_actor Claude’a hangi kullanıcıların yorumunun ulaşacağını allowlist’e alır, exclude_comments_by_actor ise dependabot[bot] ve renovate[bot] gibi gürültülü bot yorumlarını eler. Bir actor her ikisinde birden eşleşirse exclusion önceliklidir.
--allowedTools’u sınırlayın. Halka açık bir AI workflow’unda en büyük hata tool allowlist’ini açık bırakıp serbest Bash vermek. Salt okunur bir review allowlist’i Read,Grep,Glob. Git’e ihtiyacınız varsa daraltın: Bash yerine Bash(git diff:*). PR-tetiklemeli çalışmalarda asla sınırsız Bash vermeyin; model kandırılırsa secret’larınızı runner’dan curl ile dışarı çıkarabilir.
claude[bot]’un gerekli reviewer sayılmasına izin vermeyin. Branch protection kurallarında required reviewer’ları yalnızca insan olarak yapılandırın. AI review tavsiye niteliğinde; merge geçidi insanda kalıyor. Yararlı bir ilk okuma ile göstermelik bir onay arasındaki fark bu.
Secret’ı sınırlayın. ANTHROPIC_API_KEY’i org düzeyi yerine repo veya environment düzeyinde set edin. Ele geçirilen tek bir repo tüm org’un kotasını yakmamalı.
Action’ı pinleyin. Kişisel, düşük riskli repo’lar için @v1 yeterli. Üretim veya regüle repo’lar için commit SHA’ya pinleyin; böylece ele geçirilmiş bir tag, action’ın davranışını siz fark etmeden değiştiremez. Bu standart supply-chain hijyeni ve kullandığınız her üçüncü taraf action için geçerli.
Base-action’a geçiş
Üst seviye action, daha düşük seviyeli bir action’ı GitHub’a özgü PR ve issue mantığıyla sarmalıyor. Çoğu takımın üst seviye sarmalayıcının dışına çıkmaya hiç ihtiyacı olmaz. Şunlardan biri doğruysa base action’a uzanın:
- PR yorumu yerine merge’i koşula bağlayan (pass/fail) bir GitHub status check istiyorsunuz. Base action
successveyafailureolan birconclusionoutput’u sunuyor; bunu downstreamif:ile veyaactions/github-scriptile kullanabilirsiniz. - Çok adımlı bir pipeline istiyorsunuz: lint, sonra claude review, sonra integration test; review’ın yapılandırılmış output’u sonraki adımı besliyor.
- Yorum dışı bir artifact istiyorsunuz: bulguları JSON dosya olarak çıkarmak, workflow artifact olarak yüklemek veya SIEM’e beslemek.
- Modelin bir branch’e düzeltme yazıp size geri PR açmasını, üstelik özel commit-mesaj kurallarıyla, istiyorsunuz.
- Birden çok Claude çağrısını (biri güvenlik için, biri performans için) tekilleştirilmiş tek bir review pass’ine zincirliyorsunuz.
Base action ayrıca üst seviye action’ın claude_args arkasında sakladığı input’ları da açıyor: system_prompt, append_system_prompt, disallowed_tools, settings, ve claude_env. System prompt’u jailbreak girişimlerine karşı sıkılaştırmak veya MCP server’lara dar kapsamlı env vars geçirmek istediğinizde işe yarıyor.
Sık yapılan hatalar
- Eski bir tutorial kullandığı için
pull_request_targetkullanmak veANTHROPIC_API_KEY’i fork’tan gelen koda açmak. - “Her ihtimale karşı”
contents: writevermek ve modele varsayılan branch’e push yetkisi tanımak. allowedTools’u set etmemek ve public repo’da serbestBashile sonuçlanmak.- Action’ın bot push’unun branch protection’da gerekli reviewer sayılmasına izin vermek.
- Uzun süre açık duran bir PR branch’inde her push’ta action’ı tekrar çalıştırıp token yakmak. Mecbursanız
synchronizeile sınırlayın, amapaths:filtresini veya[skip-claude]muafiyetini de düşünün. actions/checkoutüzerindefetch-depth: 0’ı unutup kırpılmış diff almak.- 5000 satırlık PR’lı bir monorepo’da fiyat sürprizi.
--max-turnsile sınırlayın veya büyük diff’lerde workflow’u atlayın.
Kapanış
Yukarıdaki varsayılan workflow, output şekli uymayana kadar çoğu takım için yeterli: merge’i koşula bağlayan bir status check, dosya artifact’ı veya çok adımlı bir pipeline gerektiğinde sınıra gelirsiniz. claude-code-base-action’a o noktada inin, öncesinde değil. Atılacak tek somut adım: yukarıdaki workflow’u düşük riskli bir repo’ya kopyalayıp karşısına küçük bir PR açmak ve geniş çapta yaymadan önce review’ın okunuşunu izlemek.
Kaynaklar
- anthropics/claude-code-action - v1 README; trigger’lar, otomatik mod algılaması ve
promptileclaude_argsşeması için tek doğru kaynak. - Action güvenlik dokümantasyonu - Erişim kontrolü,
allowed_bots, prompt injection azaltma ve commit imzalama için yetkili rehber. - Action setup rehberi -
/install-github-appalternatifi olarak özel GitHub App’ler dahil manuel kurulum. - Action solutions rehberi - Güvenlik odaklı review, dosya yoluna özel review ve dış katkıda bulunan yönetimi için kullanıma hazır otomasyon kalıpları.
- Action migration rehberi - v0.x’ten v1.0’a input değişiklikleri; v1 öncesi topluluk örneği yapıştırmadan önce mutlaka bakın.
- anthropics/claude-code-base-action - Status check, dosya artifact ve yorum dışı output için düşük seviyeli sarmalayıcı.
- Claude Code GitHub Actions dokümanları - Anthropic’in birinci taraf how-to’su; Bedrock ve Vertex OIDC örnekleriyle.
- Anthropic API pricing - Claude model ailesi için MTok başına ücretler; fiyatlar sık değişiyor.
- GitHub Actions: Security hardening -
pull_request_target,permissions:, secret yönetimi ve SHA pinleme için birinci taraf rehber. - GitHub Security Lab: Preventing pwn requests -
pull_request_targetexfiltration sınıfının kanonik yazısı. - GitHub Actions: Assigning permissions to jobs - Minimum yetki disiplini için referans.
İlgili yazılar
Üretim deploy'ları gerçek bir onay adımı ister: GitHub Environment, native koruma kuralları ve environment'a bağlı secret'lar; if: hilesi ya da marketplace değil.
Organizasyon düzeyinde paylaşımlı bir GitHub Actions platformu kurma rehberi: mimari kararlar, güvenlik yönetişimi, benimseme ve en maliyetli 7 hata.
AI geliştirici araçlarını benimsemek için pratik rehber: hazırlık puanlaması, pilot kapsamı, güvenlik kontrolleri, inceleme kapasitesi ve izlenmeye değer metrikler.
AI destekli kod incelemesinin neyi yakaladığı, insanların hangi alanlarda üstün kaldığı ve etkili insan-AI işbirliğinin kod incelemesinde nasıl kurulacağı.
Bir kodlama ajanının evi olarak devcontainer, Codespaces ve AWS Lambda MicroVM: her basamak ne katıyor ve ajanı laptoptan çıkarmak ne zaman kazandırıyor.