# Pull request'lerinizde Claude Code

Claude Code action'ı ajanı bir GitHub workflow'unun içinde çalıştırıyor: ya @claude çağrısını bekliyor ya da herhangi bir olayda bir prompt çalıştırıyor. Kurulum kısa, işlerin ters gittiği yer erişim ve secret seçimleri.

## İki çalışma biçimi

`anthropics/claude-code-action@v1`, Claude Code'u bir workflow'un içinde çalıştırıyor. Nasıl davranacağı tek bir girdiye bağlı.

`prompt` vermezseniz interaktif çalışıyor. Birisi bir pull request ya da issue'ya `@claude` yazdığında tepki veriyor ve o yorumun istediğini yapıyor.

`prompt` verirseniz otomasyon modunda, bağladığınız her olayda çalışıyor: PR açılması, bir etiket, bir cron zamanı. Kimse istemiyor. İstek workflow dosyasının kendisi.

```flow
Bir olay tetiklenir: PR, issue, yorum, cron
Workflow action'ı başlatır
Action, repo checkout edilmiş halde Claude'u çalıştırır
Claude GitHub üzerinden okur, düzenler, yorum yazar
Sonuç yorum ya da commit olarak düşer
```

Yerelde çalıştırdığınız ajanın aynısı, sadece bilgisayarınız yerine GitHub runner'ında çalışıyor.

## Kurulum

Hızlı yol Claude Code içinde `/install-github-app`. Yalnızca github.com'da çalışıyor, `gh` ile giriş yapmış olmanızı ve repoda admin yetkisini istiyor.

Sonra workflow'un bir kimlik bilgisine ihtiyacı var. İki secret işe yarıyor: `ANTHROPIC_API_KEY` ya da `claude setup-token` ile oluşturduğunuz `CLAUDE_CODE_OAUTH_TOKEN`. Ekipler için bu seçim önemli. API key, kurum genelinde ortak bir secret için uygun. OAuth token tek bir kişinin aboneliğine ait, yani bütün ekip onunla çalışırsa bir kişinin hesabı üzerinden çalışıyor demek.

Hiç uzun ömürlü secret tutmak istemiyorsanız workload identity federation destekleniyor. `anthropic_federation_rule_id` gibi girdiler kullanıyor ve `id-token: write` izni istiyor. Bulut sağlayıcıları `use_bedrock`, `use_vertex` ya da `use_foundry` ile seçiliyor, hepsi OIDC üzerinden.

**Question:** Action'ı bütün ekibiniz tetikleyecek. Hangi kimlik bilgisi daha uygun ve neden?

- Kişisel bir OAuth token, ücretsiz olduğu için
- API key, çünkü OAuth token tek bir kişinin aboneliğine ait
- Kimlik bilgisi gerekmez, action onsuz çalışır
- Reponun GITHUB_TOKEN'ı

**Answer:** API key, çünkü OAuth token tek bir kişinin aboneliğine ait. Kurum genelinde ortak bir secret için doküman API key'i gösteriyor. OAuth token tek bir kişinin aboneliğine bağlı.


## Seçenekleri iletmek

`claude_args` her CLI bayrağını alıyor, yani headless dersindeki sınırlar burada geri geliyor. Örneğin `--max-turns 5` başıboş dolaşan bir çalıştırmayı durdurur, `--model` modeli seçer. Bu alanı işi sınırladığınız yer olarak düşünün.

CLAUDE.md her çalıştırmada okunuyor, yani uzun bir CLAUDE.md her pull request'te bedel ödetiyor. Kısa tutun.

> **Inline yorum sunucusunun adını yazın**
Inline review yorumlarını atan sunucu, yalnızca `claude_args` içindeki `--allowedTools` onu adıyla anarsa başlıyor. Skill'in kendi frontmatter'ı da anıyor olsa bu böyle. Inline yorumlar hiç görünmüyorsa önce buna bakın.


## Kim tetikleyebilir

Action'ı tetikleyen kullanıcının repoda yazma erişimi olmalı. Bot'lar `allowed_bots` içinde listelenmedikçe reddediliyor.

Zamanlanmış çalıştırmalarda ince bir kural var: çalıştırma, cron satırını en son düzenleyen kişiye atfediliyor. O kişi bir bot ise ve bot izinli değilse çalıştırma reddediliyor. Ayrıca GitHub, herkese açık repolarda 60 gün hareketsizlikten sonra schedule'ları kapatıyor, yani sessiz bir reponun gece işi Claude'dan hiçbir hata gelmeden durabilir.

> **CI'ınızı durduran bir ayrıntı**
`github_token: secrets.GITHUB_TOKEN` verirseniz Claude'un commit'lerinde CI çalışmaz. GitHub bu token'ın oluşturduğu olayları yok sayıyor. Claude'un push ettiklerinde kontrollerin çalışmasını istiyorsanız bunu kullanmayın.


## Prompt'a ne yazılır

Otomasyon modunda düzeltecek bir insan olmadığı için prompt, işi ve sınırını birlikte taşıyor. İşe yarayan bir review prompt'u neye bakılacağını, neyin yok sayılacağını ve nerede duracağını söyler. Örneğin: diff'te eksik hata yönetimini incele, yalnızca değişen satırlara yorum yaz, dosya düzenleme. Cron'da çalışan ucu açık bir prompt, sınırsız bir script döngüsüyle aynı sorun.

> **İsimler bir kez değişti**
Eski `@beta` action'ın yerini `@v1` aldı. `direct_prompt`, `prompt` oldu; `custom_instructions` ise `claude_args` içinde `--append-system-prompt` oldu.


> **Önce yalnızca yorumla başlayın**
Uygulamayı bir test reposuna kurun, bir pull request açın ve `@claude explain what this change does` yazın. Bu çalışınca, her yeni PR'ı inceleyen bir `prompt` içeren workflow ekleyin ve güvenmeden önce ilk birkaç sonucu okuyun.


**Question:** Claude bir commit push etti ama CI kontrolleriniz çalışmadı. Olası sebep nedir?

- Workflow github_token: secrets.GITHUB_TOKEN kullandı
- Prompt çok uzundu
- Action interaktif moda ayarlıydı
- API key'in süresi doldu

**Answer:** Workflow github_token: secrets.GITHUB_TOKEN kullandı. GitHub, GITHUB_TOKEN'ın oluşturduğu olayları yok sayar, o yüzden onunla push edilen commit'ler başka workflow'ları tetiklemez.
