Toutes les pages
Sur cette page

Cursor

Le fournisseur Cursor fait tourner l’agent de Cursor sur la machine du relais, via le Cursor Agent SDK. OAR démarre un processus worker par conversation. L’agent travaille dans le dossier de travail de la conversation, avec les modèles de votre compte Cursor. Contrairement à Claude, il n’utilise pas de connexion sur la machine : vous donnez à OAR une clé d’API Cursor.

Cette page couvre ce qui est propre à Cursor. Le chat, la queue et l’explorateur de fichiers fonctionnent comme pour tous les fournisseurs ; voir Les fournisseurs en un coup d’œil pour comparer Cursor aux autres.

Ce qu’il vous faut #

  • Une clé d’API Cursor. Vous la collez une fois dans OAR ; voir L’activer.
  • Rien à installer. Cursor n’a besoin ni d’une CLI ni de l’app Cursor sur la machine, si bien que le sous-onglet Cursor n’a pas de ligne CLI.

Où se trouvent les choses :

Quoi Où
L’agent Un processus worker sur la machine du relais, un par conversation, dans le dossier de travail de la conversation.
La clé d’API Dans la base de données du relais sur cette machine. Le panneau ne l’affiche plus jamais, et elle n’est pas envoyée aux navigateurs.
L’état propre de l’agent Un dossier par conversation, créé au premier turn de la conversation. Session dans l’explorateur de fichiers l’ouvre.

Par défaut, les dossiers d’état se trouvent sous cursor-agents dans le dossier de données du relais : ~/.oar/data/cursor-agents (%APPDATA%\oar\data\cursor-agents sous Windows) sur une installation globale, server/data/cursor-agents dans un checkout git. Ajouté en 0.9.14 Avant 0.9.14, une installation globale les gardait dans le dossier du paquet, qu’une mise à jour remplace, si bien qu’une conversation pouvait perdre son agent ; une conversation dont le dossier existe encore continue de l’utiliser. CURSOR_AGENT_STORE_DIR les déplace ; voir Variables d’environnement.

L’activer #

Ouvrez Settings → Providers → Cursor (Réglages → Fournisseurs → Cursor). Le panneau a pour titre Cursor SDK.

Contrôle Par défaut Ce qu’il fait
Enable Cursor for New Chat model selection (Activer Cursor dans le choix du modèle des nouveaux chats) activé dès qu’une clé est enregistrée Propose Cursor dans New Chat (Nouveau chat). Ne peut pas être coché avant qu’une clé soit enregistrée.
Cursor API key (Clé d’API Cursor) (le champ affiche Cursor API key…) vide Votre clé. Une fois la clé enregistrée, le champ indique Saved API key (enter to replace) (Clé d’API enregistrée, saisir pour la remplacer). Laissez-le vide pour garder la clé enregistrée.
Cursor model ID (ID de modèle Cursor) composer-2.5 Le modèle avec lequel démarre une nouvelle conversation Cursor. Un champ vide signifie composer-2.5.
Save Cursor settings (Enregistrer les réglages Cursor) Enregistre la clé et le modèle. Une nouvelle clé active Cursor la première fois.
Remove saved key (Supprimer la clé enregistrée) Demande confirmation, puis supprime la clé, les modèles découverts et votre choix dans Select Models (Sélectionner des modèles), et désactive Cursor. L’ID de modèle reste.

La ligne d’état sous les champs indique où vous en êtes :

État Signification
Not configured. New conversations use GitHub Copilot. Aucune clé n’est enregistrée.
API key saved but currently disabled. Enable it to allow Cursor selection in New Chat. Une clé est enregistrée et l’interrupteur est désactivé.
Cursor is enabled. Select Cursor in New Chat to use it. Prêt.

