Cursor Agent CLI menyediakan beberapa format output lewat opsi --output-format saat digunakan bersama --print. Format ini mencakup format terstruktur untuk penggunaan terprogram (json, stream-json) serta format teks sederhana untuk pelacakan progres yang mudah dibaca.
Nilai default --output-format adalah stream-json. Opsi ini hanya berlaku 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 digabungkan menjadi hasil akhir. Jika gagal, proses keluar dengan kode non-zero dan menulis pesan error ke stderr. Tidak ada objek JSON yang well-formed yang dikeluarkan dalam kasus kegagalan.

Respons sukses

Saat 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>"
}
FieldDeskripsi
typeSelalu "result" untuk hasil terminal
subtypeSelalu "success" untuk completion 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 (penggabungan semua delta teks)
session_idIdentifier sesi unik
request_idIdentifier request opsional (boleh dihilangkan)

Format JSON stream

Format output stream-json menghasilkan JSON yang dipisahkan baris baru (NDJSON). Setiap baris berisi satu objek JSON yang merepresentasikan event real-time selama eksekusi. Stream berakhir dengan event terminal result ketika berhasil. Ketika gagal, proses keluar dengan kode non-zero dan stream mungkin berakhir lebih awal tanpa event terminal; pesan error ditulis ke stderr.

Tipe event

Inisialisasi sistem

Dipancarkan 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 masa depan 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

Dipancarkan beberapa kali ketika assistant menghasilkan responsnya. Event ini berisi potongan teks incremental:
{
  "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 assistant yang lengkap.

Event tool call

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

Tipe tool call

Tool baca file:
  • Dimulai: tool_call.readToolCall.args berisi { "path": "file.txt" }
  • Selesai: tool_call.readToolCall.result.success berisi metadata dan konten file
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 dipancarkan ketika 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 adalah urutan NDJSON representatif yang menunjukkan alur event yang umum:
{"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 buatkan 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 file 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 buatkan ringkasannya"}]},"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 file README.md dan buatkan ringkasannya","session_id":"c6b62c6f-7ead-4fd6-9922-e952131177ff","request_id":"10e11780-df2f-45dc-a1ff-4540af32e9c0"}

Format teks

Format output text ngasih aliran aksi agen yang sederhana dan mudah dibaca. Alih-alih event JSON yang detail, format ini ngeluarin deskripsi teks ringkas tentang apa yang lagi dilakukan agen secara real-time. Format ini berguna buat ngawasin progres agen tanpa overhead nge-parse data terstruktur, jadi ideal buat logging, debugging, atau pelacakan progres yang simpel.

Contoh output

Read file
Edited file
Ran terminal command
Created new file
Setiap aksi muncul di baris baru saat agen ngejalaninnya, ngasih feedback langsung tentang progres agen ngerjain tugas.

Catatan implementasi

  • Setiap event dikirim sebagai satu baris yang diakhiri dengan \n
  • Event thinking disembunyikan dalam mode print dan tidak akan muncul di format output mana pun
  • Penambahan field dapat terjadi seiring waktu dengan cara yang kompatibel mundur (consumer harus mengabaikan field yang tidak dikenal)
  • Format stream memberikan update real-time, sedangkan format JSON menunggu selesai sebelum mengeluarkan hasil
  • Gabungkan semua delta pesan assistant untuk merekonstruksi respons lengkap
  • ID tool call dapat digunakan untuk menghubungkan event start/completion
  • ID sesi tetap konsisten sepanjang eksekusi agent tunggal