Lewati ke konten utama

Tutorial Cursor SDK: Menjalankan Agen Koding dengan TypeScript

Gunakan Cursor SDK untuk menjalankan agen lokal, lalu jalankan agen cloud yang memperbaiki bug kecil di repo GitHub dan membuka pull request.
Diperbarui 28 Sep 2026  · 12 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Cursor mengumumkan TypeScript SDK pada akhir April 2026 dan merilisnya sebagai public beta. Paket ini dipublikasikan sebagai @cursor/sdk dan berjalan di lingkungan Node seperti skrip, job CI, dan layanan backend.

Perbedaan utama dari penggunaan Cursor di editor adalah titik awal tugas. Alih-alih membuka chat dan mengetik prompt sendiri, kode Anda membuat agen, mengirim tugas, melakukan streaming event, menunggu hasil, dan menangani error.

Dalam tutorial ini, kita menyiapkan SDK, menjalankan quickstart lokal, lalu membangun proyek utama: agen cloud yang memperbaiki bug di repo GitHub dan membuka pull request. Saya sengaja membuat bugnya kecil agar alur SDK tetap terlihat jelas. Setelah itu, kita membahas titik ekstensi dan pemeriksaan keamanan yang diperlukan sebelum mengadaptasi polanya. Proyek cloud menggunakan repo pendamping dengan skrip peluncur dan proyek target.

SDK ini berstatus public beta, jadi periksa dokumentasi resmi sebelum menggunakan ulang kode ini dalam proyek jangka panjang.

Apa itu Cursor SDK?

Cursor SDK adalah paket TypeScript, @cursor/sdk, yang memungkinkan Anda membuat dan menjalankan agen Cursor dari kode. Ini memberi Anda akses ke:

  • Jalankan agen secara lokal dan di cloud.
  • Alat codebase Cursor, termasuk pengindeksan, pencarian, grep, server MCP, skills, hook, dan subagent.
  • Model yang tersedia melalui akun Cursor Anda, termasuk Composer 2, GPT-5.5, dan Claude.

SDK menggunakan sistem agen yang sama seperti Cursor IDE, CLI, dan web app. Bedanya, Anda memanggilnya dari TypeScript.

Kapan menggunakan SDK

SDK cocok untuk tugas yang seharusnya dimulai dari kode alih-alih dari seseorang yang mengetik di editor. Saya akan memilihnya untuk job CI yang meminta agen memeriksa tes yang gagal, webhook yang membuat branch untuk perbaikan bug, atau alat internal yang menjalankan tugas agen tetap dari sebuah formulir.

SDK versus aplikasi Cursor

SDK adalah cara lain untuk menggunakan agen Cursor, di samping Cursor IDE dan cursor agent CLI.

Gunakan IDE untuk chat di editor. Gunakan CLI untuk prompt di terminal. Gunakan SDK ketika kode TypeScript perlu membuat agen, mengirim tugas, dan menangani hasil. Seperti disebutkan di atas, CLI tidak mendukung kunci penyedia eksternal; SDK juga hanya melakukan autentikasi melalui kunci API Cursor.

Cara Kerja Keseluruhan Cursor SDK

Sebelum menulis kode, ada baiknya memahami beberapa objek dan pilihan runtime yang diekspos SDK.

Diagram yang menunjukkan routing kode Cursor SDK ke Node lokal, VM cloud Cursor, atau VM yang dikelola pengguna, semuanya berbagi alat agen dan lapisan model yang sama.

Arsitektur Cursor SDK pada tiga runtime. Gambar oleh Penulis.

Tiga runtime

SDK mendukung tiga tempat eksekusi agen.

Runtime 

Fungsinya

Kapan digunakan

Lokal 

Menjalankan agen inline dalam proses Node Anda, dengan file dibaca dari disk

Skrip dev, pemeriksaan CI terhadap working tree, iterasi cepat

Cloud Cursor

Berjalan di VM terisolasi dengan repo Anda yang dikloning, dikelola oleh Cursor

