Stockages personnalisés, outils personnalisés et revue automatique pour le Cursor SDK
Nous avons livré un lot de nouvelles fonctionnalités pour les SDK TypeScript et Python. Vous pouvez désormais choisir comment les métadonnées des agents et des exécutions sont conservées, exposer vos propres fonctions à l'agent sous forme d'outils, faire passer les appels d'outils locaux par la revue automatique, et imbriquer des sous-agents sur autant de niveaux que nécessaire. Cette version apporte également un ensemble de correctifs de fiabilité, de performances et de plateforme qui facilitent l'exécution des agents SDK locaux et cloud dans des scripts de production, en CI et dans des intégrations personnalisées.
Outils personnalisés
Vous pouvez désormais transmettre à l’agent local vos propres outils en passant des définitions de fonctions via local.customTools, dans Agent.create() ou pour chaque send(). Le SDK les expose à l’agent via un serveur MCP intégré appelé custom-user-tools, afin que le modèle appelle votre code par le même chemin et avec le même contrôle d’autorisation que n’importe quel autre outil MCP.
Auparavant, exposer une fonctionnalité personnalisée impliquait de mettre en place votre propre serveur MCP stdio ou HTTP distant et de le raccorder à l’agent. Désormais, une définition de fonction suffit. Les outils personnalisés sont également visibles par tous les sous-agents d’un agent parent ; ainsi, un outil défini une seule fois reste disponible tout au long de l’exécution.
Revue automatique
Par défaut, un agent SDK local exécute les appels d’outil sans demander d’approbation, puisqu’il n’y a pas d’humain dans la boucle lors d’une exécution en mode headless. Définissez local.autoReview pour faire passer ces appels par la revue automatique à la place. Un classificateur décide quels appels s’exécutent automatiquement et lesquels doivent être mis en attente, plutôt que de contourner entièrement la revue.
Vous guidez ce classificateur à l’aide d’instructions en langage naturel dans permissions.json. Le champ autoRun.allow_instructions décrit les types d’appels à privilégier, et autoRun.block_instructions décrit ceux à mettre en attente pour revue. Par exemple, vous pouvez autoriser des inspections en lecture seule des artefacts de build, tout en mettant systématiquement en pause les opérations destructrices comme les suppressions.
{
"autoRun": {
"allow_instructions": [
"Read-only inspections of build artifacts under ./dist are fine."
],
"block_instructions": [
"Always pause delete operations so I get a chance to review them."
]
}
}JSONL et stockages personnalisés
Les deux SDK conservent les métadonnées des agents et des exécutions afin que vous puissiez reprendre un agent après le redémarrage d’un processus. Jusqu’à présent, ce stockage reposait sur SQLite. Vous pouvez désormais choisir d’utiliser à la place un stockage JSONL, qui écrit dans un simple fichier en ajout seul, que vous pouvez lire, comparer et enregistrer dans votre système de gestion de versions. SqliteLocalAgentStore et JsonlLocalAgentStore sont tous deux exportés directement.
Si aucune de ces options par défaut ne convient à votre configuration, implémentez l’interface publique LocalAgentStore et transmettez-la via local.store. Créez un stockage en mémoire pour des exécutions CI éphémères, ou utilisez Postgres comme backend de persistance lorsque vous souhaitez que l’état de l’agent soit stocké avec le reste des données de votre application. Le SDK Python expose des stockages hôte, JSONL et JSONL composés via le bridge.
Sous-agents imbriqués
Les sous-agents peuvent désormais lancer leurs propres sous-agents, et ainsi de suite. Un sous-agent chargé de la revue peut déléguer à un sous-agent chargé d’écrire les tests, qui peut à son tour déléguer davantage, chaque niveau conservant son propre prompt et son propre modèle. Il n’y a rien à activer : une session de sous-agent enregistre l’exécuteur dont elle a besoin pour appeler Task, donc l’imbrication fonctionne automatiquement pour tout agent qui définit des sous-agents.
Fiabilité, performances et améliorations de la plateforme
Cette version inclut également une série de correctifs de qualité de vie dans les deux SDK.
- Corrélation des exécutions : chaque
send()inclut désormais unrequestIdgénéré par la plateforme, exposé dansRunetRunResultet conservé dans les stockages en mémoire, SQLite et JSONL. Reliez un script ou une exécution CI aux journaux du backend, aux analyses et aux échanges avec le support sans avoir à l’inférer à partir deagentId. wait()fiable sur les exécutions locales : les exécutions locales ne résolvent pluswait()avant l’écriture du résultat terminal. L’hydratation continue de se rafraîchir jusqu’à ce que l’exécution atteigne un état final, afin que l’automatisation lise un résultat complet.- Checkpoints sûrs lors de la libération : la libération d’un agent local ne supprime plus les données de checkpoint lorsqu’une référence racine est absente mais que des blobs de checkpoint existent encore. Le répertoire de l’agent n’est vidé que lorsqu’il ne reste réellement plus rien à conserver.
- Streaming Cloud via HTTP/1.1 : les sessions d’agent Cloud diffusent désormais correctement sur les transports HTTP/1.1 utilisés par certains proxys, d’anciennes implémentations fetch de Node et certaines images CI. Le comportement en HTTP/2 reste inchangé.
- Import plus léger : importer
@cursor/sdkne charge plus d’emblée l’intégralité de la stack d’agents locale. Les usages Cloud uniquement et de types uniquement évitent le coût du runtime local jusqu’au premier appel local, sans changement d’API. Le premier appel local entraîne un import unique, ensuite mis en cache. - Types TypeScript autonomes : les fichiers
.d.tspubliés ne référencent plus de packages de workspace non publiés. Cela corrige les erreursTS2305etTS2307avecskipLibCheck: false, ainsi que lesanysilencieux sur les types de flux commeTurnEndedUpdate. - ripgrep intégré : les exécutions shell locales utilisent le binaire
rgintégré à la plateforme sans modifier votrePATHglobal. Sous Windows, le préfixage de ripgrep n’écrase plus la variablePath.
- Composer 2 est redirigé vers Composer 2.5 : les clients SDK qui pointent encore vers les slugs
composer-2retirés sont automatiquement redirigés vers Composer 2.5, tout en conservant les variantes rapides, afin que les anciens scripts continuent de s’exécuter.
list_runslimité au workspace :Client,AsyncClientetAgent.list_runsacceptent uncwdfacultatif, et le bridge revient par défaut au workspace de lancement. Cela corrige les résultats « agent introuvable » intempestifs lorsque le bridge s’exécute comme sous-processus.- Erreurs d’absence plus claires : rechercher un agent qui n’est pas dans le workspace résolu renvoie une erreur explicite indiquant qu’il est introuvable, au lieu d’une erreur interne opaque.
- Version 0.1.6 et analyses :
cursor-sdk0.1.6 documente le circuit de publication Buildkite et étiquette l’utilisation du SDK commesdk-python-pour des analyses plus claires.
Exécutez npm install @cursor/sdk ou pip install cursor-sdk pour mettre à niveau. Les scripts qui pointent vers composer-2 passent automatiquement à Composer 2.5, et requestId est un ajout sûr à votre schéma de métadonnées d’exécution. Consultez la documentation TypeScript et Python pour tous les détails.