Archives du blog

Open SWE : un Agent IA qui Corrige vos Bugs et Ouvre des Pull Requests Tout Seul

Introduction : Quand l'IA Résout vos Bugs Pendant que vous Prenez un Café

Le rêve de tout développeur : un assistant qui lit les issues GitHub, identifie le bug dans le code source, écrit la correction, et ouvre une pull request prête à merger. Ce rêve, Open SWE le rend réalité.

Open SWE (Software Engineering Agent) est un agent IA open-source spécialisé dans les tâches d'ingénierie logicielle. Contrairement aux agents généralistes comme AutoGPT ou OpenClaw, Open SWE est conçu dès le départ pour une mission précise : comprendre un problème de code, le diagnostiquer, le corriger et soumettre la correction via une pull request.

Dans cet article, nous explorons le fonctionnement d'Open SWE, son installation, ses performances mesurées sur des cas réels, et ses limites actuelles.

Qu'est-ce qu'Open SWE ?

Origines et Contexte

Open SWE est né de la convergence de deux tendances majeures en 2025 :

  1. Les benchmarks SWE-bench — Le benchmark SWE-bench (et sa version étendue SWE-bench Verified) a établi un standard pour mesurer la capacité des IA à résoudre des bugs réels dans des projets open-source.
  2. Le succès de Devin — L'agent Devin de Cognition AI a démontré qu'un agent pouvait résoudre des tâches d'ingénierie logicielle de bout en bout, mais à un prix inaccessible pour la plupart des équipes.

Open SWE vise à offrir les capacités de Devin dans un package open-source, accessible et personnalisable.

Architecture

Open SWE suit une architecture en quatre phases séquentielles :

Phase 1 : Compréhension
  Lecture de l'issue → Analyse du codebase → Identification du scope
       ↓
Phase 2 : Localisation
  Navigation dans le code → Recherche du bug → Confirmation de la cause racine
       ↓
Phase 3 : Correction
  Écriture du patch → Tests locaux → Validation
       ↓
Phase 4 : Soumission
  Création de la branche → Commit → Push → Pull Request

Chaque phase utilise un prompt spécialement conçu et peut faire appel à différents outils (lecture de fichiers, recherche, exécution de tests, git).

Composants Techniques

ComposantRôleTechnologie
Issue ParserAnalyse du problème rapportéLLM + parsing structuré
Code NavigatorExploration du codebaseGrep, AST, sémantique
Patch GeneratorÉcriture de la correctionLLM + diff generation
Test RunnerValidation localeDocker + framework de test
PR CreatorSoumission GitHubGitHub API
MemoryContexte entre les phasesVector store + summary

Le Modèle de Raisonnement

Open SWE utilise un modèle de raisonnement en chaîne qui s'inspire du pattern "Diagnosis-Treatment-Verification" utilisé en ingénierie logicielle humaine :

  1. Diagnosis — "Quel est le problème exactement ?"
  2. Root Cause — "Pourquoi ce problème se produit-il ?"
  3. Treatment — "Quelle est la correction minimale ?"
  4. Verification — "La correction fonctionne-t-elle sans casser autre chose ?"

Cette approche diffère des agents généralistes qui tentent de tout résoudre en un seul appel. La décomposition en phases permet des prompts plus ciblés et des résultats plus fiables.

Installation et Configuration