Ce que fait l’enregistrement :

  • Découverte des modèles. Quand Cursor est activé et que vous enregistrez une nouvelle clé, changez le modèle ou le réactivez, OAR demande à Cursor les modèles que votre clé peut utiliser, et les options de raisonnement de chaque modèle. La requête abandonne au bout de 20 secondes. Un échec apparaît comme un avertissement dans l’avis affiché, par exemple Cursor model discovery failed: …. Tant qu’aucune découverte n’a réussi, la liste ne contient que le modèle par défaut.
  • Changer de clé. Enregistrer une nouvelle clé efface les modèles découverts et, si Cursor est activé, relance la découverte. Quand une clé était déjà enregistrée, le relais arrête aussi tous les workers Cursor, y compris un worker en plein turn ; enregistrez donc une nouvelle clé entre deux turns. Les workers redémarrent avec la nouvelle clé au message suivant.
  • Supprimer la clé est refusé tant qu’une conversation Cursor a envoyé un message ou a des messages en file : Cannot remove Cursor API key while N active Cursor conversation(s) still exist. Disable Cursor for new conversations instead. Aucun turn en cours n’est donc touché par une suppression. Désactivez plutôt Cursor. Quand la suppression aboutit, les conversations qui n’ont pas encore envoyé de message repassent sur Copilot. Désactiver Cursor ne les déplace pas.

Démarrez ensuite une conversation comme d’habitude : dans New Chat, choisissez le fournisseur Cursor SDK. Voir Démarrer une conversation.

Modèles et effort #

D’où vient la liste. De Cursor lui-même, via votre clé, aux moments indiqués ci-dessus. 🤗 Select Models → Cursor SDK (Sélectionner des modèles → Cursor SDK) choisit lesquels la zone de saisie propose ; 💾 Save enabled models (Enregistrer les modèles activés) conserve le choix, et Refresh (Actualiser) relance la découverte. Sans choix, tous les modèles découverts sont proposés. Le modèle de Cursor model ID est toujours proposé.

Par message. Une conversation peut changer de modèle et d’effort d’un message à l’autre ; les ID de modèle Cursor s’utilisent tels que Cursor les écrit. Un ID qui ne figure pas parmi les modèles qui vous sont proposés (ceux qui sont activés, plus Cursor model ID et le modèle propre à la conversation) est refusé avec Cursor model "…" is not available.

Effort. Les choix d’effort viennent du modèle, tels qu’il les liste. OAR connaît ces niveaux : none, low, medium, high, xhigh et max. Le extra-high de Cursor apparaît comme xhigh. Un niveau qu’OAR ne connaît pas n’est pas proposé.

  • none est toujours dans la liste. Si le modèle peut désactiver le raisonnement, none le fait. S’il ne le peut pas, la zone de saisie affiche l’entrée comme default (Par défaut), et le modèle tourne comme d’habitude.
  • Un modèle qui ne liste aucun effort n’a que none, affiché comme default.
  • Sur un modèle qui a un interrupteur de thinking, choisir un niveau active le thinking et none le désactive.

Des subagents sur d’autres modèles. Le menu de subagents intégré de Cursor ne propose que quelques modèles. OAR déclare donc un subagent par modèle que vous avez activé dans Select Models, pour que l’agent puisse confier une tâche, par exemple, à un modèle Grok ou GPT. Les noms utilisent des tirets (grok-4.5 devient grok-4-5). Un subagent fait tourner la variante par défaut de son modèle : on ne peut pas lui donner d’effort. Un changement de sélection prend effet au message suivant.

Comment les fonctionnalités d’OAR fonctionnent sur Cursor #

