Bulutta Hata Düzeltme Ajanı Oluşturma
Bir sonraki örnek, yerel bir klasörden Cursor’un bulutunda klonlanan bir GitHub deposuna geçiyor. Görev hâlâ küçük: başarısız olan bir kimlik doğrulama testini düzeltmek ve bir pull request açmak.
Ne zaman buluta geçmeli
Bulut ajanları, Cursor’un yönettiği VM’lerde çalışır. Depoyu klonlar, bir geliştirme ortamı kurarlar ve yerel betiğiniz çıksa bile çalışmaya devam ederler. İşleri bittiğinde bir dalı itebilir ve pull request açabilirler. Karşılık olarak, küçük bir yerel çalıştırmaya göre başlatma süresi ve daha yüksek belirteç (token) kullanımı söz konusudur.
Bulut çalıştırmaları, çalışırken Cursor Web’de ve masaüstü Ajanlar Penceresinde görünür. SDK bulut ajanları varsayılan listeden süzülüdür. Cursor Web’de Filter > Source > SDK’yı kullanın. Masaüstü Ajanlar Penceresinde, kenar çubuğu altbilgisini kullanın: Show > SDK. bc- ile başlayan ajan id’si sizdeyse, https://cursor.com/agents/bc-... adresinden doğrudan açabilir veya masaüstü derin bağlantısıyla gidebilirsiniz. Basit bir kural olarak, aşağıdakilerden herhangi biri doğruysa bulutu kullanın:
- Görev, yerel bir betik oturumundan daha uzun sürebilir.
- Çıktı olarak yalnızca metin değil, bir PR veya dal istiyorsunuz.
- Aynı depo üzerinde birden çok ajanı paralel çalıştırmak istiyorsunuz.
- Ajanın izole bir ortamda kod (testler, derlemeler) çalıştırması gerekiyor.
Kısa yerel kontroller için yerel çalışma zamanını kullanın.
Ajanı yapılandırın
Bulut yapılandırması, local anahtarını cloud anahtarıyla değiştirir. Klonlanacak depoyu listelersiniz, isteğe bağlı olarak başlangıç dalını sabitlersiniz ve çalışma bittiğinde Cursor’ın PR açıp açmamasını belirlersiniz.
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 bir dizidir, ancak bulut v1 şu anda ajan başına tek depo destekler. startingRef, ajanın başlayacağı dal veya committir. autoCreatePR: true, çalışma bittiğinde Cursor’dan bir pull request açmasını ister. GitHub izinleri, entegrasyon durumu, boş diff’ler veya depo kuralları yine de PR yerine bir dal ile bırakabilir.
Ajanın depoyu klonlayabilmesi için Cursor hesabınızda GitHub entegrasyonunun kurulmuş olması gerekir. Bağlı değilse, SDK bir IntegrationNotConnectedError ve helpUrl alanı döndürür.
Görevi gönderin ve sonra yeniden bağlanın
Aşağıdaki desen, bir görevi gönderir ve ardından sonucu Agent.getRun() üzerinden bekler. Bu, ilk betik çıksa bile başka bir sürecin daha sonra yeniden bağlanmasına imkân tanır.
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});
}
Canlı çıktı için çalıştırmayı akışla alabilirsiniz, ancak yalnızca sonuca ihtiyacınız varsa wait() yeterlidir. Bir PR oluşturulduğunda URL, result.git?.branches[0]?.prUrl alanında döner; bulut v1 henüz birden çok depoyu desteklemez, bu yüzden kontrol edilecek dal indeks 0’dır. Bir PR URL’si yoksa, branch?.branch ’i kontrol edin ve PR’ı elle açın. Daha sonra yeniden bağlanmayı planlıyorsanız run.id ve agent.agentId’yi saklayın.
Bu noktada, pull request’i diğer kod değişiklikleri gibi gözden geçirin.
Kısaca yerel ve bulut karşılaştırması
İki çalışma zamanı aynı SDK’yı kullanır ancak farklı davranırlar.
|
Yetenek |
Yerel |
Bulut |
|
Nerede çalışır |
Node süreciniz |
Cursor’ın yönettiği bir VM |
|
Dosya erişimi |
Diskiniz |
Yalnızca klonlanan depo |
|
Bağlantı kopmalarını atlatır |
Hayır |
Evet |
|
PR açar |
Hayır |
Evet, depo izinleri izin veriyorsa |
|
Eser (artifact) döndürür |
Hayır |
Evet (15 dakikalık ön imzalı URL’ler) |
|
Kullanım amacı |
Yineleme, bir checkout üzerinde CI |
Daha uzun görevler, paralel çalıştırmalar, PR çıktısı |
Hızlı kontroller için yerel çalıştırmaları kullanın. Bir dal, PR veya eser gerektiğinde bulut çalıştırmalarını kullanın.
Diğer Örnekler
Hata düzeltici, ana SDK akışını kullandı: bir ajan oluşturma, bir görev gönderme, sonucu bekleme ve çıktıyı inceleme. Cursor’ın yemek kitabı daha büyük örneklerde aynı SDK çağrılarını gösterir:
-
agent-kanbanbulut ajanlarını listeler, duruma veya depoya göre gruplar ve eserleri önizler. -
coding-agent-cliyerel ve bulut ajanlarını bir terminal aracında sarar. -
app-builderbir sohbet arayüzünden yerel bir ajan çalıştırır ve oluşturulan React kodunu önizler.
Dikkat edilmesi gereken bir ayrıntı eser (artifact) yönetimidir. Eserler yalnızca bulut çalıştırmalarında mevcuttur. Yerel ajanlar metin çıktısı ve hızlı kontroller için uygundur. Bulut ajanları ise çıktı olarak dosyalar, dallar veya PR’lar gerektiren görevler için uygundur.
MCP, Beceriler, Kancalar ve Alt Ajanlar
SDK, Cursor’ın IDE’de kullandığı aynı proje ajan yapılandırmasını okuyabilir. Hata düzeltici bunların hepsine ihtiyaç duymaz, fakat ajan gerçek bir depoda çalışmaya başladığında bu parçalar önem kazanır.
MCP sunucuları
Önceden belirtildiği gibi, MCP sunucuları ajanları harici araçlara bağlar. Sunucuları Agent.create() içinde satır içi geçebilirsiniz veya .cursor/mcp.json’da tanımlayabilirsiniz. mcpServers’ı agent.send() içinde yeniden geçerseniz, o çalıştırma send() ’den gelen sunucuları Agent.create()’den gelenlere tercih eder. Barındırılan araçlar için HTTP MCP sunucularını, ajanın yanında çalışan araçlar için stdio MCP sunucularını kullanın.
Beceriler (Skills)
Beceriler, ajana proje yönergeleri veren .cursor/skills/ altındaki markdown dosyalarıdır; örneğin test çerçevesi tercihleri, API kuralları veya sürümleme kuralları. Depodaki her çalıştırmada geçerli olması gereken yönergeler için kullanın.
Kancalar (Hooks)
Kancalar .cursor/hooks.json içinde bulunur ve ajan döngüsünün belirli noktalarında çalışır. Yaygın kullanımlar arasında dosya düzenlemelerinden sonra biçimlendirme ve yürütülmeden önce yıkıcı kabuk komutlarını engelleme yer alır. Güvenlik kancaları için, bir kancanın bozulması işlemi engellesin diye varsayılan kapalı (fail closed) davranışı kullanın.
Alt ajanlar (Subagents)
Alt ajanlar, ana ajanın odaklı işler için (ör. kod inceleme veya test yazımı) çağırabileceği adlandırılmış ajanlardır. Bunları .cursor/agents/*.md içinde veya Agent.create({ agents: { ... } }) içinde satır içi tanımlayın. Bulut ajanları, proje alt ajanlarını check-out edilen depodan yükler. Yerel ajanların proje .cursor/ yapılandırmasını okumasını istiyorsanız local.settingSources: ["project"] kullanın. Her alt ajanı dar kapsamlı tutun.
Güvenlik Kontrolleri
Ajanlar gerçek bir depoya dokunmadan önce sınırları belirleyin. Bu kısmı atlamazdım.
-
İzin kapsamını sıkı tutun. Ajanlar dosya okuyabilir, komut çalıştırabilir ve onlara açtığınız kimlik bilgilerini kullanabilir. Ajanlara geniş servis kimlik bilgileri değil, depo kapsamlı erişim verin.
-
Gizli bilgileri istemlerden uzak tutun. İstemler transkriptlere düşebilir.
CURSOR_API_KEYve diğer tüm belirteçler için ortam değişkenleri kullanın ve stdio MCPenvdeğerlerinin sunucunun çalıştığı çalışma zamanına ulaştığını unutmayın. -
İnsan incelemesi zorunlu olsun. Bir bulut ajanı PR açabiliyorsa, birleştirme öncesinde dal koruması bir insanın incelemesini gerektirmelidir. Depo düşük riskli olmadıkça
autoCreatePR: trueile otomatik birleştirmeyi birlikte kullanmayın. -
Maliyeti ve model seçimini izleyin. SDK kullanımı, Cursor’ın belirteç tabanlı kullanım havuzundan düşer. Önceden belirtildiği gibi, Composer 2 kodlama görevleri için bir model seçeneğidir; hesabınızın kullanabildiği model id’lerini görmek istiyorsanız
Cursor.models.list()çağrısını yapın. -
Çalıştırmayı kaydedin.
run.conversation()ajanın turlarının yapılandırılmış bir görünümünü döndürür. Daha sonra hata ayıklamanız veya denetlemeniz gerekebilecek çalıştırmalar için saklayın.
Sonuç
Bu makalede npm install @cursor/sdk, yerel bir hızlı başlangıç, pull request açan bir bulut ajanı ve depo ajan davranışı için ana genişletme noktaları ele alındı.
Kodun ajana başlaması ve onu yönetmesi gerektiğinde SDK’yı kullanın. Görev yalnızca bir editör konuşması ise, Cursor uygulaması genellikle yeterlidir.
Karşılaştırma için, Claude Agent SDK ve OpenAI Agents SDK hakkındaki rehberlerimiz diğer ekosistemlerdeki ajan API’larını kapsar.

Veri hatları, bulut ve YZ araçları üzerinde çalışan; aynı zamanda DataCamp ve gelişmekte olan geliştiriciler için pratik, yüksek etkili eğiticiler yazan bir veri mühendisi ve topluluk inşacısıyım.
SSS
Cursor SDK Python veya başka bir dille çalışır mı?
Resmi olarak hayır. Halk betası itibarıyla SDK yalnızca TypeScript’tir; Python kullanıcıları Cloud Agents REST API’sini doğrudan çağırmalıdır.
SDK’yı ücretsiz Hobby planında kullanabilir miyim?
Ücretsiz katmandaki hız ve kullanım sınırları dahilinde yerel ajanlar için evet. Bulut ajanları için hayır; onlar Pro veya üzerini gerektirir.
Çok uzun süren bir çalıştırmayı nasıl iptal ederim?
run.cancel() çağırın. Durum cancelled olur, canlı akış iptal edilir ve run.wait() iptal edilmiş sonuçla çözümlenir.
SDK’da programatik bir geri çağrı yoksa kancalar nereye oturur?
Kancalar depo politikasıdır, betik başına mantık değildir. Paylaşılan kuralları .cursor/hooks.json içine koyun ve çalıştırmaya özgü mantığı TypeScript kodunuzda agent.send() veya run.wait() etrafında tutun.
SDK üretim kullanımı için hazır mı?
Önce düşük riskli görevler için kullanın. SDK yüzeyi hâlâ herkese açık betadadır. @cursor/sdk sürümünü sabitleyin, sırları sınırlayın, inceleme gerektirin ve genel kullanıma geçmeden önce API değişikliklerini bekleyin.

Cursor, Nisan 2026 sonunda TypeScript SDK’sını duyurdu ve herkese açık beta olarak yayımladı. Paket
@cursor/sdkadıyla yayınlanır ve betikler, CI işleri ve arka uç servisleri gibi Node ortamlarında çalışır.Editörde Cursor kullanmaya kıyasla temel fark, görevin nerede başladığıdır. Sohbet penceresi açıp istemi kendiniz yazmak yerine, kodunuz ajanı oluşturur, görevi gönderir, olayları akışla alır, sonucu bekler ve hataları ele alır.
Bu eğitimde SDK’yı kuruyor, yerel bir hızlı başlangıç çalıştırıyor, ardından ana projeyi inşa ediyoruz: GitHub deposundaki bir hatayı düzelten ve bir pull request açan bulut ajanı. SDK akışı görünür kalsın diye hatayı bilerek küçük tutuyorum. Sonrasında, deseni uyarlamadan önce gereken genişletme noktalarını ve güvenlik kontrollerini ele alıyoruz. Bulut projesi, başlatıcı betik ve hedef projeyi içeren bir eşlik deposu kullanır.
SDK herkese açık betadadır, bu kodu uzun vadeli bir projede yeniden kullanmadan önce resmi dokümanları kontrol edin.
Cursor SDK Nedir?
Cursor SDK,
@cursor/sdkadlı bir TypeScript paketidir ve koddan Cursor ajanları oluşturup çalıştırmanıza olanak tanır. Şunlara erişim sağlar:SDK, Cursor IDE, CLI ve web uygulamasıyla aynı ajan sistemini kullanır. Fark, onu TypeScript’ten çağırmanızdır.
SDK ne zaman kullanılmalı
SDK, görevin editörde bir kişinin yazmasından değil de koddan başlaması gerektiği durumlara uygundur. Başarısız bir testi incelemesi için ajana soran bir CI işi, bir hata düzeltmesi için dal (branch) oluşturan bir webhook veya bir formdan sabit bir ajan görevini çalıştıran bir dahili araç için kullanmayı tercih ederim.
SDK ile Cursor uygulamasının farkı
SDK, Cursor IDE ve
cursor agentCLI ile birlikte Cursor ajanlarını kullanmanın başka bir yoludur.Editör sohbeti için IDE’yi kullanın. Terminal istemleri için CLI’yı kullanın. Ajanı oluşturması, görevi göndermesi ve sonucu işlemesi gerektiğinde SDK’yı kullanın. Yukarıda belirtildiği gibi, CLI harici sağlayıcı anahtarlarını desteklemez; SDK da yalnızca bir Cursor API anahtarı üzerinden kimlik doğrular.
Cursor SDK Nasıl Bir Araya Geliyor
Kod yazmadan önce, SDK’nın açığa çıkardığı birkaç nesneyi ve çalışma zamanı seçeneklerini bilmek faydalıdır.
Üç çalışma zamanı genelinde Cursor SDK mimarisi. Görsel: Yazar.
Üç çalışma zamanı
SDK, bir ajanın çalışabileceği üç yeri destekler.
Çalışma zamanı
Ne yapar
Ne zaman kullanılır
Yerel
Ajani Node süreciniz içinde satır içi çalıştırır, dosyaları diskten okur
Geliştirme betikleri, çalışan ağaç üzerinde CI kontrolleri, hızlı yineleme
Cursor bulut
Depo klonlanmış şekilde, Cursor tarafından yönetilen izole bir VM’de çalışır
Paralel ajanlar, daha uzun görevler, bağlantı koptuktan sonra da süren çalıştırmalar
Kendi barındırdığınız bulut
Bulut ile aynı şekil ama kendi VM’leriniz ve ağınızla
Kodun, sırların ve derleme çıktısının kendi ortamlarında kalması gereken ekipler
Bu yazıda yereli ve Cursor bulutu kullanıyoruz. Yukarıda listelenen kendi barındırdığınız bulut daha çok Kurumsal planlar içindir. SDK kodu, verdiğiniz yapılandırma anahtarına göre değişir:
localveyacloud.Çalışma zamanı, araçlar ve modeller
SDK içindeki bir çalıştırma üç parçadan oluşur. Çalışma zamanı, yürütmenin gerçekleştiği yerdir. Ajan araçları; indeksleme, arama, MCP araç çağrıları, beceriler, kancalar ve alt ajanları içerir. Model,
model: { id: "composer-2" }veya hesabınızın kullanabildiği başka bir id ile seçilir.Bu parçaları ajan yapılandırmasında belirlersiniz.
Agent ve Run
SDK’daki iki ana nesne
AgentveRun’dır. Bir ajan; konuşma durumunu, çalışma alanı yapılandırmasını ve model ayarlarını tutar. Bir run, o ajana gönderilen tek bir istemdir; kendi akışına, durumuna, sonucuna ve iptal tutamacına sahiptir.Bu ayrım önemlidir, çünkü bulut ajanları her ajan için bir etkin run zorunluluğu uygular. İlk çalışma sürerken ikinci bir istem göndermeye çalışırsanız, API
409 agent_busydöndürür. Paralel çalıştırmalar için ayrı run’lar değil, ayrı ajanlar oluşturursunuz.Olayları akışla alma
Her run, bir async yineleyici olan
run.stream()aracılığıyla bir olay akışı sunar. Her olayın birtypealanı vardır. Mevcut herkese açık betada SDK,system,user,assistant,tool_call,thinking,status,requestvetaskolayları yayar. Belgelenmiş birconnection:reconnectingolayı yoktur; yeniden bağlanmalar SDK içinde ele alınır.Daha alt düzey güncellemeler için,
agent.send()ayrıcaonDeltaveonStepgeri çağrılarını kabul eder.Cursor SDK’yı Kurma
Kurulum sadece Node, TypeScript ve bir Cursor API anahtarından ibarettir.
Önkoşullar
Gerekenler:
Node.js 22 veya daha yeni. Paket resmen Node 18 ve üzerini destekler, ancak Node 22 resmi yemek kitabı örnekleriyle eşleşir ve aşağıda
--env-filebayrağıyla.envdosyasının yüklenmesini destekler.Bulut ajanları için Pro (aylık 20 ABD doları) veya üzeri bir Cursor hesabı.
Temel TypeScript bilgisi.
tsxile TypeScript’i derlemeden çalıştırmak.SDK’yı ve TypeScript araçlarını kurun:
SDK’yı yükleyin
Yeni bir klasörde:
package.jsondosyanıza"type": "module"ekleyin ki içe aktarmalar ESM olarak çalışsın. Ardından, üst düzeyawaitve açıkça async temizlemeyi destekleyen birtsconfig.jsonekleyin:Bir Cursor API anahtarı alın
Anahtar başlangıçta
cursor.com/dashboard/cloud-agentsaltında üretiliyordu, ancak taşındı ve artıkcursor.com/dashboard/integrationsadresindedir. Bir kılavuz “Cloud Agents”a işaret ediyorsa, bunun yerine Integrations’a bakın.Integrations üzerinden User API Keys üretin. Görsel: Yazar.
Oradan bir Kullanıcı API Anahtarı üretin ve
CURSOR_API_KEYolarak saklayın:.envdosyasını.gitignore’a ekleyin. SDK doğrudanprocess.envokur; sizin için.envdosyalarını yüklemez.Proje yapısı
Klasör düzeni:
package.json,tsconfig.json,.envve betikleriniz içinsrc/. İhtiyaç duyduğunuzda kancalar, beceriler ve alt ajanlar için bir.cursor/klasörü ekleyin.İlk Yerel Cursor Ajanınız
İlk örnek kasıtlı olarak küçüktür. Yerel bir ajan oluşturur, tek bir istem gönderir, yanıtı akışla alır ve ajanı kapatır.
Yerel bir ajan oluşturun
Şunu oluşturun:
src/01-quickstart.ts:Agent.create(), ajan herhangi bir iş yapmadan önce bir tutamak döndürür.local: { cwd: process.cwd() }ajanı geçerli çalışma dizinine yönlendirir. SDK async temizlemeyi destekler; eğitim kodunda,await usingsürüm sorularından kaçındığı için açık birfinallybloğunu tercih ederim.Bir istem gönderin ve yanıtı akışla alın
Bir istem göndermek, kendi akışına ve durumuna sahip bir
Runnesnesi döndürür. Bu örnek, akışı birfor awaitdöngüsünde okur ve yalnızca assistant metnini yazdırır.Ajan,
thinking,tool_callvestatusdahil birkaç olay türü yayar. Bu örnek, görünür yanıt olduğu içinassistantmetnini filtreler.event.message.contentakış için türlenmiştir ve kullanılabilirdir, ancak blok tabanlıdır ve araç çağrılarını içerebilir. Yalnızca nihai metne ihtiyacınız varsa, akışı atlayın verun.wait()sonrasındaresult.result’ı okuyun.durationMsaleni ama isteğe bağlıdır, bu yüzden örnek onu isteğe bağlı olarak ele alır.Hataları ele alın
SDK,
CursorAgentError’ı genişleten türlenmiş hatalar fırlatır. Yaygın durumlar: hatalı anahtar içinAuthenticationError, geçersiz model id içinConfigurationError,RateLimitError,IntegrationNotConnectedErrorveNetworkError.isRetryablebayrağı, tekrar deneme mantığınızın kontrol etmesi gereken işarettir. Ağ hataları ve hız sınırlamaları yeniden denenebilir; hatalı yapılandırma ve kimlik doğrulama yeniden denenemez.Çalıştırın
Dosyayı kaydedin ve Node’un
.envyükleyicisi vetsxile çalıştırın.--env-file=.envbayrağı, betik başlamadan önceCURSOR_API_KEY’i yükler. Betik, assistant metnini yazdırmalı ve ardından tek satırlık bir durum altlığı göstermelidir. Kimlik doğrulama hatası görürseniz,.env’nizi kontrol edin ve anahtarın Integrations panosundan üretildiğini doğrulayın.