Agen paralel, tugas lebih lama, run yang berlanjut setelah terputus

Cloud self-hosted

Bentuknya sama seperti cloud tetapi dengan VM dan jaringan Anda

Tim yang perlu kode, secret, dan output build tetap berada di dalam lingkungan mereka

Dalam artikel ini, kita menggunakan lokal dan Cloud Cursor. Cloud self-hosted, seperti tercantum di atas, terutama untuk paket Enterprise. Kode SDK berubah melalui kunci konfigurasi yang Anda berikan: local atau cloud.

Runtime, alat, dan model

Satu run di dalam SDK memiliki tiga bagian. Runtime adalah tempat eksekusinya. Alat agen mencakup pengindeksan, pencarian, pemanggilan alat MCP, skills, hook, dan subagent. Model dipilih dengan model: { id: "composer-2" } atau id lain yang dapat digunakan akun Anda.

Anda menetapkan bagian-bagian ini di konfigurasi agen.

Agent dan Run

Dua objek utama dalam SDK adalah Agent dan Run. Agen menyimpan status percakapan, konfigurasi workspace, dan pengaturan model. Run adalah satu prompt yang dikirim ke agen tersebut, dengan stream, status, hasil, dan handle pembatalannya sendiri.

Pemisahan ini penting karena agen cloud memberlakukan satu run aktif per agen. Jika Anda mencoba mengirim prompt kedua saat yang pertama masih berjalan, API mengembalikan 409 agent_busy. Untuk menjalankan secara paralel, buat agen terpisah, bukan run terpisah pada agen yang sama.

Streaming event

Setiap run mengekspos stream event melalui run.stream(), yang merupakan async iterator. Setiap event memiliki field type. Dalam public beta saat ini, SDK memancarkan event system, user, assistant, tool_call, thinking, status, request, dan task. Tidak ada event terdokumentasi connection:reconnecting; reconnect ditangani di dalam SDK.

Untuk pembaruan level lebih rendah, agent.send() juga menerima callback onDelta dan onStep.

Menyiapkan Cursor SDK

Persiapannya hanya Node, TypeScript, dan kunci API Cursor.

Prasyarat

Anda memerlukan:

  • Node.js 22 atau lebih baru. Paket ini secara formal mendukung Node 18 atau lebih baru, tetapi Node 22 sesuai dengan contoh cookbook resmi dan mendukung flag --env-file yang digunakan di bawah untuk memuat .env.

  • Akun Cursor pada Pro ($20/bulan) atau di atasnya untuk agen cloud.

  • Pemahaman dasar TypeScript.

  • tsx untuk menjalankan TypeScript tanpa kompilasi.

Instal SDK dan alat TypeScript:

Instal SDK

Di folder baru:

npm init -y
npm install @cursor/sdk
npm install --save-dev typescript tsx @types/node

Tambahkan "type": "module" ke package.json agar import bekerja sebagai ESM. Lalu tambahkan tsconfig.json yang mendukung top level await dan disposal async eksplisit:

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "lib": ["ES2022", "ESNext.Disposable"],
    "strict": true,
    "esModuleInterop": true
  }
}

Dapatkan kunci API Cursor

Kunci awalnya dihasilkan di cursor.com/dashboard/cloud-agents, namun kini telah dipindahkan ke cursor.com/dashboard/integrations. Jika ada panduan yang menunjuk ke "Cloud Agents", periksa Integrations sebagai gantinya.

Halaman Integrations di dasbor Cursor dengan bagian User API Keys disorot dan tombol Generate terlihat.

Hasilkan User API Keys dari Integrations. Gambar oleh Penulis.

Hasilkan User API Key dari sana dan simpan sebagai CURSOR_API_KEY:

echo 'CURSOR_API_KEY=crsr_your_key_here' > .env

Tambahkan .env ke .gitignore Anda. SDK membaca process.env secara langsung; SDK tidak memuat file .env untuk Anda.

