🤖 Développement parallèle d'IA avec Cursor et Git Worktrees
le 15 février 2026
Dans cet article, je souhaite présenter un exemple concret de parallélisation du développement à l'aide de Cursor, Git worktrees et d'un véritable bundle Symfony :
👉 https://github.com/darkwood-com/ia-exception-bundle
L’objectif est simple : améliorer le produit en travaillant simultanément sur deux fonctionnalités indépendantes sans conflit, grâce à des agents d’IA.
Contexte
Je travaille actuellement sur un bundle Symfony appelé :
Pack d'exceptions Darkwood IA Dépôt : https://github.com/darkwood-com/ia-exception-bundle
Son objectif est d'améliorer la gestion des exceptions Symfony grâce à l'IA :
lorsqu'une erreur 500 se produit, le module analyse l'exception et génère des diagnostics structurés (causes probables, solutions suggérées, score de confiance, etc.).
Cependant, en travaillant dessus en local, j'ai identifié deux améliorations.
🟥 Problème 1 Améliorer l'icône d'erreur
L'icône actuelle est une icône de « danger » standard de Bootstrap. Cela fonctionne, mais cela ne communique pas visuellement que l'exception est augmentée par l'IA.
L'idée : Remplacez-la par une icône de danger sur le thème de l'IA plus appropriée.
🟦 Problème 2 : Rendu asynchrone de l’analyse IA
Actuellement:
- Une exception se produit.
- L'appel à l'IA est déclenché.
- La réponse HTTP attend l'IA.
- La page complète n'est affichée qu'une fois que l'IA a terminé.
Cela introduit une latence.
Nous voulons plutĂ´t :
- Rendu immédiat des exceptions.
- L'analyse IA est chargée de manière asynchrone. La page sera mise à jour dès réception de la réponse de l'IA.
Pour cela, nous utilisons Symfony UX.
Le Défi
Comment pouvons-nous travailler sur les deux problèmes en parallèle en utilisant Cursor sans créer de conflits de fichiers ?
La réponse provient d'une idée popularisée dans des articles récents sur les agents de codage IA :
Utilisez les répertoires de travail Git pour l'isolation du contexte.
Petit rappel concernant les arbres de travail Git
Un répertoire de travail Git vous permet de créer un nouveau répertoire de travail rattaché au même dépôt.
Ce n'est pas un clone parfait.
Il partage l'historique Git mais réside dans un répertoire physique distinct.
Exemple:
git worktree add ../feature-ai-icon feature/ai-icon
git worktree add ../feature-async-render feature/async-render
Vous avez maintenant :
- Dépôt principal
- Arborescence de travail A → Fonctionnalité 1
- Arborescence de travail B → Fonctionnalité 2
Chacun peut évoluer indépendamment.
Aucun conflit de fichiers. Pollution sans contexte.
Pourquoi c'est important pour les agents IA
Avec Cursor, vous pouvez affecter un agent d'IA Ă chaque arbre de travail.
L'agent 1 travaille uniquement à l'intérieur :
feature/ai-icon
L'agent 2 travaille uniquement à l'intérieur :
feature/async-render
Chaque agent opère de manière isolée.
C’est ce que nous appelons :
Isolation du contexte
Et c'est essentiel pour paralléliser le développement piloté par l'IA.
Mise en œuvre pratique
Étape 1 Créer deux arbres de travail
J'ai créé manuellement deux arborescences de travail correspondant aux deux problèmes.
Ensuite, pour chaque arbre de travail, je :
- Ouvert dans le curseur
- J'ai collé la description du problème GitHub
- Laisser l'agent IA implémenter la fonctionnalité
Étape 2 Rendu asynchrone des exceptions
Pour la fonctionnalité asynchrone, l'IA a implémenté :
- Un chargeur de route dédié
- Un
IAExceptionController - Un système de stockage de contexte
- Un service d'analyse différée de l'IA Comportement conditionnel lorsque le mode asynchrone est activé
Le flux de travail est maintenant le suivant :
- L'exception est générée instantanément.
- Symfony UX charge l'analyse IA de manière asynchrone.
- La page se met à jour dynamiquement dès réception de la réponse de l'IA.
Cela améliore considérablement la performance perçue.
Amélioration de l'icône de l'étape 3
Dans le deuxième arbre de travail, l'agent :
- Icône de danger Bootstrap remplacée
- Introduction d'un SVG plus épuré sur le thème de l'IA
- Compatibilité de mise en page maintenue
- Style Bootstrap préservé
Cela était totalement indépendant de la fonctionnalité asynchrone.
Pas de code qui se chevauche.
Basculement entre les fonctionnalités
Comme il s'agit d'arborescences de travail, changer de contexte est facile.
Dans mon application Darkwood locale :
- Le paquet est normalement chargé via Composer.
- J'ai temporairement lié le paquet à l'arborescence de travail correspondante.
- Cache vidé.
- Une exception contrôlée a été déclenchée.
Je pourrais alors tester chaque fonctionnalité indépendamment.
Passer de la fonctionnalité A à la fonctionnalité B est uniquement nécessaire :
- Modification du lien symbolique
- Nettoyage du cache
- Rafraîchissant
Pas de fusion. Pas de rebasage. Aucun conflit.
Nos réalisations
Nous avons maintenant :
- Deux demandes de fusion indépendantes
- Deux agents d'IA isolés Aucun conflit de fichiers
- Séparation claire des préoccupations
Ces modifications ont été publiées dans :
👉 v1.0.2 https://github.com/darkwood-com/ia-exception-bundle/releases/tag/v1.0.2
Cette version introduit :
- Améliorations de l'interface utilisateur pour le rendu des exceptions d'IA
- Chargement de l'analyse IA asynchrone
- Séparation architecturale améliorée pour les développements futurs
Quand cela va-t-il se rompre ?
Le développement parallèle fonctionne mieux lorsque les problèmes sont :
- Clairement séparés
- Cibler différentes couches
- Ne pas modifier les mĂŞmes fichiers
Si deux problèmes se modifient :
- Le mĂŞme service
- Le même modèle Twig
- La mĂŞme manette
Vous rencontrerez des conflits de fusion plus tard.
Le développement parallèle de l'IA nécessite une décomposition adéquate des tâches.
Considérations relatives à la production
Si vous poussez plusieurs branches :
- Vous pourriez rencontrer des conflits de ports au niveau local.
- Les environnements de prévisualisation peuvent nécessiter une configuration.
- Les fonctionnalités asynchrones peuvent nécessiter la persistance du contexte.
Ces problèmes sont gérables, mais doivent être pris en compte.
Pourquoi c'est puissant
La véritable valeur ne réside pas dans le modèle d'IA.
C'est:
- Isolement
- Orchestration
- ContrĂ´le du contexte
Les arborescences de travail Git nous permettent de faire évoluer les sessions de codage IA sans chaos.
Conclusion
Le développement parallèle de l'IA ne consiste pas à exécuter davantage de modèles.
Il s'agit d'isoler correctement le contexte.
Avec:
- Arbres de travail Git
- Agents de curseur
- Expérience utilisateur Symfony
- Décomposition propre des problèmes
Vous pouvez faire évoluer en toute sécurité des systèmes complexes sans compromettre vos propres modifications.
Références
-
Ensemble d'exceptions IA du référentiel https://github.com/darkwood-com/ia-exception-bundle
-
Version 1.0.2 https://github.com/darkwood-com/ia-exception-bundle/releases/tag/v1.0.2
-
Arbres de travail Git pour agents de codage IA parallèles Upsun https://devcenter.upsun.com/posts/git-worktrees-for-parallel-ai-coding-agents/
-
Arbres de travail Git : La puissance des agents parallèles de Cursor DEV.to https://dev.to/arifszn/git-worktrees-the-power-behind-cursors-parallel-agents-19j1
-
Configuration des arborescences de travail de la documentation du curseur https://cursor.com/fr/docs/configuration/worktrees