Cursor Agent CLI, --print ile birlikte kullanıldığında --output-format seçeneğiyle birden fazla çıktı formatı sunar. Bu formatlar, programatik kullanım için yapılandırılmış formatları (json, stream-json) ve insan tarafından okunabilir ilerleme takibi için sadeleştirilmiş bir metin formatını içerir.
Varsayılan --output-format stream-json’dur. Bu seçenek yalnızca yazdırma (--print) sırasında veya yazdırma modu otomatik olarak çıkarıldığında (TTY olmayan stdout ya da pipe edilen stdin) geçerlidir.

JSON formatı

json çıktı formatı, çalışma başarıyla tamamlandığında tek bir JSON nesnesi (sonunda bir satır sonuyla) üretir. Delta’lar ve araç olayları yayımlanmaz; metin nihai sonuca birleştirilir. Başarısızlık durumunda süreç sıfır olmayan bir kodla sonlanır ve hata mesajını stderr’e yazar. Başarısızlık durumlarında iyi biçimlendirilmiş bir JSON nesnesi üretilmez.

Başarılı yanıt

Başarılı olduğunda CLI, aşağıdaki yapıya sahip bir JSON nesnesi çıktılar:
{
  "type": "result",
  "subtype": "success",
  "is_error": false,
  "duration_ms": 1234,
  "duration_api_ms": 1234,
  "result": "<full assistant text>",
  "session_id": "<uuid>",
  "request_id": "<optional request id>"
}
FieldAçıklama
typeTerminal sonuçlar için her zaman "result"
subtypeBaşarılı tamamlamalar için her zaman "success"
is_errorBaşarılı yanıtlar için her zaman false
duration_msToplam çalışma süresi (milisaniye)
duration_api_msAPI istek süresi (milisaniye) (şu anda duration_ms ile aynı)
resultTam asistan yanıt metni (tüm metin deltalarının birleştirilmesi)
session_idBenzersiz oturum tanımlayıcısı
request_idİsteğe bağlı istek tanımlayıcısı (atlanabilir)

Stream JSON formatı

stream-json çıktı formatı, satır sınırlı JSON (NDJSON) yayar. Her satır, yürütme sırasında gerçek zamanlı bir olayı temsil eden tek bir JSON nesnesi içerir. Stream, başarı durumunda terminal result olayı ile sona erer. Başarısızlık durumunda, süreç sıfır olmayan bir kod ile çıkar ve stream terminal olayı olmadan erken sonlanabilir; stderr’e bir hata mesajı yazılır.

Olay türleri

Sistem başlatma

Her oturumun başında bir kez yayınlanır:
{
  "type": "system",
  "subtype": "init",
  "apiKeySource": "env|flag|login",
  "cwd": "/absolute/path",
  "session_id": "<uuid>",
  "model": "<model display name>",
  "permissionMode": "default"
}
Gelecekte tools ve mcp_servers gibi alanlar bu olaya eklenebilir.

Kullanıcı mesajı

Kullanıcının giriş prompt’unu içerir:
{
  "type": "user",
  "message": {
    "role": "user",
    "content": [{ "type": "text", "text": "<prompt>" }]
  },
  "session_id": "<uuid>"
}

Asistan metin deltası

Asistan yanıtını oluştururken birden çok kez yayınlanır. Bu olaylar artımlı metin parçaları içerir:
{
  "type": "assistant",
  "message": {
    "role": "assistant",
    "content": [{ "type": "text", "text": "<delta chunk>" }]
  },
  "session_id": "<uuid>"
}
Tam asistan yanıtını yeniden oluşturmak için tüm message.content[].text değerlerini sırayla birleştir.

Tool çağrısı olayları

Tool çağrıları başlangıç ve tamamlanma olayları ile takip edilir: Tool çağrısı başlatıldı:
{
  "type": "tool_call",
  "subtype": "started",
  "call_id": "<string id>",
  "tool_call": {
    "readToolCall": {
      "args": { "path": "file.txt" }
    }
  },
  "session_id": "<uuid>"
}
Tool çağrısı tamamlandı:
{
  "type": "tool_call",
  "subtype": "completed",
  "call_id": "<string id>",
  "tool_call": {
    "readToolCall": {
      "args": { "path": "file.txt" },
      "result": {
        "success": {
          "content": "file contents...",
          "isEmpty": false,
          "exceededLimit": false,
          "totalLines": 54,
          "totalChars": 1254
        }
      }
    }
  },
  "session_id": "<uuid>"
}

Tool çağrısı türleri

Dosya okuma tool’u:
  • Başlatıldı: tool_call.readToolCall.args içinde { "path": "file.txt" } bulunur
  • Tamamlandı: tool_call.readToolCall.result.success dosya metadatası ve içeriği içerir