Prérequis

  • Python 3.11+
  • Docker (pour l'exécution sandbox des tests)
  • Un token GitHub (pour la création de PR)
  • Un modèle LLM (API cloud recommandé)

Installation

# Cloner le dépôt
git clone https://github.com/open-swe/open-swe.git
cd open-swe

# Installer les dépendances
pip install -e .

# Configuration initiale
openswe config init

Configuration du Modèle LLM

# Configuration recommandée : Claude Sonnet 4 pour le raisonnement
openswe config set model anthropic:claude-sonnet-4
export ANTHROPIC_API_KEY="sk-xxx"

# Alternative : GPT-4o
openswe config set model openai:gpt-4o
export OPENAI_API_KEY="sk-xxx"

# Pour les tâches simples : GPT-4o-mini (moins cher)
openswe config set model openai:gpt-4o-mini

Configuration GitHub

# Configurer le token GitHub
export GITHUB_TOKEN="ghp_xxx"

# Définir le dépôt cible par défaut
openswe config set default_repo "mon-org/mon-projet"

# Configurer le comportement des PR
openswe config set pr.draft true          # Créer en brouillon par défaut
openswe config set pr.add_labels true     # Ajouter des labels automatiques
openswe config set pr.request_review true # Demander une revue

Vérification de l'Installation

# Lancer le diagnostic
openswe doctor

# Résultat attendu :
# ✅ Python 3.11.8
# ✅ Docker 24.0.7 (running)
# ✅ GitHub API (authenticated)
# ✅ LLM API (connected)
# ✅ Configuration (valid)

Cas de Test : Résolution de Bugs Réels

Nous avons testé Open SWE sur cinq bugs réels extraits de projets open-source populaires.

Test 1 : Bug de Validation dans une API Django

Issue : "L'endpoint POST /api/orders retourne 500 quand le champ 'quantity' est manquant au lieu de retourner 400."

Processus Open SWE :

  1. A lu l'issue et compris le comportement attendu
  2. A localisé le fichier views/orders.py en 30 secondes
  3. A identifié l'absence de validation sur le champ quantity
  4. A ajouté un validateur et un test unitaire
  5. A créé une PR avec description et lien vers l'issue

Résultat : Correction correcte au premier essai. La PR a été mergée après revue.

Qualité : 9/10 | Temps : 4 minutes | Coût : 0.25 $

Test 2 : Race Condition dans un Service Go

Issue : "Des goroutines accèdent concurrentiellement à un map non synchronisé, causant des panics intermittents."

Processus Open SWE :

  1. A compris la nature du problème (race condition)
  2. A localisé le map partagé dans service/cache.go
  3. A proposé l'ajout d'un sync.RWMutex
  4. A modifié toutes les accessions au map pour utiliser le mutex
  5. A ajouté un test avec -race flag

Résultat : Correction fonctionnelle. Cependant, l'approche RWMutex est correcte mais une solution avec sync.Map aurait été plus idiomatique en Go.

Qualité : 7/10 | Temps : 6 minutes | Coût : 0.40 $

Test 3 : Memory Leak dans un Composant React

Issue : "Le composant Dashboard ne nettoie pas les event listeners dans le useEffect cleanup, causant un memory leak."

Processus Open SWE :

  1. A localisé le composant Dashboard.tsx
  2. A identifié les 3 event listeners non nettoyés
  3. A ajouté les fonctions de cleanup dans le return du useEffect
  4. A ajouté un test de nettoyage avec React Testing Library

Résultat : Correction correcte et complète. Les 3 listeners ont été identifiés et nettoyés.

Qualité : 8/10 | Temps : 5 minutes | Coût : 0.30 $

Test 4 : Requête SQL Inefficace dans une App Rails

Issue : "La page de liste des produits met 8 secondes à charger à cause d'une requête N+1."

Processus Open SWE :

  1. A localisé le controller ProductsController
  2. A identifié le problème N+1 dans la vue associée
  3. A ajouté .includes(:category, :reviews) à la requête
  4. A ajouté un test de performance basique

Résultat : Le problème N+1 a été résolu. Cependant, la correction aurait pu être plus complète en ajoutant également .includes(:variants) qui causait un second problème N+1 moins visible.

Qualité : 7/10 | Temps : 5 minutes | Coût : 0.35 $

Test 5 : Bug de Logique dans un Algorithme de Tri

Issue : "L'algorithme de tri personnalisé ne gère pas correctement les éléments dupliqués."

Processus Open SWE :

  1. A lu le code de l'algorithme de tri
  2. A identifié que la comparaison utilisait > au lieu de >=
  3. A corrigé la condition
  4. A ajouté des tests avec des données dupliquées

Résultat : Correction minimale et correcte. L'agent a identifié précisément le bug sans surcorriger.

Qualité : 9/10 | Temps : 3 minutes | Coût : 0.20 $

Tableau Récapitulatif des Tests

TestLangageComplexitéQualitéTempsCoûtAu premier essai
Validation DjangoPythonSimple9/104 min0.25 $Oui
Race condition GoGoComplexe7/106 min0.40 $Oui
Memory leak ReactTypeScriptMoyen8/105 min0.30 $Oui
N+1 RailsRubyMoyen7/105 min0.35 $Oui
Bug de logiquePythonSimple9/103 min0.20 $Oui

Capacités et Fonctionnalités Avancées

Intégration GitHub Native

Open SWE offre une intégration profonde avec l'écosystème GitHub :

# Résoudre une issue spécifique
openswe solve --issue 42 --repo mon-org/mon-projet

# Résoudre la dernière issue ouverte
openswe solve --latest --repo mon-org/mon-projet

# Mode interactif : l'agent propose et vous validez
openswe solve --issue 42 --interactive

# Mode batch : résoudre plusieurs issues
openswe solve --issues 42,43,45 --repo mon-org/mon-projet

Exécution en Sandbox Docker

Chaque correction est validée dans un environnement Docker isolé :

# Configuration du sandbox
openswe config set sandbox.enabled true
openswe config set sandbox.base_image "python:3.11"

# Le sandbox exécute :
# 1. Le checkout du code
# 2. L'installation des dépendances
# 3. L'application du patch
# 4. L'exécution des tests
# 5. La vérification que rien d'autre ne casse

Support Multi-Langage

Open SWE supporte officiellement les langages suivants avec des configurations optimisées :

LangageSupportFrameworks de testQualité typique
PythonExcellentpytest, unittest8-9/10
TypeScript/JavaScriptExcellentJest, Vitest7-8/10
GoBongo test7/10
RustBoncargo test6-7/10
JavaBonJUnit, Maven7/10
RubyBonRSpec, Minitest7/10
C/C++MoyenMake, CTest5-6/10

Personnalisation des Prompts

# custom_prompts.yaml
diagnosis_prompt: |
  Tu es un développeur senior spécialisé en {language}.
  Analyse l'issue suivante et identifie la cause racine.
  Concentre-toi sur la correction minimale qui résout le problème
  sans introduire de régressions.

  Règles spécifiques au projet :
  - Toujours utiliser les type hints Python
  - Préférer les dataclasses aux dicts
  - Les tests doivent couvrir les edge cases

Limitations et Précautions

Bugs que Open SWE ne Peut Pas Résoudre

Open SWE a des limites claires qu'il est important de comprendre :

  • Bugs d'architecture — Les problèmes structurels qui nécessitent une refonte ne peuvent pas être résolus par un patch ponctuel
  • Bugs liés aux performances — Les optimisations complexes qui nécessitent du profiling et une compréhension profonde du système
  • Bugs inter-services — Les problèmes qui traversent plusieurs microservices ou repos
  • Bugs de concurrence avancés — Au-delà des race conditions simples, les deadlocks et les problèmes de cohérence distribuée
  • Bugs nécessitant des décisions métier — Quand la correction dépend d'une décision produit ou métier

Risques de Sécurité

# TOUJOURS configurer ces restrictions en production
openswe config set sandbox.enabled true           # Obligatoire
openswe config set git.push_require_approval true  # Ne pas push sans validation
openswe config set pr.draft true                  # PR en brouillon par défaut
openswe config set max_file_changes 10            # Limiter le nombre de fichiers modifiés
openswe config set restricted_paths ".env,secrets/,credentials"  # Ne jamais modifier ces fichiers

Taux de Réussite par Complexité

Complexité du bugTaux de réussiteTentatives moyennesQualité moyenne
Simple (1 ligne, logique)90 %1.19/10
Moyen (validation, cleanup)75 %1.47.5/10
Complexe (concurrency, multi-fichiers)50 %2.06/10
Très complexe (architecture)20 %3.04/10

Open SWE vs les Autres Agents

Pour un comparatif complet, voir notre article OpenClaw vs AutoGPT vs Cline. Voici le positionnement spécifique d'Open SWE :

CritèreOpen SWEOpenClawAutoGPT
SpécialisationCorrection de bugsContrôle d'appsGénéraliste
Intégration GitHubNativeVia MCPVia plugin
Qualité du codeBonneVariableMoyenne
FiabilitéBonneBonneMoyenne
Cas d'usage idéalBug fixingAutomatisationRecherche

Open SWE se distingue par sa spécialisation : là où d'autres agents essaient de tout faire, Open SWE fait une chose (corriger des bugs) et la fait bien.

Surveillance d'Open SWE en Production

Si vous utilisez Open SWE de manière automatisée (par exemple, pour les issues de votre repo), le monitoring est essentiel. Les mêmes principes que ceux décrits dans notre article sur les défaillances des agents IA s'appliquent :

# Monitoring des sessions Open SWE avec Langfuse
from langfuse import Langfuse

langfuse = Langfuse()

# Chaque résolution d'issue est tracée
trace = langfuse.trace(
    name="open-swe-issue-42",
    metadata={"repo": "mon-org/mon-projet", "complexity": "medium"}
)

# Suivi des phases
trace.span(name="diagnosis", duration_ms=30000)
trace.span(name="localization", duration_ms=45000)
trace.span(name="patch-generation", duration_ms=60000)
trace.span(name="testing", duration_ms=90000)

# Score de qualité de la PR
trace.score(name="pr_quality", value=8)
trace.score(name="tests_pass", value=1)  # 1 = tous passent

Mise à jour — Avril 2026

Open SWE a connu plusieurs évolutions majeures récemment :

  • Open SWE v2.0 — Architecture repensée avec support natif de MCP pour l'interaction avec les outils de développement
  • Multi-repo support — Possibilité de résoudre des bugs qui traversent plusieurs dépôts (monorepo et polyrepo)
  • Review assist — Nouvelle fonctionnalité où Open SWE assiste les revues de code en plus de créer des corrections
  • Self-healing — Si les tests échouent après le patch, Open SWE peut itérer automatiquement (jusqu'à 3 tentatives)
  • Intégration CI/CD — Mode "auto-fix" où Open SWE résout automatiquement les failures de CI signalés par GitHub Actions
  • Score SWE-bench — Score de 42 % sur SWE-bench Verified (contre 33 % en début 2025), plaçant Open SWE parmi les meilleurs agents open-source

L'agent continue de progresser rapidement sur le benchmark SWE-bench, la référence du domaine, et se rapproche des scores des solutions propriétaires comme Devin.

FAQ

Open SWE peut-il remplacer les revues de code humaines ?

Non, et ce n'est pas son objectif. Open SWE automatise la résolution de bugs bien définis, mais la revue humaine reste indispensable. Les PR créées par Open SWE doivent toujours être revues par un développeur avant d'être mergées. L'agent est un assistant qui accélère le processus, pas un remplacement.

Quels types de bugs Open SWE résout-il le mieux ?

Open SWE excelle sur les bugs "bien circonscrits" : validation manquante, condition incorrecte, cleanup oublié, N+1 query, erreur de typographie dans le code. Ces bugs partagent une caractéristique commune : la correction est locale (quelques lignes dans un nombre limité de fichiers) et les tests existants peuvent valider la correction. Pour les bugs d'architecture ou nécessitant des décisions de conception, un développeur humain reste nécessaire.

Faut-il utiliser Open SWE ou Cline pour l'assistance au développement ?

C'est une question de workflow. Cline est un assistant intégré à l'IDE qui fonctionne en temps réel pendant que vous codez. Open SWE est un agent autonome qui fonctionne en tâche de fond sur des issues GitHub. Les deux sont complémentaires : Cline pour l'assistance au quotidien, Open SWE pour la résolution automatisée de bugs. Pour un comparatif plus large incluant AutoGPT et OpenClaw, consultez notre comparatif complet.

Combien coûte l'utilisation d'Open SWE ?

Le logiciel est open-source et gratuit. Les coûts proviennent des appels LLM. En moyenne, une résolution de bug consomme entre 0.20 $ et 0.50 $ avec Claude Sonnet 4, et entre 0.15 $ et 0.40 $ avec GPT-4o. Les bugs complexes peuvent monter à 1-2 $. L'utilisation de GPT-4o-mini réduit les coûts d'environ 80 % mais diminue significativement le taux de réussite. Le monitoring avec Langfuse est recommandé pour suivre ces coûts.

Open SWE est-il sûr à utiliser sur des dépôts de production ?

Avec les précautions appropriées, oui. Les règles essentielles sont : toujours exécuter en sandbox Docker, toujours créer des PR en brouillon, ne jamais merger automatiquement, et limiter les fichiers modifiables. Configurez git.push_require_approval à true et pr.draft à true. En aucun cas Open SWE ne doit avoir un accès en écriture non supervisé à la branche principale de votre dépôt.