claude -p ciktisini jq '.result' ile yonlendirip cevabinizi aliyorsunuz. Is tamam — ta ki otomasyonunuz sessizce bir izin reddini kacirana, bir butce asimini gormezden gelene veya konusmayi devam ettirmek icin ihtiyac duydugunuz session_id’yi kaybedene kadar. result alani buzda yalnizca goruen kisim.
Bu bolum, --output-format json uzerine otomasyon kurarken tam olarak neyi cikaracaginizi, neyi loglayacaginizi ve nelere dikkat edeceginizi bilmeniz icin JSON zarfindaki her alani inceliyor.
Alan adlari farkli kurallara uyar: ust duzey usage nesnesi snake_case kullanir (input_tokens), modelUsage ise camelCase kullanir (inputTokens). Bunlari karistirmaktan kaynaklanan sayisiz ayristirici hatasinin hatalarini ayikladik. Her zaman hangi nesneden okudugunuzu kontrol edin.
Ust Duzey Alanlar
Islevleri, anlamlari ve ne zaman onemli olduklariyla birlikte karsilasacaginiz her alan.
Her --output-format json yaniti ayni ust duzey anahtar setini dondurur. Bazilari her script icin zorunludur; digerl yalnizca butce uygulamasi veya izin denetimi gibi belirli senaryolarda onem kazanir.
Tam Alan Referansi
| Alan | Tip | Ne Soyluyor |
|---|---|---|
type | string | Tamamlanmis bir yanit icin her zaman “result”. stream-json modunda once baska olay turleri gorulur, ancak son satir her zaman bu tiptedir. |
subtype | string | Normal tamamlanmada “success”. Cagri, —max-budget-usd ile belirlenen harcama limitine ulastiginda “error_max_budget_usd”. |
is_error | boolean | Basarida false. result okumadan once her yanit isleyicisinde bunu ilk kontrol edin. |
duration_ms | number | Arac yurutmesi dahil tum cagri icin gecen sure. Uctan uca gecikme takibi icin bunu kullanin. |
duration_api_ms | number | Yalnizca API cagrisinda gecen sure, yerel arac yurutmesi haric. duration_ms ile duration_api_ms arasindaki fark araclarin ne kadar surdugunu gosterir. |
num_turns | number | Bu cagridaki konusma tur sayisi. Tek bir istem-yanit 1’dir. Cok turlu arac kullanim donguler bu sayiyi arttirir. |
result | string | Metin yaniti — —output-format text’in dondurduguyle ayni. Yanit birden fazla arac cagrisi icerse bile her zaman bir string’dir. |
stop_reason | string | ”end_turn” Claude’un dogal olarak bitirdigi anlamina gelir. “max_tokens” ciktinin token limitinde kesildigini gosterir. |
session_id | string | Bu konusma icin UUID. Sonraki bir cagri icin konusmayi devam ettirmek uzere —resume’a iletin. |
total_cost_usd | number | USD cinsinden maliyet. Yeni oturumlarda: cagri basi maliyet. —resume oturumlarinda: oturum baslangicindan itibaren tum turlarin kumulatif toplami. Oturum mekanigi icin Bolum 5’e bakin. |
usage | object | Duz token dokumu: input_tokens, output_tokens, cache alanlari, server_tool_use ve service_tier. |
modelUsage | object | Model bazinda token dokumu, model ID’sine gore anahtarlanmis. Bu, birden fazla model kullanirken onemli hale gelir (Bolum 17). |
permission_denials | array | Izin sisteminin yurutulmesini engelledigi araclar. Bos dizi hicbir seyin reddedilmedigi anlamina gelir. Plan modu is akislarinda hata ayiklamak icin kritiktir. |
fast_mode_state | string | ”off” veya “on”. Claude Code’un hizli modunun (basit gorevler icin daha kucuk bir model kullanan) aktif olup olmadigini gosterir. |
uuid | string | Bu belirli yanit icin benzersiz tanimlayici. session_id’den farklidir — bir oturum birden fazla yanit icerebilir ve her birinin kendi uuid’si vardir. |
result Alani
result alani her zaman Claude’un son metin yanitini iceren bir string’dir. Bu, cagri sirasinda ne olursa olsun gecerlidir — Claude birden fazla arac cagirsa, dosya okusa, kod yazsa ve birden fazla tur boyunca bash komutlari calistirsa bile result tek bir string’e sikilmis son metin ciktisidir.
stop_reason degeri "end_turn" ise yanit tamamdir. "max_tokens" ise Claude cikti token limitine ulasti ve yanit kesildi. Bu alani kontrol ederek kesilmeyi tespit edebilir ve devam icin oturumu devam ettirip ettirmemeye karar verebilirsiniz:
# Check for truncation and resume if neededRESPONSE=$(claude -p "Write a long essay" --output-format json)STOP=$(echo "$RESPONSE" | jq -r '.stop_reason')SESSION=$(echo "$RESPONSE" | jq -r '.session_id')
if [ "$STOP" = "max_tokens" ]; then claude -p "Continue" --resume "$SESSION" --output-format jsonfiresult alani, Claude yanit sirasinda birden fazla arac kullansa bile her zaman bir string’dir. Burada yapilandirilmis arac ciktisi bulamazsiniz — yalnizca tum arac cagrilari tamamlandiktan sonra Claude’un olusturdugu son metin. Bireysel arac cagrilarini ve sonuclarini gormek icin bunun yerine stream-json modunu kullanin.
Kullanim ve Maliyet Alanlari
Zarf iki duzey token muhasebes icerir: duz toplam icin usage ve model bazinda ayrintı icin modelUsage.
usage Nesnesi
"usage": { "input_tokens": 3, "cache_creation_input_tokens": 0, "cache_read_input_tokens": 15635, "output_tokens": 6, "server_tool_use": { "web_search_requests": 0, "web_fetch_requests": 0 }, "service_tier": "standard", "cache_creation": { "ephemeral_1h_input_tokens": 0, "ephemeral_5m_input_tokens": 0 }}input_tokens sayisi yalnizca API’ye gonderilen onbellege alinmamis tokenlari yansitir. cache_read_input_tokens sayisi istem onbelleginden sunulan token sayisini gosterir — bunlar onemli olcude daha ucuzdur. Ilk cagrinizda sistem istemi onbellege alinirken cache_creation_input_tokens degerinin yukseldigi gorulur; sonraki cagrilarda cache_read_input_tokens devreye girer.
server_tool_use alt nesnesi web arama ve web getirme gibi yerlesik sunucu tarafi araclarini izler. service_tier alani istegi hangi API katmaninin isledigini onaylar — genellikle "standard".
modelUsage Nesnesi
"modelUsage": { "claude-opus-4-6": { "inputTokens": 3, "outputTokens": 6, "cacheReadInputTokens": 15635, "cacheCreationInputTokens": 0, "costUSD": 0.0079825, "contextWindow": 200000, "maxOutputTokens": 32000 }}Bu nesne model ID’sine gore anahtarlanmistir ve --fallback-model kullandiginizda zorunlu hale gelir. Claude farkli bir modele geri donerse burada iki girdi gorursunuz — her model icin birer tane — her biri kendi token sayilari ve maliyetiyle. contextWindow ve maxOutputTokens alanlari modelin limitlerini gosterir ve istemlerinizin pencereye sigdigini dogrulamak icin kullanislidir.
Bir izleme panosunda maliyetlerin neden yanlis gorundugunun hatasini ayiklamak icin 2 saat harcadik — sorun, devam ettirilen bir oturumda total_cost_usd’yi kontrol ettigimizdi. Deger kumulatiftir, tur bazinda degildir.
Yeni oturum: total_cost_usd = yalnizca bu cagrinin maliyeti.
Devam ettirilen oturum: total_cost_usd = oturum baslangicindan itibaren tum turlarin toplami.
Devam ettirilen bir oturumda yalnizca son turun maliyetini almak icin onceki yanitin total_cost_usd degerini mevcut olandan cikarin — veya modelUsage icindeki model bazinda costUSD degerini kullanin.
Hata Yonetimi
Hatalar iki alanin birlikte calismasi ile ortaya cikar: is_error ve subtype. Basarili bir yanit her zaman is_error: false ve subtype: "success" degerlerine sahiptir. Bir seyler ters gittiginde desen degisir.
En yaygin hata alt tipi, --max-budget-usd ile belirlediginiz butce limitini asan cagrilarda tetiklenen "error_max_budget_usd"’dir. Bu durumda result alani normal bir yanit yerine hata mesajini icerir:
# Set a budget to see the error envelope when exceeded$ claude -p "Write a detailed essay" --max-budget-usd 0.05 --output-format json{ "type": "result", "subtype": "error_max_budget_usd", "is_error": true, "result": "Budget exceeded: the request cost more than the allowed $0.05", "total_cost_usd": 0.05, "session_id": "..."}Savunma deseni basittir — result’a erismeden once her zaman is_error’u kontrol edin:
const data = JSON.parse(output);if (data.is_error) { console.error(`Error (${data.subtype}): ${data.result}`); process.exit(1);}// Safe to use data.result herepermission_denials dizisi, arac kullanimi senaryolari icin hata yonetimini tamamlar. Claude, izin sisteminin engelledigi bir araci kullanmaya calistiginda, arac adi bu dizide gorulur. Cagrinin kendisi yine de basarili olabilir (is_error: false ile), ancak Claude’un yaniti reddedilen eylemi gerceklestiremedigini yansitir. Plan modu is akislarinda bu diziyi kontrol etmek kritiktir — Claude’un ne yapmak istedigini ancak izin verilmedigini size soyler.
Bir izin reddini tetikleyin ve yaniti inceleyin:
claude -p “Write hello to /tmp/test.txt” —permission-mode plan —output-format json | jq ‘.permission_denials’
Kac red gorunuyor? Hangi arac engellendi? Simdi ayni istemi default modunda calistirin — red dizisi degisiyor mu?
Tam Aciklamali Zarf
Komut satirinda jq ile herhangi bir alani cikartin. Bir dizi cagri icin maliyet takibi: claude -p ”…” —output-format json | jq ‘.total_cost_usd’. Oturum zincirleme icin: jq -r ‘.session_id’ yapip sonraki cagrinizda —resume’a iletin.
Bir uretim sisteminin session_id icin init olayini ve cost_usd icin result olayini ayristirmak uzere stream-json’u nasil kullandigini MR Inceleyici Olusturun, Bolum 1: Baslatma ve Inceleme bolumunde gorun.
Otomasyon scriptlerinizden birine | jq ‘{cost: .total_cost_usd, turns: .num_turns, denials: (.permission_denials | length)}’ ekleyin. Engellenen eylemleri yakalayacak, maliyetleri izleyecek ve tur sayilarini takip edeceksiniz — bunlarin hepsi gormezden gelebileceginiz uc alandan.