Cursor Worktree avancé : Best-of-N et worktrees.json
Le billet précédent 08-worktree-merge couvrait le worktree automatique de Cursor et l’Apply. Celui-ci va plus loin sur deux points : Best-of-N (même prompt, plusieurs modèles en parallèle, puis vous en choisissez un à Apply) et worktrees.json (installer les deps, lancer les migrations, copier .env à la création d’un worktree).
Best-of-N : un prompt, plusieurs modèles à la fois
Best-of-N signifie : vous envoyez une tâche, Cursor lance plusieurs modèles dans des worktrees séparés et vous obtenez plusieurs « cartes », chacune avec les changements d’un modèle — choisissez-en une et faites Apply.
Quand utiliser Best-of-N ?
| Situation | Pourquoi ça aide |
|---|---|
| Pas sûr du modèle qui convient le mieux à votre codebase | Lancez une fois, comparez les sorties, petit benchmark |
| Problème difficile, un seul modèle peut rater des edge cases | Modèles différents, approches différentes, plus de couverture |
| Comparer la qualité du code | Même requête, style et structure différents côte à côte |
| Tâche difficile, vous voulez plus de succès « du premier coup » | Plusieurs modèles essaient une fois chacun, Apply le meilleur |
En bref : plusieurs modèles font la même tâche, vous en choisissez un — surtout pour les tâches difficiles ou quand la qualité compte.
Comment l’utiliser
Dans Cursor, au démarrage d’un Agent, choisissez « plusieurs modèles » ou l’option Best-of-N (selon l’UI actuelle). Après l’envoi du prompt vous verrez plusieurs cartes ; naviguez entre elles pour comparer puis Apply celle que vous voulez sur main.
Si vous appliquez plus d’une carte du même run Best-of-N (ex. Apply A puis B), Cursor peut demander : merge avec résolution de conflits ou Full Overwrite (remplacer tout le fichier).
worktrees.json : préparer l’environnement à la création d’un worktree
Quand Cursor crée un worktree, il copie par défaut les fichiers suivis du répertoire principal mais n’installe pas les deps, ne copie pas .env ni n’exécute les migrations DB.
Avec .cursor/worktrees.json vous pouvez indiquer des commandes à exécuter après chaque nouveau worktree, ex. npm ci, cp .env, npm run db:migrate.
Où se trouve la config ?
Cursor cherche dans l’ordre :
- Racine du projet :
.cursor/worktrees.json - Chemin du worktree
En général on la met à la racine du projet : .cursor/worktrees.json.
Trois clés de config
| Clé | Description |
|---|---|
setup-worktree |
Générique ; utilisé sur tous les OS si aucune clé spécifique n’est définie |
setup-worktree-windows |
Windows uniquement ; remplace setup-worktree |
setup-worktree-unix |
macOS / Linux uniquement ; remplace setup-worktree |
Chaque clé peut être :
- String : chemin vers un script (relatif au répertoire contenant
.cursor/worktrees.json) - Array : liste de commandes shell, exécutées dans l’ordre
Exemple : projet Node
{
"setup-worktree": [
"npm ci",
"cp $ROOT_WORKTREE_PATH/.env .env"
]
}$ROOT_WORKTREE_PATH est fourni par Cursor et pointe vers le répertoire de travail principal, ex. pour copier .env.
Sous Windows il peut falloir copy ou PowerShell ; vous pouvez séparer par OS :
{
"setup-worktree-unix": [
"npm ci",
"cp $ROOT_WORKTREE_PATH/.env .env"
],
"setup-worktree-windows": [
"npm ci",
"copy %ROOT_WORKTREE_PATH%\\.env .env"
]
}Exemple : exécuter les migrations DB
{
"setup-worktree": [
"npm ci",
"cp $ROOT_WORKTREE_PATH/.env .env",
"npm run db:migrate"
]
}Plus complexe : utiliser des scripts
Pour beaucoup de commandes ou de logique, utilisez un script et référencez-le dans worktrees.json :
{
"setup-worktree-unix": "setup-worktree-unix.sh",
"setup-worktree-windows": "setup-worktree-windows.ps1",
"setup-worktree": ["echo 'Using generic fallback'"]
}Placez les scripts sous .cursor/, ex. .cursor/setup-worktree-unix.sh, avec npm ci, copie de .env, chmod, migrations, etc.
Sous Windows utilisez .ps1 et dans le script $env:ROOT_WORKTREE_PATH pour le chemin du répertoire principal.
Astuce : évitez de symlinker les deps dans le worktree — ça peut entrer en conflit avec le worktree principal ; utilisez
npm ci,pnpm,bun,uv, etc. pour une installation fraîche.
Nettoyage et limites des worktrees
Cursor gère le nombre de worktrees pour ne pas saturer le disque :
- Chaque workspace a un nombre max de worktrees (ex. 20)
- Au-delà, les moins récemment utilisés sont supprimés
- Le nettoyage est par workspace ; les repos différents ne s’impactent pas
Pour ajuster (si votre version de Cursor le permet), cherchez des paramètres du type :
cursor.worktreeMaxCount: nombre max de worktrees à gardercursor.worktreeCleanupIntervalHours: fréquence du nettoyage
Les noms exacts dépendent de la config actuelle de Cursor.
Déboguer le setup worktree
Si après création d’un worktree les deps ne sont pas installés ou les migrations pas exécutées, ouvrez le panneau Output de Cursor, choisissez « Worktrees Setup » dans la liste et consultez les commandes et erreurs exécutées à la création — utile pour déboguer worktrees.json ou les scripts.
Résumé
- Best-of-N : Même prompt, plusieurs modèles en parallèle dans des worktrees séparés ; comparez et Apply une carte ; utile pour benchmark, tâches difficiles et qualité
- worktrees.json : Dans
.cursor/worktrees.jsonutilisezsetup-worktree/setup-worktree-windows/setup-worktree-unixpour exécuter des commandes ou scripts après création - Utilisez
$ROOT_WORKTREE_PATH(Unix) ou%ROOT_WORKTREE_PATH%/$env:ROOT_WORKTREE_PATH(Windows) pour copier.envetc. depuis main - Les worktrees ont une limite et un nettoyage auto ; débogage via Output → Worktrees Setup
Suivant : 10-headless-scripts — Mode headless avec
--forceet scripts qui modifient vraiment les fichiers.