Struktur proyek

Tata letak folder: package.json, tsconfig.json, .env, dan src/ untuk skrip Anda. Tambahkan folder .cursor/ untuk hook, skills, dan subagent saat Anda membutuhkannya.

Agen Cursor Lokal Pertama Anda

Contoh pertama sengaja dibuat kecil. Ini membuat agen lokal, mengirim satu prompt, melakukan streaming respons, dan membuang agen.

Buat agen lokal

Buat src/01-quickstart.ts:

import { Agent, type SDKMessage } from "@cursor/sdk";

const agent = await Agent.create({
  apiKey: process.env.CURSOR_API_KEY!,
  model: { id: "composer-2" },
  local: { cwd: process.cwd() },
});

Agent.create() mengembalikan handle sebelum agen melakukan pekerjaan apa pun. local: { cwd: process.cwd() } mengarahkan agen ke direktori kerja saat ini. SDK mendukung pembuangan async; dalam kode tutorial, saya lebih suka blok finally eksplisit karena menghindari pertanyaan versi await using.

Kirim prompt dan stream respons

Mengirim prompt mengembalikan objek Run dengan stream dan statusnya sendiri. Contoh ini membaca stream dalam loop for await dan hanya mencetak teks asisten.

try {
  const run = await agent.send(
    `Write a terminal-friendly summary for a screenshot.

Output exactly:
Local agent summary
- Purpose: demonstrates a local Cursor SDK agent.
- Key files: src/01-quickstart.ts, package.json, tsconfig.json.
- SDK action: creates an agent and streams assistant text.

Rules:
Print exactly those three bullets.
No Markdown bold.
No extra explanation.`,
  );

  for await (const event of run.stream()) {
    if (event.type !== "assistant") continue;
    for (const block of event.message.content) {
      if (block.type === "text") {
        process.stdout.write(block.text);
      }
    }
  }

  const result = await run.wait();
  const duration = result.durationMs === undefined ? "" : `duration=${result.durationMs}ms`;
  console.log(`\n[done] status=${result.status}${duration}`);
} finally {
  await agent[Symbol.asyncDispose]();
}

Agen memancarkan beberapa tipe event, termasuk thinking, tool_call, dan status. Contoh ini memfilter teks assistant karena itulah jawaban yang terlihat. event.message.content bertipe dan dapat digunakan untuk streaming, tetapi berbasis blok dan mungkin menyertakan pemanggilan alat. Jika Anda hanya memerlukan teks akhir, lewati stream dan baca result.result setelah run.wait(). durationMs bersifat publik tetapi opsional, jadi contoh menanganinya sebagai opsional.

Tangani error

SDK melempar error bertipe yang memperluas CursorAgentError. Kasus umum termasuk AuthenticationError untuk kunci yang salah, ConfigurationError untuk id model yang tidak valid, RateLimitError, IntegrationNotConnectedError, dan NetworkError.

import { CursorAgentError } from "@cursor/sdk";

try {
  // ... agent code
} catch (error) {
  if (error instanceof CursorAgentError) {
    console.error([${error.code ?? "unknown"}] ${error.message});
    if (error.isRetryable) {
      console.error("Retryable. Try again in a moment.");
    }
  } else {
    throw error;
  }
}

Flag isRetryable adalah yang harus diperiksa oleh logika retry Anda. Error jaringan dan rate limit dapat dicoba ulang; konfigurasi buruk dan autentikasi tidak.

Jalankan

Simpan file dan jalankan dengan loader .env milik Node dan tsx.

node --env-file=.env --import tsx/esm src/01-quickstart.ts

Flag --env-file=.env memuat CURSOR_API_KEY sebelum skrip dimulai. Skrip harus mencetak teks asisten, lalu footer status satu baris. Jika Anda melihat error autentikasi, periksa .env Anda dan pastikan kunci dihasilkan dari dasbor Integrations.

Streaming event dari agen lokal. Video oleh Penulis.

