Cursor Agent CLI menyediakan beberapa format output lewat opsi --output-format saat dipakai bareng --print. Format ini mencakup format terstruktur untuk penggunaan terprogram (json, stream-json) dan format teks sederhana untuk pelacakan progres yang mudah dibaca.
Nilai default --output-format adalah stream-json. Opsi ini hanya valid saat melakukan print (--print) atau ketika mode print diinferensikan (stdout non-TTY atau stdin yang dipipe).

Format JSON

Format output json menghasilkan satu objek JSON (diikuti baris baru) saat run selesai dengan sukses. Delta dan event tool tidak dikeluarkan; teks diakumulasikan menjadi hasil akhir. Saat gagal, proses keluar dengan kode non-zero dan menulis pesan error ke stderr. Tidak ada objek JSON yang terbentuk dengan baik yang dikeluarkan dalam kasus kegagalan.

Respons sukses

Kalau berhasil, CLI mengeluarkan objek JSON dengan struktur berikut:
{
  "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>"
}
FieldDescription
typeSelalu "result" untuk hasil terminal
subtypeSelalu "success" untuk penyelesaian yang berhasil
is_errorSelalu false untuk respons yang berhasil
duration_msTotal waktu eksekusi dalam milidetik
duration_api_msWaktu request API dalam milidetik (saat ini sama dengan duration_ms)
resultTeks respons asisten lengkap (gabungan semua delta teks)
session_idPengenal sesi unik
request_idPengenal request opsional (boleh dihilangkan)

Format JSON stream

Format output stream-json menghasilkan JSON berformat NDJSON (newline-delimited). Setiap baris berisi satu objek JSON yang merepresentasikan event real-time selama eksekusi. Stream diakhiri dengan event terminal result saat berhasil. Jika gagal, proses keluar dengan kode non-nol dan stream bisa berakhir lebih awal tanpa event terminal; pesan error ditulis ke stderr.

Jenis event

Inisialisasi sistem

Diemit sekali di awal setiap sesi:
{
  "type": "system",
  "subtype": "init",
  "apiKeySource": "env|flag|login",
  "cwd": "/absolute/path",
  "session_id": "<uuid>",
  "model": "<model display name>",
  "permissionMode": "default"
}
Field mendatang seperti tools dan mcp_servers mungkin ditambahkan ke event ini.

Pesan user

Berisi prompt input dari user:
{
  "type": "user",
  "message": {
    "role": "user",
    "content": [{ "type": "text", "text": "<prompt>" }]
  },
  "session_id": "<uuid>"
}

Delta teks assistant

Diemit beberapa kali saat assistant menghasilkan respons. Event ini berisi potongan teks inkremental:
{
  "type": "assistant",
  "message": {
    "role": "assistant",
    "content": [{ "type": "text", "text": "<delta chunk>" }]
  },
  "session_id": "<uuid>"
}
Gabungkan semua nilai message.content[].text secara berurutan untuk merekonstruksi respons lengkap dari assistant.

Event pemanggilan tool

Pemanggilan tool dilacak dengan event mulai dan selesai: Pemanggilan tool dimulai:
{
  "type": "tool_call",
  "subtype": "started",
  "call_id": "<string id>",
  "tool_call": {
    "readToolCall": {
      "args": { "path": "file.txt" }
    }
  },
  "session_id": "<uuid>"
}
Pemanggilan tool selesai:
{
  "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>"
}

Jenis pemanggilan tool

Tool baca file:
  • Dimulai: tool_call.readToolCall.args berisi { "path": "file.txt" }
  • Selesai: tool_call.readToolCall.result.success berisi metadata file dan konten
Tool tulis file:
  • Dimulai: tool_call.writeToolCall.args berisi { "path": "file.txt", "fileText": "content...", "toolCallId": "id" }
  • Selesai: tool_call.writeToolCall.result.success berisi { "path": "/absolute/path", "linesCreated": 19, "fileSize": 942 }
Tool lainnya:
  • Mungkin menggunakan struktur tool_call.function dengan { "name": "tool_name", "arguments": "..." }

Hasil terminal

Event terakhir yang diemit saat berhasil diselesaikan:
{
  "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>"
}

Contoh urutan

Berikut contoh urutan NDJSON yang merepresentasikan alur event tipikal:
{"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":"Baca README.md dan buat ringkasan"}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"Aku akan "}]},"session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff"}
{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"membaca README.md"}]},"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":" dan membuat ringkasan"}]},"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 Summary\n\nThis project contains...","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 Summary\n\nThis project contains...","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":"Aku akan membaca README.md dan membuat ringkasan","session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff","request_id":"10e11780-df2f-45dc-a1ff-4540af32e9c0"}

Format teks

Format output text menyajikan aliran tindakan agen yang disederhanakan dan mudah dibaca manusia. Alih-alih event JSON terperinci, format ini menampilkan deskripsi teks ringkas tentang apa yang sedang dilakukan agen secara real-time. Format ini berguna untuk memantau progres agen tanpa overhead melakukan parsing data terstruktur, sehingga ideal untuk logging, debugging, atau pelacakan progres sederhana.

Contoh output

Read file
Edited file
Ran terminal command
Created new file
Setiap tindakan ditampilkan pada baris baru saat agen menjalankannya, memberikan umpan balik langsung tentang progres agen sepanjang tugas.

Catatan implementasi

  • Setiap event dipancarkan sebagai satu baris yang diakhiri dengan \n
  • Event thinking disembunyikan dalam mode cetak dan tidak akan muncul di kedua format output
  • Penambahan field dapat terjadi seiring waktu dengan cara yang backward-compatible (konsumen harus mengabaikan field yang tidak dikenal)
  • Format stream memberikan pembaruan real-time, sedangkan format JSON menunggu hingga selesai sebelum menampilkan hasil
  • Gabungkan semua delta pesan assistant untuk menyusun ulang respons lengkap
  • ID pemanggilan tool dapat digunakan untuk mengaitkan event mulai/selesai
  • ID sesi tetap konsisten sepanjang satu eksekusi agent