Een cloudagent bouwen die bugs fixt
Het volgende voorbeeld verplaatst zich van een lokale map naar een GitHub-repo die in Cursor’s cloud is gekloond. De taak blijft klein: fix een falende auth-test en open een pull request.
Wanneer kies je voor cloud
Cloudagents draaien in VM’s die door Cursor worden beheerd. Ze klonen de repo, zetten een ontwikkelomgeving op en gaan door als je lokale script stopt. Klaar? Dan kunnen ze een branch pushen en een pull request openen. De keerzijde is opstarttijd en hoger tokenverbruik vergeleken met een kleine lokale run.
Cloudruns verschijnen in Cursor Web en het Agents-venster op desktop terwijl ze draaien. SDK-cloudagents worden uit de standaardlijst gefilterd. In Cursor Web gebruik je Filter > Source > SDK. In het Agents-venster op desktop gebruik je de voettekst van de zijbalk: Show > SDK. Als je het bc- agent-id hebt, kun je ’m ook direct openen via https://cursor.com/agents/bc-... of via de desktop deeplink. Een eenvoudige vuistregel: gebruik cloud wanneer een van deze waar is:
- De taak duurt mogelijk langer dan een lokale scriptsessie.
- Je wilt een PR of branch als output, niet alleen tekst.
- Je wilt meerdere agents parallel tegen dezelfde repo laten draaien.
- De agent moet code draaien (tests, builds) in een geïsoleerde omgeving.
Voor korte lokale checks gebruik je de lokale runtime.
Configureer de agent
De cloudconfig vervangt de local-sleutel door een cloud-sleutel. Je geeft de repo op om te klonen, je kunt optioneel een startbranch vastpinnen en instellen of Cursor een PR moet openen wanneer de run klaar is.
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 is een array, maar cloud v1 ondersteunt momenteel één repo per agent. startingRef is de branch of commit waarvan de agent start. autoCreatePR: true vraagt Cursor een pull request te openen wanneer de run klaar is. GitHub-permissies, integratiestatus, lege diffs of reporegels kunnen er nog steeds voor zorgen dat je alleen een branch krijgt in plaats van een PR.
Om de agent de repo te laten klonen, moet je Cursor-account de GitHub-integratie hebben ingesteld. Als die niet is verbonden, geeft de SDK een IntegrationNotConnectedError terug met een helpUrl-veld.
Verstuur de taak en maak later opnieuw verbinding
Het onderstaande patroon verstuurt een taak en wacht vervolgens op het resultaat via Agent.getRun(). Zo kan een ander proces later opnieuw verbinden als het oorspronkelijke script is gestopt.
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});
}
Je kunt de run streamen voor live output, maar wait() is genoeg wanneer je alleen het resultaat nodig hebt. Wanneer een PR is aangemaakt, staat de URL op result.git?.branches[0]?.prUrl; cloud v1 ondersteunt nog geen meerdere repo’s, dus index 0 is de branch om te checken. Is er geen PR-URL, check dan branch?.branch en open de PR handmatig. Bewaar de run.id en agent.agentId als je later opnieuw wilt aansluiten.
Bekijk op dit punt het pull request zoals elke andere codewijziging.
Lokaal versus cloud in één oogopslag
De twee runtimes gebruiken dezelfde SDK maar gedragen zich anders.
|
Capaciteit |
Lokaal |
Cloud |
|
Waar het draait |
Je Node-proces |
Een VM die Cursor beheert |
|
Bestandstoegang |
Je schijf |
Alleen gekloonde repo |
|
Overleeft disconnects |
Nee |
Ja |
|
Opent PR’s |
Nee |
Ja, wanneer reporechten dat toelaten |
|
Levert artifacts op |
Nee |
Ja (15 minuten presigned URL’s) |
|
Gebruik voor |
Iteratie, CI op een checkout |
Langere taken, parallelle runs, PR-output |
Gebruik lokale runs voor snelle checks. Gebruik cloudruns wanneer je een branch, PR of artifact nodig hebt.
Andere voorbeelden
De bugfixer gebruikte de hoofdflow van de SDK: maak een agent, stuur een taak, wacht op een resultaat en beoordeel de output. De cookbook van Cursor toont dezelfde SDK-calls in grotere voorbeelden:
-
agent-kanbanlijst cloudagents op, groepeert ze op status of repo en toont artifacts in preview. -
coding-agent-cliwikkelt lokale en cloudagents in een terminaltool. -
app-builderdraait een lokale agent vanuit een chat-UI en toont gegenereerde React-code in preview.
Eén detail om scherp te houden is artifact-handling. Artifacts zijn alleen beschikbaar bij cloudruns. Lokale agents passen bij tekstoutput en snelle checks. Cloudagents passen bij taken die bestanden, branches of PR’s als output nodig hebben.
MCP, Skills, Hooks en Subagents
De SDK kan dezelfde projectagentconfig lezen die Cursor in de IDE gebruikt. De bugfixer heeft niet alles nodig, maar deze onderdelen zijn belangrijk zodra de agent in een echte repo werkt.
MCP-servers
Zoals eerder genoemd, verbinden MCP-servers agents met externe tools. Je kunt servers inline meegeven in Agent.create() of definiëren in .cursor/mcp.json. Als je mcpServers opnieuw meegeeft in agent.send(), gebruikt die run de servers uit send() in plaats van de servers uit Agent.create(). Gebruik HTTP-MCP-servers voor gehoste tools. Gebruik stdio-MCP-servers voor tools die naast de agent draaien.
Skills
Skills zijn markdownbestanden in .cursor/skills/ die de agent projectinstructies geven, zoals testframeworkkeuzes, API-conventies of releaseregels. Gebruik ze voor richtlijnen die op elke run in de repo van toepassing moeten zijn.
Hooks
Hooks staan in .cursor/hooks.json en draaien op specifieke punten in de agentloop. Veelgebruikte toepassingen zijn formatteren na bestandsedits en destructieve shellcommando’s blokkeren vóór uitvoering. Gebruik voor safety hooks fail-closed-gedrag zodat een kapotte hook de actie blokkeert.
Subagents
Subagents zijn benoemde agents die de hoofdagent kan aanroepen voor gefocust werk, zoals code review of tests schrijven. Definieer ze in .cursor/agents/*.md of inline in Agent.create({ agents: { ... } }). Cloudagents laden projectsubagents uit de uitgecheckte repo. Lokale agents hebben local.settingSources: ["project"] nodig als je wilt dat ze project- .cursor/config lezen. Houd elke subagent smal.
Safety checks
Voordat agents een echte repo aanraken, stel eerst de grenzen in. Dit is het deel dat ik niet zou overslaan.
-
Scope permissies strak. Agents kunnen bestanden lezen, commando’s uitvoeren en alle credentials gebruiken die jij ze geeft. Geef agents repo-scoped toegang, geen brede servicecredentials.
-
Houd secrets uit prompts. Prompts kunnen in transcripts terechtkomen. Gebruik omgevingsvariabelen voor
CURSOR_API_KEYen elke andere token, en onthoud dat stdio-MCP-env-waarden de runtime bereiken waar de server draait. -
Eis menselijke review. Als een cloudagent PR’s kan openen, moet branch protection een menselijke reviewer vereisen vóór merge. Combineer
autoCreatePR: trueniet met automerge, tenzij de repo laag risico is. -
Let op kosten en modelkeuze. SDK-gebruik komt uit Cursor’s tokengebaseerde gebruikspool. Zoals eerder genoemd, is Composer 2 één modeloptie voor codingtaken; roep
Cursor.models.list()aan als je wilt zien welke model-id’s je account kan gebruiken. -
Log de run.
run.conversation()geeft een gestructureerd beeld van de beurten van de agent. Sla het op voor runs die je later misschien moet debuggen of auditen.
Conclusie
Dit artikel behandelde npm install @cursor/sdk, een lokale quickstart, een cloudagent die een pull request opent en de belangrijkste extensiepunten voor agentgedrag in een repo.
Gebruik de SDK wanneer code de agent moet starten en beheren. Als de taak alleen een editorgesprek is, is de Cursor-app meestal genoeg.
Ter vergelijking: onze gidsen over de Claude Agent SDK en de OpenAI Agents SDK behandelen agent-API’s in andere ecosystemen.

Ik ben een data-engineer en communitybouwer die werkt aan datapijplijnen, cloud en AI-tools, en tegelijkertijd praktische, impactvolle tutorials schrijft voor DataCamp en beginnende developers.
FAQs
Werkt de Cursor SDK met Python of een andere taal?
Niet officieel. De SDK is alleen voor TypeScript in de publieke bèta; Python-gebruikers zouden rechtstreeks de Cloud Agents REST API moeten aanroepen.
Kan ik de SDK gebruiken op het gratis Hobby-abonnement?
Ja voor lokale agents, binnen de rate limits en gebruikslimieten van de gratis tier. Nee voor cloudagents; daar is Pro of hoger voor nodig.
Hoe annuleer ik een run die te lang duurt?
Roep run.cancel() aan. De status wordt cancelled, de livestreamp wordt afgebroken en run.wait() resolve’t met het geannuleerde resultaat.
Waar passen hooks als de SDK geen programmatische callback heeft?
Hooks zijn repobeleid, geen per-scriptlogica. Zet gedeelde regels in .cursor/hooks.json, en houd run-specifieke logica rond agent.send() of run.wait() in je TypeScript-code.
Is de SDK klaar voor productiegebruik?
Gebruik het eerst voor laagrisico-taken. Het SDK-oppervlak is nog in publieke bèta. Pin @cursor/sdk, scope secrets, vereis review en reken op API-wijzigingen vóór algemene beschikbaarheid.

Cursor kondigde eind april 2026 zijn TypeScript-SDK aan en bracht die uit als publieke bèta. Het pakket wordt gepubliceerd als
@cursor/sdken draait vanuit Node-omgevingen zoals scripts, CI-jobs en backendservices.Het grootste verschil met Cursor in de editor is waar de taak start. In plaats van zelf een chat te openen en een prompt te typen, maakt je code de agent aan, verstuurt de taak, streamt events, wacht op het resultaat en handelt fouten af.
In deze tutorial richten we de SDK in, draaien we een lokale quickstart en bouwen we daarna het hoofdproject: een cloudagent die een bug in een GitHub-repo fixt en een pull request opent. Ik houd de bug bewust klein zodat de SDK-flow zichtbaar blijft. Daarna behandelen we de extensiepunten en safety checks die je nodig hebt voordat je het patroon aanpast. Het cloudproject gebruikt een companion-repo met het launchscript en het doelproject.
De SDK is in publieke bèta, dus check de officiële docs voordat je deze code hergebruikt in een langlopend project.
Wat is de Cursor SDK?
De Cursor SDK is een TypeScript-pakket,
@cursor/sdk, waarmee je Cursor-agents vanuit code kunt aanmaken en draaien. Je krijgt toegang tot:De SDK gebruikt hetzelfde agentsysteem als de Cursor IDE, CLI en webapp. Het verschil is dat je het vanuit TypeScript aanroept.
Wanneer gebruik je de SDK
De SDK past bij taken die vanuit code moeten starten in plaats van door iemand die in de editor typt. Ik zou ’m gebruiken voor een CI-job die een agent vraagt een falende test te inspecteren, een webhook die een branch aanmaakt voor een bugfix, of een interne tool die een vaste agenttaak vanuit een formulier draait.
SDK versus de Cursor-app
De SDK is een andere manier om Cursor-agents te gebruiken, naast de Cursor IDE en de
cursor agentCLI.Gebruik de IDE voor editorchat. Gebruik de CLI voor terminalprompts. Gebruik de SDK wanneer TypeScript-code de agent moet aanmaken, de taak versturen en het resultaat afhandelen. Zoals hierboven genoemd, ondersteunt de CLI geen externe provider keys; de SDK authenticeert ook uitsluitend via een Cursor API-sleutel.
Hoe de Cursor SDK in elkaar zit
Voor je code schrijft, helpt het om de paar objecten en runtimekeuzes te kennen die de SDK blootlegt.
Cursor SDK-architectuur over drie runtimes. Afbeelding door auteur.
Drie runtimes
De SDK ondersteunt drie plekken waar een agent kan draaien.
Runtime
Wat het doet
Wanneer te gebruiken
Lokaal
Draait de agent inline in je Node-proces, met bestanden vanaf disk
Dev-scripts, CI-checks tegen een working tree, snelle iteratie
Cursor cloud
Draait in een geïsoleerde VM met je repo ingeklonen, beheerd door Cursor
Parallelle agents, langere taken, runs die doorgaan na disconnects
Self-hosted cloud
Zelfde vorm als cloud maar met je eigen VM’s en netwerk
Teams die code, secrets en build-output binnen hun eigen omgeving willen houden
In dit artikel gebruiken we lokaal en Cursor cloud. Self-hosted cloud, hierboven genoemd, is vooral voor Enterprise-plannen. De SDK-code verandert via de configsleutel die je meegeeft:
localofcloud.Runtime, tools en modellen
Een run binnen de SDK heeft drie delen. De runtime is waar hij draait. De agenttools omvatten indexing, search, MCP-toolcalls, skills, hooks en subagents. Het model selecteer je met
model: { id: "composer-2" }of een andere id die je account kan gebruiken.Je stelt deze onderdelen in via de agentconfig.
Agent en Run
De twee belangrijkste objecten in de SDK zijn de
Agenten deRun. Een agent bewaart conversatiestatus, workspaceconfig en modelinstellingen. Een run is één prompt die naar die agent wordt gestuurd, met een eigen stream, status, resultaat en cancel-handle.Die scheiding is belangrijk omdat cloudagents één actieve run per agent afdwingen. Als je een tweede prompt probeert te sturen terwijl de eerste nog loopt, geeft de API
409 agent_busyterug. Voor parallel draaien maak je aparte agents, niet aparte runs op dezelfde agent.Events streamen
Elke run biedt een stream van events via
run.stream(), een async iterator. Elk event heeft eentype-veld. In de huidige publieke bèta stuurt de SDKsystem,user,assistant,tool_call,thinking,status,requestentaskevents uit. Er is geen gedocumenteerdconnection:reconnecting-event; reconnects worden binnen de SDK afgehandeld.Voor lagere-level updates accepteert
agent.send()ookonDeltaenonStepcallbacks.De Cursor SDK instellen
De setup is alleen Node, TypeScript en een Cursor API-sleutel.
Vereisten
Je hebt nodig:
Node.js 22 of nieuwer. Het pakket ondersteunt formeel Node 18 of nieuwer, maar Node 22 komt overeen met de officiële cookbookvoorbeelden en ondersteunt de
--env-file-vlag die hieronder wordt gebruikt om.envte laden.Een Cursor-account op Pro ($20/maand) of hoger voor cloudagents.
Basiskennis van TypeScript.
tsxom TypeScript te draaien zonder te compileren.Installeer de SDK en de TypeScript-tools:
Installeer de SDK
In een lege map:
Voeg
"type": "module"toe aan jepackage.jsonzodat imports als ESM werken. Voeg daarna eentsconfig.jsontoe die top-levelawaiten expliciete asynchrone disposals ondersteunt:Haal een Cursor API-sleutel op
De sleutel werd oorspronkelijk gegenereerd onder
cursor.com/dashboard/cloud-agents, maar is verplaatst naarcursor.com/dashboard/integrations. Als een gids verwijst naar "Cloud Agents", kijk dan bij Integrations.Genereer User API Keys via Integrations. Afbeelding door auteur.
Genereer daar een User API Key en sla die op als
CURSOR_API_KEY:Voeg
.envtoe aan je.gitignore. De SDK leestprocess.envdirect; hij laadt geen.env-bestanden voor je.Projectstructuur
Mapindeling:
package.json,tsconfig.json,.envensrc/voor je scripts. Voeg een.cursor/-map toe voor hooks, skills en subagents wanneer je die nodig hebt.Je eerste lokale Cursor-agent
Het eerste voorbeeld is bewust klein. Het maakt een lokale agent aan, stuurt één prompt, streamt de respons en sluit de agent af.
Maak een lokale agent aan
Maak
src/01-quickstart.tsaan:Agent.create()geeft een handle terug voordat de agent iets heeft gedaan.local: { cwd: process.cwd() }wijst de agent op de huidige werkdirectory. De SDK ondersteunt asynchrone disposal; in tutorialcode geef ik de voorkeur aan een explicietfinally-blok omdat datawait using-versievraagstukken vermijdt.Stuur een prompt en stream de respons
Een prompt sturen geeft een
Run-object terug met een eigen stream en status. Dit voorbeeld leest de stream in eenfor await-lus en print alleen de assistent-tekst.De agent stuurt meerdere eventtypes uit, waaronder
thinking,tool_callenstatus. Dit voorbeeld filtert opassistant-tekst omdat dat het zichtbare antwoord is.event.message.contentis getypt en bruikbaar voor streaming, maar is block-based en kan toolcalls bevatten. Als je alleen eindtekst nodig hebt, sla de stream dan over en leesresult.resultnarun.wait().durationMsis publiek maar optioneel, dus het voorbeeld behandelt ’m als optioneel.Fouten afhandelen
De SDK gooit getypte fouten die
CursorAgentErroruitbreiden. Veelvoorkomende gevallen zijnAuthenticationErrorvoor een ongeldige sleutel,ConfigurationErrorvoor een ongeldige model-id,RateLimitError,IntegrationNotConnectedErrorenNetworkError.De
isRetryable-vlag is waar je retrylogica op moet letten. Netwerkfouten en rate limits zijn retryable; onjuiste configuratie en authenticatie niet.Draaien
Sla het bestand op en draai het met de
.env-loader van Node entsx.De vlag
--env-file=.envlaadtCURSOR_API_KEYvoordat het script start. Het script zou assistent-tekst moeten printen, gevolgd door een statusvoetregel op één lijn. Zie je een authenticatiefout, check dan je.enven bevestig dat de sleutel vanuit het Integrations-dashboard is gegenereerd.