Membangun Agen Perbaikan Bug di Cloud

Contoh berikut berpindah dari folder lokal ke repo GitHub yang dikloning di cloud Cursor. Tugasnya tetap kecil: perbaiki tes auth yang gagal dan buka pull request.

Kapan memilih cloud

Agen cloud berjalan di VM yang dikelola oleh Cursor. Agen mengkloning repo, menyiapkan lingkungan pengembangan, dan berlanjut jika skrip lokal Anda keluar. Saat selesai, agen dapat mendorong sebuah branch dan membuka pull request. Komprominya adalah waktu startup dan penggunaan token yang lebih tinggi dibanding run lokal kecil.

Run cloud dimulai dari SDK. Video oleh Penulis.

Run cloud muncul di Cursor Web dan jendela Agents desktop saat sedang berjalan. Agen cloud dari SDK tidak ditampilkan di daftar default. Di Cursor Web, gunakan Filter > Source > SDK. Di jendela Agents desktop, gunakan footer sidebar: Show > SDK. Jika Anda memiliki id agen bc-, Anda juga dapat membukanya langsung di https://cursor.com/agents/bc-... atau melalui deep link desktop. Aturan sederhana: gunakan cloud ketika salah satu dari berikut ini benar:

  • Tugas mungkin memakan waktu lebih lama daripada sesi skrip lokal.
  • Anda menginginkan PR atau branch sebagai output, bukan hanya teks.
  • Anda ingin menjalankan beberapa agen secara paralel pada repo yang sama.
  • Agen perlu menjalankan kode (tes, build) di lingkungan terisolasi.

Untuk pemeriksaan lokal singkat, gunakan runtime lokal.

Konfigurasi agen

Konfigurasi cloud menggantikan kunci local dengan kunci cloud. Anda mencantumkan repo yang akan dikloning, opsional mengunci branch awal, dan menetapkan apakah Cursor harus membuka PR saat run selesai.

import { Agent, CursorAgentError } from "@cursor/sdk";

const agent = await Agent.create({
  apiKey: process.env.CURSOR_API_KEY!,
  name: "Cloud bug fixer",
  model: { id: "composer-2" },
  cloud: {
    repos: [
      { url: "https://github.com/your-org/your-repo", startingRef: "main" },
    ],
    autoCreatePR: true,
  },
});

console.log(Started cloud agent ${agent.agentId});

repos adalah array, tetapi cloud v1 saat ini mendukung satu repo per agen. startingRef adalah branch atau commit tempat agen memulai. autoCreatePR: true meminta Cursor membuka pull request saat run selesai. Izin GitHub, status integrasi, diff kosong, atau aturan repo masih dapat membuat Anda hanya mendapatkan branch, bukan PR.

Agar agen dapat mengkloning repo, akun Cursor Anda perlu menyiapkan integrasi GitHub. Jika belum terhubung, SDK mengembalikan IntegrationNotConnectedError dengan field helpUrl.

Kirim tugas dan sambung kembali nanti

Pola di bawah ini mengirim tugas lalu menunggu hasil melalui Agent.getRun(). Ini memungkinkan proses lain menyambung kembali nanti jika skrip asli keluar.

const run = await agent.send(
  "Find the failing test in the auth module, fix the bug, and add a regression test.",
);
console.log(Run ${run.id} in progress.);

const handle = await Agent.getRun(run.id, {
  runtime: "cloud",
  agentId: agent.agentId,
  apiKey: process.env.CURSOR_API_KEY!,
});

const result = await handle.wait();

const branch = result.git?.branches?.[0];
console.log(Status: ${result.status});
if (branch?.prUrl) {
  console.log(PR: ${branch.prUrl});
} else if (branch?.branch) {
  console.log(Branch: ${branch.branch});
}

