DEV Community

Mathieu Ledru
Mathieu Ledru

Posted on

🤖 Développement parallèle d'IA avec Cursor et Git Worktrees

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

Top comments (0)