Fonctionnalité Sur Cursor
Modes du relais plan tourne dans le mode plan propre au SDK. agent est le mode normal. ask et autopilot placent une ligne [Relay mode: …] devant votre message quand le mode change. Voir Modes du relais.
Cartes de question Via l’outil ask_user propre à OAR, dont l’agent sait que c’est le seul moyen de vous poser une question. Jusqu’à 4 questions, de 2 à 6 options chacune, sélection multiple facultative. Une question écrite comme simple texte de réponse ne devient pas une carte. Voir ask_user.
Tableau de plan Cursor n’a pas d’étape de sortie du plan. En mode plan, quand la réponse finale a au moins deux lignes à puces ou numérotées, OAR affiche Plan ready for review (Plan prêt à relire) avec Implement in autopilot (Implémenter en autopilot), Stop here and prompt myself (S’arrêter ici, je rédige le prompt moi-même) et Stop here (S’arrêter ici). Un plan écrit en prose n’a pas de tableau.
Pilotage et mise en file Pas de pilotage. Un message envoyé pendant un turn attend derrière lui, et le bouton d’envoi indique Queue (Mettre en file). Voir Les turns et la queue. Stop (Arrêter) termine le turn en cours, y compris quand l’agent attend votre réponse à une question.
Tâches de fond Pas de panneau des tâches. Quand l’agent lance un travail en arrière-plan, une ligne d’activité indique Background task <status>: ….
Subagents Chacun apparaît comme un subagent avec son début et sa fin, et son texte, ses réflexions et ses appels d’outil apparaissent dans la visionneuse. Un seul niveau : les subagents d’un subagent ne sont pas affichés. Stop termine tout le turn, pas un seul subagent.
Pièces jointes Les images jusqu’à 5 Mo sont transmises à l’agent dans le message. Les images plus grandes et les autres fichiers sont donnés sous forme de chemin dans le message, et l’agent les lit.
Affichage du contexte Le bouton 🧠 affiche un total et un pourcentage de la fenêtre du modèle, sans catégories. Quand un turn a fait plusieurs appels au modèle, le chiffre est une estimation et le dit. La fenêtre vient de la liste du modèle, ou d’une table intégrée quand la liste n’en donne pas.
Compactage OAR ne règle ni n’affiche de compactage automatique. /compact fonctionne comme sur tous les fournisseurs. Voir Compacter une conversation.
Reprise Le relais enregistre l’ID de l’agent Cursor et reprend cet agent après un redémarrage ou après la fermeture du handle du worker. Si l’agent ne peut pas être repris, un nouvel agent est créé. Voir Redémarrages et reprise.
Outils d’agent preview et relay_tool sont donnés à l’agent comme outils. relay_tool n’est présent que si le relais a des relais associés ou si les sessions d’agent sont activées. Voir Outils d’agent et Sessions d’agent.

Les règles de projet, les fichiers de subagents et les serveurs MCP propres à Cursor, dans le dossier .cursor du dossier de travail, ne sont pas chargés. OAR définit lui-même les outils et les subagents de l’agent.

Un agent longtemps inactif #

Un agent Cursor inutilisé depuis 30 minutes est fermé puis rouvert au message suivant, car sa connexion devient périmée après quelques heures d’inactivité. Vous ne le voyez pas. Si la connexion est malgré tout devenue périmée, OAR reconstruit l’agent et renvoie le message, jusqu’à deux fois, et ajoute la ligne d’activité Cursor session re-authenticated; retrying this message on a fresh agent handle. Un troisième échec termine le turn avec le message de connexion décrit dans Si ça ne marche pas.

Consommation #

Les turns Cursor n’ont pas de ligne de consommation sous la réponse. 📊 Check Usage (Vérifier la consommation) a une carte Cursor. Tant que Cursor est désactivé, elle indique Cursor is not enabled in provider settings. Ses chiffres viennent de deux sources, et la carte indique celle qu’elle a utilisée.

Dépenses selon OAR, une estimation. Après chaque turn, OAR lit auprès de Cursor les dépenses facturées de l’agent et inscrit la hausse au cycle de facturation en cours. Il range chaque turn dans l’enveloppe du modèle qui l’a exécuté :

Enveloppe Modèles
Cursor Models (Modèles Cursor) Les noms qui commencent par composer, cursor-, cheetah ou sonic, ou qui contiennent grok.
Other Models (Autres modèles) Les noms qui contiennent claude, sonnet, opus, haiku, fable, codex, gemini, deepseek, kimi, qwen, llama, mistral ou minimax, ou qui commencent par gpt, glm, ou par o suivi d’un chiffre.
Unclassified (Non classé) auto, cost, balance, intelligence, tout nom contenant router, et tout nom qui n’entre dans aucune des deux enveloppes ci-dessus. Affiché seulement s’il y a des dépenses, avec une note indiquant que Cursor ne dit pas quelle enveloppe les a servies.