Anda dapat melakukan streaming run untuk output langsung, tetapi wait() sudah cukup saat Anda hanya memerlukan hasil. Saat PR dibuat, URL dikembalikan di result.git?.branches[0]?.prUrl; cloud v1 belum mendukung beberapa repo, jadi indeks 0 adalah branch yang perlu diperiksa. Jika tidak ada URL PR, periksa branch?.branch dan buka PR secara manual. Simpan run.id dan agent.agentId jika Anda berencana menyambung kembali nanti.

PR GitHub dari agen cloud. Video oleh Penulis.

Pada titik ini, tinjau pull request seperti perubahan kode lainnya.

Sekilas: lokal versus cloud

Kedua runtime menggunakan SDK yang sama tetapi berperilaku berbeda.

Kemampuan

Lokal

Cloud

Tempat berjalan

Proses Node Anda

VM yang dikelola Cursor

Akses file

Disk Anda

Hanya repo hasil clone

Tahan putus koneksi

Tidak

Ya

Membuka PR

Tidak

Ya, bila izin repo mengizinkan

Mengembalikan artefak

Tidak

Ya (URL presigned 15 menit)

Digunakan untuk

Iterasi, CI pada checkout

Tugas lebih lama, run paralel, output PR

Gunakan run lokal untuk pemeriksaan cepat. Gunakan run cloud saat Anda memerlukan branch, PR, atau artefak.

Contoh Lain

Perbaikan bug menggunakan alur utama SDK: membuat agen, mengirim tugas, menunggu hasil, dan meninjau output. Cookbook Cursor menunjukkan pemanggilan SDK yang sama dalam contoh yang lebih besar:

  • agent-kanban mendaftar agen cloud, mengelompokkannya berdasarkan status atau repo, dan menampilkan pratinjau artefak.

  • coding-agent-cli membungkus agen lokal dan cloud dalam alat terminal.

  • app-builder menjalankan agen lokal dari UI chat dan menayangkan pratinjau kode React yang dihasilkan.

Satu detail yang perlu diingat adalah penanganan artefak. Artefak hanya tersedia pada run cloud. Agen lokal cocok untuk output teks dan pemeriksaan cepat. Agen cloud cocok untuk tugas yang membutuhkan file, branch, atau PR sebagai output.

MCP, Skills, Hook, dan Subagent

SDK dapat membaca konfigurasi agen proyek yang sama dengan yang digunakan Cursor di IDE. Perbaikan bug tidak membutuhkan semuanya, tetapi bagian-bagian ini penting setelah agen bekerja di repo nyata.

Server MCP

Seperti disebutkan sebelumnya, server MCP menghubungkan agen ke alat eksternal. Anda dapat meneruskan server secara inline di Agent.create() atau mendefinisikannya di .cursor/mcp.json. Jika Anda meneruskan mcpServers lagi di agent.send(), run tersebut akan menggunakan server dari send() alih-alih server dari Agent.create(). Gunakan server MCP HTTP untuk alat yang di-host. Gunakan server MCP stdio untuk alat yang berjalan di samping agen.

Skills

Skills adalah file markdown di .cursor/skills/ yang memberikan instruksi proyek kepada agen, seperti pilihan kerangka kerja tes, konvensi API, atau aturan rilis. Gunakan untuk panduan yang harus berlaku pada setiap run di repo.

Hook

Hook berada di .cursor/hooks.json dan berjalan pada titik tertentu dalam loop agen. Penggunaan umum termasuk formatting setelah edit file dan memblokir perintah shell yang destruktif sebelum dieksekusi. Untuk hook keamanan, gunakan perilaku fail closed sehingga hook yang rusak memblokir aksi.

Subagent

