Görünüm
Metin boyutu
Yazı tipi
Satır aralığı
2
Bölüm 2 · 3 dk

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.

  • text düz cevap.
  • json sonucu, oturum id'sini ve model bazında maliyetlerle total_cost_usd değerini döndürür.
  • stream-json olayları 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.

Kendinizi deneyin

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-turns tur sayısını sınırlar.
  • --max-budget-usd harcamayı sınırlar, istemci tarafı bir tahmin kullanır. İkisi de yalnızca print modunda çalışır.
  • --allowedTools ve --disallowedTools Claude'un neyi kullanabileceğini belirler. --disallowedTools iç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.

Kendinizi deneyin

Hangi sinyal headless bir turu temiz bitirir?

Devamını okuyun