Dosya yazma tool’u:
  • Başlatıldı: tool_call.writeToolCall.args içinde { "path": "file.txt", "fileText": "content...", "toolCallId": "id" } bulunur
  • Tamamlandı: tool_call.writeToolCall.result.success içinde { "path": "/absolute/path", "linesCreated": 19, "fileSize": 942 } bulunur
Diğer tool’lar:
  • { "name": "tool_name", "arguments": "..." } ile tool_call.function yapısını kullanabilir

Terminal sonuç

Başarılı tamamlanmada yayınlanan son olay:
{
  "type": "result",
  "subtype": "success",
  "duration_ms": 1234,
  "duration_api_ms": 1234,
  "is_error": false,
  "result": "<full assistant text>",
  "session_id": "<uuid>",
  "request_id": "<optional request id>"
}

Örnek sıra

İşte olayların tipik akışını gösteren temsili bir NDJSON sırası:
{"type":"system","subtype":"init","apiKeySource":"login","cwd":"/Users/user/project","session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff","model":"Claude 4 Sonnet","permissionMode":"default"}
{"type":"user","message":{"role":"user","content":[{"type":"text","text":"README.md'yi oku ve özet çıkar"}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"README.md dosyasını "}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"okuyacağım"}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"tool_call","subtype":"started","call_id":"toolu_vrtx_01NnjaR886UcE8whekg2MGJd","tool_call":{"readToolCall":{"args":{"path":"README.md"}}},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"tool_call","subtype":"completed","call_id":"toolu_vrtx_01NnjaR886UcE8whekg2MGJd","tool_call":{"readToolCall":{"args":{"path":"README.md"},"result":{"success":{"content":"# Project\n\nThis is a sample project...","isEmpty":false,"exceededLimit":false,"totalLines":54,"totalChars":1254}}}},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":" ve özet çıkaracağım"}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"tool_call","subtype":"started","call_id":"toolu_vrtx_01Q3VHVnWFSKygaRPT7WDxrv","tool_call":{"writeToolCall":{"args":{"path":"summary.txt","fileText":"# README Özeti\n\nBu proje şunları içeriyor...","toolCallId":"toolu_vrtx_01Q3VHVnWFSKygaRPT7WDxrv"}}},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"tool_call","subtype":"completed","call_id":"toolu_vrtx_01Q3VHVnWFSKygaRPT7WDxrv","tool_call":{"writeToolCall":{"args":{"path":"summary.txt","fileText":"# README Özeti\n\nBu proje şunları içeriyor...","toolCallId":"toolu_vrtx_01Q3VHVnWFSKygaRPT7WDxrv"},"result":{"success":{"path":"/Users/user/project/summary.txt","linesCreated":19,"fileSize":942}}}},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"result","subtype":"success","duration_ms":5234,"duration_api_ms":5234,"is_error":false,"result":"README.md dosyasını okuyup özet çıkaracağım","session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff","request_id":"10e11780-df2f-45dc-a1ff-4540af32e9c0"}

Metin formatı

text çıktı formatı, agent eylemlerinin basitleştirilmiş, insan tarafından okunabilir bir akışını sağlar. Ayrıntılı JSON olayları yerine, agentın gerçek zamanlı olarak ne yaptığını özlü metin açıklamalarıyla verir. Bu format, yapılandırılmış verileri ayrıştırma yükü olmadan agentın ilerlemesini izlemek için kullanışlıdır; bu da onu loglama, hata ayıklama veya basit ilerleme takibi için ideal kılar.

Örnek çıktı

Dosya okundu
Dosya düzenlendi
Terminal komutu çalıştırıldı
Yeni dosya oluşturuldu
Her eylem, agent bunu gerçekleştirirken yeni bir satırda görünür ve görevin ilerleyişi hakkında anında geri bildirim sağlar.

Uygulama notları

  • Her olay \n ile sonlandırılan tek bir satır olarak yayınlanır
  • thinking olayları yazdırma modunda gizlenir ve hiçbir çıktı formatında görünmez
  • Alan eklemeleri zaman içinde geriye dönük uyumlu bir şekilde gerçekleşebilir (tüketiciler bilinmeyen alanları görmezden gelmelidir)
  • Akış formatı gerçek zamanlı güncellemeler sağlarken, JSON formatı sonuçları çıktılamadan önce tamamlanmayı bekler
  • Tam yanıtı yeniden oluşturmak için tüm assistant mesaj deltalarını birleştirin
  • Araç çağrısı ID’leri başlangıç/tamamlanma olaylarını ilişkilendirmek için kullanılabilir
  • Oturum ID’leri tek bir agent yürütmesi boyunca tutarlı kalır