Subagent adalah agen bernama yang dapat dipanggil agen utama untuk pekerjaan terfokus, seperti code review atau penulisan tes. Definisikan di .cursor/agents/*.md atau inline di Agent.create({ agents: { ... } }). Agen cloud memuat subagent proyek dari repo yang di-checkout. Agen lokal memerlukan local.settingSources: ["project"] jika Anda ingin mereka membaca konfigurasi proyek .cursor/. Jaga agar setiap subagent tetap sempit cakupannya.

Pemeriksaan Keamanan

Sebelum agen menyentuh repo nyata, tetapkan batas-batasnya terlebih dahulu. Ini bagian yang tidak akan saya lewatkan.

  • Batasi izin secara ketat. Agen dapat membaca file, menjalankan perintah, dan menggunakan kredensial apa pun yang Anda berikan. Beri agen akses berskala repo, bukan kredensial layanan yang luas.

  • Jauhkan secret dari prompt. Prompt bisa masuk ke transkrip. Gunakan variabel lingkungan untuk CURSOR_API_KEY dan token lainnya, dan ingat bahwa nilai env pada MCP stdio menjangkau runtime tempat server dieksekusi.

  • Wajibkan review manusia. Jika agen cloud dapat membuka PR, proteksi branch harus mewajibkan reviewer manusia sebelum merge. Jangan gabungkan autoCreatePR: true dengan auto merge kecuali repo berisiko rendah.

  • Perhatikan biaya dan pilihan model. Penggunaan SDK ditarik dari pool penggunaan berbasis token Cursor. Seperti disebutkan, Composer 2 adalah salah satu opsi model untuk tugas pengkodean; panggil Cursor.models.list() jika Anda perlu melihat id model mana yang dapat digunakan akun Anda.

  • Catat run. run.conversation() mengembalikan tampilan terstruktur dari giliran agen. Simpan untuk run yang mungkin perlu Anda debug atau audit nanti.

Kesimpulan

Artikel ini membahas npm install @cursor/sdk, quickstart lokal, agen cloud yang membuka pull request, dan titik ekstensi utama untuk perilaku agen di repo.

Gunakan SDK ketika kode perlu memulai dan mengelola agen. Jika tugasnya hanya percakapan di editor, aplikasi Cursor biasanya sudah cukup.

Sebagai perbandingan, panduan kami tentang Claude Agent SDK dan OpenAI Agents SDK membahas API agen di ekosistem lain.


Khalid Abdelaty's photo
Author
Khalid Abdelaty
LinkedIn

Saya seorang data engineer dan pembangun komunitas yang bekerja lintas pipeline data, cloud, dan perkakas AI sambil menulis tutorial praktis dan berdampak tinggi untuk DataCamp dan pengembang yang sedang berkembang.

FAQs

Apakah Cursor SDK berfungsi dengan Python atau bahasa lain?

Belum secara resmi. SDK hanya tersedia untuk TypeScript pada public beta; pengguna Python sebaiknya memanggil Cloud Agents REST API secara langsung.

Bisakah saya menggunakan SDK pada paket gratis Hobby?

Ya untuk agen lokal, dalam batas rate limit dan kuota penggunaan paket gratis. Tidak untuk agen cloud; itu memerlukan Pro atau di atasnya.

Bagaimana cara membatalkan run yang terlalu lama?

Panggil run.cancel(). Status berubah menjadi cancelled, stream langsung dibatalkan, dan run.wait() menyelesaikan dengan hasil yang dibatalkan.

Di mana posisi hook jika SDK tidak memiliki callback terprogram?

Hook adalah kebijakan repo, bukan logika per skrip. Taruh aturan bersama di .cursor/hooks.json, dan simpan logika spesifik run di sekitar agent.send() atau run.wait() dalam kode TypeScript Anda.

Apakah SDK siap untuk produksi?

Gunakan terlebih dahulu untuk tugas berisiko rendah. Permukaan SDK masih public beta. Pin @cursor/sdk, batasi secret, wajibkan review, dan harapkan perubahan API sebelum general availability.

Topik
Kecerdasan Buatan

Belajar bersama DataCamp

Kursus

Pengembangan Perangkat Lunak dengan Cursor

1 jam 30 menit
4.3K
Bangun kode yang siap produksi dengan Cursor. Pelajari prompt AI, refactoring, pengujian, dan alur kerja lanjutan.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

Lihat SelengkapnyaLihat Selengkapnya