La comparaison ignore la casse, et les noms de routeur sont vérifiés en premier.

Cursor n’indique pas au SDK ce que votre forfait inclut. C’est vous qui le saisissez :

Contrôle Par défaut Ce qu’il fait
Cursor Models pool (USD) (Enveloppe Cursor Models, USD) vide L’allocation mensuelle de cette enveloppe. Un champ vide l’efface, et la carte n’affiche que les dépenses.
Other Models pool (USD) (Enveloppe Other Models, USD) vide La même chose pour l’autre enveloppe.
Billing resets on day of month (Jour du mois où la facturation repart) 1 Le jour où le cycle repart, de 1 à 31. Dans un mois qui compte moins de jours, le dernier jour du mois est utilisé.
Save allowances (Enregistrer les allocations) Enregistre les trois champs.
Reset tracked spend (Réinitialiser les dépenses suivies) Demande confirmation, enregistre les trois champs, puis efface les totaux du cycle en cours. Utilisez-le après un changement de forfait ou de compte. OAR compte à partir des totaux actuels de l’agent, si bien que les dépenses passées ne sont pas comptées deux fois.

Les jauges mesurent le coût brut des modèles par rapport à votre allocation. La carte liste aussi ce que Cursor a réellement facturé, souvent zéro pour un usage inclus dans le forfait. Tous ces chiffres sont des estimations. Un coût que Cursor signale en retard est inscrit avec le turn qui le voit. Le tableau de bord Spending de Cursor fait foi, et la carte y renvoie.

Barres du forfait en direct, depuis le tableau de bord. Avec un token de session du tableau de bord, la carte ajoute les barres Plan usage (total) (Consommation du forfait, total), Auto + Composer et API, lues en direct sur le tableau de bord de Cursor, le nom du forfait, les dépenses incluses et à la demande, et les vraies dates du cycle. Les jauges locales des enveloppes passent alors au second plan. Le token est un cookie de session, pas la clé d’API, et la clé d’API ne peut pas lire ces chiffres.

Contrôle Ce qu’il fait
Dashboard session token (live plan bars) (Token de session du tableau de bord, barres du forfait en direct) La valeur du cookie WorkosCursorSessionToken d’un onglet cursor.com connecté (dans les outils de développement du navigateur, sous Application → Cookies).
Save token (Enregistrer le token) L’enregistre. Le champ n’accepte aucune espace et au plus 8 192 caractères.
Remove (Retirer) Demande confirmation, puis supprime le token que vous avez enregistré. Un token venant de l’environnement ou de l’app Cursor reste utilisé.

OAR cherche un token dans cet ordre :

  1. Celui que vous avez enregistré.
  2. CURSOR_SESSION_TOKEN dans l’environnement du relais, pour les hôtes sans app Cursor.
  3. La connexion de l’app Cursor sur la machine du relais, lue dans son état local, sans configuration.

La ligne d’état sous le champ nomme la source utilisée. Le token reste sur le relais et n’est jamais envoyé à un navigateur. Si Cursor n’accepte pas le token, la carte revient aux estimations et indique quelle source a été refusée, ou qu’aucun token n’a été trouvé.

Un agent peut lire les mêmes chiffres avec l’action usage de relay_tool.

Variables d’environnement #

Définissez-les dans l’environnement dans lequel le relais démarre.

