Terminalsiz Claude Code
claude -p aynı ajan döngüsünü bir kez çalıştırıp çıkıyor, böylece onu pipe'layabilir, script'leyebilir ve zamanlayabilirsiniz. Öngörülebilir kalıp kalmayacağını bayraklar belirliyor.
Konuşma değil, komut
claude -p "prompt" ajanı bir kez çalıştırıp çıkıyor. Döngü, interaktif kullandığınızla aynı, araçlarıyla birlikte. Değişen tek şey, soruya cevap verecek kimsenin olmaması. Oturumun normalde soracağı her şeyin baştan karara bağlanması gerekiyor.
Başarıda 0 koduyla çıkıyor ve standart girdiyi okuyor, üst sınır 10MB. Asıl işe yarayan ikincisi:
$ git diff main | claude -p "list risky changes in this diff"✻ Diff'i stdin'den okur✻ Bir kez cevap verip çıkar# Diff'i okumak için Bash izni gerekmedi.
Küçük bağlamı pipe ile vermek, Claude'un onu çekmek için izin istememesi demek. Bir shell script yetmediğinde aynı döngü Python ve TypeScript Agent SDK paketleri olarak da var.
Ne döneceğini seçmek
--output-format üç değer alıyor.
textdüz cevap.jsonsonucu, oturum id'sini ve model bazında maliyetlerletotal_cost_usddeğerini döndürür.stream-jsonolayları oluştukça satır satır akıtır.
Script'ler için genelde json doğru seçim. --json-schema '{...}' ile birlikte kullanırsanız yapılandırılmış sonuç structured_output içine düşüyor. Bir tuzak var: şemadaki format anahtar sözcüğü kabul ediliyor ama uygulanmıyor, ve bir çalıştırma geçerli yapılandırılmış çıktı üretmeden biterse alan hiç yok. Kullanmadan önce orada olup olmadığına bakın.
Bir çalıştırma bitti ama script structured_output alanını bulamadı. Doğru okuma hangisi?
Çağrıları zincirlemek
json çıktısında bir session_id var. Onu yakalarsanız sonraki çağrı aynı konuşmadan devam ediyor:
sid=$(claude -p "review src/auth" --output-format json | jq -r .session_id)
claude -p "now fix what you found" --resume "$sid"--continue (-c) en son oturumu açar, --resume (-r) bir id, isim ya da oturumun .jsonl dosyasının mutlak yolunu alır, --fork-session ise devam etmek yerine dallanır. --no-session-persistence arkasında oturum bırakmaz, tek seferlik işlere uygun.
İşi sınırlı tutan bayraklar
Sonsuza dönen ya da sınırsız harcayan bir script, hiç script olmamasından kötü. Print modunda bunun korumaları var:
--max-turnstur sayısını sınırlar.--max-budget-usdharcamayı sınırlar, istemci tarafı bir tahmin kullanır. İkisi de yalnızca print modunda çalışır.--allowedToolsve--disallowedToolsClaude'un neyi kullanabileceğini belirler.--disallowedToolsiçinde yalın bir isim, aracı bağlamdan tamamen çıkarır.--permission-prompts none, sorulacak her şeyi reddeder ve Claude'a tekrar denememesini söyler.
Reddedilenler permission_denied olayı olarak ve sonuçtaki permission_denials içinde raporlanıyor, yani script neyin reddedildiğini görebiliyor. İzin sorma aracı yoksa tekrarlayan engellemeler eylemi düşürüyor ve çalıştırma durmak yerine devam ediyor.
Temiz çıkış
Bir -p çalıştırması çıkmadan önce arka plan komutlarını, alt ajanları, Monitor izlemelerini ve bekleyen /loop uyanışlarını bekliyor. Boşta bekleme 10 dakikada kesiliyor, CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS ile ayarlanabiliyor.
Bir çalıştırmayı dışarıdan durdururken sinyal önemli. SIGTERM 143 koduyla çıkar ve turu yarım bırakır. SIGINT turu temiz bitirir. Birini yarıda kestiyseniz CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1 resume'da onu sürdürür.
Hangi sinyal headless bir turu temiz bitirir?
Bölüm tamamlandı
Paralel ve gözetimsiz kursunun 6 bölümünden 2. bölümü bitirdiniz.
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.
Sonraki bölüm