Variable Effet
CURSOR_SESSION_TOKEN Le token de session du tableau de bord pour les barres du forfait en direct. Un token enregistré dans le panneau l’emporte sur elle ; elle l’emporte sur la connexion de l’app Cursor.
CURSOR_AGENT_STORE_DIR Le dossier qui contient l’état de l’agent par conversation, au lieu de cursor-agents dans le dossier de données du relais. Le bouton Session le suit.
OAR_TURN_STALL_IDLE_MS, OAR_TURN_STALL_MODEL_MS, OAR_TURN_STALL_TOOL_MS Combien de temps un turn Cursor peut rester silencieux avant d’échouer : 120 s sans rien en cours, 5 minutes pendant une requête au modèle, 30 minutes pendant un appel d’outil ; 0 signifie aucune limite. Voir Les turns et la queue. Non transmises à l’agent là où les sessions tournent sous tmux : voir quelles variables atteignent les agents.

La clé d’API ne peut pas être définie de cette façon : le relais passe à ses workers la clé du panneau et ignore un CURSOR_API_KEY dans son propre environnement.

Limites #

Au-delà des manques du tableau ci-dessus (pas de pilotage, pas de panneau des tâches, pas de réglage du compactage, un seul niveau de subagents) :

  • Les cartes de question dépendent de l’appel de ask_user par l’agent.
  • Les dépenses et les allocations sont des estimations. Seules les barres du tableau de bord viennent de Cursor.
  • Une limite d’utilisation de votre forfait Cursor ne met pas la conversation en pause. Le turn échoue comme tout turn échoué, et vous renvoyez le message.

Si ça ne marche pas #

Ce que vous voyez Pourquoi, et que faire
La réponse indique System note: the Cursor runtime could not authenticate (…). Set or renew the Cursor API key in provider settings, then retry. Cursor a refusé la clé, y compris après qu’OAR a reconstruit l’agent deux fois. Collez une clé valide sous Settings → Providers → Cursor et enregistrez.
New Chat ne propose pas Cursor, ou le démarrage échoue avec Cursor API key is not configured Aucune clé n’est enregistrée. Enregistrez-en une.
La ligne d’état indique API key saved but currently disabled. Cochez Enable Cursor for New Chat model selection.
Cursor model discovery failed: … ou Cursor model discovery returned no models après l’enregistrement La clé est fausse, ou Cursor n’a pas répondu dans les 20 secondes. Vérifiez la clé et enregistrez à nouveau, ou utilisez Refresh dans 🤗 Select Models. Une actualisation qui échoue à cet endroit indique Cursor model discovery failed. Cached Cursor models were kept: ….
Cursor model "…" is not available Le modèle n’est pas dans la liste pour votre clé. Actualisez la liste, ou choisissez un autre modèle.
Invalid Cursor model ID Cursor model ID contient des caractères non autorisés dans un ID de modèle. Copiez l’ID depuis la liste des modèles.
System note: the Cursor runtime sent nothing for Ns while a model request was running, so the relay ended the turn. Le turn est resté silencieux au-delà de sa fenêtre (voir Variables d’environnement) et OAR l’a annulé. Renvoyez le message. Voir Les turns et la queue.
Le même message, avec … while a tool was running (…) Une commande a tourné en silence pendant 30 minutes. Augmentez OAR_TURN_STALL_TOOL_MS, ou mettez-la à 0 pour aucune limite.
System note: the turn completed without a text reply. L’agent a terminé sans rien écrire. Demandez-lui ce qu’il a fait.
Cannot remove Cursor API key while N active Cursor conversation(s) still exist. Archivez ou supprimez ces conversations, ou désactivez plutôt Cursor.
La carte Cursor de Check Usage n’affiche que des estimations, et dit qu’aucun token n’a été trouvé La machine du relais n’a pas de connexion à l’app Cursor. Collez un token sous Dashboard session token, ou définissez CURSOR_SESSION_TOKEN.
Live plan bars unavailable — Cursor did not accept … Le token a expiré. Reconnectez-vous à l’app Cursor, ou enregistrez un nouveau token.
That does not look like a WorkosCursorSessionToken cookie value Le texte collé contient une espace ou un saut de ligne, ou dépasse 8 192 caractères. Copiez uniquement la valeur du cookie.
Le bouton Session est grisé La conversation n’a pas encore eu de turn.